diff --git a/content/GA_2_3/Analysis.ipynb b/content/GA_2_3/Analysis.ipynb index 67cfdaa4b4056ed694d3d1ec2f7c52e35e7b68de..147f69abc0b46d92e204d006ad6381a59f6bab3d 100644 --- a/content/GA_2_3/Analysis.ipynb +++ b/content/GA_2_3/Analysis.ipynb @@ -86,7 +86,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -123,9 +123,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmcAAAHLCAYAAACNhD8ZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACgg0lEQVR4nO2dd3hU1fb3vzOTSe89gRB67wFjEBAlJBBFscPl/ih64bVgw4pX6YK9o1ixUq7eizWUiCAgETAQkF6kpyekt0nmvH9szxQySaacOW3W53nyzGTmlH2+s886a6+99t4ajuM4EARBEARBELJAK3UBCIIgCIIgCDPknBEEQRAEQcgIcs4IgiAIgiBkBDlnBEEQBEEQMoKcM4IgCIIgCBlBzhlBEARBEISMIOeMIAiCIAhCRpBzRhAEQRAEISPIOSMIgiAIgpAR5JwRBEEQBEHICHLOCIIgCIIgZAQ5Z63w6aefQqPR4OzZs1IXxW7sLfPChQuh0Wjceg6xjyX3sjhyfP73KSkpcUtZPAGj0YilS5eiW7du0Ov16Natm9RF8gjstS2u3G+O7CvWeexBLfd1UlISbrnlFqmLoQg4jkNjY6NT+3qkc/bnn3/i9ttvR2JiInx9fdGhQweMGzcOb7/9ttRFIzyIXbt2YeHChSgvL3freY4ePQovLy9oNBqUlZUJcszq6mosWLAA48ePR3h4ODQaDT799FO79r3pppvg7++PqqqqVreZOnUqvL29UVpa6lT53n33XcyfPx+33norPvnkE7z//vtOHactXNEAMD/8//jjD5vfjxkzBv379xeotOpFrPuIYM7GsWPH0LdvX0GP29DQgKeeegrx8fHw8/NDcnIysrKyBN//5MmTmDx5Mjp27Ah/f3/07t0bixcvRm1trdV2M2bMgEajafXv0qVL7Zbpyy+/RGRkJIKCgjBz5kzHnTTOw/jtt984b29vrnv37tySJUu4Dz/8kJs/fz6XlpbGdevWzbRdU1MTV1dXxxmNRglL6xj2lnnBggWcsz/9qlWrOADcmTNnnNrfEjlpLOR12cLWtb788ss2z8n/PsXFxYKc++abb+Y6d+7MAeB+/fVXQY555swZDgDXqVMnbsyYMRwAbtWqVXbtu3btWg4A99lnn9n8vqamhgsICOAmTpzodPmGDh3KpaWlOb2/PbiiAceZ69zevXttfn/ttddy/fr1E6i04mCvbXHl3r9y39buI1fPI7RNEPq+loK//vqLA8B9+eWXgh538uTJnJeXF/f4449z77//PpeSksJ5eXlxO3bsEGz/8+fPc6GhoVxiYiK3fPly7v333+dmzJjBAeBuuukmq+Pt2rWL++KLL6z+Pv/8c87f35/r27dvu+U5c+YMFxgYyL3yyivc119/zfXv35978cUXHdLEyzFXTvk8//zzCAkJwd69exEaGmr1XVFRkem9TqeDTqcTuXSuobQyK628riDVte7atQs//fQTsrKycN111+HQoUMYPXq0y8eNi4tDfn4+YmNj8ccff2D48OF273vTTTchKCgIq1evxrRp01p8/91336GmpgZTp051qmz19fU4cOAAFi1a5NT+9uKKBp6OK/eDI/t6ko0RgyNHjgCAoJGzPXv2YO3atXj55Zfx+OOPAwCmTZuG/v3748knn8SuXbsE2f+LL75AeXk5du7ciX79+gEAZs+eDaPRiM8//xyXL19GWFgYACAlJQUpKSlW59m5cydqa2vtskt//PEHUlNT8dhjjwEA9Ho9PvroIzz55JN26+Jx3ZqnT59Gv379WjhmABAdHW16byvfgM8ZOHXqFGbMmIHQ0FCEhIRg5syZVmHRGTNmoHPnzi2Obysfo6qqCo888gg6d+4MHx8fREdHY9y4cdi3b59pm/3792PChAkIDg5GYGAgxo4di99//73F8W2VeefOnRg+fDh8fX3RrVu3Vrt3zp07h/vvvx+9evWCn58fIiIicMcddzidb2HPddkq77Zt2zBs2DCr8trSzd7fQsjrOnjwIDQaDb7//nvTZzk5OdBoNBg6dKjVthMmTEBycnKr17pw4UI88cQTAIAuXbqYwuWW5SovL2/z2uzhqaeewowZMzBmzBiEhITg0KFDDl61bXx8fBAbG+vUvn5+frj11luxZcsWqwYRz+rVqxEUFISbbrrJ4WPfc8898PPzQ3NzM5599lloNJoWRlYoXNHAUc6ePdtmN0tb2HsP2HtP8dhrW2xh636w99yW+7Z3H115HqHtnGXZjx07hjvvvBPBwcGIiIjAww8/jPr6+hbb23Nf21tOe+wsAFy6dAl33303YmJi4OPjg379+uGTTz6x+xrXr19vlWs2atQoTJ06FRUVFXYfozW++eYb6HQ6zJ492/SZr68v7rnnHmRnZ+PC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", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "T_meas = 5\n", "f_s = 100 #sampling rate [Hz]\n", @@ -138,8 +149,8 @@ "x = A * np.sin(2 * np.pi * f_c * t_vec + phi)\n", "\n", "plt.plot(t_vec, x, color='b', label='signal')\n", - "plt.xlabel('$t \\: [s]$')\n", - "plt.ylabel('$x(t) \\: [V]$')\n", + "plt.xlabel(r'$t \\: [s]$')\n", + "plt.ylabel(r'$x(t) \\: [V]$')\n", "plt.legend(loc='upper right')\n", "plt.title(fr'Sinusoidal signal with $A$={A} V, $f_c$={f_c} Hz and initial phase $\\phi$={phi:.3f} °')\n", "plt.grid()" @@ -863,7 +874,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "mude-base", "language": "python", "name": "python3" }, @@ -877,7 +888,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.13" + "version": "3.12.4" }, "widgets": { "application/vnd.jupyter.widget-state+json": { diff --git a/src/students/Week_2_3/WS_2_3_solution.html b/src/students/Week_2_3/WS_2_3_solution.html new file mode 100644 index 0000000000000000000000000000000000000000..3ea1323e8a9b75a3df2b5f4c1c06f288193c3965 --- /dev/null +++ b/src/students/Week_2_3/WS_2_3_solution.html @@ -0,0 +1,8087 @@ +<!DOCTYPE html> + +<html lang="en"> +<head><meta charset="utf-8"/> +<meta content="width=device-width, initial-scale=1.0" name="viewport"/> +<title>WS_2_3_solution</title><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script><script> +(function() { + function addWidgetsRenderer() { + var mimeElement = document.querySelector('script[type="application/vnd.jupyter.widget-view+json"]'); + var scriptElement = document.createElement('script'); + + var widgetRendererSrc = 'https://unpkg.com/@jupyter-widgets/html-manager@*/dist/embed-amd.js'; + + var widgetState; + + // Fallback for older version: + try { + widgetState = mimeElement && JSON.parse(mimeElement.innerHTML); + + if (widgetState && (widgetState.version_major < 2 || !widgetState.version_major)) { + + var widgetRendererSrc = 'https://unpkg.com/@jupyter-js-widgets@*/dist/embed.js'; + + } + } catch(e) {} + + scriptElement.src = widgetRendererSrc; + document.body.appendChild(scriptElement); + } + + document.addEventListener('DOMContentLoaded', addWidgetsRenderer); +}()); +</script> +<style type="text/css"> + pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: var(--jp-cell-editor-active-background) } +.highlight { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) } +.highlight .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */ +.highlight .err { color: var(--jp-mirror-editor-error-color) } /* Error */ +.highlight .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */ +.highlight .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */ +.highlight .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */ +.highlight .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */ +.highlight .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */ +.highlight .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */ +.highlight .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */ +.highlight .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ +.highlight .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ +.highlight .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ +.highlight .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ +.highlight .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ +.highlight .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ +.highlight .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ +.highlight .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */ +.highlight .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */ +.highlight .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */ +.highlight .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */ +.highlight .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */ +.highlight .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */ +.highlight .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */ +.highlight .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */ +.highlight .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */ +.highlight .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */ +.highlight .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */ +.highlight .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */ +.highlight .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */ +.highlight .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */ +.highlight .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */ +.highlight .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */ +.highlight .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */ + </style> +<style type="text/css"> +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/* + * Mozilla scrollbar styling + */ + +/* use standard opaque scrollbars for most nodes */ +[data-jp-theme-scrollbars='true'] { + scrollbar-color: rgb(var(--jp-scrollbar-thumb-color)) + var(--jp-scrollbar-background-color); +} + +/* for code nodes, use a transparent style of scrollbar. These selectors + * will match lower in the tree, and so will override the above */ +[data-jp-theme-scrollbars='true'] .CodeMirror-hscrollbar, +[data-jp-theme-scrollbars='true'] .CodeMirror-vscrollbar { + scrollbar-color: rgba(var(--jp-scrollbar-thumb-color), 0.5) transparent; +} + +/* tiny scrollbar */ + +.jp-scrollbar-tiny { + scrollbar-color: rgba(var(--jp-scrollbar-thumb-color), 0.5) transparent; + scrollbar-width: thin; +} + +/* tiny scrollbar */ + +.jp-scrollbar-tiny::-webkit-scrollbar, +.jp-scrollbar-tiny::-webkit-scrollbar-corner { + background-color: transparent; + height: 4px; + width: 4px; +} + +.jp-scrollbar-tiny::-webkit-scrollbar-thumb { + background: rgba(var(--jp-scrollbar-thumb-color), 0.5); +} + +.jp-scrollbar-tiny::-webkit-scrollbar-track:horizontal { + border-left: 0 solid transparent; + border-right: 0 solid transparent; +} + +.jp-scrollbar-tiny::-webkit-scrollbar-track:vertical { + border-top: 0 solid transparent; + border-bottom: 0 solid transparent; +} + +/* + * Lumino + */ + +.lm-ScrollBar[data-orientation='horizontal'] { + min-height: 16px; + max-height: 16px; + min-width: 45px; + border-top: 1px solid #a0a0a0; +} + +.lm-ScrollBar[data-orientation='vertical'] { + min-width: 16px; + max-width: 16px; + min-height: 45px; + border-left: 1px solid #a0a0a0; +} + +.lm-ScrollBar-button { + background-color: #f0f0f0; + background-position: center center; + min-height: 15px; + max-height: 15px; + min-width: 15px; + max-width: 15px; +} + +.lm-ScrollBar-button:hover { + background-color: #dadada; +} + +.lm-ScrollBar-button.lm-mod-active { + background-color: #cdcdcd; +} + +.lm-ScrollBar-track { + background: #f0f0f0; +} + +.lm-ScrollBar-thumb { + background: #cdcdcd; +} + +.lm-ScrollBar-thumb:hover { + background: #bababa; +} + +.lm-ScrollBar-thumb.lm-mod-active { + background: #a0a0a0; +} + +.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb { + height: 100%; + min-width: 15px; + border-left: 1px solid #a0a0a0; + border-right: 1px solid #a0a0a0; +} + +.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb { + width: 100%; + min-height: 15px; + border-top: 1px solid #a0a0a0; + border-bottom: 1px solid #a0a0a0; +} + +.lm-ScrollBar[data-orientation='horizontal'] + .lm-ScrollBar-button[data-action='decrement'] { + background-image: var(--jp-icon-caret-left); + background-size: 17px; +} + +.lm-ScrollBar[data-orientation='horizontal'] + .lm-ScrollBar-button[data-action='increment'] { + background-image: var(--jp-icon-caret-right); + background-size: 17px; +} + +.lm-ScrollBar[data-orientation='vertical'] + .lm-ScrollBar-button[data-action='decrement'] { + background-image: var(--jp-icon-caret-up); + background-size: 17px; +} + +.lm-ScrollBar[data-orientation='vertical'] + .lm-ScrollBar-button[data-action='increment'] { + background-image: var(--jp-icon-caret-down); + background-size: 17px; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-Widget { + box-sizing: border-box; + position: relative; + overflow: hidden; +} + +.lm-Widget.lm-mod-hidden { + display: none !important; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title { + /* Title is rotated for horizontal accordion panel using CSS */ + display: block; + transform-origin: top left; + transform: rotate(-90deg) translate(-100%); +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-CommandPalette { + display: flex; + flex-direction: column; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-CommandPalette-search { + flex: 0 0 auto; +} + +.lm-CommandPalette-content { + flex: 1 1 auto; + margin: 0; + padding: 0; + min-height: 0; + overflow: auto; + list-style-type: none; +} + +.lm-CommandPalette-header { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.lm-CommandPalette-item { + display: flex; + flex-direction: row; +} + +.lm-CommandPalette-itemIcon { + flex: 0 0 auto; +} + +.lm-CommandPalette-itemContent { + flex: 1 1 auto; + overflow: hidden; +} + +.lm-CommandPalette-itemShortcut { + flex: 0 0 auto; +} + +.lm-CommandPalette-itemLabel { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.lm-close-icon { + border: 1px solid transparent; + background-color: transparent; + position: absolute; + z-index: 1; + right: 3%; + top: 0; + bottom: 0; + margin: auto; + padding: 7px 0; + display: none; + vertical-align: middle; + outline: 0; + cursor: pointer; +} +.lm-close-icon:after { + content: 'X'; + display: block; + width: 15px; + height: 15px; + text-align: center; + color: #000; + font-weight: normal; + font-size: 12px; + cursor: pointer; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-DockPanel { + z-index: 0; +} + +.lm-DockPanel-widget { + z-index: 0; +} + +.lm-DockPanel-tabBar { + z-index: 1; +} + +.lm-DockPanel-handle { + z-index: 2; +} + +.lm-DockPanel-handle.lm-mod-hidden { + display: none !important; +} + +.lm-DockPanel-handle:after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + content: ''; +} + +.lm-DockPanel-handle[data-orientation='horizontal'] { + cursor: ew-resize; +} + +.lm-DockPanel-handle[data-orientation='vertical'] { + cursor: ns-resize; +} + +.lm-DockPanel-handle[data-orientation='horizontal']:after { + left: 50%; + min-width: 8px; + transform: translateX(-50%); +} + +.lm-DockPanel-handle[data-orientation='vertical']:after { + top: 50%; + min-height: 8px; + transform: translateY(-50%); +} + +.lm-DockPanel-overlay { + z-index: 3; + box-sizing: border-box; + pointer-events: none; +} + +.lm-DockPanel-overlay.lm-mod-hidden { + display: none !important; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-Menu { + z-index: 10000; + position: absolute; + white-space: nowrap; + overflow-x: hidden; + overflow-y: auto; + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-Menu-content { + margin: 0; + padding: 0; + display: table; + list-style-type: none; +} + +.lm-Menu-item { + display: table-row; +} + +.lm-Menu-item.lm-mod-hidden, +.lm-Menu-item.lm-mod-collapsed { + display: none !important; +} + +.lm-Menu-itemIcon, +.lm-Menu-itemSubmenuIcon { + display: table-cell; + text-align: center; +} + +.lm-Menu-itemLabel { + display: table-cell; + text-align: left; +} + +.lm-Menu-itemShortcut { + display: table-cell; + text-align: right; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-MenuBar { + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-MenuBar-content { + margin: 0; + padding: 0; + display: flex; + flex-direction: row; + list-style-type: none; +} + +.lm-MenuBar-item { + box-sizing: border-box; +} + +.lm-MenuBar-itemIcon, +.lm-MenuBar-itemLabel { + display: inline-block; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-ScrollBar { + display: flex; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-ScrollBar[data-orientation='horizontal'] { + flex-direction: row; +} + +.lm-ScrollBar[data-orientation='vertical'] { + flex-direction: column; +} + +.lm-ScrollBar-button { + box-sizing: border-box; + flex: 0 0 auto; +} + +.lm-ScrollBar-track { + box-sizing: border-box; + position: relative; + overflow: hidden; + flex: 1 1 auto; +} + +.lm-ScrollBar-thumb { + box-sizing: border-box; + position: absolute; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-SplitPanel-child { + z-index: 0; +} + +.lm-SplitPanel-handle { + z-index: 1; +} + +.lm-SplitPanel-handle.lm-mod-hidden { + display: none !important; +} + +.lm-SplitPanel-handle:after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + content: ''; +} + +.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle { + cursor: ew-resize; +} + +.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle { + cursor: ns-resize; +} + +.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after { + left: 50%; + min-width: 8px; + transform: translateX(-50%); +} + +.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after { + top: 50%; + min-height: 8px; + transform: translateY(-50%); +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-TabBar { + display: flex; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.lm-TabBar[data-orientation='horizontal'] { + flex-direction: row; + align-items: flex-end; +} + +.lm-TabBar[data-orientation='vertical'] { + flex-direction: column; + align-items: flex-end; +} + +.lm-TabBar-content { + margin: 0; + padding: 0; + display: flex; + flex: 1 1 auto; + list-style-type: none; +} + +.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content { + flex-direction: row; +} + +.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content { + flex-direction: column; +} + +.lm-TabBar-tab { + display: flex; + flex-direction: row; + box-sizing: border-box; + overflow: hidden; + touch-action: none; /* Disable native Drag/Drop */ +} + +.lm-TabBar-tabIcon, +.lm-TabBar-tabCloseIcon { + flex: 0 0 auto; +} + +.lm-TabBar-tabLabel { + flex: 1 1 auto; + overflow: hidden; + white-space: nowrap; +} + +.lm-TabBar-tabInput { + user-select: all; + width: 100%; + box-sizing: border-box; +} + +.lm-TabBar-tab.lm-mod-hidden { + display: none !important; +} + +.lm-TabBar-addButton.lm-mod-hidden { + display: none !important; +} + +.lm-TabBar.lm-mod-dragging .lm-TabBar-tab { + position: relative; +} + +.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab { + left: 0; + transition: left 150ms ease; +} + +.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab { + top: 0; + transition: top 150ms ease; +} + +.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging { + transition: none; +} + +.lm-TabBar-tabLabel .lm-TabBar-tabInput { + user-select: all; + width: 100%; + box-sizing: border-box; + background: inherit; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-TabPanel-tabBar { + z-index: 1; +} + +.lm-TabPanel-stackedPanel { + z-index: 0; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-Collapse { + display: flex; + flex-direction: column; + align-items: stretch; +} + +.jp-Collapse-header { + padding: 1px 12px; + background-color: var(--jp-layout-color1); + border-bottom: solid var(--jp-border-width) var(--jp-border-color2); + color: var(--jp-ui-font-color1); + cursor: pointer; + display: flex; + align-items: center; + font-size: var(--jp-ui-font-size0); + font-weight: 600; + text-transform: uppercase; + user-select: none; +} + +.jp-Collapser-icon { + height: 16px; +} + +.jp-Collapse-header-collapsed .jp-Collapser-icon { + transform: rotate(-90deg); + margin: auto 0; +} + +.jp-Collapser-title { + line-height: 25px; +} + +.jp-Collapse-contents { + padding: 0 12px; + background-color: var(--jp-layout-color1); + color: var(--jp-ui-font-color1); + overflow: auto; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/* This file was auto-generated by ensureUiComponents() in @jupyterlab/buildutils */ + +/** + * (DEPRECATED) Support for consuming icons as CSS background images + */ + +/* Icons urls */ + +:root { + --jp-icon-add-above: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEzN18xOTQ5MikiPgo8cGF0aCBjbGFzcz0ianAtaWNvbjMiIGQ9Ik00Ljc1IDQuOTMwNjZINi42MjVWNi44MDU2NkM2LjYyNSA3LjAxMTkxIDYuNzkzNzUgNy4xODA2NiA3IDcuMTgwNjZDNy4yMDYyNSA3LjE4MDY2IDcuMzc1IDcuMDExOTEgNy4zNzUgNi44MDU2NlY0LjkzMDY2SDkuMjVDOS40NTYyNSA0LjkzMDY2IDkuNjI1IDQuNzYxOTEgOS42MjUgNC41NTU2NkM5LjYyNSA0LjM0OTQxIDkuNDU2MjUgNC4xODA2NiA5LjI1IDQuMTgwNjZINy4zNzVWMi4zMDU2NkM3LjM3NSAyLjA5OTQxIDcuMjA2MjUgMS45MzA2NiA3IDEuOTMwNjZDNi43OTM3NSAxLjkzMDY2IDYuNjI1IDIuMDk5NDEgNi42MjUgMi4zMDU2NlY0LjE4MDY2SDQuNzVDNC41NDM3NSA0LjE4MDY2IDQuMzc1IDQuMzQ5NDEgNC4zNzUgNC41NTU2NkM0LjM3NSA0Ljc2MTkxIDQuNTQzNzUgNC45MzA2NiA0Ljc1IDQuOTMwNjZaIiBmaWxsPSIjNjE2MTYxIiBzdHJva2U9IiM2MTYxNjEiIHN0cm9rZS13aWR0aD0iMC43Ii8+CjwvZz4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTExLjUgOS41VjExLjVMMi41IDExLjVWOS41TDExLjUgOS41Wk0xMiA4QzEyLjU1MjMgOCAxMyA4LjQ0NzcyIDEzIDlWMTJDMTMgMTIuNTUyMyAxMi41NTIzIDEzIDEyIDEzTDIgMTNDMS40NDc3MiAxMyAxIDEyLjU1MjMgMSAxMlY5QzEgOC40NDc3MiAxLjQ0NzcxIDggMiA4TDEyIDhaIiBmaWxsPSIjNjE2MTYxIi8+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzEzN18xOTQ5MiI+CjxyZWN0IGNsYXNzPSJqcC1pY29uMyIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0ibWF0cml4KC0xIDAgMCAxIDEwIDEuNTU1NjYpIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==); + --jp-icon-add-below: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEzN18xOTQ5OCkiPgo8cGF0aCBjbGFzcz0ianAtaWNvbjMiIGQ9Ik05LjI1IDEwLjA2OTNMNy4zNzUgMTAuMDY5M0w3LjM3NSA4LjE5NDM0QzcuMzc1IDcuOTg4MDkgNy4yMDYyNSA3LjgxOTM0IDcgNy44MTkzNEM2Ljc5Mzc1IDcuODE5MzQgNi42MjUgNy45ODgwOSA2LjYyNSA4LjE5NDM0TDYuNjI1IDEwLjA2OTNMNC43NSAxMC4wNjkzQzQuNTQzNzUgMTAuMDY5MyA0LjM3NSAxMC4yMzgxIDQuMzc1IDEwLjQ0NDNDNC4zNzUgMTAuNjUwNiA0LjU0Mzc1IDEwLjgxOTMgNC43NSAxMC44MTkzTDYuNjI1IDEwLjgxOTNMNi42MjUgMTIuNjk0M0M2LjYyNSAxMi45MDA2IDYuNzkzNzUgMTMuMDY5MyA3IDEzLjA2OTNDNy4yMDYyNSAxMy4wNjkzIDcuMzc1IDEyLjkwMDYgNy4zNzUgMTIuNjk0M0w3LjM3NSAxMC44MTkzTDkuMjUgMTAuODE5M0M5LjQ1NjI1IDEwLjgxOTMgOS42MjUgMTAuNjUwNiA5LjYyNSAxMC40NDQzQzkuNjI1IDEwLjIzODEgOS40NTYyNSAxMC4wNjkzIDkuMjUgMTAuMDY5M1oiIGZpbGw9IiM2MTYxNjEiIHN0cm9rZT0iIzYxNjE2MSIgc3Ryb2tlLXdpZHRoPSIwLjciLz4KPC9nPgo8cGF0aCBjbGFzcz0ianAtaWNvbjMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMi41IDUuNUwyLjUgMy41TDExLjUgMy41TDExLjUgNS41TDIuNSA1LjVaTTIgN0MxLjQ0NzcyIDcgMSA2LjU1MjI4IDEgNkwxIDNDMSAyLjQ0NzcyIDEuNDQ3NzIgMiAyIDJMMTIgMkMxMi41NTIzIDIgMTMgMi40NDc3MiAxMyAzTDEzIDZDMTMgNi41NTIyOSAxMi41NTIzIDcgMTIgN0wyIDdaIiBmaWxsPSIjNjE2MTYxIi8+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzEzN18xOTQ5OCI+CjxyZWN0IGNsYXNzPSJqcC1pY29uMyIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0ibWF0cml4KDEgMS43NDg0NmUtMDcgMS43NDg0NmUtMDcgLTEgNCAxMy40NDQzKSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=); + --jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-bell: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE2IDE2IiB2ZXJzaW9uPSIxLjEiPgogICA8cGF0aCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMzMzMzMzIgogICAgICBkPSJtOCAwLjI5Yy0xLjQgMC0yLjcgMC43My0zLjYgMS44LTEuMiAxLjUtMS40IDMuNC0xLjUgNS4yLTAuMTggMi4yLTAuNDQgNC0yLjMgNS4zbDAuMjggMS4zaDVjMC4wMjYgMC42NiAwLjMyIDEuMSAwLjcxIDEuNSAwLjg0IDAuNjEgMiAwLjYxIDIuOCAwIDAuNTItMC40IDAuNi0xIDAuNzEtMS41aDVsMC4yOC0xLjNjLTEuOS0wLjk3LTIuMi0zLjMtMi4zLTUuMy0wLjEzLTEuOC0wLjI2LTMuNy0xLjUtNS4yLTAuODUtMS0yLjItMS44LTMuNi0xLjh6bTAgMS40YzAuODggMCAxLjkgMC41NSAyLjUgMS4zIDAuODggMS4xIDEuMSAyLjcgMS4yIDQuNCAwLjEzIDEuNyAwLjIzIDMuNiAxLjMgNS4yaC0xMGMxLjEtMS42IDEuMi0zLjQgMS4zLTUuMiAwLjEzLTEuNyAwLjMtMy4zIDEuMi00LjQgMC41OS0wLjcyIDEuNi0xLjMgMi41LTEuM3ptLTAuNzQgMTJoMS41Yy0wLjAwMTUgMC4yOCAwLjAxNSAwLjc5LTAuNzQgMC43OS0wLjczIDAuMDAxNi0wLjcyLTAuNTMtMC43NC0wLjc5eiIgLz4KPC9zdmc+Cg==); + --jp-icon-bug-dot: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiPgogICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTcuMTkgOEgyMFYxMEgxNy45MUMxNy45NiAxMC4zMyAxOCAxMC42NiAxOCAxMVYxMkgyMFYxNEgxOC41SDE4VjE0LjAyNzVDMTUuNzUgMTQuMjc2MiAxNCAxNi4xODM3IDE0IDE4LjVDMTQgMTkuMjA4IDE0LjE2MzUgMTkuODc3OSAxNC40NTQ5IDIwLjQ3MzlDMTMuNzA2MyAyMC44MTE3IDEyLjg3NTcgMjEgMTIgMjFDOS43OCAyMSA3Ljg1IDE5Ljc5IDYuODEgMThINFYxNkg2LjA5QzYuMDQgMTUuNjcgNiAxNS4zNCA2IDE1VjE0SDRWMTJINlYxMUM2IDEwLjY2IDYuMDQgMTAuMzMgNi4wOSAxMEg0VjhINi44MUM3LjI2IDcuMjIgNy44OCA2LjU1IDguNjIgNi4wNEw3IDQuNDFMOC40MSAzTDEwLjU5IDUuMTdDMTEuMDQgNS4wNiAxMS41MSA1IDEyIDVDMTIuNDkgNSAxMi45NiA1LjA2IDEzLjQyIDUuMTdMMTUuNTkgM0wxNyA0LjQxTDE1LjM3IDYuMDRDMTYuMTIgNi41NSAxNi43NCA3LjIyIDE3LjE5IDhaTTEwIDE2SDE0VjE0SDEwVjE2Wk0xMCAxMkgxNFYxMEgxMFYxMloiIGZpbGw9IiM2MTYxNjEiLz4KICAgICAgICA8cGF0aCBkPSJNMjIgMTguNUMyMiAyMC40MzMgMjAuNDMzIDIyIDE4LjUgMjJDMTYuNTY3IDIyIDE1IDIwLjQzMyAxNSAxOC41QzE1IDE2LjU2NyAxNi41NjcgMTUgMTguNSAxNUMyMC40MzMgMTUgMjIgMTYuNTY3IDIyIDE4LjVaIiBmaWxsPSIjNjE2MTYxIi8+CiAgICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik0yMCA4aC0yLjgxYy0uNDUtLjc4LTEuMDctMS40NS0xLjgyLTEuOTZMMTcgNC40MSAxNS41OSAzbC0yLjE3IDIuMTdDMTIuOTYgNS4wNiAxMi40OSA1IDEyIDVjLS40OSAwLS45Ni4wNi0xLjQxLjE3TDguNDEgMyA3IDQuNDFsMS42MiAxLjYzQzcuODggNi41NSA3LjI2IDcuMjIgNi44MSA4SDR2MmgyLjA5Yy0uMDUuMzMtLjA5LjY2LS4wOSAxdjFINHYyaDJ2MWMwIC4zNC4wNC42Ny4wOSAxSDR2MmgyLjgxYzEuMDQgMS43OSAyLjk3IDMgNS4xOSAzczQuMTUtMS4yMSA1LjE5LTNIMjB2LTJoLTIuMDljLjA1LS4zMy4wOS0uNjYuMDktMXYtMWgydi0yaC0ydi0xYzAtLjM0LS4wNC0uNjctLjA5LTFIMjBWOHptLTYgOGgtNHYtMmg0djJ6bTAtNGgtNHYtMmg0djJ6Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K); + --jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=); + --jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-code-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CiAgICA8cGF0aCBkPSJNNi41OSwzLjQxTDIsOEw2LjU5LDEyLjZMOCwxMS4xOEw0LjgyLDhMOCw0LjgyTDYuNTksMy40MU0xMi40MSwzLjQxTDExLDQuODJMMTQuMTgsOEwxMSwxMS4xOEwxMi40MSwxMi42TDE3LDhMMTIuNDEsMy40MU0yMS41OSwxMS41OUwxMy41LDE5LjY4TDkuODMsMTZMOC40MiwxNy40MUwxMy41LDIyLjVMMjMsMTNMMjEuNTksMTEuNTlaIiAvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-code: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIiIGhlaWdodD0iMjIiIHZpZXdCb3g9IjAgMCAyOCAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTExLjQgMTguNkw2LjggMTRMMTEuNCA5LjRMMTAgOEw0IDE0TDEwIDIwTDExLjQgMTguNlpNMTYuNiAxOC42TDIxLjIgMTRMMTYuNiA5LjRMMTggOEwyNCAxNEwxOCAyMEwxNi42IDE4LjZWMTguNloiLz4KCTwvZz4KPC9zdmc+Cg==); + --jp-icon-collapse-all: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTggMmMxIDAgMTEgMCAxMiAwczIgMSAyIDJjMCAxIDAgMTEgMCAxMnMwIDItMiAyQzIwIDE0IDIwIDQgMjAgNFMxMCA0IDYgNGMwLTIgMS0yIDItMnoiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTE4IDhjMC0xLTEtMi0yLTJTNSA2IDQgNnMtMiAxLTIgMmMwIDEgMCAxMSAwIDEyczEgMiAyIDJjMSAwIDExIDAgMTIgMHMyLTEgMi0yYzAtMSAwLTExIDAtMTJ6bS0yIDB2MTJINFY4eiIgLz4KICAgICAgICA8cGF0aCBkPSJNNiAxM3YyaDh2LTJ6IiAvPgogICAgPC9nPgo8L3N2Zz4K); + --jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1jb25zb2xlLWljb24tYmFja2dyb3VuZC1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtY29uc29sZS1pY29uLWNvbG9yIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIj4KICAgIDxwYXRoIGQ9Ik0xMDUgMTI3LjNoNDB2MTIuOGgtNDB6TTUxLjEgNzdMNzQgOTkuOWwtMjMuMyAyMy4zIDEwLjUgMTAuNSAyMy4zLTIzLjNMOTUgOTkuOSA4NC41IDg5LjQgNjEuNiA2Ni41eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-copyright: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCI+CiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik0xMS44OCw5LjE0YzEuMjgsMC4wNiwxLjYxLDEuMTUsMS42MywxLjY2aDEuNzljLTAuMDgtMS45OC0xLjQ5LTMuMTktMy40NS0zLjE5QzkuNjQsNy42MSw4LDksOCwxMi4xNCBjMCwxLjk0LDAuOTMsNC4yNCwzLjg0LDQuMjRjMi4yMiwwLDMuNDEtMS42NSwzLjQ0LTIuOTVoLTEuNzljLTAuMDMsMC41OS0wLjQ1LDEuMzgtMS42MywxLjQ0QzEwLjU1LDE0LjgzLDEwLDEzLjgxLDEwLDEyLjE0IEMxMCw5LjI1LDExLjI4LDkuMTYsMTEuODgsOS4xNHogTTEyLDJDNi40OCwyLDIsNi40OCwyLDEyczQuNDgsMTAsMTAsMTBzMTAtNC40OCwxMC0xMFMxNy41MiwyLDEyLDJ6IE0xMiwyMGMtNC40MSwwLTgtMy41OS04LTggczMuNTktOCw4LThzOCwzLjU5LDgsOFMxNi40MSwyMCwxMiwyMHoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-delete: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCI+CiAgICA8cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIiAvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjI2MjYyIiBkPSJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyek0xOSA0aC0zLjVsLTEtMWgtNWwtMSAxSDV2MmgxNFY0eiIgLz4KPC9zdmc+Cg==); + --jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-duplicate: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIuNzk5OTggMC44NzVIOC44OTU4MkM5LjIwMDYxIDAuODc1IDkuNDQ5OTggMS4xMzkxNCA5LjQ0OTk4IDEuNDYxOThDOS40NDk5OCAxLjc4NDgyIDkuMjAwNjEgMi4wNDg5NiA4Ljg5NTgyIDIuMDQ4OTZIMy4zNTQxNUMzLjA0OTM2IDIuMDQ4OTYgMi43OTk5OCAyLjMxMzEgMi43OTk5OCAyLjYzNTk0VjkuNjc5NjlDMi43OTk5OCAxMC4wMDI1IDIuNTUwNjEgMTAuMjY2NyAyLjI0NTgyIDEwLjI2NjdDMS45NDEwMyAxMC4yNjY3IDEuNjkxNjUgMTAuMDAyNSAxLjY5MTY1IDkuNjc5NjlWMi4wNDg5NkMxLjY5MTY1IDEuNDAzMjggMi4xOTA0IDAuODc1IDIuNzk5OTggMC44NzVaTTUuMzY2NjUgMTEuOVY0LjU1SDExLjA4MzNWMTEuOUg1LjM2NjY1Wk00LjE0MTY1IDQuMTQxNjdDNC4xNDE2NSAzLjY5MDYzIDQuNTA3MjggMy4zMjUgNC45NTgzMiAzLjMyNUgxMS40OTE3QzExLjk0MjcgMy4zMjUgMTIuMzA4MyAzLjY5MDYzIDEyLjMwODMgNC4xNDE2N1YxMi4zMDgzQzEyLjMwODMgMTIuNzU5NCAxMS45NDI3IDEzLjEyNSAxMS40OTE3IDEzLjEyNUg0Ljk1ODMyQzQuNTA3MjggMTMuMTI1IDQuMTQxNjUgMTIuNzU5NCA0LjE0MTY1IDEyLjMwODNWNC4xNDE2N1oiIGZpbGw9IiM2MTYxNjEiLz4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBkPSJNOS40MzU3NCA4LjI2NTA3SDguMzY0MzFWOS4zMzY1QzguMzY0MzEgOS40NTQzNSA4LjI2Nzg4IDkuNTUwNzggOC4xNTAwMiA5LjU1MDc4QzguMDMyMTcgOS41NTA3OCA3LjkzNTc0IDkuNDU0MzUgNy45MzU3NCA5LjMzNjVWOC4yNjUwN0g2Ljg2NDMxQzYuNzQ2NDUgOC4yNjUwNyA2LjY1MDAyIDguMTY4NjQgNi42NTAwMiA4LjA1MDc4QzYuNjUwMDIgNy45MzI5MiA2Ljc0NjQ1IDcuODM2NSA2Ljg2NDMxIDcuODM2NUg3LjkzNTc0VjYuNzY1MDdDNy45MzU3NCA2LjY0NzIxIDguMDMyMTcgNi41NTA3OCA4LjE1MDAyIDYuNTUwNzhDOC4yNjc4OCA2LjU1MDc4IDguMzY0MzEgNi42NDcyMSA4LjM2NDMxIDYuNzY1MDdWNy44MzY1SDkuNDM1NzRDOS41NTM2IDcuODM2NSA5LjY1MDAyIDcuOTMyOTIgOS42NTAwMiA4LjA1MDc4QzkuNjUwMDIgOC4xNjg2NCA5LjU1MzYgOC4yNjUwNyA5LjQzNTc0IDguMjY1MDdaIiBmaWxsPSIjNjE2MTYxIiBzdHJva2U9IiM2MTYxNjEiIHN0cm9rZS13aWR0aD0iMC41Ii8+Cjwvc3ZnPgo=); + --jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-error: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjE5IiByPSIyIi8+PHBhdGggZD0iTTEwIDNoNHYxMmgtNHoiLz48L2c+CjxwYXRoIGZpbGw9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiLz4KPC9zdmc+Cg==); + --jp-icon-expand-all: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTggMmMxIDAgMTEgMCAxMiAwczIgMSAyIDJjMCAxIDAgMTEgMCAxMnMwIDItMiAyQzIwIDE0IDIwIDQgMjAgNFMxMCA0IDYgNGMwLTIgMS0yIDItMnoiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTE4IDhjMC0xLTEtMi0yLTJTNSA2IDQgNnMtMiAxLTIgMmMwIDEgMCAxMSAwIDEyczEgMiAyIDJjMSAwIDExIDAgMTIgMHMyLTEgMi0yYzAtMSAwLTExIDAtMTJ6bS0yIDB2MTJINFY4eiIgLz4KICAgICAgICA8cGF0aCBkPSJNMTEgMTBIOXYzSDZ2MmgzdjNoMnYtM2gzdi0yaC0zeiIgLz4KICAgIDwvZz4KPC9zdmc+Cg==); + --jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==); + --jp-icon-filter-dot: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTE0LDEyVjE5Ljg4QzE0LjA0LDIwLjE4IDEzLjk0LDIwLjUgMTMuNzEsMjAuNzFDMTMuMzIsMjEuMSAxMi42OSwyMS4xIDEyLjMsMjAuNzFMMTAuMjksMTguN0MxMC4wNiwxOC40NyA5Ljk2LDE4LjE2IDEwLDE3Ljg3VjEySDkuOTdMNC4yMSw0LjYyQzMuODcsNC4xOSAzLjk1LDMuNTYgNC4zOCwzLjIyQzQuNTcsMy4wOCA0Ljc4LDMgNSwzVjNIMTlWM0MxOS4yMiwzIDE5LjQzLDMuMDggMTkuNjIsMy4yMkMyMC4wNSwzLjU2IDIwLjEzLDQuMTkgMTkuNzksNC42MkwxNC4wMywxMkgxNFoiIC8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWRvdCIgZmlsbD0iI0ZGRiI+CiAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE3IiByPSIzIj48L2NpcmNsZT4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-filter: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTE0LDEyVjE5Ljg4QzE0LjA0LDIwLjE4IDEzLjk0LDIwLjUgMTMuNzEsMjAuNzFDMTMuMzIsMjEuMSAxMi42OSwyMS4xIDEyLjMsMjAuNzFMMTAuMjksMTguN0MxMC4wNiwxOC40NyA5Ljk2LDE4LjE2IDEwLDE3Ljg3VjEySDkuOTdMNC4yMSw0LjYyQzMuODcsNC4xOSAzLjk1LDMuNTYgNC4zOCwzLjIyQzQuNTcsMy4wOCA0Ljc4LDMgNSwzVjNIMTlWM0MxOS4yMiwzIDE5LjQzLDMuMDggMTkuNjIsMy4yMkMyMC4wNSwzLjU2IDIwLjEzLDQuMTkgMTkuNzksNC42MkwxNC4wMywxMkgxNFoiIC8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-folder-favorite: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzAwMDAwMCI+CiAgPHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggY2xhc3M9ImpwLWljb24zIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxNjE2MSIgZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bS0yLjA2IDExTDE1IDE1LjI4IDEyLjA2IDE3bC43OC0zLjMzLTIuNTktMi4yNCAzLjQxLS4yOUwxNSA4bDEuMzQgMy4xNCAzLjQxLjI5LTIuNTkgMi4yNC43OCAzLjMzeiIvPgo8L3N2Zz4K); + --jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=); + --jp-icon-home: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzAwMDAwMCI+CiAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGNsYXNzPSJqcC1pY29uMyBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xMCAyMHYtNmg0djZoNXYtOGgzTDEyIDMgMiAxMmgzdjh6Ii8+Cjwvc3ZnPgo=); + --jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==); + --jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=); + --jp-icon-info: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUwLjk3OCA1MC45NzgiPgoJPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KCQk8cGF0aCBkPSJNNDMuNTIsNy40NThDMzguNzExLDIuNjQ4LDMyLjMwNywwLDI1LjQ4OSwwQzE4LjY3LDAsMTIuMjY2LDIuNjQ4LDcuNDU4LDcuNDU4CgkJCWMtOS45NDMsOS45NDEtOS45NDMsMjYuMTE5LDAsMzYuMDYyYzQuODA5LDQuODA5LDExLjIxMiw3LjQ1NiwxOC4wMzEsNy40NThjMCwwLDAuMDAxLDAsMC4wMDIsMAoJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoKCQkJIE00Mi4xMDYsNDIuMTA1Yy00LjQzMiw0LjQzMS0xMC4zMzIsNi44NzItMTYuNjE1LDYuODcyaC0wLjAwMmMtNi4yODUtMC4wMDEtMTIuMTg3LTIuNDQxLTE2LjYxNy02Ljg3MgoJCQljLTkuMTYyLTkuMTYzLTkuMTYyLTI0LjA3MSwwLTMzLjIzM0MxMy4zMDMsNC40NCwxOS4yMDQsMiwyNS40ODksMmM2LjI4NCwwLDEyLjE4NiwyLjQ0LDE2LjYxNyw2Ljg3MgoJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4KCQk8cGF0aCBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1MwoJCQljMC40NjgtMC41MzYsMC45MjMtMS4wNjIsMS4zNjctMS41NzVjMC42MjYtMC43NTMsMS4xMDQtMS40NzgsMS40MzYtMi4xNzVjMC4zMzEtMC43MDcsMC40OTUtMS41NDEsMC40OTUtMi41CgkJCWMwLTEuMDk2LTAuMjYtMi4wODgtMC43NzktMi45NzljLTAuNTY1LTAuODc5LTEuNTAxLTEuMzM2LTIuODA2LTEuMzY5Yy0xLjgwMiwwLjA1Ny0yLjk4NSwwLjY2Ny0zLjU1LDEuODMyCgkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkKCQkJYzEuMDYyLTEuNjQsMi44NTUtMi40ODEsNS4zNzgtMi41MjdjMi4xNiwwLjAyMywzLjg3NCwwLjYwOCw1LjE0MSwxLjc1OGMxLjI3OCwxLjE2LDEuOTI5LDIuNzY0LDEuOTUsNC44MTEKCQkJYzAsMS4xNDItMC4xMzcsMi4xMTEtMC40MSwyLjkxMWMtMC4zMDksMC44NDUtMC43MzEsMS41OTMtMS4yNjgsMi4yNDNjLTAuNDkyLDAuNjUtMS4wNjgsMS4zMTgtMS43MywyLjAwMgoJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5CgkJCUMyNi41ODksMzIuMjE4LDIzLjU3OCwzMi4yMTgsMjMuNTc4LDMyLjIxOHogTTIzLjU3OCwzOC4yMnYtMy40ODRoMy4wNzZ2My40ODRIMjMuNTc4eiIvPgoJPC9nPgo8L3N2Zz4K); + --jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaW5zcGVjdG9yLWljb24tY29sb3IganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K); + --jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtanNvbi1pY29uLWNvbG9yIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI0Y5QTgyNSI+CiAgICA8cGF0aCBkPSJNMjAuMiAxMS44Yy0xLjYgMC0xLjcuNS0xLjcgMSAwIC40LjEuOS4xIDEuMy4xLjUuMS45LjEgMS4zIDAgMS43LTEuNCAyLjMtMy41IDIuM2gtLjl2LTEuOWguNWMxLjEgMCAxLjQgMCAxLjQtLjggMC0uMyAwLS42LS4xLTEgMC0uNC0uMS0uOC0uMS0xLjIgMC0xLjMgMC0xLjggMS4zLTItMS4zLS4yLTEuMy0uNy0xLjMtMiAwLS40LjEtLjguMS0xLjIuMS0uNC4xLS43LjEtMSAwLS44LS40LS43LTEuNC0uOGgtLjVWNC4xaC45YzIuMiAwIDMuNS43IDMuNSAyLjMgMCAuNC0uMS45LS4xIDEuMy0uMS41LS4xLjktLjEgMS4zIDAgLjUuMiAxIDEuNyAxdjEuOHpNMS44IDEwLjFjMS42IDAgMS43LS41IDEuNy0xIDAtLjQtLjEtLjktLjEtMS4zLS4xLS41LS4xLS45LS4xLTEuMyAwLTEuNiAxLjQtMi4zIDMuNS0yLjNoLjl2MS45aC0uNWMtMSAwLTEuNCAwLTEuNC44IDAgLjMgMCAuNi4xIDEgMCAuMi4xLjYuMSAxIDAgMS4zIDAgMS44LTEuMyAyQzYgMTEuMiA2IDExLjcgNiAxM2MwIC40LS4xLjgtLjEgMS4yLS4xLjMtLjEuNy0uMSAxIDAgLjguMy44IDEuNC44aC41djEuOWgtLjljLTIuMSAwLTMuNS0uNi0zLjUtMi4zIDAtLjQuMS0uOS4xLTEuMy4xLS41LjEtLjkuMS0xLjMgMC0uNS0uMi0xLTEuNy0xdi0xLjl6Ii8+CiAgICA8Y2lyY2xlIGN4PSIxMSIgY3k9IjEzLjgiIHI9IjIuMSIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSI4LjIiIHI9IjIuMSIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-julia: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDMyNSAzMDAiPgogIDxnIGNsYXNzPSJqcC1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjY2IzYzMzIj4KICAgIDxwYXRoIGQ9Ik0gMTUwLjg5ODQzOCAyMjUgQyAxNTAuODk4NDM4IDI2Ni40MjE4NzUgMTE3LjMyMDMxMiAzMDAgNzUuODk4NDM4IDMwMCBDIDM0LjQ3NjU2MiAzMDAgMC44OTg0MzggMjY2LjQyMTg3NSAwLjg5ODQzOCAyMjUgQyAwLjg5ODQzOCAxODMuNTc4MTI1IDM0LjQ3NjU2MiAxNTAgNzUuODk4NDM4IDE1MCBDIDExNy4zMjAzMTIgMTUwIDE1MC44OTg0MzggMTgzLjU3ODEyNSAxNTAuODk4NDM4IDIyNSIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzM4OTgyNiI+CiAgICA8cGF0aCBkPSJNIDIzNy41IDc1IEMgMjM3LjUgMTE2LjQyMTg3NSAyMDMuOTIxODc1IDE1MCAxNjIuNSAxNTAgQyAxMjEuMDc4MTI1IDE1MCA4Ny41IDExNi40MjE4NzUgODcuNSA3NSBDIDg3LjUgMzMuNTc4MTI1IDEyMS4wNzgxMjUgMCAxNjIuNSAwIEMgMjAzLjkyMTg3NSAwIDIzNy41IDMzLjU3ODEyNSAyMzcuNSA3NSIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzk1NThiMiI+CiAgICA8cGF0aCBkPSJNIDMyNC4xMDE1NjIgMjI1IEMgMzI0LjEwMTU2MiAyNjYuNDIxODc1IDI5MC41MjM0MzggMzAwIDI0OS4xMDE1NjIgMzAwIEMgMjA3LjY3OTY4OCAzMDAgMTc0LjEwMTU2MiAyNjYuNDIxODc1IDE3NC4xMDE1NjIgMjI1IEMgMTc0LjEwMTU2MiAxODMuNTc4MTI1IDIwNy42Nzk2ODggMTUwIDI0OS4xMDE1NjIgMTUwIEMgMjkwLjUyMzQzOCAxNTAgMzI0LjEwMTU2MiAxODMuNTc4MTI1IDMyNC4xMDE1NjIgMjI1Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgPGcgY2xhc3M9ImpwLWp1cHl0ZXItaWNvbi1jb2xvciIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgIDxnIGNsYXNzPSJqcC1qdXB5dGVyLWljb24tY29sb3IiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=); + --jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K); + --jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==); + --jp-icon-launch: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzIgMzIiIHdpZHRoPSIzMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik0yNiwyOEg2YTIuMDAyNywyLjAwMjcsMCwwLDEtMi0yVjZBMi4wMDI3LDIuMDAyNywwLDAsMSw2LDRIMTZWNkg2VjI2SDI2VjE2aDJWMjZBMi4wMDI3LDIuMDAyNywwLDAsMSwyNiwyOFoiLz4KICAgIDxwb2x5Z29uIHBvaW50cz0iMjAgMiAyMCA0IDI2LjU4NiA0IDE4IDEyLjU4NiAxOS40MTQgMTQgMjggNS40MTQgMjggMTIgMzAgMTIgMzAgMiAyMCAyIi8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==); + --jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=); + --jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4K); + --jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==); + --jp-icon-move-down: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBkPSJNMTIuNDcxIDcuNTI4OTlDMTIuNzYzMiA3LjIzNjg0IDEyLjc2MzIgNi43NjMxNiAxMi40NzEgNi40NzEwMVY2LjQ3MTAxQzEyLjE3OSA2LjE3OTA1IDExLjcwNTcgNi4xNzg4NCAxMS40MTM1IDYuNDcwNTRMNy43NSAxMC4xMjc1VjEuNzVDNy43NSAxLjMzNTc5IDcuNDE0MjEgMSA3IDFWMUM2LjU4NTc5IDEgNi4yNSAxLjMzNTc5IDYuMjUgMS43NVYxMC4xMjc1TDIuNTk3MjYgNi40NjgyMkMyLjMwMzM4IDYuMTczODEgMS44MjY0MSA2LjE3MzU5IDEuNTMyMjYgNi40Njc3NFY2LjQ2Nzc0QzEuMjM4MyA2Ljc2MTcgMS4yMzgzIDcuMjM4MyAxLjUzMjI2IDcuNTMyMjZMNi4yOTI4OSAxMi4yOTI5QzYuNjgzNDIgMTIuNjgzNCA3LjMxNjU4IDEyLjY4MzQgNy43MDcxMSAxMi4yOTI5TDEyLjQ3MSA3LjUyODk5WiIgZmlsbD0iIzYxNjE2MSIvPgo8L3N2Zz4K); + --jp-icon-move-up: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBkPSJNMS41Mjg5OSA2LjQ3MTAxQzEuMjM2ODQgNi43NjMxNiAxLjIzNjg0IDcuMjM2ODQgMS41Mjg5OSA3LjUyODk5VjcuNTI4OTlDMS44MjA5NSA3LjgyMDk1IDIuMjk0MjYgNy44MjExNiAyLjU4NjQ5IDcuNTI5NDZMNi4yNSAzLjg3MjVWMTIuMjVDNi4yNSAxMi42NjQyIDYuNTg1NzkgMTMgNyAxM1YxM0M3LjQxNDIxIDEzIDcuNzUgMTIuNjY0MiA3Ljc1IDEyLjI1VjMuODcyNUwxMS40MDI3IDcuNTMxNzhDMTEuNjk2NiA3LjgyNjE5IDEyLjE3MzYgNy44MjY0MSAxMi40Njc3IDcuNTMyMjZWNy41MzIyNkMxMi43NjE3IDcuMjM4MyAxMi43NjE3IDYuNzYxNyAxMi40Njc3IDYuNDY3NzRMNy43MDcxMSAxLjcwNzExQzcuMzE2NTggMS4zMTY1OCA2LjY4MzQyIDEuMzE2NTggNi4yOTI4OSAxLjcwNzExTDEuNTI4OTkgNi40NzEwMVoiIGZpbGw9IiM2MTYxNjEiLz4KPC9zdmc+Cg==); + --jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=); + --jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtbm90ZWJvb2staWNvbi1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-numbering: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIiIGhlaWdodD0iMjIiIHZpZXdCb3g9IjAgMCAyOCAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTQgMTlINlYxOS41SDVWMjAuNUg2VjIxSDRWMjJIN1YxOEg0VjE5Wk01IDEwSDZWNkg0VjdINVYxMFpNNCAxM0g1LjhMNCAxNS4xVjE2SDdWMTVINS4yTDcgMTIuOVYxMkg0VjEzWk05IDdWOUgyM1Y3SDlaTTkgMjFIMjNWMTlIOVYyMVpNOSAxNUgyM1YxM0g5VjE1WiIvPgoJPC9nPgo8L3N2Zz4K); + --jp-icon-offline-bolt: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDIuMDJjLTUuNTEgMC05Ljk4IDQuNDctOS45OCA5Ljk4czQuNDcgOS45OCA5Ljk4IDkuOTggOS45OC00LjQ3IDkuOTgtOS45OFMxNy41MSAyLjAyIDEyIDIuMDJ6TTExLjQ4IDIwdi02LjI2SDhMMTMgNHY2LjI2aDMuMzVMMTEuNDggMjB6Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==); + --jp-icon-pdf: url(data:image/svg+xml;base64,PHN2ZwogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMiAyMiIgd2lkdGg9IjE2Ij4KICAgIDxwYXRoIHRyYW5zZm9ybT0icm90YXRlKDQ1KSIgY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI0ZGMkEyQSIKICAgICAgIGQ9Im0gMjIuMzQ0MzY5LC0zLjAxNjM2NDIgaCA1LjYzODYwNCB2IDEuNTc5MjQzMyBoIC0zLjU0OTIyNyB2IDEuNTA4NjkyOTkgaCAzLjMzNzU3NiBWIDEuNjUwODE1NCBoIC0zLjMzNzU3NiB2IDMuNDM1MjYxMyBoIC0yLjA4OTM3NyB6IG0gLTcuMTM2NDQ0LDEuNTc5MjQzMyB2IDQuOTQzOTU0MyBoIDAuNzQ4OTIgcSAxLjI4MDc2MSwwIDEuOTUzNzAzLC0wLjYzNDk1MzUgMC42NzgzNjksLTAuNjM0OTUzNSAwLjY3ODM2OSwtMS44NDUxNjQxIDAsLTEuMjA0NzgzNTUgLTAuNjcyOTQyLC0xLjgzNDMxMDExIC0wLjY3Mjk0MiwtMC42Mjk1MjY1OSAtMS45NTkxMywtMC42Mjk1MjY1OSB6IG0gLTIuMDg5Mzc3LC0xLjU3OTI0MzMgaCAyLjIwMzM0MyBxIDEuODQ1MTY0LDAgMi43NDYwMzksMC4yNjU5MjA3IDAuOTA2MzAxLDAuMjYwNDkzNyAxLjU1MjEwOCwwLjg5MDAyMDMgMC41Njk4MywwLjU0ODEyMjMgMC44NDY2MDUsMS4yNjQ0ODAwNiAwLjI3Njc3NCwwLjcxNjM1NzgxIDAuMjc2Nzc0LDEuNjIyNjU4OTQgMCwwLjkxNzE1NTEgLTAuMjc2Nzc0LDEuNjM4OTM5OSAtMC4yNzY3NzUsMC43MTYzNTc4IC0wLjg0NjYwNSwxLjI2NDQ4IC0wLjY1MTIzNCwwLjYyOTUyNjYgLTEuNTYyOTYyLDAuODk1NDQ3MyAtMC45MTE3MjgsMC4yNjA0OTM3IC0yLjczNTE4NSwwLjI2MDQ5MzcgaCAtMi4yMDMzNDMgeiBtIC04LjE0NTg1NjUsMCBoIDMuNDY3ODIzIHEgMS41NDY2ODE2LDAgMi4zNzE1Nzg1LDAuNjg5MjIzIDAuODMwMzI0LDAuNjgzNzk2MSAwLjgzMDMyNCwxLjk1MzcwMzE0IDAsMS4yNzUzMzM5NyAtMC44MzAzMjQsMS45NjQ1NTcwNiBRIDkuOTg3MTk2MSwyLjI3NDkxNSA4LjQ0MDUxNDUsMi4yNzQ5MTUgSCA3LjA2MjA2ODQgViA1LjA4NjA3NjcgSCA0Ljk3MjY5MTUgWiBtIDIuMDg5Mzc2OSwxLjUxNDExOTkgdiAyLjI2MzAzOTQzIGggMS4xNTU5NDEgcSAwLjYwNzgxODgsMCAwLjkzODg2MjksLTAuMjkzMDU1NDcgMC4zMzEwNDQxLC0wLjI5ODQ4MjQxIDAuMzMxMDQ0MSwtMC44NDExNzc3MiAwLC0wLjU0MjY5NTMxIC0wLjMzMTA0NDEsLTAuODM1NzUwNzQgLTAuMzMxMDQ0MSwtMC4yOTMwNTU1IC0wLjkzODg2MjksLTAuMjkzMDU1NSB6IgovPgo8L3N2Zz4K); + --jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iLTEwIC0xMCAxMzEuMTYxMzYxNjk0MzM1OTQgMTMyLjM4ODk5OTkzODk2NDg0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMzA2OTk4IiBkPSJNIDU0LjkxODc4NSw5LjE5Mjc0MjFlLTQgQyA1MC4zMzUxMzIsMC4wMjIyMTcyNyA0NS45NTc4NDYsMC40MTMxMzY5NyA0Mi4xMDYyODUsMS4wOTQ2NjkzIDMwLjc2MDA2OSwzLjA5OTE3MzEgMjguNzAwMDM2LDcuMjk0NzcxNCAyOC43MDAwMzUsMTUuMDMyMTY5IHYgMTAuMjE4NzUgaCAyNi44MTI1IHYgMy40MDYyNSBoIC0yNi44MTI1IC0xMC4wNjI1IGMgLTcuNzkyNDU5LDAgLTE0LjYxNTc1ODgsNC42ODM3MTcgLTE2Ljc0OTk5OTgsMTMuNTkzNzUgLTIuNDYxODE5OTgsMTAuMjEyOTY2IC0yLjU3MTAxNTA4LDE2LjU4NjAyMyAwLDI3LjI1IDEuOTA1OTI4Myw3LjkzNzg1MiA2LjQ1NzU0MzIsMTMuNTkzNzQ4IDE0LjI0OTk5OTgsMTMuNTkzNzUgaCA5LjIxODc1IHYgLTEyLjI1IGMgMCwtOC44NDk5MDIgNy42NTcxNDQsLTE2LjY1NjI0OCAxNi43NSwtMTYuNjU2MjUgaCAyNi43ODEyNSBjIDcuNDU0OTUxLDAgMTMuNDA2MjUzLC02LjEzODE2NCAxMy40MDYyNSwtMTMuNjI1IHYgLTI1LjUzMTI1IGMgMCwtNy4yNjYzMzg2IC02LjEyOTk4LC0xMi43MjQ3NzcxIC0xMy40MDYyNSwtMTMuOTM3NDk5NyBDIDY0LjI4MTU0OCwwLjMyNzk0Mzk3IDU5LjUwMjQzOCwtMC4wMjAzNzkwMyA1NC45MTg3ODUsOS4xOTI3NDIxZS00IFogbSAtMTQuNSw4LjIxODc1MDEyNTc5IGMgMi43Njk1NDcsMCA1LjAzMTI1LDIuMjk4NjQ1NiA1LjAzMTI1LDUuMTI0OTk5NiAtMmUtNiwyLjgxNjMzNiAtMi4yNjE3MDMsNS4wOTM3NSAtNS4wMzEyNSw1LjA5Mzc1IC0yLjc3OTQ3NiwtMWUtNiAtNS4wMzEyNSwtMi4yNzc0MTUgLTUuMDMxMjUsLTUuMDkzNzUgLTEwZS03LC0yLjgyNjM1MyAyLjI1MTc3NCwtNS4xMjQ5OTk2IDUuMDMxMjUsLTUuMTI0OTk5NiB6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2ZmZDQzYiIgZD0ibSA4NS42Mzc1MzUsMjguNjU3MTY5IHYgMTEuOTA2MjUgYyAwLDkuMjMwNzU1IC03LjgyNTg5NSwxNi45OTk5OTkgLTE2Ljc1LDE3IGggLTI2Ljc4MTI1IGMgLTcuMzM1ODMzLDAgLTEzLjQwNjI0OSw2LjI3ODQ4MyAtMTMuNDA2MjUsMTMuNjI1IHYgMjUuNTMxMjQ3IGMgMCw3LjI2NjM0NCA2LjMxODU4OCwxMS41NDAzMjQgMTMuNDA2MjUsMTMuNjI1MDA0IDguNDg3MzMxLDIuNDk1NjEgMTYuNjI2MjM3LDIuOTQ2NjMgMjYuNzgxMjUsMCA2Ljc1MDE1NSwtMS45NTQzOSAxMy40MDYyNTMsLTUuODg3NjEgMTMuNDA2MjUsLTEzLjYyNTAwNCBWIDg2LjUwMDkxOSBoIC0yNi43ODEyNSB2IC0zLjQwNjI1IGggMjYuNzgxMjUgMTMuNDA2MjU0IGMgNy43OTI0NjEsMCAxMC42OTYyNTEsLTUuNDM1NDA4IDEzLjQwNjI0MSwtMTMuNTkzNzUgMi43OTkzMywtOC4zOTg4ODYgMi42ODAyMiwtMTYuNDc1Nzc2IDAsLTI3LjI1IC0xLjkyNTc4LC03Ljc1NzQ0MSAtNS42MDM4NywtMTMuNTkzNzUgLTEzLjQwNjI0MSwtMTMuNTkzNzUgeiBtIC0xNS4wNjI1LDY0LjY1NjI1IGMgMi43Nzk0NzgsM2UtNiA1LjAzMTI1LDIuMjc3NDE3IDUuMDMxMjUsNS4wOTM3NDcgLTJlLTYsMi44MjYzNTQgLTIuMjUxNzc1LDUuMTI1MDA0IC01LjAzMTI1LDUuMTI1MDA0IC0yLjc2OTU1LDAgLTUuMDMxMjUsLTIuMjk4NjUgLTUuMDMxMjUsLTUuMTI1MDA0IDJlLTYsLTIuODE2MzMgMi4yNjE2OTcsLTUuMDkzNzQ3IDUuMDMxMjUsLTUuMDkzNzQ3IHoiLz4KPC9zdmc+Cg==); + --jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==); + --jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-redo: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE4LjQgMTAuNkMxNi41NSA4Ljk5IDE0LjE1IDggMTEuNSA4Yy00LjY1IDAtOC41OCAzLjAzLTkuOTYgNy4yMkwzLjkgMTZjMS4wNS0zLjE5IDQuMDUtNS41IDcuNi01LjUgMS45NSAwIDMuNzMuNzIgNS4xMiAxLjg4TDEzIDE2aDlWN2wtMy42IDMuNnoiLz4KICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=); + --jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K); + --jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K); + --jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==); + --jp-icon-share: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTSAxOCAyIEMgMTYuMzU0OTkgMiAxNSAzLjM1NDk5MDQgMTUgNSBDIDE1IDUuMTkwOTUyOSAxNS4wMjE3OTEgNS4zNzcxMjI0IDE1LjA1NjY0MSA1LjU1ODU5MzggTCA3LjkyMTg3NSA5LjcyMDcwMzEgQyA3LjM5ODUzOTkgOS4yNzc4NTM5IDYuNzMyMDc3MSA5IDYgOSBDIDQuMzU0OTkwNCA5IDMgMTAuMzU0OTkgMyAxMiBDIDMgMTMuNjQ1MDEgNC4zNTQ5OTA0IDE1IDYgMTUgQyA2LjczMjA3NzEgMTUgNy4zOTg1Mzk5IDE0LjcyMjE0NiA3LjkyMTg3NSAxNC4yNzkyOTcgTCAxNS4wNTY2NDEgMTguNDM5NDUzIEMgMTUuMDIxNTU1IDE4LjYyMTUxNCAxNSAxOC44MDgzODYgMTUgMTkgQyAxNSAyMC42NDUwMSAxNi4zNTQ5OSAyMiAxOCAyMiBDIDE5LjY0NTAxIDIyIDIxIDIwLjY0NTAxIDIxIDE5IEMgMjEgMTcuMzU0OTkgMTkuNjQ1MDEgMTYgMTggMTYgQyAxNy4yNjc0OCAxNiAxNi42MDE1OTMgMTYuMjc5MzI4IDE2LjA3ODEyNSAxNi43MjI2NTYgTCA4Ljk0MzM1OTQgMTIuNTU4NTk0IEMgOC45NzgyMDk1IDEyLjM3NzEyMiA5IDEyLjE5MDk1MyA5IDEyIEMgOSAxMS44MDkwNDcgOC45NzgyMDk1IDExLjYyMjg3OCA4Ljk0MzM1OTQgMTEuNDQxNDA2IEwgMTYuMDc4MTI1IDcuMjc5Mjk2OSBDIDE2LjYwMTQ2IDcuNzIyMTQ2MSAxNy4yNjc5MjMgOCAxOCA4IEMgMTkuNjQ1MDEgOCAyMSA2LjY0NTAwOTYgMjEgNSBDIDIxIDMuMzU0OTkwNCAxOS42NDUwMSAyIDE4IDIgeiBNIDE4IDQgQyAxOC41NjQxMjkgNCAxOSA0LjQzNTg3MDYgMTkgNSBDIDE5IDUuNTY0MTI5NCAxOC41NjQxMjkgNiAxOCA2IEMgMTcuNDM1ODcxIDYgMTcgNS41NjQxMjk0IDE3IDUgQyAxNyA0LjQzNTg3MDYgMTcuNDM1ODcxIDQgMTggNCB6IE0gNiAxMSBDIDYuNTY0MTI5NCAxMSA3IDExLjQzNTg3MSA3IDEyIEMgNyAxMi41NjQxMjkgNi41NjQxMjk0IDEzIDYgMTMgQyA1LjQzNTg3MDYgMTMgNSAxMi41NjQxMjkgNSAxMiBDIDUgMTEuNDM1ODcxIDUuNDM1ODcwNiAxMSA2IDExIHogTSAxOCAxOCBDIDE4LjU2NDEyOSAxOCAxOSAxOC40MzU4NzEgMTkgMTkgQyAxOSAxOS41NjQxMjkgMTguNTY0MTI5IDIwIDE4IDIwIEMgMTcuNDM1ODcxIDIwIDE3IDE5LjU2NDEyOSAxNyAxOSBDIDE3IDE4LjQzNTg3MSAxNy40MzU4NzEgMTggMTggMTggeiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=); + --jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==); + --jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K); + --jp-icon-table-rows: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMSw4SDNWNGgxOFY4eiBNMjEsMTBIM3Y0aDE4VjEweiBNMjEsMTZIM3Y0aDE4VjE2eiIvPgogICAgPC9nPgo8L3N2Zz4K); + --jp-icon-tag: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIHZpZXdCb3g9IjAgMCA0MyAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTI4LjgzMzIgMTIuMzM0TDMyLjk5OTggMTYuNTAwN0wzNy4xNjY1IDEyLjMzNEgyOC44MzMyWiIvPgoJCTxwYXRoIGQ9Ik0xNi4yMDk1IDIxLjYxMDRDMTUuNjg3MyAyMi4xMjk5IDE0Ljg0NDMgMjIuMTI5OSAxNC4zMjQ4IDIxLjYxMDRMNi45ODI5IDE0LjcyNDVDNi41NzI0IDE0LjMzOTQgNi4wODMxMyAxMy42MDk4IDYuMDQ3ODYgMTMuMDQ4MkM1Ljk1MzQ3IDExLjUyODggNi4wMjAwMiA4LjYxOTQ0IDYuMDY2MjEgNy4wNzY5NUM2LjA4MjgxIDYuNTE0NzcgNi41NTU0OCA2LjA0MzQ3IDcuMTE4MDQgNi4wMzA1NUM5LjA4ODYzIDUuOTg0NzMgMTMuMjYzOCA1LjkzNTc5IDEzLjY1MTggNi4zMjQyNUwyMS43MzY5IDEzLjYzOUMyMi4yNTYgMTQuMTU4NSAyMS43ODUxIDE1LjQ3MjQgMjEuMjYyIDE1Ljk5NDZMMTYuMjA5NSAyMS42MTA0Wk05Ljc3NTg1IDguMjY1QzkuMzM1NTEgNy44MjU2NiA4LjYyMzUxIDcuODI1NjYgOC4xODI4IDguMjY1QzcuNzQzNDYgOC43MDU3MSA3Ljc0MzQ2IDkuNDE3MzMgOC4xODI4IDkuODU2NjdDOC42MjM4MiAxMC4yOTY0IDkuMzM1ODIgMTAuMjk2NCA5Ljc3NTg1IDkuODU2NjdDMTAuMjE1NiA5LjQxNzMzIDEwLjIxNTYgOC43MDUzMyA5Ljc3NTg1IDguMjY1WiIvPgoJPC9nPgo8L3N2Zz4K); + --jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtdGVybWluYWwtaWNvbi1iYWNrZ3JvdW5kLWNvbG9yIGpwLWljb24tc2VsZWN0YWJsZSIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDIpIiBmaWxsPSIjMzMzMzMzIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtdGVybWluYWwtaWNvbi1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUtaW52ZXJzZSIgZD0iTTUuMDU2NjQgOC43NjE3MkM1LjA1NjY0IDguNTk3NjYgNS4wMzEyNSA4LjQ1MzEyIDQuOTgwNDcgOC4zMjgxMkM0LjkzMzU5IDguMTk5MjIgNC44NTU0NyA4LjA4MjAzIDQuNzQ2MDkgNy45NzY1NkM0LjY0MDYyIDcuODcxMDkgNC41IDcuNzc1MzkgNC4zMjQyMiA3LjY4OTQ1QzQuMTUyMzQgNy41OTk2MSAzLjk0MzM2IDcuNTExNzIgMy42OTcyNyA3LjQyNTc4QzMuMzAyNzMgNy4yODUxNiAyLjk0MzM2IDcuMTM2NzIgMi42MTkxNCA2Ljk4MDQ3QzIuMjk0OTIgNi44MjQyMiAyLjAxNzU4IDYuNjQyNTggMS43ODcxMSA2LjQzNTU1QzEuNTYwNTUgNi4yMjg1MiAxLjM4NDc3IDUuOTg4MjggMS4yNTk3NyA1LjcxNDg0QzEuMTM0NzcgNS40Mzc1IDEuMDcyMjcgNS4xMDkzOCAxLjA3MjI3IDQuNzMwNDdDMS4wNzIyNyA0LjM5ODQ0IDEuMTI4OTEgNC4wOTU3IDEuMjQyMTkgMy44MjIyN0MxLjM1NTQ3IDMuNTQ0OTIgMS41MTU2MiAzLjMwNDY5IDEuNzIyNjYgMy4xMDE1NkMxLjkyOTY5IDIuODk4NDQgMi4xNzk2OSAyLjczNDM3IDIuNDcyNjYgMi42MDkzOEMyLjc2NTYyIDIuNDg0MzggMy4wOTE4IDIuNDA0MyAzLjQ1MTE3IDIuMzY5MTRWMS4xMDkzOEg0LjM4ODY3VjIuMzgwODZDNC43NDAyMyAyLjQyNzczIDUuMDU2NjQgMi41MjM0NCA1LjMzNzg5IDIuNjY3OTdDNS42MTkxNCAyLjgxMjUgNS44NTc0MiAzLjAwMTk1IDYuMDUyNzMgMy4yMzYzM0M2LjI1MTk1IDMuNDY2OCA2LjQwNDMgMy43NDAyMyA2LjUwOTc3IDQuMDU2NjRDNi42MTkxNCA0LjM2OTE0IDYuNjczODMgNC43MjA3IDYuNjczODMgNS4xMTEzM0g1LjA0NDkyQzUuMDQ0OTIgNC42Mzg2NyA0LjkzNzUgNC4yODEyNSA0LjcyMjY2IDQuMDM5MDZDNC41MDc4MSAzLjc5Mjk3IDQuMjE2OCAzLjY2OTkyIDMuODQ5NjEgMy42Njk5MkMzLjY1MDM5IDMuNjY5OTIgMy40NzY1NiAzLjY5NzI3IDMuMzI4MTIgMy43NTE5NUMzLjE4MzU5IDMuODAyNzMgMy4wNjQ0NSAzLjg3Njk1IDIuOTcwNyAzLjk3NDYxQzIuODc2OTUgNC4wNjgzNiAyLjgwNjY0IDQuMTc5NjkgMi43NTk3NyA0LjMwODU5QzIuNzE2OCA0LjQzNzUgMi42OTUzMSA0LjU3ODEyIDIuNjk1MzEgNC43MzA0N0MyLjY5NTMxIDQuODgyODEgMi43MTY4IDUuMDE5NTMgMi43NTk3NyA1LjE0MDYyQzIuODA2NjQgNS4yNTc4MSAyLjg4MjgxIDUuMzY3MTkgMi45ODgyOCA1LjQ2ODc1QzMuMDk3NjYgNS41NzAzMSAzLjI0MDIzIDUuNjY3OTcgMy40MTYwMiA1Ljc2MTcyQzMuNTkxOCA1Ljg1MTU2IDMuODEwNTUgNS45NDMzNiA0LjA3MjI3IDYuMDM3MTFDNC40NjY4IDYuMTg1NTUgNC44MjQyMiA2LjMzOTg0IDUuMTQ0NTMgNi41QzUuNDY0ODQgNi42NTYyNSA1LjczODI4IDYuODM5ODQgNS45NjQ4NCA3LjA1MDc4QzYuMTk1MzEgNy4yNTc4MSA2LjM3MTA5IDcuNSA2LjQ5MjE5IDcuNzc3MzRDNi42MTcxOSA4LjA1MDc4IDYuNjc5NjkgOC4zNzUgNi42Nzk2OSA4Ljc1QzYuNjc5NjkgOS4wOTM3NSA2LjYyMzA1IDkuNDA0MyA2LjUwOTc3IDkuNjgxNjRDNi4zOTY0OCA5Ljk1NTA4IDYuMjM0MzggMTAuMTkxNCA2LjAyMzQ0IDEwLjM5MDZDNS44MTI1IDEwLjU4OTggNS41NTg1OSAxMC43NSA1LjI2MTcyIDEwLjg3MTFDNC45NjQ4NCAxMC45ODgzIDQuNjMyODEgMTEuMDY0NSA0LjI2NTYyIDExLjA5OTZWMTIuMjQ4SDMuMzMzOThWMTEuMDk5NkMzLjAwMTk1IDExLjA2ODQgMi42Nzk2OSAxMC45OTYxIDIuMzY3MTkgMTAuODgyOEMyLjA1NDY5IDEwLjc2NTYgMS43NzczNCAxMC41OTc3IDEuNTM1MTYgMTAuMzc4OUMxLjI5Njg4IDEwLjE2MDIgMS4xMDU0NyA5Ljg4NDc3IDAuOTYwOTM4IDkuNTUyNzNDMC44MTY0MDYgOS4yMTY4IDAuNzQ0MTQxIDguODE0NDUgMC43NDQxNDEgOC4zNDU3SDIuMzc4OTFDMi4zNzg5MSA4LjYyNjk1IDIuNDE5OTIgOC44NjMyOCAyLjUwMTk1IDkuMDU0NjlDMi41ODM5OCA5LjI0MjE5IDIuNjg5NDUgOS4zOTI1OCAyLjgxODM2IDkuNTA1ODZDMi45NTExNyA5LjYxNTIzIDMuMTAxNTYgOS42OTMzNiAzLjI2OTUzIDkuNzQwMjNDMy40Mzc1IDkuNzg3MTEgMy42MDkzOCA5LjgxMDU1IDMuNzg1MTYgOS44MTA1NUM0LjIwMzEyIDkuODEwNTUgNC41MTk1MyA5LjcxMjg5IDQuNzM0MzggOS41MTc1OEM0Ljk0OTIyIDkuMzIyMjcgNS4wNTY2NCA5LjA3MDMxIDUuMDU2NjQgOC43NjE3MlpNMTMuNDE4IDEyLjI3MTVIOC4wNzQyMlYxMUgxMy40MThWMTIuMjcxNVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMuOTUyNjQgNikiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=); + --jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtdGV4dC1lZGl0b3ItaWNvbi1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xNSAxNUgzdjJoMTJ2LTJ6bTAtOEgzdjJoMTJWN3pNMyAxM2gxOHYtMkgzdjJ6bTAgOGgxOHYtMkgzdjJ6TTMgM3YyaDE4VjNIM3oiLz4KPC9zdmc+Cg==); + --jp-icon-toc: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik03LDVIMjFWN0g3VjVNNywxM1YxMUgyMVYxM0g3TTQsNC41QTEuNSwxLjUgMCAwLDEgNS41LDZBMS41LDEuNSAwIDAsMSA0LDcuNUExLjUsMS41IDAgMCwxIDIuNSw2QTEuNSwxLjUgMCAwLDEgNCw0LjVNNCwxMC41QTEuNSwxLjUgMCAwLDEgNS41LDEyQTEuNSwxLjUgMCAwLDEgNCwxMy41QTEuNSwxLjUgMCAwLDEgMi41LDEyQTEuNSwxLjUgMCAwLDEgNCwxMC41TTcsMTlWMTdIMjFWMTlIN000LDE2LjVBMS41LDEuNSAwIDAsMSA1LjUsMThBMS41LDEuNSAwIDAsMSA0LDE5LjVBMS41LDEuNSAwIDAsMSAyLjUsMThBMS41LDEuNSAwIDAsMSA0LDE2LjVaIiAvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-tree-view: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMiAxMVYzaC03djNIOVYzSDJ2OGg3VjhoMnYxMGg0djNoN3YtOGgtN3YzaC0yVjhoMnYzeiIvPgogICAgPC9nPgo8L3N2Zz4K); + --jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K); + --jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-user: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE2IDdhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwek0xMiAxNGE3IDcgMCAwMC03IDdoMTRhNyA3IDAgMDAtNy03eiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-users: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDM2IDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogPGcgY2xhc3M9ImpwLWljb24zIiB0cmFuc2Zvcm09Im1hdHJpeCgxLjczMjcgMCAwIDEuNzMyNyAtMy42MjgyIC4wOTk1NzcpIiBmaWxsPSIjNjE2MTYxIj4KICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCgxLjUsMCwwLDEuNSwwLC02KSIgZD0ibTEyLjE4NiA3LjUwOThjLTEuMDUzNSAwLTEuOTc1NyAwLjU2NjUtMi40Nzg1IDEuNDEwMiAwLjc1MDYxIDAuMzEyNzcgMS4zOTc0IDAuODI2NDggMS44NzMgMS40NzI3aDMuNDg2M2MwLTEuNTkyLTEuMjg4OS0yLjg4MjgtMi44ODA5LTIuODgyOHoiLz4KICA8cGF0aCBkPSJtMjAuNDY1IDIuMzg5NWEyLjE4ODUgMi4xODg1IDAgMCAxLTIuMTg4NCAyLjE4ODUgMi4xODg1IDIuMTg4NSAwIDAgMS0yLjE4ODUtMi4xODg1IDIuMTg4NSAyLjE4ODUgMCAwIDEgMi4xODg1LTIuMTg4NSAyLjE4ODUgMi4xODg1IDAgMCAxIDIuMTg4NCAyLjE4ODV6Ii8+CiAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMS41LDAsMCwxLjUsMCwtNikiIGQ9Im0zLjU4OTggOC40MjE5Yy0xLjExMjYgMC0yLjAxMzcgMC45MDExMS0yLjAxMzcgMi4wMTM3aDIuODE0NWMwLjI2Nzk3LTAuMzczMDkgMC41OTA3LTAuNzA0MzUgMC45NTg5OC0wLjk3ODUyLTAuMzQ0MzMtMC42MTY4OC0xLjAwMzEtMS4wMzUyLTEuNzU5OC0xLjAzNTJ6Ii8+CiAgPHBhdGggZD0ibTYuOTE1NCA0LjYyM2ExLjUyOTQgMS41Mjk0IDAgMCAxLTEuNTI5NCAxLjUyOTQgMS41Mjk0IDEuNTI5NCAwIDAgMS0xLjUyOTQtMS41Mjk0IDEuNTI5NCAxLjUyOTQgMCAwIDEgMS41Mjk0LTEuNTI5NCAxLjUyOTQgMS41Mjk0IDAgMCAxIDEuNTI5NCAxLjUyOTR6Ii8+CiAgPHBhdGggZD0ibTYuMTM1IDEzLjUzNWMwLTMuMjM5MiAyLjYyNTktNS44NjUgNS44NjUtNS44NjUgMy4yMzkyIDAgNS44NjUgMi42MjU5IDUuODY1IDUuODY1eiIvPgogIDxjaXJjbGUgY3g9IjEyIiBjeT0iMy43Njg1IiByPSIyLjk2ODUiLz4KIDwvZz4KPC9zdmc+Cg==); + --jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==); + --jp-icon-word: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KIDxnIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzQxNDE0MSI+CiAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiA8L2c+CiA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNDMgLjA0MDEpIiBmaWxsPSIjZmZmIj4KICA8cGF0aCBkPSJtNC4xNCA4Ljc2cTAuMDY4Mi0xLjg5IDIuNDItMS44OSAxLjE2IDAgMS42OCAwLjQyIDAuNTY3IDAuNDEgMC41NjcgMS4xNnYzLjQ3cTAgMC40NjIgMC41MTQgMC40NjIgMC4xMDMgMCAwLjItMC4wMjMxdjAuNzE0cS0wLjM5OSAwLjEwMy0wLjY1MSAwLjEwMy0wLjQ1MiAwLTAuNjkzLTAuMjItMC4yMzEtMC4yLTAuMjg0LTAuNjYyLTAuOTU2IDAuODcyLTIgMC44NzItMC45MDMgMC0xLjQ3LTAuNDcyLTAuNTI1LTAuNDcyLTAuNTI1LTEuMjYgMC0wLjI2MiAwLjA0NTItMC40NzIgMC4wNTY3LTAuMjIgMC4xMTYtMC4zNzggMC4wNjgyLTAuMTY4IDAuMjMxLTAuMzA0IDAuMTU4LTAuMTQ3IDAuMjYyLTAuMjQyIDAuMTE2LTAuMDkxNCAwLjM2OC0wLjE2OCAwLjI2Mi0wLjA5MTQgMC4zOTktMC4xMjYgMC4xMzYtMC4wNDUyIDAuNDcyLTAuMTAzIDAuMzM2LTAuMDU3OCAwLjUwNC0wLjA3OTggMC4xNTgtMC4wMjMxIDAuNTY3LTAuMDc5OCAwLjU1Ni0wLjA2ODIgMC43NzctMC4yMjEgMC4yMi0wLjE1MiAwLjIyLTAuNDQxdi0wLjI1MnEwLTAuNDMtMC4zNTctMC42NjItMC4zMzYtMC4yMzEtMC45NzYtMC4yMzEtMC42NjIgMC0wLjk5OCAwLjI2Mi0wLjMzNiAwLjI1Mi0wLjM5OSAwLjc5OHptMS44OSAzLjY4cTAuNzg4IDAgMS4yNi0wLjQxIDAuNTA0LTAuNDIgMC41MDQtMC45MDN2LTEuMDVxLTAuMjg0IDAuMTM2LTAuODYxIDAuMjMxLTAuNTY3IDAuMDkxNC0wLjk4NyAwLjE1OC0wLjQyIDAuMDY4Mi0wLjc2NiAwLjMyNi0wLjMzNiAwLjI1Mi0wLjMzNiAwLjcwNHQwLjMwNCAwLjcwNCAwLjg2MSAwLjI1MnoiIHN0cm9rZS13aWR0aD0iMS4wNSIvPgogIDxwYXRoIGQ9Im0xMCA0LjU2aDAuOTQ1djMuMTVxMC42NTEtMC45NzYgMS44OS0wLjk3NiAxLjE2IDAgMS44OSAwLjg0IDAuNjgyIDAuODQgMC42ODIgMi4zMSAwIDEuNDctMC43MDQgMi40Mi0wLjcwNCAwLjg4Mi0xLjg5IDAuODgyLTEuMjYgMC0xLjg5LTEuMDJ2MC43NjZoLTAuODV6bTIuNjIgMy4wNHEtMC43NDYgMC0xLjE2IDAuNjQtMC40NTIgMC42My0wLjQ1MiAxLjY4IDAgMS4wNSAwLjQ1MiAxLjY4dDEuMTYgMC42M3EwLjc3NyAwIDEuMjYtMC42MyAwLjQ5NC0wLjY0IDAuNDk0LTEuNjggMC0xLjA1LTAuNDcyLTEuNjgtMC40NjItMC42NC0xLjI2LTAuNjR6IiBzdHJva2Utd2lkdGg9IjEuMDUiLz4KICA8cGF0aCBkPSJtMi43MyAxNS44IDEzLjYgMC4wMDgxYzAuMDA2OSAwIDAtMi42IDAtMi42IDAtMC4wMDc4LTEuMTUgMC0xLjE1IDAtMC4wMDY5IDAtMC4wMDgzIDEuNS0wLjAwODMgMS41LTJlLTMgLTAuMDAxNC0xMS4zLTAuMDAxNC0xMS4zLTAuMDAxNGwtMC4wMDU5Mi0xLjVjMC0wLjAwNzgtMS4xNyAwLjAwMTMtMS4xNyAwLjAwMTN6IiBzdHJva2Utd2lkdGg9Ii45NzUiLz4KIDwvZz4KPC9zdmc+Cg==); + --jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K); +} + +/* Icon CSS class declarations */ + +.jp-AddAboveIcon { + background-image: var(--jp-icon-add-above); +} + +.jp-AddBelowIcon { + background-image: var(--jp-icon-add-below); +} + +.jp-AddIcon { + background-image: var(--jp-icon-add); +} + +.jp-BellIcon { + background-image: var(--jp-icon-bell); +} + +.jp-BugDotIcon { + background-image: var(--jp-icon-bug-dot); +} + +.jp-BugIcon { + background-image: var(--jp-icon-bug); +} + +.jp-BuildIcon { + background-image: var(--jp-icon-build); +} + +.jp-CaretDownEmptyIcon { + background-image: var(--jp-icon-caret-down-empty); +} + +.jp-CaretDownEmptyThinIcon { + background-image: var(--jp-icon-caret-down-empty-thin); +} + +.jp-CaretDownIcon { + background-image: var(--jp-icon-caret-down); +} + +.jp-CaretLeftIcon { + background-image: var(--jp-icon-caret-left); +} + +.jp-CaretRightIcon { + background-image: var(--jp-icon-caret-right); +} + +.jp-CaretUpEmptyThinIcon { + background-image: var(--jp-icon-caret-up-empty-thin); +} + +.jp-CaretUpIcon { + background-image: var(--jp-icon-caret-up); +} + +.jp-CaseSensitiveIcon { + background-image: var(--jp-icon-case-sensitive); +} + +.jp-CheckIcon { + background-image: var(--jp-icon-check); +} + +.jp-CircleEmptyIcon { + background-image: var(--jp-icon-circle-empty); +} + +.jp-CircleIcon { + background-image: var(--jp-icon-circle); +} + +.jp-ClearIcon { + background-image: var(--jp-icon-clear); +} + +.jp-CloseIcon { + background-image: var(--jp-icon-close); +} + +.jp-CodeCheckIcon { + background-image: var(--jp-icon-code-check); +} + +.jp-CodeIcon { + background-image: var(--jp-icon-code); +} + +.jp-CollapseAllIcon { + background-image: var(--jp-icon-collapse-all); +} + +.jp-ConsoleIcon { + background-image: var(--jp-icon-console); +} + +.jp-CopyIcon { + background-image: var(--jp-icon-copy); +} + +.jp-CopyrightIcon { + background-image: var(--jp-icon-copyright); +} + +.jp-CutIcon { + background-image: var(--jp-icon-cut); +} + +.jp-DeleteIcon { + background-image: var(--jp-icon-delete); +} + +.jp-DownloadIcon { + background-image: var(--jp-icon-download); +} + +.jp-DuplicateIcon { + background-image: var(--jp-icon-duplicate); +} + +.jp-EditIcon { + background-image: var(--jp-icon-edit); +} + +.jp-EllipsesIcon { + background-image: var(--jp-icon-ellipses); +} + +.jp-ErrorIcon { + background-image: var(--jp-icon-error); +} + +.jp-ExpandAllIcon { + background-image: var(--jp-icon-expand-all); +} + +.jp-ExtensionIcon { + background-image: var(--jp-icon-extension); +} + +.jp-FastForwardIcon { + background-image: var(--jp-icon-fast-forward); +} + +.jp-FileIcon { + background-image: var(--jp-icon-file); +} + +.jp-FileUploadIcon { + background-image: var(--jp-icon-file-upload); +} + +.jp-FilterDotIcon { + background-image: var(--jp-icon-filter-dot); +} + +.jp-FilterIcon { + background-image: var(--jp-icon-filter); +} + +.jp-FilterListIcon { + background-image: var(--jp-icon-filter-list); +} + +.jp-FolderFavoriteIcon { + background-image: var(--jp-icon-folder-favorite); +} + +.jp-FolderIcon { + background-image: var(--jp-icon-folder); +} + +.jp-HomeIcon { + background-image: var(--jp-icon-home); +} + +.jp-Html5Icon { + background-image: var(--jp-icon-html5); +} + +.jp-ImageIcon { + background-image: var(--jp-icon-image); +} + +.jp-InfoIcon { + background-image: var(--jp-icon-info); +} + +.jp-InspectorIcon { + background-image: var(--jp-icon-inspector); +} + +.jp-JsonIcon { + background-image: var(--jp-icon-json); +} + +.jp-JuliaIcon { + background-image: var(--jp-icon-julia); +} + +.jp-JupyterFaviconIcon { + background-image: var(--jp-icon-jupyter-favicon); +} + +.jp-JupyterIcon { + background-image: var(--jp-icon-jupyter); +} + +.jp-JupyterlabWordmarkIcon { + background-image: var(--jp-icon-jupyterlab-wordmark); +} + +.jp-KernelIcon { + background-image: var(--jp-icon-kernel); +} + +.jp-KeyboardIcon { + background-image: var(--jp-icon-keyboard); +} + +.jp-LaunchIcon { + background-image: var(--jp-icon-launch); +} + +.jp-LauncherIcon { + background-image: var(--jp-icon-launcher); +} + +.jp-LineFormIcon { + background-image: var(--jp-icon-line-form); +} + +.jp-LinkIcon { + background-image: var(--jp-icon-link); +} + +.jp-ListIcon { + background-image: var(--jp-icon-list); +} + +.jp-MarkdownIcon { + background-image: var(--jp-icon-markdown); +} + +.jp-MoveDownIcon { + background-image: var(--jp-icon-move-down); +} + +.jp-MoveUpIcon { + background-image: var(--jp-icon-move-up); +} + +.jp-NewFolderIcon { + background-image: var(--jp-icon-new-folder); +} + +.jp-NotTrustedIcon { + background-image: var(--jp-icon-not-trusted); +} + +.jp-NotebookIcon { + background-image: var(--jp-icon-notebook); +} + +.jp-NumberingIcon { + background-image: var(--jp-icon-numbering); +} + +.jp-OfflineBoltIcon { + background-image: var(--jp-icon-offline-bolt); +} + +.jp-PaletteIcon { + background-image: var(--jp-icon-palette); +} + +.jp-PasteIcon { + background-image: var(--jp-icon-paste); +} + +.jp-PdfIcon { + background-image: var(--jp-icon-pdf); +} + +.jp-PythonIcon { + background-image: var(--jp-icon-python); +} + +.jp-RKernelIcon { + background-image: var(--jp-icon-r-kernel); +} + +.jp-ReactIcon { + background-image: var(--jp-icon-react); +} + +.jp-RedoIcon { + background-image: var(--jp-icon-redo); +} + +.jp-RefreshIcon { + background-image: var(--jp-icon-refresh); +} + +.jp-RegexIcon { + background-image: var(--jp-icon-regex); +} + +.jp-RunIcon { + background-image: var(--jp-icon-run); +} + +.jp-RunningIcon { + background-image: var(--jp-icon-running); +} + +.jp-SaveIcon { + background-image: var(--jp-icon-save); +} + +.jp-SearchIcon { + background-image: var(--jp-icon-search); +} + +.jp-SettingsIcon { + background-image: var(--jp-icon-settings); +} + +.jp-ShareIcon { + background-image: var(--jp-icon-share); +} + +.jp-SpreadsheetIcon { + background-image: var(--jp-icon-spreadsheet); +} + +.jp-StopIcon { + background-image: var(--jp-icon-stop); +} + +.jp-TabIcon { + background-image: var(--jp-icon-tab); +} + +.jp-TableRowsIcon { + background-image: var(--jp-icon-table-rows); +} + +.jp-TagIcon { + background-image: var(--jp-icon-tag); +} + +.jp-TerminalIcon { + background-image: var(--jp-icon-terminal); +} + +.jp-TextEditorIcon { + background-image: var(--jp-icon-text-editor); +} + +.jp-TocIcon { + background-image: var(--jp-icon-toc); +} + +.jp-TreeViewIcon { + background-image: var(--jp-icon-tree-view); +} + +.jp-TrustedIcon { + background-image: var(--jp-icon-trusted); +} + +.jp-UndoIcon { + background-image: var(--jp-icon-undo); +} + +.jp-UserIcon { + background-image: var(--jp-icon-user); +} + +.jp-UsersIcon { + background-image: var(--jp-icon-users); +} + +.jp-VegaIcon { + background-image: var(--jp-icon-vega); +} + +.jp-WordIcon { + background-image: var(--jp-icon-word); +} + +.jp-YamlIcon { + background-image: var(--jp-icon-yaml); +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/** + * (DEPRECATED) Support for consuming icons as CSS background images + */ + +.jp-Icon, +.jp-MaterialIcon { + background-position: center; + background-repeat: no-repeat; + background-size: 16px; + min-width: 16px; + min-height: 16px; +} + +.jp-Icon-cover { + background-position: center; + background-repeat: no-repeat; + background-size: cover; +} + +/** + * (DEPRECATED) Support for specific CSS icon sizes + */ + +.jp-Icon-16 { + background-size: 16px; + min-width: 16px; + min-height: 16px; +} + +.jp-Icon-18 { + background-size: 18px; + min-width: 18px; + min-height: 18px; +} + +.jp-Icon-20 { + background-size: 20px; + min-width: 20px; + min-height: 20px; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.lm-TabBar .lm-TabBar-addButton { + align-items: center; + display: flex; + padding: 4px; + padding-bottom: 5px; + margin-right: 1px; + background-color: var(--jp-layout-color2); +} + +.lm-TabBar .lm-TabBar-addButton:hover { + background-color: var(--jp-layout-color1); +} + +.lm-DockPanel-tabBar .lm-TabBar-tab { + width: var(--jp-private-horizontal-tab-width); +} + +.lm-DockPanel-tabBar .lm-TabBar-content { + flex: unset; +} + +.lm-DockPanel-tabBar[data-orientation='horizontal'] { + flex: 1 1 auto; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/** + * Support for icons as inline SVG HTMLElements + */ + +/* recolor the primary elements of an icon */ +.jp-icon0[fill] { + fill: var(--jp-inverse-layout-color0); +} + +.jp-icon1[fill] { + fill: var(--jp-inverse-layout-color1); +} + +.jp-icon2[fill] { + fill: var(--jp-inverse-layout-color2); +} + +.jp-icon3[fill] { + fill: var(--jp-inverse-layout-color3); +} + +.jp-icon4[fill] { + fill: var(--jp-inverse-layout-color4); +} + +.jp-icon0[stroke] { + stroke: var(--jp-inverse-layout-color0); +} + +.jp-icon1[stroke] { + stroke: var(--jp-inverse-layout-color1); +} + +.jp-icon2[stroke] { + stroke: var(--jp-inverse-layout-color2); +} + +.jp-icon3[stroke] { + stroke: var(--jp-inverse-layout-color3); +} + +.jp-icon4[stroke] { + stroke: var(--jp-inverse-layout-color4); +} + +/* recolor the accent elements of an icon */ +.jp-icon-accent0[fill] { + fill: var(--jp-layout-color0); +} + +.jp-icon-accent1[fill] { + fill: var(--jp-layout-color1); +} + +.jp-icon-accent2[fill] { + fill: var(--jp-layout-color2); +} + +.jp-icon-accent3[fill] { + fill: var(--jp-layout-color3); +} + +.jp-icon-accent4[fill] { + fill: var(--jp-layout-color4); +} + +.jp-icon-accent0[stroke] { + stroke: var(--jp-layout-color0); +} + +.jp-icon-accent1[stroke] { + stroke: var(--jp-layout-color1); +} + +.jp-icon-accent2[stroke] { + stroke: var(--jp-layout-color2); +} + +.jp-icon-accent3[stroke] { + stroke: var(--jp-layout-color3); +} + +.jp-icon-accent4[stroke] { + stroke: var(--jp-layout-color4); +} + +/* set the color of an icon to transparent */ +.jp-icon-none[fill] { + fill: none; +} + +.jp-icon-none[stroke] { + stroke: none; +} + +/* brand icon colors. Same for light and dark */ +.jp-icon-brand0[fill] { + fill: var(--jp-brand-color0); +} + +.jp-icon-brand1[fill] { + fill: var(--jp-brand-color1); +} + +.jp-icon-brand2[fill] { + fill: var(--jp-brand-color2); +} + +.jp-icon-brand3[fill] { + fill: var(--jp-brand-color3); +} + +.jp-icon-brand4[fill] { + fill: var(--jp-brand-color4); +} + +.jp-icon-brand0[stroke] { + stroke: var(--jp-brand-color0); +} + +.jp-icon-brand1[stroke] { + stroke: var(--jp-brand-color1); +} + +.jp-icon-brand2[stroke] { + stroke: var(--jp-brand-color2); +} + +.jp-icon-brand3[stroke] { + stroke: var(--jp-brand-color3); +} + +.jp-icon-brand4[stroke] { + stroke: var(--jp-brand-color4); +} + +/* warn icon colors. Same for light and dark */ +.jp-icon-warn0[fill] { + fill: var(--jp-warn-color0); +} + +.jp-icon-warn1[fill] { + fill: var(--jp-warn-color1); +} + +.jp-icon-warn2[fill] { + fill: var(--jp-warn-color2); +} + +.jp-icon-warn3[fill] { + fill: var(--jp-warn-color3); +} + +.jp-icon-warn0[stroke] { + stroke: var(--jp-warn-color0); +} + +.jp-icon-warn1[stroke] { + stroke: var(--jp-warn-color1); +} + +.jp-icon-warn2[stroke] { + stroke: var(--jp-warn-color2); +} + +.jp-icon-warn3[stroke] { + stroke: var(--jp-warn-color3); +} + +/* icon colors that contrast well with each other and most backgrounds */ +.jp-icon-contrast0[fill] { + fill: var(--jp-icon-contrast-color0); +} + +.jp-icon-contrast1[fill] { + fill: var(--jp-icon-contrast-color1); +} + +.jp-icon-contrast2[fill] { + fill: var(--jp-icon-contrast-color2); +} + +.jp-icon-contrast3[fill] { + fill: var(--jp-icon-contrast-color3); +} + +.jp-icon-contrast0[stroke] { + stroke: var(--jp-icon-contrast-color0); +} + +.jp-icon-contrast1[stroke] { + stroke: var(--jp-icon-contrast-color1); +} + +.jp-icon-contrast2[stroke] { + stroke: var(--jp-icon-contrast-color2); +} + +.jp-icon-contrast3[stroke] { + stroke: var(--jp-icon-contrast-color3); +} + +.jp-icon-dot[fill] { + fill: var(--jp-warn-color0); +} + +.jp-jupyter-icon-color[fill] { + fill: var(--jp-jupyter-icon-color, var(--jp-warn-color0)); +} + +.jp-notebook-icon-color[fill] { + fill: var(--jp-notebook-icon-color, var(--jp-warn-color0)); +} + +.jp-json-icon-color[fill] { + fill: var(--jp-json-icon-color, var(--jp-warn-color1)); +} + +.jp-console-icon-color[fill] { + fill: var(--jp-console-icon-color, white); +} + +.jp-console-icon-background-color[fill] { + fill: var(--jp-console-icon-background-color, var(--jp-brand-color1)); +} + +.jp-terminal-icon-color[fill] { + fill: var(--jp-terminal-icon-color, var(--jp-layout-color2)); +} + +.jp-terminal-icon-background-color[fill] { + fill: var( + --jp-terminal-icon-background-color, + var(--jp-inverse-layout-color2) + ); +} + +.jp-text-editor-icon-color[fill] { + fill: var(--jp-text-editor-icon-color, var(--jp-inverse-layout-color3)); +} + +.jp-inspector-icon-color[fill] { + fill: var(--jp-inspector-icon-color, var(--jp-inverse-layout-color3)); +} + +/* CSS for icons in selected filebrowser listing items */ +.jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill] { + fill: #fff; +} + +.jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill] { + fill: var(--jp-brand-color1); +} + +/* stylelint-disable selector-max-class, selector-max-compound-selectors */ + +/** +* TODO: come up with non css-hack solution for showing the busy icon on top +* of the close icon +* CSS for complex behavior of close icon of tabs in the main area tabbar +*/ +.lm-DockPanel-tabBar + .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty + > .lm-TabBar-tabCloseIcon + > :not(:hover) + > .jp-icon3[fill] { + fill: none; +} + +.lm-DockPanel-tabBar + .lm-TabBar-tab.lm-mod-closable.jp-mod-dirty + > .lm-TabBar-tabCloseIcon + > :not(:hover) + > .jp-icon-busy[fill] { + fill: var(--jp-inverse-layout-color3); +} + +/* stylelint-enable selector-max-class, selector-max-compound-selectors */ + +/* CSS for icons in status bar */ +#jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill] { + fill: #fff; +} + +#jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill] { + fill: var(--jp-brand-color1); +} + +/* special handling for splash icon CSS. While the theme CSS reloads during + splash, the splash icon can loose theming. To prevent that, we set a + default for its color variable */ +:root { + --jp-warn-color0: var(--md-orange-700); +} + +/* not sure what to do with this one, used in filebrowser listing */ +.jp-DragIcon { + margin-right: 4px; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/** + * Support for alt colors for icons as inline SVG HTMLElements + */ + +/* alt recolor the primary elements of an icon */ +.jp-icon-alt .jp-icon0[fill] { + fill: var(--jp-layout-color0); +} + +.jp-icon-alt .jp-icon1[fill] { + fill: var(--jp-layout-color1); +} + +.jp-icon-alt .jp-icon2[fill] { + fill: var(--jp-layout-color2); +} + +.jp-icon-alt .jp-icon3[fill] { + fill: var(--jp-layout-color3); +} + +.jp-icon-alt .jp-icon4[fill] { + fill: var(--jp-layout-color4); +} + +.jp-icon-alt .jp-icon0[stroke] { + stroke: var(--jp-layout-color0); +} + +.jp-icon-alt .jp-icon1[stroke] { + stroke: var(--jp-layout-color1); +} + +.jp-icon-alt .jp-icon2[stroke] { + stroke: var(--jp-layout-color2); +} + +.jp-icon-alt .jp-icon3[stroke] { + stroke: var(--jp-layout-color3); +} + +.jp-icon-alt .jp-icon4[stroke] { + stroke: var(--jp-layout-color4); +} + +/* alt recolor the accent elements of an icon */ +.jp-icon-alt .jp-icon-accent0[fill] { + fill: var(--jp-inverse-layout-color0); +} + +.jp-icon-alt .jp-icon-accent1[fill] { + fill: var(--jp-inverse-layout-color1); +} + +.jp-icon-alt .jp-icon-accent2[fill] { + fill: var(--jp-inverse-layout-color2); +} + +.jp-icon-alt .jp-icon-accent3[fill] { + fill: var(--jp-inverse-layout-color3); +} + +.jp-icon-alt .jp-icon-accent4[fill] { + fill: var(--jp-inverse-layout-color4); +} + +.jp-icon-alt .jp-icon-accent0[stroke] { + stroke: var(--jp-inverse-layout-color0); +} + +.jp-icon-alt .jp-icon-accent1[stroke] { + stroke: var(--jp-inverse-layout-color1); +} + +.jp-icon-alt .jp-icon-accent2[stroke] { + stroke: var(--jp-inverse-layout-color2); +} + +.jp-icon-alt .jp-icon-accent3[stroke] { + stroke: var(--jp-inverse-layout-color3); +} + +.jp-icon-alt .jp-icon-accent4[stroke] { + stroke: var(--jp-inverse-layout-color4); +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-icon-hoverShow:not(:hover) .jp-icon-hoverShow-content { + display: none !important; +} + +/** + * Support for hover colors for icons as inline SVG HTMLElements + */ + +/** + * regular colors + */ + +/* recolor the primary elements of an icon */ +.jp-icon-hover :hover .jp-icon0-hover[fill] { + fill: var(--jp-inverse-layout-color0); +} + +.jp-icon-hover :hover .jp-icon1-hover[fill] { + fill: var(--jp-inverse-layout-color1); +} + +.jp-icon-hover :hover .jp-icon2-hover[fill] { + fill: var(--jp-inverse-layout-color2); +} + +.jp-icon-hover :hover .jp-icon3-hover[fill] { + fill: var(--jp-inverse-layout-color3); +} + +.jp-icon-hover :hover .jp-icon4-hover[fill] { + fill: var(--jp-inverse-layout-color4); +} + +.jp-icon-hover :hover .jp-icon0-hover[stroke] { + stroke: var(--jp-inverse-layout-color0); +} + +.jp-icon-hover :hover .jp-icon1-hover[stroke] { + stroke: var(--jp-inverse-layout-color1); +} + +.jp-icon-hover :hover .jp-icon2-hover[stroke] { + stroke: var(--jp-inverse-layout-color2); +} + +.jp-icon-hover :hover .jp-icon3-hover[stroke] { + stroke: var(--jp-inverse-layout-color3); +} + +.jp-icon-hover :hover .jp-icon4-hover[stroke] { + stroke: var(--jp-inverse-layout-color4); +} + +/* recolor the accent elements of an icon */ +.jp-icon-hover :hover .jp-icon-accent0-hover[fill] { + fill: var(--jp-layout-color0); +} + +.jp-icon-hover :hover .jp-icon-accent1-hover[fill] { + fill: var(--jp-layout-color1); +} + +.jp-icon-hover :hover .jp-icon-accent2-hover[fill] { + fill: var(--jp-layout-color2); +} + +.jp-icon-hover :hover .jp-icon-accent3-hover[fill] { + fill: var(--jp-layout-color3); +} + +.jp-icon-hover :hover .jp-icon-accent4-hover[fill] { + fill: var(--jp-layout-color4); +} + +.jp-icon-hover :hover .jp-icon-accent0-hover[stroke] { + stroke: var(--jp-layout-color0); +} + +.jp-icon-hover :hover .jp-icon-accent1-hover[stroke] { + stroke: var(--jp-layout-color1); +} + +.jp-icon-hover :hover .jp-icon-accent2-hover[stroke] { + stroke: var(--jp-layout-color2); +} + +.jp-icon-hover :hover .jp-icon-accent3-hover[stroke] { + stroke: var(--jp-layout-color3); +} + +.jp-icon-hover :hover .jp-icon-accent4-hover[stroke] { + stroke: var(--jp-layout-color4); +} + +/* set the color of an icon to transparent */ +.jp-icon-hover :hover .jp-icon-none-hover[fill] { + fill: none; +} + +.jp-icon-hover :hover .jp-icon-none-hover[stroke] { + stroke: none; +} + +/** + * inverse colors + */ + +/* inverse recolor the primary elements of an icon */ +.jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill] { + fill: var(--jp-layout-color0); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill] { + fill: var(--jp-layout-color1); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill] { + fill: var(--jp-layout-color2); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill] { + fill: var(--jp-layout-color3); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill] { + fill: var(--jp-layout-color4); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke] { + stroke: var(--jp-layout-color0); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke] { + stroke: var(--jp-layout-color1); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke] { + stroke: var(--jp-layout-color2); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke] { + stroke: var(--jp-layout-color3); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke] { + stroke: var(--jp-layout-color4); +} + +/* inverse recolor the accent elements of an icon */ +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill] { + fill: var(--jp-inverse-layout-color0); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill] { + fill: var(--jp-inverse-layout-color1); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill] { + fill: var(--jp-inverse-layout-color2); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill] { + fill: var(--jp-inverse-layout-color3); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill] { + fill: var(--jp-inverse-layout-color4); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke] { + stroke: var(--jp-inverse-layout-color0); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke] { + stroke: var(--jp-inverse-layout-color1); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke] { + stroke: var(--jp-inverse-layout-color2); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke] { + stroke: var(--jp-inverse-layout-color3); +} + +.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke] { + stroke: var(--jp-inverse-layout-color4); +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-IFrame { + width: 100%; + height: 100%; +} + +.jp-IFrame > iframe { + border: none; +} + +/* +When drag events occur, `lm-mod-override-cursor` is added to the body. +Because iframes steal all cursor events, the following two rules are necessary +to suppress pointer events while resize drags are occurring. There may be a +better solution to this problem. +*/ +body.lm-mod-override-cursor .jp-IFrame { + position: relative; +} + +body.lm-mod-override-cursor .jp-IFrame::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: transparent; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2016, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-HoverBox { + position: fixed; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-FormGroup-content fieldset { + border: none; + padding: 0; + min-width: 0; + width: 100%; +} + +/* stylelint-disable selector-max-type */ + +.jp-FormGroup-content fieldset .jp-inputFieldWrapper input, +.jp-FormGroup-content fieldset .jp-inputFieldWrapper select, +.jp-FormGroup-content fieldset .jp-inputFieldWrapper textarea { + font-size: var(--jp-content-font-size2); + border-color: var(--jp-input-border-color); + border-style: solid; + border-radius: var(--jp-border-radius); + border-width: 1px; + padding: 6px 8px; + background: none; + color: var(--jp-ui-font-color0); + height: inherit; +} + +.jp-FormGroup-content fieldset input[type='checkbox'] { + position: relative; + top: 2px; + margin-left: 0; +} + +.jp-FormGroup-content button.jp-mod-styled { + cursor: pointer; +} + +.jp-FormGroup-content .checkbox label { + cursor: pointer; + font-size: var(--jp-content-font-size1); +} + +.jp-FormGroup-content .jp-root > fieldset > legend { + display: none; +} + +.jp-FormGroup-content .jp-root > fieldset > p { + display: none; +} + +/** copy of `input.jp-mod-styled:focus` style */ +.jp-FormGroup-content fieldset input:focus, +.jp-FormGroup-content fieldset select:focus { + -moz-outline-radius: unset; + outline: var(--jp-border-width) solid var(--md-blue-500); + outline-offset: -1px; + box-shadow: inset 0 0 4px var(--md-blue-300); +} + +.jp-FormGroup-content fieldset input:hover:not(:focus), +.jp-FormGroup-content fieldset select:hover:not(:focus) { + background-color: var(--jp-border-color2); +} + +/* stylelint-enable selector-max-type */ + +.jp-FormGroup-content .checkbox .field-description { + /* Disable default description field for checkbox: + because other widgets do not have description fields, + we add descriptions to each widget on the field level. + */ + display: none; +} + +.jp-FormGroup-content #root__description { + display: none; +} + +.jp-FormGroup-content .jp-modifiedIndicator { + width: 5px; + background-color: var(--jp-brand-color2); + margin-top: 0; + margin-left: calc(var(--jp-private-settingeditor-modifier-indent) * -1); + flex-shrink: 0; +} + +.jp-FormGroup-content .jp-modifiedIndicator.jp-errorIndicator { + background-color: var(--jp-error-color0); + margin-right: 0.5em; +} + +/* RJSF ARRAY style */ + +.jp-arrayFieldWrapper legend { + font-size: var(--jp-content-font-size2); + color: var(--jp-ui-font-color0); + flex-basis: 100%; + padding: 4px 0; + font-weight: var(--jp-content-heading-font-weight); + border-bottom: 1px solid var(--jp-border-color2); +} + +.jp-arrayFieldWrapper .field-description { + padding: 4px 0; + white-space: pre-wrap; +} + +.jp-arrayFieldWrapper .array-item { + width: 100%; + border: 1px solid var(--jp-border-color2); + border-radius: 4px; + margin: 4px; +} + +.jp-ArrayOperations { + display: flex; + margin-left: 8px; +} + +.jp-ArrayOperationsButton { + margin: 2px; +} + +.jp-ArrayOperationsButton .jp-icon3[fill] { + fill: var(--jp-ui-font-color0); +} + +button.jp-ArrayOperationsButton.jp-mod-styled:disabled { + cursor: not-allowed; + opacity: 0.5; +} + +/* RJSF form validation error */ + +.jp-FormGroup-content .validationErrors { + color: var(--jp-error-color0); +} + +/* Hide panel level error as duplicated the field level error */ +.jp-FormGroup-content .panel.errors { + display: none; +} + +/* RJSF normal content (settings-editor) */ + +.jp-FormGroup-contentNormal { + display: flex; + align-items: center; + flex-wrap: wrap; +} + +.jp-FormGroup-contentNormal .jp-FormGroup-contentItem { + margin-left: 7px; + color: var(--jp-ui-font-color0); +} + +.jp-FormGroup-contentNormal .jp-FormGroup-description { + flex-basis: 100%; + padding: 4px 7px; +} + +.jp-FormGroup-contentNormal .jp-FormGroup-default { + flex-basis: 100%; + padding: 4px 7px; +} + +.jp-FormGroup-contentNormal .jp-FormGroup-fieldLabel { + font-size: var(--jp-content-font-size1); + font-weight: normal; + min-width: 120px; +} + +.jp-FormGroup-contentNormal fieldset:not(:first-child) { + margin-left: 7px; +} + +.jp-FormGroup-contentNormal .field-array-of-string .array-item { + /* Display `jp-ArrayOperations` buttons side-by-side with content except + for small screens where flex-wrap will place them one below the other. + */ + display: flex; + align-items: center; + flex-wrap: wrap; +} + +.jp-FormGroup-contentNormal .jp-objectFieldWrapper .form-group { + padding: 2px 8px 2px var(--jp-private-settingeditor-modifier-indent); + margin-top: 2px; +} + +/* RJSF compact content (metadata-form) */ + +.jp-FormGroup-content.jp-FormGroup-contentCompact { + width: 100%; +} + +.jp-FormGroup-contentCompact .form-group { + display: flex; + padding: 0.5em 0.2em 0.5em 0; +} + +.jp-FormGroup-contentCompact + .jp-FormGroup-compactTitle + .jp-FormGroup-description { + font-size: var(--jp-ui-font-size1); + color: var(--jp-ui-font-color2); +} + +.jp-FormGroup-contentCompact .jp-FormGroup-fieldLabel { + padding-bottom: 0.3em; +} + +.jp-FormGroup-contentCompact .jp-inputFieldWrapper .form-control { + width: 100%; + box-sizing: border-box; +} + +.jp-FormGroup-contentCompact .jp-arrayFieldWrapper .jp-FormGroup-compactTitle { + padding-bottom: 7px; +} + +.jp-FormGroup-contentCompact + .jp-objectFieldWrapper + .jp-objectFieldWrapper + .form-group { + padding: 2px 8px 2px var(--jp-private-settingeditor-modifier-indent); + margin-top: 2px; +} + +.jp-FormGroup-contentCompact ul.error-detail { + margin-block-start: 0.5em; + margin-block-end: 0.5em; + padding-inline-start: 1em; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.jp-SidePanel { + display: flex; + flex-direction: column; + min-width: var(--jp-sidebar-min-width); + overflow-y: auto; + color: var(--jp-ui-font-color1); + background: var(--jp-layout-color1); + font-size: var(--jp-ui-font-size1); +} + +.jp-SidePanel-header { + flex: 0 0 auto; + display: flex; + border-bottom: var(--jp-border-width) solid var(--jp-border-color2); + font-size: var(--jp-ui-font-size0); + font-weight: 600; + letter-spacing: 1px; + margin: 0; + padding: 2px; + text-transform: uppercase; +} + +.jp-SidePanel-toolbar { + flex: 0 0 auto; +} + +.jp-SidePanel-content { + flex: 1 1 auto; +} + +.jp-SidePanel-toolbar, +.jp-AccordionPanel-toolbar { + height: var(--jp-private-toolbar-height); +} + +.jp-SidePanel-toolbar.jp-Toolbar-micro { + display: none; +} + +.lm-AccordionPanel .jp-AccordionPanel-title { + box-sizing: border-box; + line-height: 25px; + margin: 0; + display: flex; + align-items: center; + background: var(--jp-layout-color1); + color: var(--jp-ui-font-color1); + border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color); + box-shadow: var(--jp-toolbar-box-shadow); + font-size: var(--jp-ui-font-size0); +} + +.jp-AccordionPanel-title { + cursor: pointer; + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + text-transform: uppercase; +} + +.lm-AccordionPanel[data-orientation='horizontal'] > .jp-AccordionPanel-title { + /* Title is rotated for horizontal accordion panel using CSS */ + display: block; + transform-origin: top left; + transform: rotate(-90deg) translate(-100%); +} + +.jp-AccordionPanel-title .lm-AccordionPanel-titleLabel { + user-select: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.jp-AccordionPanel-title .lm-AccordionPanel-titleCollapser { + transform: rotate(-90deg); + margin: auto 0; + height: 16px; +} + +.jp-AccordionPanel-title.lm-mod-expanded .lm-AccordionPanel-titleCollapser { + transform: rotate(0deg); +} + +.lm-AccordionPanel .jp-AccordionPanel-toolbar { + background: none; + box-shadow: none; + border: none; + margin-left: auto; +} + +.lm-AccordionPanel .lm-SplitPanel-handle:hover { + background: var(--jp-layout-color3); +} + +.jp-text-truncated { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2017, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-Spinner { + position: absolute; + display: flex; + justify-content: center; + align-items: center; + z-index: 10; + left: 0; + top: 0; + width: 100%; + height: 100%; + background: var(--jp-layout-color0); + outline: none; +} + +.jp-SpinnerContent { + font-size: 10px; + margin: 50px auto; + text-indent: -9999em; + width: 3em; + height: 3em; + border-radius: 50%; + background: var(--jp-brand-color3); + background: linear-gradient( + to right, + #f37626 10%, + rgba(255, 255, 255, 0) 42% + ); + position: relative; + animation: load3 1s infinite linear, fadeIn 1s; +} + +.jp-SpinnerContent::before { + width: 50%; + height: 50%; + background: #f37626; + border-radius: 100% 0 0; + position: absolute; + top: 0; + left: 0; + content: ''; +} + +.jp-SpinnerContent::after { + background: var(--jp-layout-color0); + width: 75%; + height: 75%; + border-radius: 50%; + content: ''; + margin: auto; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; +} + +@keyframes fadeIn { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +@keyframes load3 { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2017, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +button.jp-mod-styled { + font-size: var(--jp-ui-font-size1); + color: var(--jp-ui-font-color0); + border: none; + box-sizing: border-box; + text-align: center; + line-height: 32px; + height: 32px; + padding: 0 12px; + letter-spacing: 0.8px; + outline: none; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; +} + +input.jp-mod-styled { + background: var(--jp-input-background); + height: 28px; + box-sizing: border-box; + border: var(--jp-border-width) solid var(--jp-border-color1); + padding-left: 7px; + padding-right: 7px; + font-size: var(--jp-ui-font-size2); + color: var(--jp-ui-font-color0); + outline: none; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; +} + +input[type='checkbox'].jp-mod-styled { + appearance: checkbox; + -webkit-appearance: checkbox; + -moz-appearance: checkbox; + height: auto; +} + +input.jp-mod-styled:focus { + border: var(--jp-border-width) solid var(--md-blue-500); + box-shadow: inset 0 0 4px var(--md-blue-300); +} + +.jp-select-wrapper { + display: flex; + position: relative; + flex-direction: column; + padding: 1px; + background-color: var(--jp-layout-color1); + box-sizing: border-box; + margin-bottom: 12px; +} + +.jp-select-wrapper:not(.multiple) { + height: 28px; +} + +.jp-select-wrapper.jp-mod-focused select.jp-mod-styled { + border: var(--jp-border-width) solid var(--jp-input-active-border-color); + box-shadow: var(--jp-input-box-shadow); + background-color: var(--jp-input-active-background); +} + +select.jp-mod-styled:hover { + cursor: pointer; + color: var(--jp-ui-font-color0); + background-color: var(--jp-input-hover-background); + box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.5); +} + +select.jp-mod-styled { + flex: 1 1 auto; + width: 100%; + font-size: var(--jp-ui-font-size2); + background: var(--jp-input-background); + color: var(--jp-ui-font-color0); + padding: 0 25px 0 8px; + border: var(--jp-border-width) solid var(--jp-input-border-color); + border-radius: 0; + outline: none; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; +} + +select.jp-mod-styled:not([multiple]) { + height: 32px; +} + +select.jp-mod-styled[multiple] { + max-height: 200px; + overflow-y: auto; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-switch { + display: flex; + align-items: center; + padding-left: 4px; + padding-right: 4px; + font-size: var(--jp-ui-font-size1); + background-color: transparent; + color: var(--jp-ui-font-color1); + border: none; + height: 20px; +} + +.jp-switch:hover { + background-color: var(--jp-layout-color2); +} + +.jp-switch-label { + margin-right: 5px; + font-family: var(--jp-ui-font-family); +} + +.jp-switch-track { + cursor: pointer; + background-color: var(--jp-switch-color, var(--jp-border-color1)); + -webkit-transition: 0.4s; + transition: 0.4s; + border-radius: 34px; + height: 16px; + width: 35px; + position: relative; +} + +.jp-switch-track::before { + content: ''; + position: absolute; + height: 10px; + width: 10px; + margin: 3px; + left: 0; + background-color: var(--jp-ui-inverse-font-color1); + -webkit-transition: 0.4s; + transition: 0.4s; + border-radius: 50%; +} + +.jp-switch[aria-checked='true'] .jp-switch-track { + background-color: var(--jp-switch-true-position-color, var(--jp-warn-color0)); +} + +.jp-switch[aria-checked='true'] .jp-switch-track::before { + /* track width (35) - margins (3 + 3) - thumb width (10) */ + left: 19px; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2016, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +:root { + --jp-private-toolbar-height: calc( + 28px + var(--jp-border-width) + ); /* leave 28px for content */ +} + +.jp-Toolbar { + color: var(--jp-ui-font-color1); + flex: 0 0 auto; + display: flex; + flex-direction: row; + border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color); + box-shadow: var(--jp-toolbar-box-shadow); + background: var(--jp-toolbar-background); + min-height: var(--jp-toolbar-micro-height); + padding: 2px; + z-index: 8; + overflow-x: hidden; +} + +/* Toolbar items */ + +.jp-Toolbar > .jp-Toolbar-item.jp-Toolbar-spacer { + flex-grow: 1; + flex-shrink: 1; +} + +.jp-Toolbar-item.jp-Toolbar-kernelStatus { + display: inline-block; + width: 32px; + background-repeat: no-repeat; + background-position: center; + background-size: 16px; +} + +.jp-Toolbar > .jp-Toolbar-item { + flex: 0 0 auto; + display: flex; + padding-left: 1px; + padding-right: 1px; + font-size: var(--jp-ui-font-size1); + line-height: var(--jp-private-toolbar-height); + height: 100%; +} + +/* Toolbar buttons */ + +/* This is the div we use to wrap the react component into a Widget */ +div.jp-ToolbarButton { + color: transparent; + border: none; + box-sizing: border-box; + outline: none; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + padding: 0; + margin: 0; +} + +button.jp-ToolbarButtonComponent { + background: var(--jp-layout-color1); + border: none; + box-sizing: border-box; + outline: none; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + padding: 0 6px; + margin: 0; + height: 24px; + border-radius: var(--jp-border-radius); + display: flex; + align-items: center; + text-align: center; + font-size: 14px; + min-width: unset; + min-height: unset; +} + +button.jp-ToolbarButtonComponent:disabled { + opacity: 0.4; +} + +button.jp-ToolbarButtonComponent > span { + padding: 0; + flex: 0 0 auto; +} + +button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label { + font-size: var(--jp-ui-font-size1); + line-height: 100%; + padding-left: 2px; + color: var(--jp-ui-font-color1); + font-family: var(--jp-ui-font-family); +} + +#jp-main-dock-panel[data-mode='single-document'] + .jp-MainAreaWidget + > .jp-Toolbar.jp-Toolbar-micro { + padding: 0; + min-height: 0; +} + +#jp-main-dock-panel[data-mode='single-document'] + .jp-MainAreaWidget + > .jp-Toolbar { + border: none; + box-shadow: none; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.jp-WindowedPanel-outer { + position: relative; + overflow-y: auto; +} + +.jp-WindowedPanel-inner { + position: relative; +} + +.jp-WindowedPanel-window { + position: absolute; + left: 0; + right: 0; + overflow: visible; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/* Sibling imports */ + +body { + color: var(--jp-ui-font-color1); + font-size: var(--jp-ui-font-size1); +} + +/* Disable native link decoration styles everywhere outside of dialog boxes */ +a { + text-decoration: unset; + color: unset; +} + +a:hover { + text-decoration: unset; + color: unset; +} + +/* Accessibility for links inside dialog box text */ +.jp-Dialog-content a { + text-decoration: revert; + color: var(--jp-content-link-color); +} + +.jp-Dialog-content a:hover { + text-decoration: revert; +} + +/* Styles for ui-components */ +.jp-Button { + color: var(--jp-ui-font-color2); + border-radius: var(--jp-border-radius); + padding: 0 12px; + font-size: var(--jp-ui-font-size1); + + /* Copy from blueprint 3 */ + display: inline-flex; + flex-direction: row; + border: none; + cursor: pointer; + align-items: center; + justify-content: center; + text-align: left; + vertical-align: middle; + min-height: 30px; + min-width: 30px; +} + +.jp-Button:disabled { + cursor: not-allowed; +} + +.jp-Button:empty { + padding: 0 !important; +} + +.jp-Button.jp-mod-small { + min-height: 24px; + min-width: 24px; + font-size: 12px; + padding: 0 7px; +} + +/* Use our own theme for hover styles */ +.jp-Button.jp-mod-minimal:hover { + background-color: var(--jp-layout-color2); +} + +.jp-Button.jp-mod-minimal { + background: none; +} + +.jp-InputGroup { + display: block; + position: relative; +} + +.jp-InputGroup input { + box-sizing: border-box; + border: none; + border-radius: 0; + background-color: transparent; + color: var(--jp-ui-font-color0); + box-shadow: inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color); + padding-bottom: 0; + padding-top: 0; + padding-left: 10px; + padding-right: 28px; + position: relative; + width: 100%; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + font-size: 14px; + font-weight: 400; + height: 30px; + line-height: 30px; + outline: none; + vertical-align: middle; +} + +.jp-InputGroup input:focus { + box-shadow: inset 0 0 0 var(--jp-border-width) + var(--jp-input-active-box-shadow-color), + inset 0 0 0 3px var(--jp-input-active-box-shadow-color); +} + +.jp-InputGroup input:disabled { + cursor: not-allowed; + resize: block; + background-color: var(--jp-layout-color2); + color: var(--jp-ui-font-color2); +} + +.jp-InputGroup input:disabled ~ span { + cursor: not-allowed; + color: var(--jp-ui-font-color2); +} + +.jp-InputGroup input::placeholder, +input::placeholder { + color: var(--jp-ui-font-color2); +} + +.jp-InputGroupAction { + position: absolute; + bottom: 1px; + right: 0; + padding: 6px; +} + +.jp-HTMLSelect.jp-DefaultStyle select { + background-color: initial; + border: none; + border-radius: 0; + box-shadow: none; + color: var(--jp-ui-font-color0); + display: block; + font-size: var(--jp-ui-font-size1); + font-family: var(--jp-ui-font-family); + height: 24px; + line-height: 14px; + padding: 0 25px 0 10px; + text-align: left; + -moz-appearance: none; + -webkit-appearance: none; +} + +.jp-HTMLSelect.jp-DefaultStyle select:disabled { + background-color: var(--jp-layout-color2); + color: var(--jp-ui-font-color2); + cursor: not-allowed; + resize: block; +} + +.jp-HTMLSelect.jp-DefaultStyle select:disabled ~ span { + cursor: not-allowed; +} + +/* Use our own theme for hover and option styles */ +/* stylelint-disable-next-line selector-max-type */ +.jp-HTMLSelect.jp-DefaultStyle select:hover, +.jp-HTMLSelect.jp-DefaultStyle select > option { + background-color: var(--jp-layout-color2); + color: var(--jp-ui-font-color0); +} + +select { + box-sizing: border-box; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Styles +|----------------------------------------------------------------------------*/ + +.jp-StatusBar-Widget { + display: flex; + align-items: center; + background: var(--jp-layout-color2); + min-height: var(--jp-statusbar-height); + justify-content: space-between; + padding: 0 10px; +} + +.jp-StatusBar-Left { + display: flex; + align-items: center; + flex-direction: row; +} + +.jp-StatusBar-Middle { + display: flex; + align-items: center; +} + +.jp-StatusBar-Right { + display: flex; + align-items: center; + flex-direction: row-reverse; +} + +.jp-StatusBar-Item { + max-height: var(--jp-statusbar-height); + margin: 0 2px; + height: var(--jp-statusbar-height); + white-space: nowrap; + text-overflow: ellipsis; + color: var(--jp-ui-font-color1); + padding: 0 6px; +} + +.jp-mod-highlighted:hover { + background-color: var(--jp-layout-color3); +} + +.jp-mod-clicked { + background-color: var(--jp-brand-color1); +} + +.jp-mod-clicked:hover { + background-color: var(--jp-brand-color0); +} + +.jp-mod-clicked .jp-StatusBar-TextItem { + color: var(--jp-ui-inverse-font-color1); +} + +.jp-StatusBar-HoverItem { + box-shadow: '0px 4px 4px rgba(0, 0, 0, 0.25)'; +} + +.jp-StatusBar-TextItem { + font-size: var(--jp-ui-font-size1); + font-family: var(--jp-ui-font-family); + line-height: 24px; + color: var(--jp-ui-font-color1); +} + +.jp-StatusBar-GroupItem { + display: flex; + align-items: center; + flex-direction: row; +} + +.jp-Statusbar-ProgressCircle svg { + display: block; + margin: 0 auto; + width: 16px; + height: 24px; + align-self: normal; +} + +.jp-Statusbar-ProgressCircle path { + fill: var(--jp-inverse-layout-color3); +} + +.jp-Statusbar-ProgressBar-progress-bar { + height: 10px; + width: 100px; + border: solid 0.25px var(--jp-brand-color2); + border-radius: 3px; + overflow: hidden; + align-self: center; +} + +.jp-Statusbar-ProgressBar-progress-bar > div { + background-color: var(--jp-brand-color2); + background-image: linear-gradient( + -45deg, + rgba(255, 255, 255, 0.2) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.2) 50%, + rgba(255, 255, 255, 0.2) 75%, + transparent 75%, + transparent + ); + background-size: 40px 40px; + float: left; + width: 0%; + height: 100%; + font-size: 12px; + line-height: 14px; + color: #fff; + text-align: center; + animation: jp-Statusbar-ExecutionTime-progress-bar 2s linear infinite; +} + +.jp-Statusbar-ProgressBar-progress-bar p { + color: var(--jp-ui-font-color1); + font-family: var(--jp-ui-font-family); + font-size: var(--jp-ui-font-size1); + line-height: 10px; + width: 100px; +} + +@keyframes jp-Statusbar-ExecutionTime-progress-bar { + 0% { + background-position: 0 0; + } + + 100% { + background-position: 40px 40px; + } +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Variables +|----------------------------------------------------------------------------*/ + +:root { + --jp-private-commandpalette-search-height: 28px; +} + +/*----------------------------------------------------------------------------- +| Overall styles +|----------------------------------------------------------------------------*/ + +.lm-CommandPalette { + padding-bottom: 0; + color: var(--jp-ui-font-color1); + background: var(--jp-layout-color1); + + /* This is needed so that all font sizing of children done in ems is + * relative to this base size */ + font-size: var(--jp-ui-font-size1); +} + +/*----------------------------------------------------------------------------- +| Modal variant +|----------------------------------------------------------------------------*/ + +.jp-ModalCommandPalette { + position: absolute; + z-index: 10000; + top: 38px; + left: 30%; + margin: 0; + padding: 4px; + width: 40%; + box-shadow: var(--jp-elevation-z4); + border-radius: 4px; + background: var(--jp-layout-color0); +} + +.jp-ModalCommandPalette .lm-CommandPalette { + max-height: 40vh; +} + +.jp-ModalCommandPalette .lm-CommandPalette .lm-close-icon::after { + display: none; +} + +.jp-ModalCommandPalette .lm-CommandPalette .lm-CommandPalette-header { + display: none; +} + +.jp-ModalCommandPalette .lm-CommandPalette .lm-CommandPalette-item { + margin-left: 4px; + margin-right: 4px; +} + +.jp-ModalCommandPalette + .lm-CommandPalette + .lm-CommandPalette-item.lm-mod-disabled { + display: none; +} + +/*----------------------------------------------------------------------------- +| Search +|----------------------------------------------------------------------------*/ + +.lm-CommandPalette-search { + padding: 4px; + background-color: var(--jp-layout-color1); + z-index: 2; +} + +.lm-CommandPalette-wrapper { + overflow: overlay; + padding: 0 9px; + background-color: var(--jp-input-active-background); + height: 30px; + box-shadow: inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color); +} + +.lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper { + box-shadow: inset 0 0 0 1px var(--jp-input-active-box-shadow-color), + inset 0 0 0 3px var(--jp-input-active-box-shadow-color); +} + +.jp-SearchIconGroup { + color: white; + background-color: var(--jp-brand-color1); + position: absolute; + top: 4px; + right: 4px; + padding: 5px 5px 1px; +} + +.jp-SearchIconGroup svg { + height: 20px; + width: 20px; +} + +.jp-SearchIconGroup .jp-icon3[fill] { + fill: var(--jp-layout-color0); +} + +.lm-CommandPalette-input { + background: transparent; + width: calc(100% - 18px); + float: left; + border: none; + outline: none; + font-size: var(--jp-ui-font-size1); + color: var(--jp-ui-font-color0); + line-height: var(--jp-private-commandpalette-search-height); +} + +.lm-CommandPalette-input::-webkit-input-placeholder, +.lm-CommandPalette-input::-moz-placeholder, +.lm-CommandPalette-input:-ms-input-placeholder { + color: var(--jp-ui-font-color2); + font-size: var(--jp-ui-font-size1); +} + +/*----------------------------------------------------------------------------- +| Results +|----------------------------------------------------------------------------*/ + +.lm-CommandPalette-header:first-child { + margin-top: 0; +} + +.lm-CommandPalette-header { + border-bottom: solid var(--jp-border-width) var(--jp-border-color2); + color: var(--jp-ui-font-color1); + cursor: pointer; + display: flex; + font-size: var(--jp-ui-font-size0); + font-weight: 600; + letter-spacing: 1px; + margin-top: 8px; + padding: 8px 0 8px 12px; + text-transform: uppercase; +} + +.lm-CommandPalette-header.lm-mod-active { + background: var(--jp-layout-color2); +} + +.lm-CommandPalette-header > mark { + background-color: transparent; + font-weight: bold; + color: var(--jp-ui-font-color1); +} + +.lm-CommandPalette-item { + padding: 4px 12px 4px 4px; + color: var(--jp-ui-font-color1); + font-size: var(--jp-ui-font-size1); + font-weight: 400; + display: flex; +} + +.lm-CommandPalette-item.lm-mod-disabled { + color: var(--jp-ui-font-color2); +} + +.lm-CommandPalette-item.lm-mod-active { + color: var(--jp-ui-inverse-font-color1); + background: var(--jp-brand-color1); +} + +.lm-CommandPalette-item.lm-mod-active .lm-CommandPalette-itemLabel > mark { + color: var(--jp-ui-inverse-font-color0); +} + +.lm-CommandPalette-item.lm-mod-active .jp-icon-selectable[fill] { + fill: var(--jp-layout-color0); +} + +.lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled) { + color: var(--jp-ui-inverse-font-color1); + background: var(--jp-brand-color1); +} + +.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) { + background: var(--jp-layout-color2); +} + +.lm-CommandPalette-itemContent { + overflow: hidden; +} + +.lm-CommandPalette-itemLabel > mark { + color: var(--jp-ui-font-color0); + background-color: transparent; + font-weight: bold; +} + +.lm-CommandPalette-item.lm-mod-disabled mark { + color: var(--jp-ui-font-color2); +} + +.lm-CommandPalette-item .lm-CommandPalette-itemIcon { + margin: 0 4px 0 0; + position: relative; + width: 16px; + top: 2px; + flex: 0 0 auto; +} + +.lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon { + opacity: 0.6; +} + +.lm-CommandPalette-item .lm-CommandPalette-itemShortcut { + flex: 0 0 auto; +} + +.lm-CommandPalette-itemCaption { + display: none; +} + +.lm-CommandPalette-content { + background-color: var(--jp-layout-color1); +} + +.lm-CommandPalette-content:empty::after { + content: 'No results'; + margin: auto; + margin-top: 20px; + width: 100px; + display: block; + font-size: var(--jp-ui-font-size2); + font-family: var(--jp-ui-font-family); + font-weight: lighter; +} + +.lm-CommandPalette-emptyMessage { + text-align: center; + margin-top: 24px; + line-height: 1.32; + padding: 0 8px; + color: var(--jp-content-font-color3); +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2017, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-Dialog { + position: absolute; + z-index: 10000; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + top: 0; + left: 0; + margin: 0; + padding: 0; + width: 100%; + height: 100%; + background: var(--jp-dialog-background); +} + +.jp-Dialog-content { + display: flex; + flex-direction: column; + margin-left: auto; + margin-right: auto; + background: var(--jp-layout-color1); + padding: 24px 24px 12px; + min-width: 300px; + min-height: 150px; + max-width: 1000px; + max-height: 500px; + box-sizing: border-box; + box-shadow: var(--jp-elevation-z20); + word-wrap: break-word; + border-radius: var(--jp-border-radius); + + /* This is needed so that all font sizing of children done in ems is + * relative to this base size */ + font-size: var(--jp-ui-font-size1); + color: var(--jp-ui-font-color1); + resize: both; +} + +.jp-Dialog-content.jp-Dialog-content-small { + max-width: 500px; +} + +.jp-Dialog-button { + overflow: visible; +} + +button.jp-Dialog-button:focus { + outline: 1px solid var(--jp-brand-color1); + outline-offset: 4px; + -moz-outline-radius: 0; +} + +button.jp-Dialog-button:focus::-moz-focus-inner { + border: 0; +} + +button.jp-Dialog-button.jp-mod-styled.jp-mod-accept:focus, +button.jp-Dialog-button.jp-mod-styled.jp-mod-warn:focus, +button.jp-Dialog-button.jp-mod-styled.jp-mod-reject:focus { + outline-offset: 4px; + -moz-outline-radius: 0; +} + +button.jp-Dialog-button.jp-mod-styled.jp-mod-accept:focus { + outline: 1px solid var(--jp-accept-color-normal, var(--jp-brand-color1)); +} + +button.jp-Dialog-button.jp-mod-styled.jp-mod-warn:focus { + outline: 1px solid var(--jp-warn-color-normal, var(--jp-error-color1)); +} + +button.jp-Dialog-button.jp-mod-styled.jp-mod-reject:focus { + outline: 1px solid var(--jp-reject-color-normal, var(--md-grey-600)); +} + +button.jp-Dialog-close-button { + padding: 0; + height: 100%; + min-width: unset; + min-height: unset; +} + +.jp-Dialog-header { + display: flex; + justify-content: space-between; + flex: 0 0 auto; + padding-bottom: 12px; + font-size: var(--jp-ui-font-size3); + font-weight: 400; + color: var(--jp-ui-font-color1); +} + +.jp-Dialog-body { + display: flex; + flex-direction: column; + flex: 1 1 auto; + font-size: var(--jp-ui-font-size1); + background: var(--jp-layout-color1); + color: var(--jp-ui-font-color1); + overflow: auto; +} + +.jp-Dialog-footer { + display: flex; + flex-direction: row; + justify-content: flex-end; + align-items: center; + flex: 0 0 auto; + margin-left: -12px; + margin-right: -12px; + padding: 12px; +} + +.jp-Dialog-checkbox { + padding-right: 5px; +} + +.jp-Dialog-checkbox > input:focus-visible { + outline: 1px solid var(--jp-input-active-border-color); + outline-offset: 1px; +} + +.jp-Dialog-spacer { + flex: 1 1 auto; +} + +.jp-Dialog-title { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.jp-Dialog-body > .jp-select-wrapper { + width: 100%; +} + +.jp-Dialog-body > button { + padding: 0 16px; +} + +.jp-Dialog-body > label { + line-height: 1.4; + color: var(--jp-ui-font-color0); +} + +.jp-Dialog-button.jp-mod-styled:not(:last-child) { + margin-right: 12px; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.jp-Input-Boolean-Dialog { + flex-direction: row-reverse; + align-items: end; + width: 100%; +} + +.jp-Input-Boolean-Dialog > label { + flex: 1 1 auto; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2016, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-MainAreaWidget > :focus { + outline: none; +} + +.jp-MainAreaWidget .jp-MainAreaWidget-error { + padding: 6px; +} + +.jp-MainAreaWidget .jp-MainAreaWidget-error > pre { + width: auto; + padding: 10px; + background: var(--jp-error-color3); + border: var(--jp-border-width) solid var(--jp-error-color1); + border-radius: var(--jp-border-radius); + color: var(--jp-ui-font-color1); + font-size: var(--jp-ui-font-size1); + white-space: pre-wrap; + word-wrap: break-word; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/** + * google-material-color v1.2.6 + * https://github.com/danlevan/google-material-color + */ +:root { + --md-red-50: #ffebee; + --md-red-100: #ffcdd2; + --md-red-200: #ef9a9a; + --md-red-300: #e57373; + --md-red-400: #ef5350; + --md-red-500: #f44336; + --md-red-600: #e53935; + --md-red-700: #d32f2f; + --md-red-800: #c62828; + --md-red-900: #b71c1c; + --md-red-A100: #ff8a80; + --md-red-A200: #ff5252; + --md-red-A400: #ff1744; + --md-red-A700: #d50000; + --md-pink-50: #fce4ec; + --md-pink-100: #f8bbd0; + --md-pink-200: #f48fb1; + --md-pink-300: #f06292; + --md-pink-400: #ec407a; + --md-pink-500: #e91e63; + --md-pink-600: #d81b60; + --md-pink-700: #c2185b; + --md-pink-800: #ad1457; + --md-pink-900: #880e4f; + --md-pink-A100: #ff80ab; + --md-pink-A200: #ff4081; + --md-pink-A400: #f50057; + --md-pink-A700: #c51162; + --md-purple-50: #f3e5f5; + --md-purple-100: #e1bee7; + --md-purple-200: #ce93d8; + --md-purple-300: #ba68c8; + --md-purple-400: #ab47bc; + --md-purple-500: #9c27b0; + --md-purple-600: #8e24aa; + --md-purple-700: #7b1fa2; + --md-purple-800: #6a1b9a; + --md-purple-900: #4a148c; + --md-purple-A100: #ea80fc; + --md-purple-A200: #e040fb; + --md-purple-A400: #d500f9; + --md-purple-A700: #a0f; + --md-deep-purple-50: #ede7f6; + --md-deep-purple-100: #d1c4e9; + --md-deep-purple-200: #b39ddb; + --md-deep-purple-300: #9575cd; + --md-deep-purple-400: #7e57c2; + --md-deep-purple-500: #673ab7; + --md-deep-purple-600: #5e35b1; + --md-deep-purple-700: #512da8; + --md-deep-purple-800: #4527a0; + --md-deep-purple-900: #311b92; + --md-deep-purple-A100: #b388ff; + --md-deep-purple-A200: #7c4dff; + --md-deep-purple-A400: #651fff; + --md-deep-purple-A700: #6200ea; + --md-indigo-50: #e8eaf6; + --md-indigo-100: #c5cae9; + --md-indigo-200: #9fa8da; + --md-indigo-300: #7986cb; + --md-indigo-400: #5c6bc0; + --md-indigo-500: #3f51b5; + --md-indigo-600: #3949ab; + --md-indigo-700: #303f9f; + --md-indigo-800: #283593; + --md-indigo-900: #1a237e; + --md-indigo-A100: #8c9eff; + --md-indigo-A200: #536dfe; + --md-indigo-A400: #3d5afe; + --md-indigo-A700: #304ffe; + --md-blue-50: #e3f2fd; + --md-blue-100: #bbdefb; + --md-blue-200: #90caf9; + --md-blue-300: #64b5f6; + --md-blue-400: #42a5f5; + --md-blue-500: #2196f3; + --md-blue-600: #1e88e5; + --md-blue-700: #1976d2; + --md-blue-800: #1565c0; + --md-blue-900: #0d47a1; + --md-blue-A100: #82b1ff; + --md-blue-A200: #448aff; + --md-blue-A400: #2979ff; + --md-blue-A700: #2962ff; + --md-light-blue-50: #e1f5fe; + --md-light-blue-100: #b3e5fc; + --md-light-blue-200: #81d4fa; + --md-light-blue-300: #4fc3f7; + --md-light-blue-400: #29b6f6; + --md-light-blue-500: #03a9f4; + --md-light-blue-600: #039be5; + --md-light-blue-700: #0288d1; + --md-light-blue-800: #0277bd; + --md-light-blue-900: #01579b; + --md-light-blue-A100: #80d8ff; + --md-light-blue-A200: #40c4ff; + --md-light-blue-A400: #00b0ff; + --md-light-blue-A700: #0091ea; + --md-cyan-50: #e0f7fa; + --md-cyan-100: #b2ebf2; + --md-cyan-200: #80deea; + --md-cyan-300: #4dd0e1; + --md-cyan-400: #26c6da; + --md-cyan-500: #00bcd4; + --md-cyan-600: #00acc1; + --md-cyan-700: #0097a7; + --md-cyan-800: #00838f; + --md-cyan-900: #006064; + --md-cyan-A100: #84ffff; + --md-cyan-A200: #18ffff; + --md-cyan-A400: #00e5ff; + --md-cyan-A700: #00b8d4; + --md-teal-50: #e0f2f1; + --md-teal-100: #b2dfdb; + --md-teal-200: #80cbc4; + --md-teal-300: #4db6ac; + --md-teal-400: #26a69a; + --md-teal-500: #009688; + --md-teal-600: #00897b; + --md-teal-700: #00796b; + --md-teal-800: #00695c; + --md-teal-900: #004d40; + --md-teal-A100: #a7ffeb; + --md-teal-A200: #64ffda; + --md-teal-A400: #1de9b6; + --md-teal-A700: #00bfa5; + --md-green-50: #e8f5e9; + --md-green-100: #c8e6c9; + --md-green-200: #a5d6a7; + --md-green-300: #81c784; + --md-green-400: #66bb6a; + --md-green-500: #4caf50; + --md-green-600: #43a047; + --md-green-700: #388e3c; + --md-green-800: #2e7d32; + --md-green-900: #1b5e20; + --md-green-A100: #b9f6ca; + --md-green-A200: #69f0ae; + --md-green-A400: #00e676; + --md-green-A700: #00c853; + --md-light-green-50: #f1f8e9; + --md-light-green-100: #dcedc8; + --md-light-green-200: #c5e1a5; + --md-light-green-300: #aed581; + --md-light-green-400: #9ccc65; + --md-light-green-500: #8bc34a; + --md-light-green-600: #7cb342; + --md-light-green-700: #689f38; + --md-light-green-800: #558b2f; + --md-light-green-900: #33691e; + --md-light-green-A100: #ccff90; + --md-light-green-A200: #b2ff59; + --md-light-green-A400: #76ff03; + --md-light-green-A700: #64dd17; + --md-lime-50: #f9fbe7; + --md-lime-100: #f0f4c3; + --md-lime-200: #e6ee9c; + --md-lime-300: #dce775; + --md-lime-400: #d4e157; + --md-lime-500: #cddc39; + --md-lime-600: #c0ca33; + --md-lime-700: #afb42b; + --md-lime-800: #9e9d24; + --md-lime-900: #827717; + --md-lime-A100: #f4ff81; + --md-lime-A200: #eeff41; + --md-lime-A400: #c6ff00; + --md-lime-A700: #aeea00; + --md-yellow-50: #fffde7; + --md-yellow-100: #fff9c4; + --md-yellow-200: #fff59d; + --md-yellow-300: #fff176; + --md-yellow-400: #ffee58; + --md-yellow-500: #ffeb3b; + --md-yellow-600: #fdd835; + --md-yellow-700: #fbc02d; + --md-yellow-800: #f9a825; + --md-yellow-900: #f57f17; + --md-yellow-A100: #ffff8d; + --md-yellow-A200: #ff0; + --md-yellow-A400: #ffea00; + --md-yellow-A700: #ffd600; + --md-amber-50: #fff8e1; + --md-amber-100: #ffecb3; + --md-amber-200: #ffe082; + --md-amber-300: #ffd54f; + --md-amber-400: #ffca28; + --md-amber-500: #ffc107; + --md-amber-600: #ffb300; + --md-amber-700: #ffa000; + --md-amber-800: #ff8f00; + --md-amber-900: #ff6f00; + --md-amber-A100: #ffe57f; + --md-amber-A200: #ffd740; + --md-amber-A400: #ffc400; + --md-amber-A700: #ffab00; + --md-orange-50: #fff3e0; + --md-orange-100: #ffe0b2; + --md-orange-200: #ffcc80; + --md-orange-300: #ffb74d; + --md-orange-400: #ffa726; + --md-orange-500: #ff9800; + --md-orange-600: #fb8c00; + --md-orange-700: #f57c00; + --md-orange-800: #ef6c00; + --md-orange-900: #e65100; + --md-orange-A100: #ffd180; + --md-orange-A200: #ffab40; + --md-orange-A400: #ff9100; + --md-orange-A700: #ff6d00; + --md-deep-orange-50: #fbe9e7; + --md-deep-orange-100: #ffccbc; + --md-deep-orange-200: #ffab91; + --md-deep-orange-300: #ff8a65; + --md-deep-orange-400: #ff7043; + --md-deep-orange-500: #ff5722; + --md-deep-orange-600: #f4511e; + --md-deep-orange-700: #e64a19; + --md-deep-orange-800: #d84315; + --md-deep-orange-900: #bf360c; + --md-deep-orange-A100: #ff9e80; + --md-deep-orange-A200: #ff6e40; + --md-deep-orange-A400: #ff3d00; + --md-deep-orange-A700: #dd2c00; + --md-brown-50: #efebe9; + --md-brown-100: #d7ccc8; + --md-brown-200: #bcaaa4; + --md-brown-300: #a1887f; + --md-brown-400: #8d6e63; + --md-brown-500: #795548; + --md-brown-600: #6d4c41; + --md-brown-700: #5d4037; + --md-brown-800: #4e342e; + --md-brown-900: #3e2723; + --md-grey-50: #fafafa; + --md-grey-100: #f5f5f5; + --md-grey-200: #eee; + --md-grey-300: #e0e0e0; + --md-grey-400: #bdbdbd; + --md-grey-500: #9e9e9e; + --md-grey-600: #757575; + --md-grey-700: #616161; + --md-grey-800: #424242; + --md-grey-900: #212121; + --md-blue-grey-50: #eceff1; + --md-blue-grey-100: #cfd8dc; + --md-blue-grey-200: #b0bec5; + --md-blue-grey-300: #90a4ae; + --md-blue-grey-400: #78909c; + --md-blue-grey-500: #607d8b; + --md-blue-grey-600: #546e7a; + --md-blue-grey-700: #455a64; + --md-blue-grey-800: #37474f; + --md-blue-grey-900: #263238; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2017, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| RenderedText +|----------------------------------------------------------------------------*/ + +:root { + /* This is the padding value to fill the gaps between lines containing spans with background color. */ + --jp-private-code-span-padding: calc( + (var(--jp-code-line-height) - 1) * var(--jp-code-font-size) / 2 + ); +} + +.jp-RenderedText { + text-align: left; + padding-left: var(--jp-code-padding); + line-height: var(--jp-code-line-height); + font-family: var(--jp-code-font-family); +} + +.jp-RenderedText pre, +.jp-RenderedJavaScript pre, +.jp-RenderedHTMLCommon pre { + color: var(--jp-content-font-color1); + font-size: var(--jp-code-font-size); + border: none; + margin: 0; + padding: 0; +} + +.jp-RenderedText pre a:link { + text-decoration: none; + color: var(--jp-content-link-color); +} + +.jp-RenderedText pre a:hover { + text-decoration: underline; + color: var(--jp-content-link-color); +} + +.jp-RenderedText pre a:visited { + text-decoration: none; + color: var(--jp-content-link-color); +} + +/* console foregrounds and backgrounds */ +.jp-RenderedText pre .ansi-black-fg { + color: #3e424d; +} + +.jp-RenderedText pre .ansi-red-fg { + color: #e75c58; +} + +.jp-RenderedText pre .ansi-green-fg { + color: #00a250; +} + +.jp-RenderedText pre .ansi-yellow-fg { + color: #ddb62b; +} + +.jp-RenderedText pre .ansi-blue-fg { + color: #208ffb; +} + +.jp-RenderedText pre .ansi-magenta-fg { + color: #d160c4; +} + +.jp-RenderedText pre .ansi-cyan-fg { + color: #60c6c8; +} + +.jp-RenderedText pre .ansi-white-fg { + color: #c5c1b4; +} + +.jp-RenderedText pre .ansi-black-bg { + background-color: #3e424d; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-red-bg { + background-color: #e75c58; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-green-bg { + background-color: #00a250; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-yellow-bg { + background-color: #ddb62b; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-blue-bg { + background-color: #208ffb; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-magenta-bg { + background-color: #d160c4; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-cyan-bg { + background-color: #60c6c8; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-white-bg { + background-color: #c5c1b4; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-black-intense-fg { + color: #282c36; +} + +.jp-RenderedText pre .ansi-red-intense-fg { + color: #b22b31; +} + +.jp-RenderedText pre .ansi-green-intense-fg { + color: #007427; +} + +.jp-RenderedText pre .ansi-yellow-intense-fg { + color: #b27d12; +} + +.jp-RenderedText pre .ansi-blue-intense-fg { + color: #0065ca; +} + +.jp-RenderedText pre .ansi-magenta-intense-fg { + color: #a03196; +} + +.jp-RenderedText pre .ansi-cyan-intense-fg { + color: #258f8f; +} + +.jp-RenderedText pre .ansi-white-intense-fg { + color: #a1a6b2; +} + +.jp-RenderedText pre .ansi-black-intense-bg { + background-color: #282c36; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-red-intense-bg { + background-color: #b22b31; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-green-intense-bg { + background-color: #007427; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-yellow-intense-bg { + background-color: #b27d12; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-blue-intense-bg { + background-color: #0065ca; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-magenta-intense-bg { + background-color: #a03196; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-cyan-intense-bg { + background-color: #258f8f; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-white-intense-bg { + background-color: #a1a6b2; + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-default-inverse-fg { + color: var(--jp-ui-inverse-font-color0); +} + +.jp-RenderedText pre .ansi-default-inverse-bg { + background-color: var(--jp-inverse-layout-color0); + padding: var(--jp-private-code-span-padding) 0; +} + +.jp-RenderedText pre .ansi-bold { + font-weight: bold; +} + +.jp-RenderedText pre .ansi-underline { + text-decoration: underline; +} + +.jp-RenderedText[data-mime-type='application/vnd.jupyter.stderr'] { + background: var(--jp-rendermime-error-background); + padding-top: var(--jp-code-padding); +} + +/*----------------------------------------------------------------------------- +| RenderedLatex +|----------------------------------------------------------------------------*/ + +.jp-RenderedLatex { + color: var(--jp-content-font-color1); + font-size: var(--jp-content-font-size1); + line-height: var(--jp-content-line-height); +} + +/* Left-justify outputs.*/ +.jp-OutputArea-output.jp-RenderedLatex { + padding: var(--jp-code-padding); + text-align: left; +} + +/*----------------------------------------------------------------------------- +| RenderedHTML +|----------------------------------------------------------------------------*/ + +.jp-RenderedHTMLCommon { + color: var(--jp-content-font-color1); + font-family: var(--jp-content-font-family); + font-size: var(--jp-content-font-size1); + line-height: var(--jp-content-line-height); + + /* Give a bit more R padding on Markdown text to keep line lengths reasonable */ + padding-right: 20px; +} + +.jp-RenderedHTMLCommon em { + font-style: italic; +} + +.jp-RenderedHTMLCommon strong { + font-weight: bold; +} + +.jp-RenderedHTMLCommon u { + text-decoration: underline; +} + +.jp-RenderedHTMLCommon a:link { + text-decoration: none; + color: var(--jp-content-link-color); +} + +.jp-RenderedHTMLCommon a:hover { + text-decoration: underline; + color: var(--jp-content-link-color); +} + +.jp-RenderedHTMLCommon a:visited { + text-decoration: none; + color: var(--jp-content-link-color); +} + +/* Headings */ + +.jp-RenderedHTMLCommon h1, +.jp-RenderedHTMLCommon h2, +.jp-RenderedHTMLCommon h3, +.jp-RenderedHTMLCommon h4, +.jp-RenderedHTMLCommon h5, +.jp-RenderedHTMLCommon h6 { + line-height: var(--jp-content-heading-line-height); + font-weight: var(--jp-content-heading-font-weight); + font-style: normal; + margin: var(--jp-content-heading-margin-top) 0 + var(--jp-content-heading-margin-bottom) 0; +} + +.jp-RenderedHTMLCommon h1:first-child, +.jp-RenderedHTMLCommon h2:first-child, +.jp-RenderedHTMLCommon h3:first-child, +.jp-RenderedHTMLCommon h4:first-child, +.jp-RenderedHTMLCommon h5:first-child, +.jp-RenderedHTMLCommon h6:first-child { + margin-top: calc(0.5 * var(--jp-content-heading-margin-top)); +} + +.jp-RenderedHTMLCommon h1:last-child, +.jp-RenderedHTMLCommon h2:last-child, +.jp-RenderedHTMLCommon h3:last-child, +.jp-RenderedHTMLCommon h4:last-child, +.jp-RenderedHTMLCommon h5:last-child, +.jp-RenderedHTMLCommon h6:last-child { + margin-bottom: calc(0.5 * var(--jp-content-heading-margin-bottom)); +} + +.jp-RenderedHTMLCommon h1 { + font-size: var(--jp-content-font-size5); +} + +.jp-RenderedHTMLCommon h2 { + font-size: var(--jp-content-font-size4); +} + +.jp-RenderedHTMLCommon h3 { + font-size: var(--jp-content-font-size3); +} + +.jp-RenderedHTMLCommon h4 { + font-size: var(--jp-content-font-size2); +} + +.jp-RenderedHTMLCommon h5 { + font-size: var(--jp-content-font-size1); +} + +.jp-RenderedHTMLCommon h6 { + font-size: var(--jp-content-font-size0); +} + +/* Lists */ + +/* stylelint-disable selector-max-type, selector-max-compound-selectors */ + +.jp-RenderedHTMLCommon ul:not(.list-inline), +.jp-RenderedHTMLCommon ol:not(.list-inline) { + padding-left: 2em; +} + +.jp-RenderedHTMLCommon ul { + list-style: disc; +} + +.jp-RenderedHTMLCommon ul ul { + list-style: square; +} + +.jp-RenderedHTMLCommon ul ul ul { + list-style: circle; +} + +.jp-RenderedHTMLCommon ol { + list-style: decimal; +} + +.jp-RenderedHTMLCommon ol ol { + list-style: upper-alpha; +} + +.jp-RenderedHTMLCommon ol ol ol { + list-style: lower-alpha; +} + +.jp-RenderedHTMLCommon ol ol ol ol { + list-style: lower-roman; +} + +.jp-RenderedHTMLCommon ol ol ol ol ol { + list-style: decimal; +} + +.jp-RenderedHTMLCommon ol, +.jp-RenderedHTMLCommon ul { + margin-bottom: 1em; +} + +.jp-RenderedHTMLCommon ul ul, +.jp-RenderedHTMLCommon ul ol, +.jp-RenderedHTMLCommon ol ul, +.jp-RenderedHTMLCommon ol ol { + margin-bottom: 0; +} + +/* stylelint-enable selector-max-type, selector-max-compound-selectors */ + +.jp-RenderedHTMLCommon hr { + color: var(--jp-border-color2); + background-color: var(--jp-border-color1); + margin-top: 1em; + margin-bottom: 1em; +} + +.jp-RenderedHTMLCommon > pre { + margin: 1.5em 2em; +} + +.jp-RenderedHTMLCommon pre, +.jp-RenderedHTMLCommon code { + border: 0; + background-color: var(--jp-layout-color0); + color: var(--jp-content-font-color1); + font-family: var(--jp-code-font-family); + font-size: inherit; + line-height: var(--jp-code-line-height); + padding: 0; + white-space: pre-wrap; +} + +.jp-RenderedHTMLCommon :not(pre) > code { + background-color: var(--jp-layout-color2); + padding: 1px 5px; +} + +/* Tables */ + +.jp-RenderedHTMLCommon table { + border-collapse: collapse; + border-spacing: 0; + border: none; + color: var(--jp-ui-font-color1); + font-size: var(--jp-ui-font-size1); + table-layout: fixed; + margin-left: auto; + margin-bottom: 1em; + margin-right: auto; +} + +.jp-RenderedHTMLCommon thead { + border-bottom: var(--jp-border-width) solid var(--jp-border-color1); + vertical-align: bottom; +} + +.jp-RenderedHTMLCommon td, +.jp-RenderedHTMLCommon th, +.jp-RenderedHTMLCommon tr { + vertical-align: middle; + padding: 0.5em; + line-height: normal; + white-space: normal; + max-width: none; + border: none; +} + +.jp-RenderedMarkdown.jp-RenderedHTMLCommon td, +.jp-RenderedMarkdown.jp-RenderedHTMLCommon th { + max-width: none; +} + +:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon td, +:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon th, +:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon tr { + text-align: right; +} + +.jp-RenderedHTMLCommon th { + font-weight: bold; +} + +.jp-RenderedHTMLCommon tbody tr:nth-child(odd) { + background: var(--jp-layout-color0); +} + +.jp-RenderedHTMLCommon tbody tr:nth-child(even) { + background: var(--jp-rendermime-table-row-background); +} + +.jp-RenderedHTMLCommon tbody tr:hover { + background: var(--jp-rendermime-table-row-hover-background); +} + +.jp-RenderedHTMLCommon p { + text-align: left; + margin: 0; + margin-bottom: 1em; +} + +.jp-RenderedHTMLCommon img { + -moz-force-broken-image-icon: 1; +} + +/* Restrict to direct children as other images could be nested in other content. */ +.jp-RenderedHTMLCommon > img { + display: block; + margin-left: 0; + margin-right: 0; + margin-bottom: 1em; +} + +/* Change color behind transparent images if they need it... */ +[data-jp-theme-light='false'] .jp-RenderedImage img.jp-needs-light-background { + background-color: var(--jp-inverse-layout-color1); +} + +[data-jp-theme-light='true'] .jp-RenderedImage img.jp-needs-dark-background { + background-color: var(--jp-inverse-layout-color1); +} + +.jp-RenderedHTMLCommon img, +.jp-RenderedImage img, +.jp-RenderedHTMLCommon svg, +.jp-RenderedSVG svg { + max-width: 100%; + height: auto; +} + +.jp-RenderedHTMLCommon img.jp-mod-unconfined, +.jp-RenderedImage img.jp-mod-unconfined, +.jp-RenderedHTMLCommon svg.jp-mod-unconfined, +.jp-RenderedSVG svg.jp-mod-unconfined { + max-width: none; +} + +.jp-RenderedHTMLCommon .alert { + padding: var(--jp-notebook-padding); + border: var(--jp-border-width) solid transparent; + border-radius: var(--jp-border-radius); + margin-bottom: 1em; +} + +.jp-RenderedHTMLCommon .alert-info { + color: var(--jp-info-color0); + background-color: var(--jp-info-color3); + border-color: var(--jp-info-color2); +} + +.jp-RenderedHTMLCommon .alert-info hr { + border-color: var(--jp-info-color3); +} + +.jp-RenderedHTMLCommon .alert-info > p:last-child, +.jp-RenderedHTMLCommon .alert-info > ul:last-child { + margin-bottom: 0; +} + +.jp-RenderedHTMLCommon .alert-warning { + color: var(--jp-warn-color0); + background-color: var(--jp-warn-color3); + border-color: var(--jp-warn-color2); +} + +.jp-RenderedHTMLCommon .alert-warning hr { + border-color: var(--jp-warn-color3); +} + +.jp-RenderedHTMLCommon .alert-warning > p:last-child, +.jp-RenderedHTMLCommon .alert-warning > ul:last-child { + margin-bottom: 0; +} + +.jp-RenderedHTMLCommon .alert-success { + color: var(--jp-success-color0); + background-color: var(--jp-success-color3); + border-color: var(--jp-success-color2); +} + +.jp-RenderedHTMLCommon .alert-success hr { + border-color: var(--jp-success-color3); +} + +.jp-RenderedHTMLCommon .alert-success > p:last-child, +.jp-RenderedHTMLCommon .alert-success > ul:last-child { + margin-bottom: 0; +} + +.jp-RenderedHTMLCommon .alert-danger { + color: var(--jp-error-color0); + background-color: var(--jp-error-color3); + border-color: var(--jp-error-color2); +} + +.jp-RenderedHTMLCommon .alert-danger hr { + border-color: var(--jp-error-color3); +} + +.jp-RenderedHTMLCommon .alert-danger > p:last-child, +.jp-RenderedHTMLCommon .alert-danger > ul:last-child { + margin-bottom: 0; +} + +.jp-RenderedHTMLCommon blockquote { + margin: 1em 2em; + padding: 0 1em; + border-left: 5px solid var(--jp-border-color2); +} + +a.jp-InternalAnchorLink { + visibility: hidden; + margin-left: 8px; + color: var(--md-blue-800); +} + +h1:hover .jp-InternalAnchorLink, +h2:hover .jp-InternalAnchorLink, +h3:hover .jp-InternalAnchorLink, +h4:hover .jp-InternalAnchorLink, +h5:hover .jp-InternalAnchorLink, +h6:hover .jp-InternalAnchorLink { + visibility: visible; +} + +.jp-RenderedHTMLCommon kbd { + background-color: var(--jp-rendermime-table-row-background); + border: 1px solid var(--jp-border-color0); + border-bottom-color: var(--jp-border-color2); + border-radius: 3px; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); + display: inline-block; + font-size: var(--jp-ui-font-size0); + line-height: 1em; + padding: 0.2em 0.5em; +} + +/* Most direct children of .jp-RenderedHTMLCommon have a margin-bottom of 1.0. + * At the bottom of cells this is a bit too much as there is also spacing + * between cells. Going all the way to 0 gets too tight between markdown and + * code cells. + */ +.jp-RenderedHTMLCommon > *:last-child { + margin-bottom: 0.5em; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Copyright (c) 2014-2017, PhosphorJS Contributors +| +| Distributed under the terms of the BSD 3-Clause License. +| +| The full license is in the file LICENSE, distributed with this software. +|----------------------------------------------------------------------------*/ + +.lm-cursor-backdrop { + position: fixed; + width: 200px; + height: 200px; + margin-top: -100px; + margin-left: -100px; + will-change: transform; + z-index: 100; +} + +.lm-mod-drag-image { + will-change: transform; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.jp-lineFormSearch { + padding: 4px 12px; + background-color: var(--jp-layout-color2); + box-shadow: var(--jp-toolbar-box-shadow); + z-index: 2; + font-size: var(--jp-ui-font-size1); +} + +.jp-lineFormCaption { + font-size: var(--jp-ui-font-size0); + line-height: var(--jp-ui-font-size1); + margin-top: 4px; + color: var(--jp-ui-font-color0); +} + +.jp-baseLineForm { + border: none; + border-radius: 0; + position: absolute; + background-size: 16px; + background-repeat: no-repeat; + background-position: center; + outline: none; +} + +.jp-lineFormButtonContainer { + top: 4px; + right: 8px; + height: 24px; + padding: 0 12px; + width: 12px; +} + +.jp-lineFormButtonIcon { + top: 0; + right: 0; + background-color: var(--jp-brand-color1); + height: 100%; + width: 100%; + box-sizing: border-box; + padding: 4px 6px; +} + +.jp-lineFormButton { + top: 0; + right: 0; + background-color: transparent; + height: 100%; + width: 100%; + box-sizing: border-box; +} + +.jp-lineFormWrapper { + overflow: hidden; + padding: 0 8px; + border: 1px solid var(--jp-border-color0); + background-color: var(--jp-input-active-background); + height: 22px; +} + +.jp-lineFormWrapperFocusWithin { + border: var(--jp-border-width) solid var(--md-blue-500); + box-shadow: inset 0 0 4px var(--md-blue-300); +} + +.jp-lineFormInput { + background: transparent; + width: 200px; + height: 100%; + border: none; + outline: none; + color: var(--jp-ui-font-color0); + line-height: 28px; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) 2014-2016, Jupyter Development Team. +| +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-JSONEditor { + display: flex; + flex-direction: column; + width: 100%; +} + +.jp-JSONEditor-host { + flex: 1 1 auto; + border: var(--jp-border-width) solid var(--jp-input-border-color); + border-radius: 0; + background: var(--jp-layout-color0); + min-height: 50px; + padding: 1px; +} + +.jp-JSONEditor.jp-mod-error .jp-JSONEditor-host { + border-color: red; + outline-color: red; +} + +.jp-JSONEditor-header { + display: flex; + flex: 1 0 auto; + padding: 0 0 0 12px; +} + +.jp-JSONEditor-header label { + flex: 0 0 auto; +} + +.jp-JSONEditor-commitButton { + height: 16px; + width: 16px; + background-size: 18px; + background-repeat: no-repeat; + background-position: center; +} + +.jp-JSONEditor-host.jp-mod-focused { + background-color: var(--jp-input-active-background); + border: 1px solid var(--jp-input-active-border-color); + box-shadow: var(--jp-input-box-shadow); +} + +.jp-Editor.jp-mod-dropTarget { + border: var(--jp-border-width) solid var(--jp-input-active-border-color); + box-shadow: var(--jp-input-box-shadow); +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ +.jp-DocumentSearch-input { + border: none; + outline: none; + color: var(--jp-ui-font-color0); + font-size: var(--jp-ui-font-size1); + background-color: var(--jp-layout-color0); + font-family: var(--jp-ui-font-family); + padding: 2px 1px; + resize: none; +} + +.jp-DocumentSearch-overlay { + position: absolute; + background-color: var(--jp-toolbar-background); + border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color); + border-left: var(--jp-border-width) solid var(--jp-toolbar-border-color); + top: 0; + right: 0; + z-index: 7; + min-width: 405px; + padding: 2px; + font-size: var(--jp-ui-font-size1); + + --jp-private-document-search-button-height: 20px; +} + +.jp-DocumentSearch-overlay button { + background-color: var(--jp-toolbar-background); + outline: 0; +} + +.jp-DocumentSearch-overlay button:hover { + background-color: var(--jp-layout-color2); +} + +.jp-DocumentSearch-overlay button:active { + background-color: var(--jp-layout-color3); +} + +.jp-DocumentSearch-overlay-row { + display: flex; + align-items: center; + margin-bottom: 2px; +} + +.jp-DocumentSearch-button-content { + display: inline-block; + cursor: pointer; + box-sizing: border-box; + width: 100%; + height: 100%; +} + +.jp-DocumentSearch-button-content svg { + width: 100%; + height: 100%; +} + +.jp-DocumentSearch-input-wrapper { + border: var(--jp-border-width) solid var(--jp-border-color0); + display: flex; + background-color: var(--jp-layout-color0); + margin: 2px; +} + +.jp-DocumentSearch-input-wrapper:focus-within { + border-color: var(--jp-cell-editor-active-border-color); +} + +.jp-DocumentSearch-toggle-wrapper, +.jp-DocumentSearch-button-wrapper { + all: initial; + overflow: hidden; + display: inline-block; + border: none; + box-sizing: border-box; +} + +.jp-DocumentSearch-toggle-wrapper { + width: 14px; + height: 14px; +} + +.jp-DocumentSearch-button-wrapper { + width: var(--jp-private-document-search-button-height); + height: var(--jp-private-document-search-button-height); +} + +.jp-DocumentSearch-toggle-wrapper:focus, +.jp-DocumentSearch-button-wrapper:focus { + outline: var(--jp-border-width) solid + var(--jp-cell-editor-active-border-color); + outline-offset: -1px; +} + +.jp-DocumentSearch-toggle-wrapper, +.jp-DocumentSearch-button-wrapper, +.jp-DocumentSearch-button-content:focus { + outline: none; +} + +.jp-DocumentSearch-toggle-placeholder { + width: 5px; +} + +.jp-DocumentSearch-input-button::before { + display: block; + padding-top: 100%; +} + +.jp-DocumentSearch-input-button-off { + opacity: var(--jp-search-toggle-off-opacity); +} + +.jp-DocumentSearch-input-button-off:hover { + opacity: var(--jp-search-toggle-hover-opacity); +} + +.jp-DocumentSearch-input-button-on { + opacity: var(--jp-search-toggle-on-opacity); +} + +.jp-DocumentSearch-index-counter { + padding-left: 10px; + padding-right: 10px; + user-select: none; + min-width: 35px; + display: inline-block; +} + +.jp-DocumentSearch-up-down-wrapper { + display: inline-block; + padding-right: 2px; + margin-left: auto; + white-space: nowrap; +} + +.jp-DocumentSearch-spacer { + margin-left: auto; +} + +.jp-DocumentSearch-up-down-wrapper button { + outline: 0; + border: none; + width: var(--jp-private-document-search-button-height); + height: var(--jp-private-document-search-button-height); + vertical-align: middle; + margin: 1px 5px 2px; +} + +.jp-DocumentSearch-up-down-button:hover { + background-color: var(--jp-layout-color2); +} + +.jp-DocumentSearch-up-down-button:active { + background-color: var(--jp-layout-color3); +} + +.jp-DocumentSearch-filter-button { + border-radius: var(--jp-border-radius); +} + +.jp-DocumentSearch-filter-button:hover { + background-color: var(--jp-layout-color2); +} + +.jp-DocumentSearch-filter-button-enabled { + background-color: var(--jp-layout-color2); +} + +.jp-DocumentSearch-filter-button-enabled:hover { + background-color: var(--jp-layout-color3); +} + +.jp-DocumentSearch-search-options { + padding: 0 8px; + margin-left: 3px; + width: 100%; + display: grid; + justify-content: start; + grid-template-columns: 1fr 1fr; + align-items: center; + justify-items: stretch; +} + +.jp-DocumentSearch-search-filter-disabled { + color: var(--jp-ui-font-color2); +} + +.jp-DocumentSearch-search-filter { + display: flex; + align-items: center; + user-select: none; +} + +.jp-DocumentSearch-regex-error { + color: var(--jp-error-color0); +} + +.jp-DocumentSearch-replace-button-wrapper { + overflow: hidden; + display: inline-block; + box-sizing: border-box; + border: var(--jp-border-width) solid var(--jp-border-color0); + margin: auto 2px; + padding: 1px 4px; + height: calc(var(--jp-private-document-search-button-height) + 2px); +} + +.jp-DocumentSearch-replace-button-wrapper:focus { + border: var(--jp-border-width) solid var(--jp-cell-editor-active-border-color); +} + +.jp-DocumentSearch-replace-button { + display: inline-block; + text-align: center; + cursor: pointer; + box-sizing: border-box; + color: var(--jp-ui-font-color1); + + /* height - 2 * (padding of wrapper) */ + line-height: calc(var(--jp-private-document-search-button-height) - 2px); + width: 100%; + height: 100%; +} + +.jp-DocumentSearch-replace-button:focus { + outline: none; +} + +.jp-DocumentSearch-replace-wrapper-class { + margin-left: 14px; + display: flex; +} + +.jp-DocumentSearch-replace-toggle { + border: none; + background-color: var(--jp-toolbar-background); + border-radius: var(--jp-border-radius); +} + +.jp-DocumentSearch-replace-toggle:hover { + background-color: var(--jp-layout-color2); +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.cm-editor { + line-height: var(--jp-code-line-height); + font-size: var(--jp-code-font-size); + font-family: var(--jp-code-font-family); + border: 0; + border-radius: 0; + height: auto; + + /* Changed to auto to autogrow */ +} + +.cm-editor pre { + padding: 0 var(--jp-code-padding); +} + +.jp-CodeMirrorEditor[data-type='inline'] .cm-dialog { + background-color: var(--jp-layout-color0); + color: var(--jp-content-font-color1); +} + +.jp-CodeMirrorEditor { + cursor: text; +} + +/* When zoomed out 67% and 33% on a screen of 1440 width x 900 height */ +@media screen and (min-width: 2138px) and (max-width: 4319px) { + .jp-CodeMirrorEditor[data-type='inline'] .cm-cursor { + border-left: var(--jp-code-cursor-width1) solid + var(--jp-editor-cursor-color); + } +} + +/* When zoomed out less than 33% */ +@media screen and (min-width: 4320px) { + .jp-CodeMirrorEditor[data-type='inline'] .cm-cursor { + border-left: var(--jp-code-cursor-width2) solid + var(--jp-editor-cursor-color); + } +} + +.cm-editor.jp-mod-readOnly .cm-cursor { + display: none; +} + +.jp-CollaboratorCursor { + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: none; + border-bottom: 3px solid; + background-clip: content-box; + margin-left: -5px; + margin-right: -5px; +} + +.cm-searching, +.cm-searching span { + /* `.cm-searching span`: we need to override syntax highlighting */ + background-color: var(--jp-search-unselected-match-background-color); + color: var(--jp-search-unselected-match-color); +} + +.cm-searching::selection, +.cm-searching span::selection { + background-color: var(--jp-search-unselected-match-background-color); + color: var(--jp-search-unselected-match-color); +} + +.jp-current-match > .cm-searching, +.jp-current-match > .cm-searching span, +.cm-searching > .jp-current-match, +.cm-searching > .jp-current-match span { + background-color: var(--jp-search-selected-match-background-color); + color: var(--jp-search-selected-match-color); +} + +.jp-current-match > .cm-searching::selection, +.cm-searching > .jp-current-match::selection, +.jp-current-match > .cm-searching span::selection { + background-color: var(--jp-search-selected-match-background-color); + color: var(--jp-search-selected-match-color); +} + +.cm-trailingspace { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAsElEQVQIHQGlAFr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7+r3zKmT0/+pk9P/7+r3zAAAAAAAAAAABAAAAAAAAAAA6OPzM+/q9wAAAAAA6OPzMwAAAAAAAAAAAgAAAAAAAAAAGR8NiRQaCgAZIA0AGR8NiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQyoYJ/SY80UAAAAASUVORK5CYII=); + background-position: center left; + background-repeat: repeat-x; +} + +.jp-CollaboratorCursor-hover { + position: absolute; + z-index: 1; + transform: translateX(-50%); + color: white; + border-radius: 3px; + padding-left: 4px; + padding-right: 4px; + padding-top: 1px; + padding-bottom: 1px; + text-align: center; + font-size: var(--jp-ui-font-size1); + white-space: nowrap; +} + +.jp-CodeMirror-ruler { + border-left: 1px dashed var(--jp-border-color2); +} + +/* Styles for shared cursors (remote cursor locations and selected ranges) */ +.jp-CodeMirrorEditor .cm-ySelectionCaret { + position: relative; + border-left: 1px solid black; + margin-left: -1px; + margin-right: -1px; + box-sizing: border-box; +} + +.jp-CodeMirrorEditor .cm-ySelectionCaret > .cm-ySelectionInfo { + white-space: nowrap; + position: absolute; + top: -1.15em; + padding-bottom: 0.05em; + left: -1px; + font-size: 0.95em; + font-family: var(--jp-ui-font-family); + font-weight: bold; + line-height: normal; + user-select: none; + color: white; + padding-left: 2px; + padding-right: 2px; + z-index: 101; + transition: opacity 0.3s ease-in-out; +} + +.jp-CodeMirrorEditor .cm-ySelectionInfo { + transition-delay: 0.7s; + opacity: 0; +} + +.jp-CodeMirrorEditor .cm-ySelectionCaret:hover > .cm-ySelectionInfo { + opacity: 1; + transition-delay: 0s; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-MimeDocument { + outline: none; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Variables +|----------------------------------------------------------------------------*/ + +:root { + --jp-private-filebrowser-button-height: 28px; + --jp-private-filebrowser-button-width: 48px; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-FileBrowser .jp-SidePanel-content { + display: flex; + flex-direction: column; +} + +.jp-FileBrowser-toolbar.jp-Toolbar { + flex-wrap: wrap; + row-gap: 12px; + border-bottom: none; + height: auto; + margin: 8px 12px 0; + box-shadow: none; + padding: 0; + justify-content: flex-start; +} + +.jp-FileBrowser-Panel { + flex: 1 1 auto; + display: flex; + flex-direction: column; +} + +.jp-BreadCrumbs { + flex: 0 0 auto; + margin: 8px 12px; +} + +.jp-BreadCrumbs-item { + margin: 0 2px; + padding: 0 2px; + border-radius: var(--jp-border-radius); + cursor: pointer; +} + +.jp-BreadCrumbs-item:hover { + background-color: var(--jp-layout-color2); +} + +.jp-BreadCrumbs-item:first-child { + margin-left: 0; +} + +.jp-BreadCrumbs-item.jp-mod-dropTarget { + background-color: var(--jp-brand-color2); + opacity: 0.7; +} + +/*----------------------------------------------------------------------------- +| Buttons +|----------------------------------------------------------------------------*/ + +.jp-FileBrowser-toolbar > .jp-Toolbar-item { + flex: 0 0 auto; + padding-left: 0; + padding-right: 2px; + align-items: center; + height: unset; +} + +.jp-FileBrowser-toolbar > .jp-Toolbar-item .jp-ToolbarButtonComponent { + width: 40px; +} + +/*----------------------------------------------------------------------------- +| Other styles +|----------------------------------------------------------------------------*/ + +.jp-FileDialog.jp-mod-conflict input { + color: var(--jp-error-color1); +} + +.jp-FileDialog .jp-new-name-title { + margin-top: 12px; +} + +.jp-LastModified-hidden { + display: none; +} + +.jp-FileSize-hidden { + display: none; +} + +.jp-FileBrowser .lm-AccordionPanel > h3:first-child { + display: none; +} + +/*----------------------------------------------------------------------------- +| DirListing +|----------------------------------------------------------------------------*/ + +.jp-DirListing { + flex: 1 1 auto; + display: flex; + flex-direction: column; + outline: 0; +} + +.jp-DirListing-header { + flex: 0 0 auto; + display: flex; + flex-direction: row; + align-items: center; + overflow: hidden; + border-top: var(--jp-border-width) solid var(--jp-border-color2); + border-bottom: var(--jp-border-width) solid var(--jp-border-color1); + box-shadow: var(--jp-toolbar-box-shadow); + z-index: 2; +} + +.jp-DirListing-headerItem { + padding: 4px 12px 2px; + font-weight: 500; +} + +.jp-DirListing-headerItem:hover { + background: var(--jp-layout-color2); +} + +.jp-DirListing-headerItem.jp-id-name { + flex: 1 0 84px; +} + +.jp-DirListing-headerItem.jp-id-modified { + flex: 0 0 112px; + border-left: var(--jp-border-width) solid var(--jp-border-color2); + text-align: right; +} + +.jp-DirListing-headerItem.jp-id-filesize { + flex: 0 0 75px; + border-left: var(--jp-border-width) solid var(--jp-border-color2); + text-align: right; +} + +.jp-id-narrow { + display: none; + flex: 0 0 5px; + padding: 4px; + border-left: var(--jp-border-width) solid var(--jp-border-color2); + text-align: right; + color: var(--jp-border-color2); +} + +.jp-DirListing-narrow .jp-id-narrow { + display: block; +} + +.jp-DirListing-narrow .jp-id-modified, +.jp-DirListing-narrow .jp-DirListing-itemModified { + display: none; +} + +.jp-DirListing-headerItem.jp-mod-selected { + font-weight: 600; +} + +/* increase specificity to override bundled default */ +.jp-DirListing-content { + flex: 1 1 auto; + margin: 0; + padding: 0; + list-style-type: none; + overflow: auto; + background-color: var(--jp-layout-color1); +} + +.jp-DirListing-content mark { + color: var(--jp-ui-font-color0); + background-color: transparent; + font-weight: bold; +} + +.jp-DirListing-content .jp-DirListing-item.jp-mod-selected mark { + color: var(--jp-ui-inverse-font-color0); +} + +/* Style the directory listing content when a user drops a file to upload */ +.jp-DirListing.jp-mod-native-drop .jp-DirListing-content { + outline: 5px dashed rgba(128, 128, 128, 0.5); + outline-offset: -10px; + cursor: copy; +} + +.jp-DirListing-item { + display: flex; + flex-direction: row; + align-items: center; + padding: 4px 12px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.jp-DirListing-checkboxWrapper { + /* Increases hit area of checkbox. */ + padding: 4px; +} + +.jp-DirListing-header + .jp-DirListing-checkboxWrapper + + .jp-DirListing-headerItem { + padding-left: 4px; +} + +.jp-DirListing-content .jp-DirListing-checkboxWrapper { + position: relative; + left: -4px; + margin: -4px 0 -4px -8px; +} + +.jp-DirListing-checkboxWrapper.jp-mod-visible { + visibility: visible; +} + +/* For devices that support hovering, hide checkboxes until hovered, selected... +*/ +@media (hover: hover) { + .jp-DirListing-checkboxWrapper { + visibility: hidden; + } + + .jp-DirListing-item:hover .jp-DirListing-checkboxWrapper, + .jp-DirListing-item.jp-mod-selected .jp-DirListing-checkboxWrapper { + visibility: visible; + } +} + +.jp-DirListing-item[data-is-dot] { + opacity: 75%; +} + +.jp-DirListing-item.jp-mod-selected { + color: var(--jp-ui-inverse-font-color1); + background: var(--jp-brand-color1); +} + +.jp-DirListing-item.jp-mod-dropTarget { + background: var(--jp-brand-color3); +} + +.jp-DirListing-item:hover:not(.jp-mod-selected) { + background: var(--jp-layout-color2); +} + +.jp-DirListing-itemIcon { + flex: 0 0 20px; + margin-right: 4px; +} + +.jp-DirListing-itemText { + flex: 1 0 64px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + user-select: none; +} + +.jp-DirListing-itemText:focus { + outline-width: 2px; + outline-color: var(--jp-inverse-layout-color1); + outline-style: solid; + outline-offset: 1px; +} + +.jp-DirListing-item.jp-mod-selected .jp-DirListing-itemText:focus { + outline-color: var(--jp-layout-color1); +} + +.jp-DirListing-itemModified { + flex: 0 0 125px; + text-align: right; +} + +.jp-DirListing-itemFileSize { + flex: 0 0 90px; + text-align: right; +} + +.jp-DirListing-editor { + flex: 1 0 64px; + outline: none; + border: none; + color: var(--jp-ui-font-color1); + background-color: var(--jp-layout-color1); +} + +.jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon::before { + color: var(--jp-success-color1); + content: '\25CF'; + font-size: 8px; + position: absolute; + left: -8px; +} + +.jp-DirListing-item.jp-mod-running.jp-mod-selected + .jp-DirListing-itemIcon::before { + color: var(--jp-ui-inverse-font-color1); +} + +.jp-DirListing-item.lm-mod-drag-image, +.jp-DirListing-item.jp-mod-selected.lm-mod-drag-image { + font-size: var(--jp-ui-font-size1); + padding-left: 4px; + margin-left: 4px; + width: 160px; + background-color: var(--jp-ui-inverse-font-color2); + box-shadow: var(--jp-elevation-z2); + border-radius: 0; + color: var(--jp-ui-font-color1); + transform: translateX(-40%) translateY(-58%); +} + +.jp-Document { + min-width: 120px; + min-height: 120px; + outline: none; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Main OutputArea +| OutputArea has a list of Outputs +|----------------------------------------------------------------------------*/ + +.jp-OutputArea { + overflow-y: auto; +} + +.jp-OutputArea-child { + display: table; + table-layout: fixed; + width: 100%; + overflow: hidden; +} + +.jp-OutputPrompt { + width: var(--jp-cell-prompt-width); + color: var(--jp-cell-outprompt-font-color); + font-family: var(--jp-cell-prompt-font-family); + padding: var(--jp-code-padding); + letter-spacing: var(--jp-cell-prompt-letter-spacing); + line-height: var(--jp-code-line-height); + font-size: var(--jp-code-font-size); + border: var(--jp-border-width) solid transparent; + opacity: var(--jp-cell-prompt-opacity); + + /* Right align prompt text, don't wrap to handle large prompt numbers */ + text-align: right; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + /* Disable text selection */ + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.jp-OutputArea-prompt { + display: table-cell; + vertical-align: top; +} + +.jp-OutputArea-output { + display: table-cell; + width: 100%; + height: auto; + overflow: auto; + user-select: text; + -moz-user-select: text; + -webkit-user-select: text; + -ms-user-select: text; +} + +.jp-OutputArea .jp-RenderedText { + padding-left: 1ch; +} + +/** + * Prompt overlay. + */ + +.jp-OutputArea-promptOverlay { + position: absolute; + top: 0; + width: var(--jp-cell-prompt-width); + height: 100%; + opacity: 0.5; +} + +.jp-OutputArea-promptOverlay:hover { + background: var(--jp-layout-color2); + box-shadow: inset 0 0 1px var(--jp-inverse-layout-color0); + cursor: zoom-out; +} + +.jp-mod-outputsScrolled .jp-OutputArea-promptOverlay:hover { + cursor: zoom-in; +} + +/** + * Isolated output. + */ +.jp-OutputArea-output.jp-mod-isolated { + width: 100%; + display: block; +} + +/* +When drag events occur, `lm-mod-override-cursor` is added to the body. +Because iframes steal all cursor events, the following two rules are necessary +to suppress pointer events while resize drags are occurring. There may be a +better solution to this problem. +*/ +body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated { + position: relative; +} + +body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: transparent; +} + +/* pre */ + +.jp-OutputArea-output pre { + border: none; + margin: 0; + padding: 0; + overflow-x: auto; + overflow-y: auto; + word-break: break-all; + word-wrap: break-word; + white-space: pre-wrap; +} + +/* tables */ + +.jp-OutputArea-output.jp-RenderedHTMLCommon table { + margin-left: 0; + margin-right: 0; +} + +/* description lists */ + +.jp-OutputArea-output dl, +.jp-OutputArea-output dt, +.jp-OutputArea-output dd { + display: block; +} + +.jp-OutputArea-output dl { + width: 100%; + overflow: hidden; + padding: 0; + margin: 0; +} + +.jp-OutputArea-output dt { + font-weight: bold; + float: left; + width: 20%; + padding: 0; + margin: 0; +} + +.jp-OutputArea-output dd { + float: left; + width: 80%; + padding: 0; + margin: 0; +} + +.jp-TrimmedOutputs pre { + background: var(--jp-layout-color3); + font-size: calc(var(--jp-code-font-size) * 1.4); + text-align: center; + text-transform: uppercase; +} + +/* Hide the gutter in case of + * - nested output areas (e.g. in the case of output widgets) + * - mirrored output areas + */ +.jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt { + display: none; +} + +/* Hide empty lines in the output area, for instance due to cleared widgets */ +.jp-OutputArea-prompt:empty { + padding: 0; + border: 0; +} + +/*----------------------------------------------------------------------------- +| executeResult is added to any Output-result for the display of the object +| returned by a cell +|----------------------------------------------------------------------------*/ + +.jp-OutputArea-output.jp-OutputArea-executeResult { + margin-left: 0; + width: 100%; +} + +/* Text output with the Out[] prompt needs a top padding to match the + * alignment of the Out[] prompt itself. + */ +.jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output { + padding-top: var(--jp-code-padding); + border-top: var(--jp-border-width) solid transparent; +} + +/*----------------------------------------------------------------------------- +| The Stdin output +|----------------------------------------------------------------------------*/ + +.jp-Stdin-prompt { + color: var(--jp-content-font-color0); + padding-right: var(--jp-code-padding); + vertical-align: baseline; + flex: 0 0 auto; +} + +.jp-Stdin-input { + font-family: var(--jp-code-font-family); + font-size: inherit; + color: inherit; + background-color: inherit; + width: 42%; + min-width: 200px; + + /* make sure input baseline aligns with prompt */ + vertical-align: baseline; + + /* padding + margin = 0.5em between prompt and cursor */ + padding: 0 0.25em; + margin: 0 0.25em; + flex: 0 0 70%; +} + +.jp-Stdin-input::placeholder { + opacity: 0; +} + +.jp-Stdin-input:focus { + box-shadow: none; +} + +.jp-Stdin-input:focus::placeholder { + opacity: 1; +} + +/*----------------------------------------------------------------------------- +| Output Area View +|----------------------------------------------------------------------------*/ + +.jp-LinkedOutputView .jp-OutputArea { + height: 100%; + display: block; +} + +.jp-LinkedOutputView .jp-OutputArea-output:only-child { + height: 100%; +} + +/*----------------------------------------------------------------------------- +| Printing +|----------------------------------------------------------------------------*/ + +@media print { + .jp-OutputArea-child { + break-inside: avoid-page; + } +} + +/*----------------------------------------------------------------------------- +| Mobile +|----------------------------------------------------------------------------*/ +@media only screen and (max-width: 760px) { + .jp-OutputPrompt { + display: table-row; + text-align: left; + } + + .jp-OutputArea-child .jp-OutputArea-output { + display: table-row; + margin-left: var(--jp-notebook-padding); + } +} + +/* Trimmed outputs warning */ +.jp-TrimmedOutputs > a { + margin: 10px; + text-decoration: none; + cursor: pointer; +} + +.jp-TrimmedOutputs > a:hover { + text-decoration: none; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Table of Contents +|----------------------------------------------------------------------------*/ + +:root { + --jp-private-toc-active-width: 4px; +} + +.jp-TableOfContents { + display: flex; + flex-direction: column; + background: var(--jp-layout-color1); + color: var(--jp-ui-font-color1); + font-size: var(--jp-ui-font-size1); + height: 100%; +} + +.jp-TableOfContents-placeholder { + text-align: center; +} + +.jp-TableOfContents-placeholderContent { + color: var(--jp-content-font-color2); + padding: 8px; +} + +.jp-TableOfContents-placeholderContent > h3 { + margin-bottom: var(--jp-content-heading-margin-bottom); +} + +.jp-TableOfContents .jp-SidePanel-content { + overflow-y: auto; +} + +.jp-TableOfContents-tree { + margin: 4px; +} + +.jp-TableOfContents ol { + list-style-type: none; +} + +/* stylelint-disable-next-line selector-max-type */ +.jp-TableOfContents li > ol { + /* Align left border with triangle icon center */ + padding-left: 11px; +} + +.jp-TableOfContents-content { + /* left margin for the active heading indicator */ + margin: 0 0 0 var(--jp-private-toc-active-width); + padding: 0; + background-color: var(--jp-layout-color1); +} + +.jp-tocItem { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.jp-tocItem-heading { + display: flex; + cursor: pointer; +} + +.jp-tocItem-heading:hover { + background-color: var(--jp-layout-color2); +} + +.jp-tocItem-content { + display: block; + padding: 4px 0; + white-space: nowrap; + text-overflow: ellipsis; + overflow-x: hidden; +} + +.jp-tocItem-collapser { + height: 20px; + margin: 2px 2px 0; + padding: 0; + background: none; + border: none; + cursor: pointer; +} + +.jp-tocItem-collapser:hover { + background-color: var(--jp-layout-color3); +} + +/* Active heading indicator */ + +.jp-tocItem-heading::before { + content: ' '; + background: transparent; + width: var(--jp-private-toc-active-width); + height: 24px; + position: absolute; + left: 0; + border-radius: var(--jp-border-radius); +} + +.jp-tocItem-heading.jp-tocItem-active::before { + background-color: var(--jp-brand-color1); +} + +.jp-tocItem-heading:hover.jp-tocItem-active::before { + background: var(--jp-brand-color0); + opacity: 1; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +.jp-Collapser { + flex: 0 0 var(--jp-cell-collapser-width); + padding: 0; + margin: 0; + border: none; + outline: none; + background: transparent; + border-radius: var(--jp-border-radius); + opacity: 1; +} + +.jp-Collapser-child { + display: block; + width: 100%; + box-sizing: border-box; + + /* height: 100% doesn't work because the height of its parent is computed from content */ + position: absolute; + top: 0; + bottom: 0; +} + +/*----------------------------------------------------------------------------- +| Printing +|----------------------------------------------------------------------------*/ + +/* +Hiding collapsers in print mode. + +Note: input and output wrappers have "display: block" propery in print mode. +*/ + +@media print { + .jp-Collapser { + display: none; + } +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Header/Footer +|----------------------------------------------------------------------------*/ + +/* Hidden by zero height by default */ +.jp-CellHeader, +.jp-CellFooter { + height: 0; + width: 100%; + padding: 0; + margin: 0; + border: none; + outline: none; + background: transparent; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Input +|----------------------------------------------------------------------------*/ + +/* All input areas */ +.jp-InputArea { + display: table; + table-layout: fixed; + width: 100%; + overflow: hidden; +} + +.jp-InputArea-editor { + display: table-cell; + overflow: hidden; + vertical-align: top; + + /* This is the non-active, default styling */ + border: var(--jp-border-width) solid var(--jp-cell-editor-border-color); + border-radius: 0; + background: var(--jp-cell-editor-background); +} + +.jp-InputPrompt { + display: table-cell; + vertical-align: top; + width: var(--jp-cell-prompt-width); + color: var(--jp-cell-inprompt-font-color); + font-family: var(--jp-cell-prompt-font-family); + padding: var(--jp-code-padding); + letter-spacing: var(--jp-cell-prompt-letter-spacing); + opacity: var(--jp-cell-prompt-opacity); + line-height: var(--jp-code-line-height); + font-size: var(--jp-code-font-size); + border: var(--jp-border-width) solid transparent; + + /* Right align prompt text, don't wrap to handle large prompt numbers */ + text-align: right; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + /* Disable text selection */ + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/*----------------------------------------------------------------------------- +| Mobile +|----------------------------------------------------------------------------*/ +@media only screen and (max-width: 760px) { + .jp-InputArea-editor { + display: table-row; + margin-left: var(--jp-notebook-padding); + } + + .jp-InputPrompt { + display: table-row; + text-align: left; + } +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Placeholder +|----------------------------------------------------------------------------*/ + +.jp-Placeholder { + display: table; + table-layout: fixed; + width: 100%; +} + +.jp-Placeholder-prompt { + display: table-cell; + box-sizing: border-box; +} + +.jp-Placeholder-content { + display: table-cell; + padding: 4px 6px; + border: 1px solid transparent; + border-radius: 0; + background: none; + box-sizing: border-box; + cursor: pointer; +} + +.jp-Placeholder-contentContainer { + display: flex; +} + +.jp-Placeholder-content:hover, +.jp-InputPlaceholder > .jp-Placeholder-content:hover { + border-color: var(--jp-layout-color3); +} + +.jp-Placeholder-content .jp-MoreHorizIcon { + width: 32px; + height: 16px; + border: 1px solid transparent; + border-radius: var(--jp-border-radius); +} + +.jp-Placeholder-content .jp-MoreHorizIcon:hover { + border: 1px solid var(--jp-border-color1); + box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.25); + background-color: var(--jp-layout-color0); +} + +.jp-PlaceholderText { + white-space: nowrap; + overflow-x: hidden; + color: var(--jp-inverse-layout-color3); + font-family: var(--jp-code-font-family); +} + +.jp-InputPlaceholder > .jp-Placeholder-content { + border-color: var(--jp-cell-editor-border-color); + background: var(--jp-cell-editor-background); +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Private CSS variables +|----------------------------------------------------------------------------*/ + +:root { + --jp-private-cell-scrolling-output-offset: 5px; +} + +/*----------------------------------------------------------------------------- +| Cell +|----------------------------------------------------------------------------*/ + +.jp-Cell { + padding: var(--jp-cell-padding); + margin: 0; + border: none; + outline: none; + background: transparent; +} + +/*----------------------------------------------------------------------------- +| Common input/output +|----------------------------------------------------------------------------*/ + +.jp-Cell-inputWrapper, +.jp-Cell-outputWrapper { + display: flex; + flex-direction: row; + padding: 0; + margin: 0; + + /* Added to reveal the box-shadow on the input and output collapsers. */ + overflow: visible; +} + +/* Only input/output areas inside cells */ +.jp-Cell-inputArea, +.jp-Cell-outputArea { + flex: 1 1 auto; +} + +/*----------------------------------------------------------------------------- +| Collapser +|----------------------------------------------------------------------------*/ + +/* Make the output collapser disappear when there is not output, but do so + * in a manner that leaves it in the layout and preserves its width. + */ +.jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser { + border: none !important; + background: transparent !important; +} + +.jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser { + min-height: var(--jp-cell-collapser-min-height); +} + +/*----------------------------------------------------------------------------- +| Output +|----------------------------------------------------------------------------*/ + +/* Put a space between input and output when there IS output */ +.jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper { + margin-top: 5px; +} + +.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea { + overflow-y: auto; + max-height: 24em; + margin-left: var(--jp-private-cell-scrolling-output-offset); + resize: vertical; +} + +.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea[style*='height'] { + max-height: unset; +} + +.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea::after { + content: ' '; + box-shadow: inset 0 0 6px 2px rgb(0 0 0 / 30%); + width: 100%; + height: 100%; + position: sticky; + bottom: 0; + top: 0; + margin-top: -50%; + float: left; + display: block; + pointer-events: none; +} + +.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-child { + padding-top: 6px; +} + +.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt { + width: calc( + var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset) + ); +} + +.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-promptOverlay { + left: calc(-1 * var(--jp-private-cell-scrolling-output-offset)); +} + +/*----------------------------------------------------------------------------- +| CodeCell +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| MarkdownCell +|----------------------------------------------------------------------------*/ + +.jp-MarkdownOutput { + display: table-cell; + width: 100%; + margin-top: 0; + margin-bottom: 0; + padding-left: var(--jp-code-padding); +} + +.jp-MarkdownOutput.jp-RenderedHTMLCommon { + overflow: auto; +} + +/* collapseHeadingButton (show always if hiddenCellsButton is _not_ shown) */ +.jp-collapseHeadingButton { + display: flex; + min-height: var(--jp-cell-collapser-min-height); + font-size: var(--jp-code-font-size); + position: absolute; + background-color: transparent; + background-size: 25px; + background-repeat: no-repeat; + background-position-x: center; + background-position-y: top; + background-image: var(--jp-icon-caret-down); + right: 0; + top: 0; + bottom: 0; +} + +.jp-collapseHeadingButton.jp-mod-collapsed { + background-image: var(--jp-icon-caret-right); +} + +/* + set the container font size to match that of content + so that the nested collapse buttons have the right size +*/ +.jp-MarkdownCell .jp-InputPrompt { + font-size: var(--jp-content-font-size1); +} + +/* + Align collapseHeadingButton with cell top header + The font sizes are identical to the ones in packages/rendermime/style/base.css +*/ +.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='1'] { + font-size: var(--jp-content-font-size5); + background-position-y: calc(0.3 * var(--jp-content-font-size5)); +} + +.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='2'] { + font-size: var(--jp-content-font-size4); + background-position-y: calc(0.3 * var(--jp-content-font-size4)); +} + +.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='3'] { + font-size: var(--jp-content-font-size3); + background-position-y: calc(0.3 * var(--jp-content-font-size3)); +} + +.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='4'] { + font-size: var(--jp-content-font-size2); + background-position-y: calc(0.3 * var(--jp-content-font-size2)); +} + +.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='5'] { + font-size: var(--jp-content-font-size1); + background-position-y: top; +} + +.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='6'] { + font-size: var(--jp-content-font-size0); + background-position-y: top; +} + +/* collapseHeadingButton (show only on (hover,active) if hiddenCellsButton is shown) */ +.jp-Notebook.jp-mod-showHiddenCellsButton .jp-collapseHeadingButton { + display: none; +} + +.jp-Notebook.jp-mod-showHiddenCellsButton + :is(.jp-MarkdownCell:hover, .jp-mod-active) + .jp-collapseHeadingButton { + display: flex; +} + +/* showHiddenCellsButton (only show if jp-mod-showHiddenCellsButton is set, which +is a consequence of the showHiddenCellsButton option in Notebook Settings)*/ +.jp-Notebook.jp-mod-showHiddenCellsButton .jp-showHiddenCellsButton { + margin-left: calc(var(--jp-cell-prompt-width) + 2 * var(--jp-code-padding)); + margin-top: var(--jp-code-padding); + border: 1px solid var(--jp-border-color2); + background-color: var(--jp-border-color3) !important; + color: var(--jp-content-font-color0) !important; + display: flex; +} + +.jp-Notebook.jp-mod-showHiddenCellsButton .jp-showHiddenCellsButton:hover { + background-color: var(--jp-border-color2) !important; +} + +.jp-showHiddenCellsButton { + display: none; +} + +/*----------------------------------------------------------------------------- +| Printing +|----------------------------------------------------------------------------*/ + +/* +Using block instead of flex to allow the use of the break-inside CSS property for +cell outputs. +*/ + +@media print { + .jp-Cell-inputWrapper, + .jp-Cell-outputWrapper { + display: block; + } +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Variables +|----------------------------------------------------------------------------*/ + +:root { + --jp-notebook-toolbar-padding: 2px 5px 2px 2px; +} + +/*----------------------------------------------------------------------------- + +/*----------------------------------------------------------------------------- +| Styles +|----------------------------------------------------------------------------*/ + +.jp-NotebookPanel-toolbar { + padding: var(--jp-notebook-toolbar-padding); + + /* disable paint containment from lumino 2.0 default strict CSS containment */ + contain: style size !important; +} + +.jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused { + border: none; + box-shadow: none; +} + +.jp-Notebook-toolbarCellTypeDropdown select { + height: 24px; + font-size: var(--jp-ui-font-size1); + line-height: 14px; + border-radius: 0; + display: block; +} + +.jp-Notebook-toolbarCellTypeDropdown span { + top: 5px !important; +} + +.jp-Toolbar-responsive-popup { + position: absolute; + height: fit-content; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: flex-end; + border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color); + box-shadow: var(--jp-toolbar-box-shadow); + background: var(--jp-toolbar-background); + min-height: var(--jp-toolbar-micro-height); + padding: var(--jp-notebook-toolbar-padding); + z-index: 1; + right: 0; + top: 0; +} + +.jp-Toolbar > .jp-Toolbar-responsive-opener { + margin-left: auto; +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Variables +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- + +/*----------------------------------------------------------------------------- +| Styles +|----------------------------------------------------------------------------*/ + +.jp-Notebook-ExecutionIndicator { + position: relative; + display: inline-block; + height: 100%; + z-index: 9997; +} + +.jp-Notebook-ExecutionIndicator-tooltip { + visibility: hidden; + height: auto; + width: max-content; + width: -moz-max-content; + background-color: var(--jp-layout-color2); + color: var(--jp-ui-font-color1); + text-align: justify; + border-radius: 6px; + padding: 0 5px; + position: fixed; + display: table; +} + +.jp-Notebook-ExecutionIndicator-tooltip.up { + transform: translateX(-50%) translateY(-100%) translateY(-32px); +} + +.jp-Notebook-ExecutionIndicator-tooltip.down { + transform: translateX(calc(-100% + 16px)) translateY(5px); +} + +.jp-Notebook-ExecutionIndicator-tooltip.hidden { + display: none; +} + +.jp-Notebook-ExecutionIndicator:hover .jp-Notebook-ExecutionIndicator-tooltip { + visibility: visible; +} + +.jp-Notebook-ExecutionIndicator span { + font-size: var(--jp-ui-font-size1); + font-family: var(--jp-ui-font-family); + color: var(--jp-ui-font-color1); + line-height: 24px; + display: block; +} + +.jp-Notebook-ExecutionIndicator-progress-bar { + display: flex; + justify-content: center; + height: 100%; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +/* + * Execution indicator + */ +.jp-tocItem-content::after { + content: ''; + + /* Must be identical to form a circle */ + width: 12px; + height: 12px; + background: none; + border: none; + position: absolute; + right: 0; +} + +.jp-tocItem-content[data-running='0']::after { + border-radius: 50%; + border: var(--jp-border-width) solid var(--jp-inverse-layout-color3); + background: none; +} + +.jp-tocItem-content[data-running='1']::after { + border-radius: 50%; + border: var(--jp-border-width) solid var(--jp-inverse-layout-color3); + background-color: var(--jp-inverse-layout-color3); +} + +.jp-tocItem-content[data-running='0'], +.jp-tocItem-content[data-running='1'] { + margin-right: 12px; +} + +/* + * Copyright (c) Jupyter Development Team. + * Distributed under the terms of the Modified BSD License. + */ + +.jp-Notebook-footer { + height: 27px; + margin-left: calc( + var(--jp-cell-prompt-width) + var(--jp-cell-collapser-width) + + var(--jp-cell-padding) + ); + width: calc( + 100% - + ( + var(--jp-cell-prompt-width) + var(--jp-cell-collapser-width) + + var(--jp-cell-padding) + var(--jp-cell-padding) + ) + ); + border: var(--jp-border-width) solid var(--jp-cell-editor-border-color); + color: var(--jp-ui-font-color3); + margin-top: 6px; + background: none; + cursor: pointer; +} + +.jp-Notebook-footer:focus { + border-color: var(--jp-cell-editor-active-border-color); +} + +/* For devices that support hovering, hide footer until hover */ +@media (hover: hover) { + .jp-Notebook-footer { + opacity: 0; + } + + .jp-Notebook-footer:focus, + .jp-Notebook-footer:hover { + opacity: 1; + } +} + +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| Imports +|----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------- +| CSS variables +|----------------------------------------------------------------------------*/ + +:root { + --jp-side-by-side-output-size: 1fr; + --jp-side-by-side-resized-cell: var(--jp-side-by-side-output-size); + --jp-private-notebook-dragImage-width: 304px; + --jp-private-notebook-dragImage-height: 36px; + --jp-private-notebook-selected-color: var(--md-blue-400); + --jp-private-notebook-active-color: var(--md-green-400); +} + +/*----------------------------------------------------------------------------- +| Notebook +|----------------------------------------------------------------------------*/ + +/* stylelint-disable selector-max-class */ + +.jp-NotebookPanel { + display: block; + height: 100%; +} + +.jp-NotebookPanel.jp-Document { + min-width: 240px; + min-height: 120px; +} + +.jp-Notebook { + padding: var(--jp-notebook-padding); + outline: none; + overflow: auto; + background: var(--jp-layout-color0); +} + +.jp-Notebook.jp-mod-scrollPastEnd::after { + display: block; + content: ''; + min-height: var(--jp-notebook-scroll-padding); +} + +.jp-MainAreaWidget-ContainStrict .jp-Notebook * { + contain: strict; +} + +.jp-Notebook .jp-Cell { + overflow: visible; +} + +.jp-Notebook .jp-Cell .jp-InputPrompt { + cursor: move; +} + +/*----------------------------------------------------------------------------- +| Notebook state related styling +| +| The notebook and cells each have states, here are the possibilities: +| +| - Notebook +| - Command +| - Edit +| - Cell +| - None +| - Active (only one can be active) +| - Selected (the cells actions are applied to) +| - Multiselected (when multiple selected, the cursor) +| - No outputs +|----------------------------------------------------------------------------*/ + +/* Command or edit modes */ + +.jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt { + opacity: var(--jp-cell-prompt-not-active-opacity); + color: var(--jp-cell-prompt-not-active-font-color); +} + +.jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt { + opacity: var(--jp-cell-prompt-not-active-opacity); + color: var(--jp-cell-prompt-not-active-font-color); +} + +/* cell is active */ +.jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser { + background: var(--jp-brand-color1); +} + +/* cell is dirty */ +.jp-Notebook .jp-Cell.jp-mod-dirty .jp-InputPrompt { + color: var(--jp-warn-color1); +} + +.jp-Notebook .jp-Cell.jp-mod-dirty .jp-InputPrompt::before { + color: var(--jp-warn-color1); + content: '•'; +} + +.jp-Notebook .jp-Cell.jp-mod-active.jp-mod-dirty .jp-Collapser { + background: var(--jp-warn-color1); +} + +/* collapser is hovered */ +.jp-Notebook .jp-Cell .jp-Collapser:hover { + box-shadow: var(--jp-elevation-z2); + background: var(--jp-brand-color1); + opacity: var(--jp-cell-collapser-not-active-hover-opacity); +} + +/* cell is active and collapser is hovered */ +.jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover { + background: var(--jp-brand-color0); + opacity: 1; +} + +/* Command mode */ + +.jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected { + background: var(--jp-notebook-multiselected-color); +} + +.jp-Notebook.jp-mod-commandMode + .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected) { + background: transparent; +} + +/* Edit mode */ + +.jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor { + border: var(--jp-border-width) solid var(--jp-cell-editor-active-border-color); + box-shadow: var(--jp-input-box-shadow); + background-color: var(--jp-cell-editor-active-background); +} + +/*----------------------------------------------------------------------------- +| Notebook drag and drop +|----------------------------------------------------------------------------*/ + +.jp-Notebook-cell.jp-mod-dropSource { + opacity: 0.5; +} + +.jp-Notebook-cell.jp-mod-dropTarget, +.jp-Notebook.jp-mod-commandMode + .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget { + border-top-color: var(--jp-private-notebook-selected-color); + border-top-style: solid; + border-top-width: 2px; +} + +.jp-dragImage { + display: block; + flex-direction: row; + width: var(--jp-private-notebook-dragImage-width); + height: var(--jp-private-notebook-dragImage-height); + border: var(--jp-border-width) solid var(--jp-cell-editor-border-color); + background: var(--jp-cell-editor-background); + overflow: visible; +} + +.jp-dragImage-singlePrompt { + box-shadow: 2px 2px 4px 0 rgba(0, 0, 0, 0.12); +} + +.jp-dragImage .jp-dragImage-content { + flex: 1 1 auto; + z-index: 2; + font-size: var(--jp-code-font-size); + font-family: var(--jp-code-font-family); + line-height: var(--jp-code-line-height); + padding: var(--jp-code-padding); + border: var(--jp-border-width) solid var(--jp-cell-editor-border-color); + background: var(--jp-cell-editor-background-color); + color: var(--jp-content-font-color3); + text-align: left; + margin: 4px 4px 4px 0; +} + +.jp-dragImage .jp-dragImage-prompt { + flex: 0 0 auto; + min-width: 36px; + color: var(--jp-cell-inprompt-font-color); + padding: var(--jp-code-padding); + padding-left: 12px; + font-family: var(--jp-cell-prompt-font-family); + letter-spacing: var(--jp-cell-prompt-letter-spacing); + line-height: 1.9; + font-size: var(--jp-code-font-size); + border: var(--jp-border-width) solid transparent; +} + +.jp-dragImage-multipleBack { + z-index: -1; + position: absolute; + height: 32px; + width: 300px; + top: 8px; + left: 8px; + background: var(--jp-layout-color2); + border: var(--jp-border-width) solid var(--jp-input-border-color); + box-shadow: 2px 2px 4px 0 rgba(0, 0, 0, 0.12); +} + +/*----------------------------------------------------------------------------- +| Cell toolbar +|----------------------------------------------------------------------------*/ + +.jp-NotebookTools { + display: block; + min-width: var(--jp-sidebar-min-width); + color: var(--jp-ui-font-color1); + background: var(--jp-layout-color1); + + /* This is needed so that all font sizing of children done in ems is + * relative to this base size */ + font-size: var(--jp-ui-font-size1); + overflow: auto; +} + +.jp-ActiveCellTool { + padding: 12px 0; + display: flex; +} + +.jp-ActiveCellTool-Content { + flex: 1 1 auto; +} + +.jp-ActiveCellTool .jp-ActiveCellTool-CellContent { + background: var(--jp-cell-editor-background); + border: var(--jp-border-width) solid var(--jp-cell-editor-border-color); + border-radius: 0; + min-height: 29px; +} + +.jp-ActiveCellTool .jp-InputPrompt { + min-width: calc(var(--jp-cell-prompt-width) * 0.75); +} + +.jp-ActiveCellTool-CellContent > pre { + padding: 5px 4px; + margin: 0; + white-space: normal; +} + +.jp-MetadataEditorTool { + flex-direction: column; + padding: 12px 0; +} + +.jp-RankedPanel > :not(:first-child) { + margin-top: 12px; +} + +.jp-KeySelector select.jp-mod-styled { + font-size: var(--jp-ui-font-size1); + color: var(--jp-ui-font-color0); + border: var(--jp-border-width) solid var(--jp-border-color1); +} + +.jp-KeySelector label, +.jp-MetadataEditorTool label, +.jp-NumberSetter label { + line-height: 1.4; +} + +.jp-NotebookTools .jp-select-wrapper { + margin-top: 4px; + margin-bottom: 0; +} + +.jp-NumberSetter input { + width: 100%; + margin-top: 4px; +} + +.jp-NotebookTools .jp-Collapse { + margin-top: 16px; +} + +/*----------------------------------------------------------------------------- +| Presentation Mode (.jp-mod-presentationMode) +|----------------------------------------------------------------------------*/ + +.jp-mod-presentationMode .jp-Notebook { + --jp-content-font-size1: var(--jp-content-presentation-font-size1); + --jp-code-font-size: var(--jp-code-presentation-font-size); +} + +.jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt, +.jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt { + flex: 0 0 110px; +} + +/*----------------------------------------------------------------------------- +| Side-by-side Mode (.jp-mod-sideBySide) +|----------------------------------------------------------------------------*/ +.jp-mod-sideBySide.jp-Notebook .jp-Notebook-cell { + margin-top: 3em; + margin-bottom: 3em; + margin-left: 5%; + margin-right: 5%; +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell { + display: grid; + grid-template-columns: minmax(0, 1fr) min-content minmax( + 0, + var(--jp-side-by-side-output-size) + ); + grid-template-rows: auto minmax(0, 1fr) auto; + grid-template-areas: + 'header header header' + 'input handle output' + 'footer footer footer'; +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell.jp-mod-resizedCell { + grid-template-columns: minmax(0, 1fr) min-content minmax( + 0, + var(--jp-side-by-side-resized-cell) + ); +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellHeader { + grid-area: header; +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-Cell-inputWrapper { + grid-area: input; +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-Cell-outputWrapper { + /* overwrite the default margin (no vertical separation needed in side by side move */ + margin-top: 0; + grid-area: output; +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellFooter { + grid-area: footer; +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellResizeHandle { + grid-area: handle; + user-select: none; + display: block; + height: 100%; + cursor: ew-resize; + padding: 0 var(--jp-cell-padding); +} + +.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellResizeHandle::after { + content: ''; + display: block; + background: var(--jp-border-color2); + height: 100%; + width: 5px; +} + +.jp-mod-sideBySide.jp-Notebook + .jp-CodeCell.jp-mod-resizedCell + .jp-CellResizeHandle::after { + background: var(--jp-border-color0); +} + +.jp-CellResizeHandle { + display: none; +} + +/*----------------------------------------------------------------------------- +| Placeholder +|----------------------------------------------------------------------------*/ + +.jp-Cell-Placeholder { + padding-left: 55px; +} + +.jp-Cell-Placeholder-wrapper { + background: #fff; + border: 1px solid; + border-color: #e5e6e9 #dfe0e4 #d0d1d5; + border-radius: 4px; + -webkit-border-radius: 4px; + margin: 10px 15px; +} + +.jp-Cell-Placeholder-wrapper-inner { + padding: 15px; + position: relative; +} + +.jp-Cell-Placeholder-wrapper-body { + background-repeat: repeat; + background-size: 50% auto; +} + +.jp-Cell-Placeholder-wrapper-body div { + background: #f6f7f8; + background-image: -webkit-linear-gradient( + left, + #f6f7f8 0%, + #edeef1 20%, + #f6f7f8 40%, + #f6f7f8 100% + ); + background-repeat: no-repeat; + background-size: 800px 104px; + height: 104px; + position: absolute; + right: 15px; + left: 15px; + top: 15px; +} + +div.jp-Cell-Placeholder-h1 { + top: 20px; + height: 20px; + left: 15px; + width: 150px; +} + +div.jp-Cell-Placeholder-h2 { + left: 15px; + top: 50px; + height: 10px; + width: 100px; +} + +div.jp-Cell-Placeholder-content-1, +div.jp-Cell-Placeholder-content-2, +div.jp-Cell-Placeholder-content-3 { + left: 15px; + right: 15px; + height: 10px; +} + +div.jp-Cell-Placeholder-content-1 { + top: 100px; +} + +div.jp-Cell-Placeholder-content-2 { + top: 120px; +} + +div.jp-Cell-Placeholder-content-3 { + top: 140px; +} + +</style> +<style type="text/css"> +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/* +The following CSS variables define the main, public API for styling JupyterLab. +These variables should be used by all plugins wherever possible. In other +words, plugins should not define custom colors, sizes, etc unless absolutely +necessary. This enables users to change the visual theme of JupyterLab +by changing these variables. + +Many variables appear in an ordered sequence (0,1,2,3). These sequences +are designed to work well together, so for example, `--jp-border-color1` should +be used with `--jp-layout-color1`. The numbers have the following meanings: + +* 0: super-primary, reserved for special emphasis +* 1: primary, most important under normal situations +* 2: secondary, next most important under normal situations +* 3: tertiary, next most important under normal situations + +Throughout JupyterLab, we are mostly following principles from Google's +Material Design when selecting colors. We are not, however, following +all of MD as it is not optimized for dense, information rich UIs. +*/ + +:root { + /* Elevation + * + * We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here: + * + * https://github.com/material-components/material-components-web + * https://material-components-web.appspot.com/elevation.html + */ + + --jp-shadow-base-lightness: 0; + --jp-shadow-umbra-color: rgba( + var(--jp-shadow-base-lightness), + var(--jp-shadow-base-lightness), + var(--jp-shadow-base-lightness), + 0.2 + ); + --jp-shadow-penumbra-color: rgba( + var(--jp-shadow-base-lightness), + var(--jp-shadow-base-lightness), + var(--jp-shadow-base-lightness), + 0.14 + ); + --jp-shadow-ambient-color: rgba( + var(--jp-shadow-base-lightness), + var(--jp-shadow-base-lightness), + var(--jp-shadow-base-lightness), + 0.12 + ); + --jp-elevation-z0: none; + --jp-elevation-z1: 0 2px 1px -1px var(--jp-shadow-umbra-color), + 0 1px 1px 0 var(--jp-shadow-penumbra-color), + 0 1px 3px 0 var(--jp-shadow-ambient-color); + --jp-elevation-z2: 0 3px 1px -2px var(--jp-shadow-umbra-color), + 0 2px 2px 0 var(--jp-shadow-penumbra-color), + 0 1px 5px 0 var(--jp-shadow-ambient-color); + --jp-elevation-z4: 0 2px 4px -1px var(--jp-shadow-umbra-color), + 0 4px 5px 0 var(--jp-shadow-penumbra-color), + 0 1px 10px 0 var(--jp-shadow-ambient-color); + --jp-elevation-z6: 0 3px 5px -1px var(--jp-shadow-umbra-color), + 0 6px 10px 0 var(--jp-shadow-penumbra-color), + 0 1px 18px 0 var(--jp-shadow-ambient-color); + --jp-elevation-z8: 0 5px 5px -3px var(--jp-shadow-umbra-color), + 0 8px 10px 1px var(--jp-shadow-penumbra-color), + 0 3px 14px 2px var(--jp-shadow-ambient-color); + --jp-elevation-z12: 0 7px 8px -4px var(--jp-shadow-umbra-color), + 0 12px 17px 2px var(--jp-shadow-penumbra-color), + 0 5px 22px 4px var(--jp-shadow-ambient-color); + --jp-elevation-z16: 0 8px 10px -5px var(--jp-shadow-umbra-color), + 0 16px 24px 2px var(--jp-shadow-penumbra-color), + 0 6px 30px 5px var(--jp-shadow-ambient-color); + --jp-elevation-z20: 0 10px 13px -6px var(--jp-shadow-umbra-color), + 0 20px 31px 3px var(--jp-shadow-penumbra-color), + 0 8px 38px 7px var(--jp-shadow-ambient-color); + --jp-elevation-z24: 0 11px 15px -7px var(--jp-shadow-umbra-color), + 0 24px 38px 3px var(--jp-shadow-penumbra-color), + 0 9px 46px 8px var(--jp-shadow-ambient-color); + + /* Borders + * + * The following variables, specify the visual styling of borders in JupyterLab. + */ + + --jp-border-width: 1px; + --jp-border-color0: var(--md-grey-400); + --jp-border-color1: var(--md-grey-400); + --jp-border-color2: var(--md-grey-300); + --jp-border-color3: var(--md-grey-200); + --jp-inverse-border-color: var(--md-grey-600); + --jp-border-radius: 2px; + + /* UI Fonts + * + * The UI font CSS variables are used for the typography all of the JupyterLab + * user interface elements that are not directly user generated content. + * + * The font sizing here is done assuming that the body font size of --jp-ui-font-size1 + * is applied to a parent element. When children elements, such as headings, are sized + * in em all things will be computed relative to that body size. + */ + + --jp-ui-font-scale-factor: 1.2; + --jp-ui-font-size0: 0.83333em; + --jp-ui-font-size1: 13px; /* Base font size */ + --jp-ui-font-size2: 1.2em; + --jp-ui-font-size3: 1.44em; + --jp-ui-font-family: system-ui, -apple-system, blinkmacsystemfont, 'Segoe UI', + helvetica, arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', + 'Segoe UI Symbol'; + + /* + * Use these font colors against the corresponding main layout colors. + * In a light theme, these go from dark to light. + */ + + /* Defaults use Material Design specification */ + --jp-ui-font-color0: rgba(0, 0, 0, 1); + --jp-ui-font-color1: rgba(0, 0, 0, 0.87); + --jp-ui-font-color2: rgba(0, 0, 0, 0.54); + --jp-ui-font-color3: rgba(0, 0, 0, 0.38); + + /* + * Use these against the brand/accent/warn/error colors. + * These will typically go from light to darker, in both a dark and light theme. + */ + + --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); + --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); + --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); + --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); + + /* Content Fonts + * + * Content font variables are used for typography of user generated content. + * + * The font sizing here is done assuming that the body font size of --jp-content-font-size1 + * is applied to a parent element. When children elements, such as headings, are sized + * in em all things will be computed relative to that body size. + */ + + --jp-content-line-height: 1.6; + --jp-content-font-scale-factor: 1.2; + --jp-content-font-size0: 0.83333em; + --jp-content-font-size1: 14px; /* Base font size */ + --jp-content-font-size2: 1.2em; + --jp-content-font-size3: 1.44em; + --jp-content-font-size4: 1.728em; + --jp-content-font-size5: 2.0736em; + + /* This gives a magnification of about 125% in presentation mode over normal. */ + --jp-content-presentation-font-size1: 17px; + --jp-content-heading-line-height: 1; + --jp-content-heading-margin-top: 1.2em; + --jp-content-heading-margin-bottom: 0.8em; + --jp-content-heading-font-weight: 500; + + /* Defaults use Material Design specification */ + --jp-content-font-color0: rgba(0, 0, 0, 1); + --jp-content-font-color1: rgba(0, 0, 0, 0.87); + --jp-content-font-color2: rgba(0, 0, 0, 0.54); + --jp-content-font-color3: rgba(0, 0, 0, 0.38); + --jp-content-link-color: var(--md-blue-900); + --jp-content-font-family: system-ui, -apple-system, blinkmacsystemfont, + 'Segoe UI', helvetica, arial, sans-serif, 'Apple Color Emoji', + 'Segoe UI Emoji', 'Segoe UI Symbol'; + + /* + * Code Fonts + * + * Code font variables are used for typography of code and other monospaces content. + */ + + --jp-code-font-size: 13px; + --jp-code-line-height: 1.3077; /* 17px for 13px base */ + --jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */ + --jp-code-font-family-default: menlo, consolas, 'DejaVu Sans Mono', monospace; + --jp-code-font-family: var(--jp-code-font-family-default); + + /* This gives a magnification of about 125% in presentation mode over normal. */ + --jp-code-presentation-font-size: 16px; + + /* may need to tweak cursor width if you change font size */ + --jp-code-cursor-width0: 1.4px; + --jp-code-cursor-width1: 2px; + --jp-code-cursor-width2: 4px; + + /* Layout + * + * The following are the main layout colors use in JupyterLab. In a light + * theme these would go from light to dark. + */ + + --jp-layout-color0: white; + --jp-layout-color1: white; + --jp-layout-color2: var(--md-grey-200); + --jp-layout-color3: var(--md-grey-400); + --jp-layout-color4: var(--md-grey-600); + + /* Inverse Layout + * + * The following are the inverse layout colors use in JupyterLab. In a light + * theme these would go from dark to light. + */ + + --jp-inverse-layout-color0: #111; + --jp-inverse-layout-color1: var(--md-grey-900); + --jp-inverse-layout-color2: var(--md-grey-800); + --jp-inverse-layout-color3: var(--md-grey-700); + --jp-inverse-layout-color4: var(--md-grey-600); + + /* Brand/accent */ + + --jp-brand-color0: var(--md-blue-900); + --jp-brand-color1: var(--md-blue-700); + --jp-brand-color2: var(--md-blue-300); + --jp-brand-color3: var(--md-blue-100); + --jp-brand-color4: var(--md-blue-50); + --jp-accent-color0: var(--md-green-900); + --jp-accent-color1: var(--md-green-700); + --jp-accent-color2: var(--md-green-300); + --jp-accent-color3: var(--md-green-100); + + /* State colors (warn, error, success, info) */ + + --jp-warn-color0: var(--md-orange-900); + --jp-warn-color1: var(--md-orange-700); + --jp-warn-color2: var(--md-orange-300); + --jp-warn-color3: var(--md-orange-100); + --jp-error-color0: var(--md-red-900); + --jp-error-color1: var(--md-red-700); + --jp-error-color2: var(--md-red-300); + --jp-error-color3: var(--md-red-100); + --jp-success-color0: var(--md-green-900); + --jp-success-color1: var(--md-green-700); + --jp-success-color2: var(--md-green-300); + --jp-success-color3: var(--md-green-100); + --jp-info-color0: var(--md-cyan-900); + --jp-info-color1: var(--md-cyan-700); + --jp-info-color2: var(--md-cyan-300); + --jp-info-color3: var(--md-cyan-100); + + /* Cell specific styles */ + + --jp-cell-padding: 5px; + --jp-cell-collapser-width: 8px; + --jp-cell-collapser-min-height: 20px; + --jp-cell-collapser-not-active-hover-opacity: 0.6; + --jp-cell-editor-background: var(--md-grey-100); + --jp-cell-editor-border-color: var(--md-grey-300); + --jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300); + --jp-cell-editor-active-background: var(--jp-layout-color0); + --jp-cell-editor-active-border-color: var(--jp-brand-color1); + --jp-cell-prompt-width: 64px; + --jp-cell-prompt-font-family: var(--jp-code-font-family-default); + --jp-cell-prompt-letter-spacing: 0; + --jp-cell-prompt-opacity: 1; + --jp-cell-prompt-not-active-opacity: 0.5; + --jp-cell-prompt-not-active-font-color: var(--md-grey-700); + + /* A custom blend of MD grey and blue 600 + * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ + --jp-cell-inprompt-font-color: #307fc1; + + /* A custom blend of MD grey and orange 600 + * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ + --jp-cell-outprompt-font-color: #bf5b3d; + + /* Notebook specific styles */ + + --jp-notebook-padding: 10px; + --jp-notebook-select-background: var(--jp-layout-color1); + --jp-notebook-multiselected-color: var(--md-blue-50); + + /* The scroll padding is calculated to fill enough space at the bottom of the + notebook to show one single-line cell (with appropriate padding) at the top + when the notebook is scrolled all the way to the bottom. We also subtract one + pixel so that no scrollbar appears if we have just one single-line cell in the + notebook. This padding is to enable a 'scroll past end' feature in a notebook. + */ + --jp-notebook-scroll-padding: calc( + 100% - var(--jp-code-font-size) * var(--jp-code-line-height) - + var(--jp-code-padding) - var(--jp-cell-padding) - 1px + ); + + /* Rendermime styles */ + + --jp-rendermime-error-background: #fdd; + --jp-rendermime-table-row-background: var(--md-grey-100); + --jp-rendermime-table-row-hover-background: var(--md-light-blue-50); + + /* Dialog specific styles */ + + --jp-dialog-background: rgba(0, 0, 0, 0.25); + + /* Console specific styles */ + + --jp-console-padding: 10px; + + /* Toolbar specific styles */ + + --jp-toolbar-border-color: var(--jp-border-color1); + --jp-toolbar-micro-height: 8px; + --jp-toolbar-background: var(--jp-layout-color1); + --jp-toolbar-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.24); + --jp-toolbar-header-margin: 4px 4px 0 4px; + --jp-toolbar-active-background: var(--md-grey-300); + + /* Statusbar specific styles */ + + --jp-statusbar-height: 24px; + + /* Input field styles */ + + --jp-input-box-shadow: inset 0 0 2px var(--md-blue-300); + --jp-input-active-background: var(--jp-layout-color1); + --jp-input-hover-background: var(--jp-layout-color1); + --jp-input-background: var(--md-grey-100); + --jp-input-border-color: var(--jp-inverse-border-color); + --jp-input-active-border-color: var(--jp-brand-color1); + --jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3); + + /* General editor styles */ + + --jp-editor-selected-background: #d9d9d9; + --jp-editor-selected-focused-background: #d7d4f0; + --jp-editor-cursor-color: var(--jp-ui-font-color0); + + /* Code mirror specific styles */ + + --jp-mirror-editor-keyword-color: #008000; + --jp-mirror-editor-atom-color: #88f; + --jp-mirror-editor-number-color: #080; + --jp-mirror-editor-def-color: #00f; + --jp-mirror-editor-variable-color: var(--md-grey-900); + --jp-mirror-editor-variable-2-color: rgb(0, 54, 109); + --jp-mirror-editor-variable-3-color: #085; + --jp-mirror-editor-punctuation-color: #05a; + --jp-mirror-editor-property-color: #05a; + --jp-mirror-editor-operator-color: #a2f; + --jp-mirror-editor-comment-color: #408080; + --jp-mirror-editor-string-color: #ba2121; + --jp-mirror-editor-string-2-color: #708; + --jp-mirror-editor-meta-color: #a2f; + --jp-mirror-editor-qualifier-color: #555; + --jp-mirror-editor-builtin-color: #008000; + --jp-mirror-editor-bracket-color: #997; + --jp-mirror-editor-tag-color: #170; + --jp-mirror-editor-attribute-color: #00c; + --jp-mirror-editor-header-color: blue; + --jp-mirror-editor-quote-color: #090; + --jp-mirror-editor-link-color: #00c; + --jp-mirror-editor-error-color: #f00; + --jp-mirror-editor-hr-color: #999; + + /* + RTC user specific colors. + These colors are used for the cursor, username in the editor, + and the icon of the user. + */ + + --jp-collaborator-color1: #ffad8e; + --jp-collaborator-color2: #dac83d; + --jp-collaborator-color3: #72dd76; + --jp-collaborator-color4: #00e4d0; + --jp-collaborator-color5: #45d4ff; + --jp-collaborator-color6: #e2b1ff; + --jp-collaborator-color7: #ff9de6; + + /* Vega extension styles */ + + --jp-vega-background: white; + + /* Sidebar-related styles */ + + --jp-sidebar-min-width: 250px; + + /* Search-related styles */ + + --jp-search-toggle-off-opacity: 0.5; + --jp-search-toggle-hover-opacity: 0.8; + --jp-search-toggle-on-opacity: 1; + --jp-search-selected-match-background-color: rgb(245, 200, 0); + --jp-search-selected-match-color: black; + --jp-search-unselected-match-background-color: var( + --jp-inverse-layout-color0 + ); + --jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0); + + /* Icon colors that work well with light or dark backgrounds */ + --jp-icon-contrast-color0: var(--md-purple-600); + --jp-icon-contrast-color1: var(--md-green-600); + --jp-icon-contrast-color2: var(--md-pink-600); + --jp-icon-contrast-color3: var(--md-blue-600); + + /* Button colors */ + --jp-accept-color-normal: var(--md-blue-700); + --jp-accept-color-hover: var(--md-blue-800); + --jp-accept-color-active: var(--md-blue-900); + --jp-warn-color-normal: var(--md-red-700); + --jp-warn-color-hover: var(--md-red-800); + --jp-warn-color-active: var(--md-red-900); + --jp-reject-color-normal: var(--md-grey-600); + --jp-reject-color-hover: var(--md-grey-700); + --jp-reject-color-active: var(--md-grey-800); + + /* File or activity icons and switch semantic variables */ + --jp-jupyter-icon-color: #f37626; + --jp-notebook-icon-color: #f37626; + --jp-json-icon-color: var(--md-orange-700); + --jp-console-icon-background-color: var(--md-blue-700); + --jp-console-icon-color: white; + --jp-terminal-icon-background-color: var(--md-grey-800); + --jp-terminal-icon-color: var(--md-grey-200); + --jp-text-editor-icon-color: var(--md-grey-700); + --jp-inspector-icon-color: var(--md-grey-700); + --jp-switch-color: var(--md-grey-400); + --jp-switch-true-position-color: var(--md-orange-900); +} +</style> +<style type="text/css"> +/* Force rendering true colors when outputing to pdf */ +* { + -webkit-print-color-adjust: exact; +} + +/* Misc */ +a.anchor-link { + display: none; +} + +/* Input area styling */ +.jp-InputArea { + overflow: hidden; +} + +.jp-InputArea-editor { + overflow: hidden; +} + +.cm-editor.cm-s-jupyter .highlight pre { +/* weird, but --jp-code-padding defined to be 5px but 4px horizontal padding is hardcoded for pre.cm-line */ + padding: var(--jp-code-padding) 4px; + margin: 0; + + font-family: inherit; + font-size: inherit; + line-height: inherit; + color: inherit; + +} + +.jp-OutputArea-output pre { + line-height: inherit; + font-family: inherit; +} + +.jp-RenderedText pre { + color: var(--jp-content-font-color1); + font-size: var(--jp-code-font-size); +} + +/* Hiding the collapser by default */ +.jp-Collapser { + display: none; +} + +@page { + margin: 0.5in; /* Margin for each printed piece of paper */ +} + +@media print { + .jp-Cell-inputWrapper, + .jp-Cell-outputWrapper { + display: block; + } +} +</style> +<!-- Load mathjax --> +<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-AMS_CHTML-full,Safe"> </script> +<!-- MathJax configuration --> +<script type="text/x-mathjax-config"> + init_mathjax = function() { + if (window.MathJax) { + // MathJax loaded + MathJax.Hub.Config({ + TeX: { + equationNumbers: { + autoNumber: "AMS", + useLabelIds: true + } + }, + tex2jax: { + inlineMath: [ ['$','$'], ["\\(","\\)"] ], + displayMath: [ ['$$','$$'], ["\\[","\\]"] ], + processEscapes: true, + processEnvironments: true + }, + displayAlign: 'center', + CommonHTML: { + linebreaks: { + automatic: true + } + } + }); + + MathJax.Hub.Queue(["Typeset", MathJax.Hub]); + } + } + init_mathjax(); + </script> +<!-- End of mathjax configuration --><script type="module"> + document.addEventListener("DOMContentLoaded", async () => { + const diagrams = document.querySelectorAll(".jp-Mermaid > pre.mermaid"); + // do not load mermaidjs if not needed + if (!diagrams.length) { + return; + } + const mermaid = (await import("https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.6.0/mermaid.esm.min.mjs")).default; + const parser = new DOMParser(); + + mermaid.initialize({ + maxTextSize: 100000, + startOnLoad: false, + fontFamily: window + .getComputedStyle(document.body) + .getPropertyValue("--jp-ui-font-family"), + theme: document.querySelector("body[data-jp-theme-light='true']") + ? "default" + : "dark", + }); + + let _nextMermaidId = 0; + + function makeMermaidImage(svg) { + const img = document.createElement("img"); + const doc = parser.parseFromString(svg, "image/svg+xml"); + const svgEl = doc.querySelector("svg"); + const { maxWidth } = svgEl?.style || {}; + const firstTitle = doc.querySelector("title"); + const firstDesc = doc.querySelector("desc"); + + img.setAttribute("src", `data:image/svg+xml,${encodeURIComponent(svg)}`); + if (maxWidth) { + img.width = parseInt(maxWidth); + } + if (firstTitle) { + img.setAttribute("alt", firstTitle.textContent); + } + if (firstDesc) { + const caption = document.createElement("figcaption"); + caption.className = "sr-only"; + caption.textContent = firstDesc.textContent; + return [img, caption]; + } + return [img]; + } + + async function makeMermaidError(text) { + let errorMessage = ""; + try { + await mermaid.parse(text); + } catch (err) { + errorMessage = `${err}`; + } + + const result = document.createElement("details"); + result.className = 'jp-RenderedMermaid-Details'; + const summary = document.createElement("summary"); + summary.className = 'jp-RenderedMermaid-Summary'; + const pre = document.createElement("pre"); + const code = document.createElement("code"); + code.innerText = text; + pre.appendChild(code); + summary.appendChild(pre); + result.appendChild(summary); + + const warning = document.createElement("pre"); + warning.innerText = errorMessage; + result.appendChild(warning); + return [result]; + } + + async function renderOneMarmaid(src) { + const id = `jp-mermaid-${_nextMermaidId++}`; + const parent = src.parentNode; + let raw = src.textContent.trim(); + const el = document.createElement("div"); + el.style.visibility = "hidden"; + document.body.appendChild(el); + let results = null; + let output = null; + try { + const { svg } = await mermaid.render(id, raw, el); + results = makeMermaidImage(svg); + output = document.createElement("figure"); + results.map(output.appendChild, output); + } catch (err) { + parent.classList.add("jp-mod-warning"); + results = await makeMermaidError(raw); + output = results[0]; + } finally { + el.remove(); + } + parent.classList.add("jp-RenderedMermaid"); + parent.appendChild(output); + } + + void Promise.all([...diagrams].map(renderOneMarmaid)); + }); +</script> +<style> + .jp-Mermaid:not(.jp-RenderedMermaid) { + display: none; + } + + .jp-RenderedMermaid { + overflow: auto; + display: flex; + } + + .jp-RenderedMermaid.jp-mod-warning { + width: auto; + padding: 0.5em; + margin-top: 0.5em; + border: var(--jp-border-width) solid var(--jp-warn-color2); + border-radius: var(--jp-border-radius); + color: var(--jp-ui-font-color1); + font-size: var(--jp-ui-font-size1); + white-space: pre-wrap; + word-wrap: break-word; + } + + .jp-RenderedMermaid figure { + margin: 0; + overflow: auto; + max-width: 100%; + } + + .jp-RenderedMermaid img { + max-width: 100%; + } + + .jp-RenderedMermaid-Details > pre { + margin-top: 1em; + } + + .jp-RenderedMermaid-Summary { + color: var(--jp-warn-color2); + } + + .jp-RenderedMermaid:not(.jp-mod-warning) pre { + display: none; + } + + .jp-RenderedMermaid-Summary > pre { + display: inline-block; + white-space: normal; + } +</style> +<!-- End of mermaid configuration --></head> +<body class="jp-Notebook" data-jp-theme-light="true" data-jp-theme-name="JupyterLab Light"> +<main> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=4af6b45f-f7aa-46a8-9d79-c1579ae0a799"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<h1 id="WS-2.3:-Discrete-Fourier-Transform-(DFT):-You-Try-Meow-(Miauw)">WS 2.3: Discrete Fourier Transform (DFT): You Try Meow (Miauw)<a class="anchor-link" href="#WS-2.3:-Discrete-Fourier-Transform-(DFT):-You-Try-Meow-(Miauw)">¶</a></h1><h1 style="position: absolute; display: flex; flex-grow: 0; flex-shrink: 0; flex-direction: row-reverse; top: 60px;right: 30px; margin: 0; border: 0"> +<style> + .markdown {width:100%; position: relative} + article { position: relative } + </style> +<img alt="No description has been provided for this image" src="https://gitlab.tudelft.nl/mude/public/-/raw/main/tu-logo/TU_P1_full-color.png" style="width:100px"/> +<img alt="No description has been provided for this image" src="https://gitlab.tudelft.nl/mude/public/-/raw/main/mude-logo/MUDE_Logo-small.png" style="width:100px"/> +</h1> +<h2 style="height: 10px"> +</h2> +<p><em><a href="http://mude.citg.tudelft.nl/">CEGM1000 MUDE</a>: Week 2.3, Signal Processing. For: November 27, 2024</em></p> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=eff9791a"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<p>The goal of this workshop to work with the <em>Discrete Fourier Transform</em> (DFT), implemented in Python as the <em>Fast Fourier Transform</em> (FFT) through <code>np.fft.fft</code>, and to understand and interpret its output.</p> +<p>The notebook consists of two parts:</p> +<ul> +<li>The first part (Task 0) is a demonstration of the use of the DFT (<em>you read and execute the code cells</em>),</li> +<li>The second part is a simple exercise with the DFT (<em>you write the code</em>).</li> +</ul> +<p>To start off, let's do a quick quiz question: <em>what is the primary purpose of the DFT?</em></p> +<p><em>Find the answer <a href="https://tudelft.h5p.com/content/1292126914399042257/embed">here</a>.</em></p> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=03f3b3c6-d3f6-4121-9f39-c30c8bf70ea5"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<p>That's right! We convert our signal into the frequency domain. And if you would like an additional explanation of the key frequencies, you can find it <a href="https://medium.com/@kovalenko.alx/fun-with-fourier-591662576a77">here</a>.</p> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=bfca25a5-75ce-4837-9387-01f95be10bd0"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<div style="background-color:#facb8e; color: black; vertical-align: middle; padding:15px; margin: 10px; border-radius: 10px; width: 95%"> <p>Note the use of <code>zip</code>, <code>stem</code>, <code>annotate</code> and the modulo operator +<code>%</code>. Refer to PA11 if you do not understand these tools. Furthermore, note that the term _modulus_ is also used here (and in the textbook), which is another term for _absolute value._</p></div> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=da13fbf3"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [1]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> +<span class="kn">from</span> <span class="nn">matplotlib</span> <span class="kn">import</span> <span class="n">pyplot</span> <span class="k">as</span> <span class="n">plt</span> +</pre></div> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=13234855"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<h2 id="Task-0:-Demonstration-of-DFT-using-pulse-function">Task 0: Demonstration of DFT using pulse function<a class="anchor-link" href="#Task-0:-Demonstration-of-DFT-using-pulse-function">¶</a></h2><p>In the first part of this notebook, we use $x(t)=\Pi(\frac{t}{4})$, and its Fourier transform $X(f)=4 \,\textrm{sinc}(4f)$, as an example (see the first worked example in Chapter 3 on the Fourier transform). The pulse lasts for 4 seconds in the time domain; for convenience, below it is not centered at $t$ = 0, but shifted (delayed) to the right.</p> +<p>The signal $x(t)$ clearly is non-periodic and is an energy signal; apart from a short time span of 'activity' it is zero elsewhere.</p> +<p>We create a pulse function $x(t)$ in discrete time $x_n$ by numpy. The total signal duration is $T$ = 20 seconds (observation or record length). The sampling interval is $\Delta t$ = 1 second. There are $N$ = 20 samples, and each sample represents 1 second, hence $N \Delta t = T$.</p> +<p>Note that the time array starts at $t$ = 0 s, and hence, the last sample is at $t$ = 19 s (and not at $t$ = 20 s, as then we would have 21 samples).</p> +<h3 id="Task-0.1:-Visualize-the-Signal">Task 0.1: Visualize the Signal<a class="anchor-link" href="#Task-0.1:-Visualize-the-Signal">¶</a></h3> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=b33e1be2"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [2]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="n">t</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">20</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<span class="n">xt</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="mi">8</span><span class="p">),</span> <span class="n">np</span><span class="o">.</span><span class="n">ones</span><span class="p">(</span><span class="mi">4</span><span class="p">),</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="mi">8</span><span class="p">)))</span> + +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">xt</span><span class="p">,</span><span class="s1">'o'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">stem</span><span class="p">(</span><span class="n">t</span><span class="p">[</span><span class="mi">8</span><span class="p">:</span><span class="mi">12</span><span class="p">],</span> <span class="n">xt</span><span class="p">[</span><span class="mi">8</span><span class="p">:</span><span class="mi">12</span><span class="p">])</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xticks</span><span class="p">(</span><span class="n">ticks</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">21</span><span class="p">,</span><span class="mi">5</span><span class="p">),</span> <span class="n">labels</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">21</span><span class="p">,</span><span class="mi">5</span><span class="p">))</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'time [s]'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'xn'</span><span class="p">);</span> +</pre></div> +</div> +</div> +</div> +</div> +<div class="jp-Cell-outputWrapper"> +<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser"> +</div> +<div class="jp-OutputArea jp-Cell-outputArea"> +<div class="jp-OutputArea-child"> +<div class="jp-OutputPrompt jp-OutputArea-prompt"></div> +<div class="jp-RenderedImage jp-OutputArea-output" tabindex="0"> +<img alt="No description has been provided for this image" class="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkAAAAGwCAYAAABB4NqyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAknklEQVR4nO3dfVSUdf7/8dcIApoypig3iciv1bIot4UyMErbpKh116yVzb6iJZ344s1RtBvy90tzO9LN5upmUm3eVF8rT5u2tZLF2QQtrRSxNXW7U8ISYqENTAsSrt8fLvNtAg1kZi4vPs/HOXOKi2s+8x6HkafX3Lksy7IEAABgkG52DwAAABBoBBAAADAOAQQAAIxDAAEAAOMQQAAAwDgEEAAAMA4BBAAAjBNs9wCB1tzcrEOHDql3795yuVx2jwMAANrBsiwdPnxYMTEx6tat88dvjAugQ4cOKTY21u4xAADAKTh48KAGDhzY6XWMC6DevXtLOv4HGB4ebvM0AACgPerr6xUbG+v5Pd5ZxgVQy8Ne4eHhBBAAAA7jq6ev8CRoAABgHAIIAAAYhwACAADGIYAAAIBxCCAAAGAcAggAABiHAAIAAMYhgAAAgHEIIAAAYBzj3gkagG80HmvWs9vK9dlXRxXXt6cmJQ9WSLDv/k3l5PX9PTuAznNZlmXZdeGbN2/Www8/rNLSUlVWVmr9+vUaN27cSc9TUlKi3Nxc7dmzRzExMbrzzjuVnZ3d7susr6+X2+1WXV0dH4UBnKL8wr3685YDav7B3x7dXNJtqfHKu/Y8o9f39+yAqXz9+9vWf5IcOXJEw4cP17Jly9q1/4EDB3TttdcqNTVVZWVluueeezRz5ky99NJLfp4UQIv8wr16YrP3L3hJarakJzYfUH7hXmPX9/fsAHzH1iNAP+RyuX7yCNBdd92lV155Rfv27fNsy87O1vvvv69t27a163I4AgScusZjzTr3/73W6hf8D3VzSf/8ffopPeTj5PX9PTtgui51BKijtm3bprS0NK9tV199tXbs2KHvv/++zfM0NDSovr7e6wTg1Dy7rfykv+Cl40c7nt1Wbtz6/p4dgG85KoCqqqoUGRnptS0yMlLHjh1TTU1Nm+fJz8+X2+32nGJjYwMxKtAlffbVUZ/u15XW9/fsAHzLUQEkHX+o7IdaHsH78fYWeXl5qqur85wOHjzo9xmBriqub0+f7teV1vf37AB8y1EBFBUVpaqqKq9t1dXVCg4OVr9+/do8T2hoqMLDw71OAE7NpOTB6tb2vzU8urmO72fa+v6eHYBvOSqAkpOTVVRU5LXtjTfeUFJSkrp3727TVIA5QoK76bbU+JPuc1tq/Ck/ydfJ6/t7dgC+Zes98ZtvvtGuXbu0a9cuScdf5r5r1y5VVFRIOv7wVWZmpmf/7OxsffbZZ8rNzdW+ffu0cuVKrVixQnPnzrVjfMBIedeep9svj291tKObS7r98s6/142T1/f37AB8x9aXwRcXF2v06NGttk+ePFmrV6/WlClTVF5eruLiYs/3SkpKNHv2bM8bId511128ESJgg6+PNurnC48fkb3r6nM0NfX/+PTohpPX9/fsgIl8/fvb1o/CGDVqlE7WX6tXr2617YorrtDOnTv9OBWA9vjhL/TJI33/UQ9OXt/fswPoPO6VAADAOAQQAAAwDgEEAACMQwABAADjEEAAAMA4BBAAADAOAQQAAIxDAAEAAOMQQAAAwDgEEAAAMA4BBAAAjEMAAQAA4xBAAADAOAQQAAAwDgEEAACMQwABAADjEEAAAMA4BBAAADAOAQQAAIxDAAEAAOMQQAAAwDgEEAAAMA4BBAAAjEMAAQAA4xBAAADAOAQQAAAwDgEEAACMQwABAADjEEAAAMA4BBAAADAOAQQAAIxDAAEAAOMQQAAAwDgEEAAAMA4BBAAAjEMAAQAA4xBAAADAOAQQAAAwDgEEAACMQwABAADjEEAAAMA4BBAAADAOAQQAAIxDAAEAAOMQQAAAwDgEEAAAMA4BBAAAjEMAAQAA4xBAAADAOAQQAAAwDgEEAACMQwABAADjEEAAAMA4BBAAADAOAQQAAIxDAAEAAOMQQAAAwDi2B9Dy5csVHx+vsLAwJSYmasuWLSfdf82aNRo+fLh69uyp6Oho3XLLLaqtrQ3QtAAAoCuwNYDWrl2rWbNmad68eSorK1NqaqrS09NVUVHR5v5vvfWWMjMzNXXqVO3Zs0cvvviitm/frqysrABPDgAAnMzWAFq8eLGmTp2qrKwsDRs2TEuWLFFsbKwKCgra3P+dd97R4MGDNXPmTMXHx+uyyy7T7bffrh07dpzwMhoaGlRfX+91AgAAZrMtgBobG1VaWqq0tDSv7Wlpadq6dWub50lJSdHnn3+uwsJCWZalL7/8Un/5y1903XXXnfBy8vPz5Xa7PafY2FifXg8AAOA8tgVQTU2NmpqaFBkZ6bU9MjJSVVVVbZ4nJSVFa9asUUZGhkJCQhQVFaU+ffro0UcfPeHl5OXlqa6uznM6ePCgT68HAABwHtufBO1yuby+tiyr1bYWe/fu1cyZM3XvvfeqtLRUGzdu1IEDB5SdnX3C9UNDQxUeHu51AgAAZgu264IjIiIUFBTU6mhPdXV1q6NCLfLz8zVy5EjdcccdkqQLL7xQZ5xxhlJTU3X//fcrOjra73MDAADns+0IUEhIiBITE1VUVOS1vaioSCkpKW2e5+jRo+rWzXvkoKAgScePHAEAALSHrQ+B5ebm6qmnntLKlSu1b98+zZ49WxUVFZ6HtPLy8pSZmenZf+zYsVq3bp0KCgq0f/9+vf3225o5c6YuueQSxcTE2HU1AACAw9j2EJgkZWRkqLa2VgsXLlRlZaUSEhJUWFiouLg4SVJlZaXXewJNmTJFhw8f1rJlyzRnzhz16dNHV155pR588EG7rgIAAHAgWwNIknJycpSTk9Pm91avXt1q24wZMzRjxgw/TwUAALoy218FBgAAEGgEEAAAMA4BBAAAjEMAAQAA4xBAAADAOAQQAAAwDgEEAACMQwABAADjEEAAAMA4BBAAADAOAQQAAIxDAAEAAOMQQAAAwDgEEAAAMA4BBAAAjEMAAQAA4xBAAADAOAQQAAAwDgEEAACMQwABAADjEEAAAMA4BBAAADAOAQQAAIxDAAEAAOMQQAAAwDgEEAAAMA4BBAAAjEMAAQAA4xBAAADAOAQQAAAwDgEEAACMQwABAADjEEAAAMA4BBAAADAOAQQAAIxDAAEAAOMQQAAAwDgEEAAAMA4BBAAAjEMAAQAA4xBAAADAOAQQAAAwDgEEAACMQwABAADjEEAAAMA4BBAAADAOAQQAAIxDAAEAAOMQQAAAwDgEEAAAMA4BBAAAjEMAAQAA4xBAAADAOAQQAAAwDgEEAACMQwABAADj2B5Ay5cvV3x8vMLCwpSYmKgtW7acdP+GhgbNmzdPcXFxCg0N1dlnn62VK1cGaFoAANAVBNt54WvXrtWsWbO0fPlyjRw5Uk888YTS09O1d+9eDRo0qM3zTJgwQV9++aVWrFihn/3sZ6qurtaxY8cCPDkAAHAyWwNo8eLFmjp1qrKysiRJS5Ys0euvv66CggLl5+e32n/jxo0qKSnR/v371bdvX0nS4MGDT3oZDQ0Namho8HxdX1/vuysAAAAcybaHwBobG1VaWqq0tDSv7Wlpadq6dWub53nllVeUlJSkhx56SGeddZaGDh2quXPn6ttvvz3h5eTn58vtdntOsbGxPr0eAADAeWw7AlRTU6OmpiZFRkZ6bY+MjFRVVVWb59m/f7/eeusthYWFaf369aqpqVFOTo6++uqrEz4PKC8vT7m5uZ6v6+vriSAAAAxn60NgkuRyuby+tiyr1bYWzc3NcrlcWrNmjdxut6TjD6PdeOONeuyxx9SjR49W5wkNDVVoaKjvBwcAAI5l20NgERERCgoKanW0p7q6utVRoRbR0dE666yzPPEjScOGDZNlWfr888/9Oi8AAOg6bAugkJAQJSYmqqioyGt7UVGRUlJS2jzPyJEjdejQIX3zzTeebR999JG6deumgQMH+nVeAADQddj6PkC5ubl66qmntHLlSu3bt0+zZ89WRUWFsrOzJR1//k5mZqZn/4kTJ6pfv3665ZZbtHfvXm3evFl33HGHbr311jYf/gIAAGiLrc8BysjIUG1trRYuXKjKykolJCSosLBQcXFxkqTKykpVVFR49u/Vq5eKioo0Y8YMJSUlqV+/fpowYYLuv/9+u64CAABwINufBJ2Tk6OcnJw2v7d69epW284999xWD5sBAAB0hO0fhQEAABBoBBAAADAOAQQAAIxDAAEAAOMQQAAAwDgEEAAAMA4BBAAAjEMAAQAA4xBAAADAOAQQAAAwDgEEAACMQwABAADjEEAAAMA4BBAAADAOAQQAAIxDAAEAAOMQQAAAwDgEEAAAMA4BBAAAjEMAAQAA4xBAAADAOMEdPcORI0f0wAMP6O9//7uqq6vV3Nzs9f39+/f7bDgAAAB/6HAAZWVlqaSkRJMmTVJ0dLRcLpc/5gIAAPCbDgfQa6+9pg0bNmjkyJH+mAcAAMDvOvwcoDPPPFN9+/b1xywAAAAB0eEA+v3vf697771XR48e9cc8AAAAftfhh8AeeeQRffrpp4qMjNTgwYPVvXt3r+/v3LnTZ8MBAAD4Q4cDaNy4cX4YAwAAIHA6HEAjR47UVVdd1eb3nnjiiU4PBAAA4G8dfg7Qddddpzlz5qixsdGz7V//+pfGjh2rvLw8nw4HAADgDx0OoM2bN+vVV1/VxRdfrD179mjDhg1KSEjQ4cOH9f777/tjRgAAAJ/qcACNGDFCZWVluvDCC5WYmKjrr79ec+bM0aZNmxQbG+uPGQEAAHzqlD4L7MMPP9T27ds1cOBABQcH65///CcviwcAAI7R4QB64IEHlJycrDFjxuiDDz7Q9u3bPUeEtm3b5o8ZAQAAfKrDAbR06VK9/PLLevTRRxUWFqbzzz9f7733nsaPH69Ro0b5YUQAAADf6vDL4Hfv3q2IiAivbd27d9fDDz+sX/3qVz4bDAAAwF86fATox/HzQ1dccUWnhgEAAAiEU3oSNAAAgJMRQAAAwDgEEAAAMA4BBAAAjEMAAQAA4xBAAADAOAQQAAAwDgEEAACMQwABAADjEEAAAMA4BBAAADAOAQQAAIxDAAEAAOMQQAAAwDgEEAAAMA4BBAAAjEMAAQAA4xBAAADAOAQQAAAwju0BtHz5csXHxyssLEyJiYnasmVLu8739ttvKzg4WD//+c/9OyAAAOhybA2gtWvXatasWZo3b57KysqUmpqq9PR0VVRUnPR8dXV1yszM1C9/+csATQoAALoSWwNo8eLFmjp1qrKysjRs2DAtWbJEsbGxKigoOOn5br/9dk2cOFHJyckBmhQAAHQltgVQY2OjSktLlZaW5rU9LS1NW7duPeH5Vq1apU8//VTz589v1+U0NDSovr7e6wQAAMxmWwDV1NSoqalJkZGRXtsjIyNVVVXV5nk+/vhj3X333VqzZo2Cg4PbdTn5+flyu92eU2xsbKdnBwAAzmb7k6BdLpfX15ZltdomSU1NTZo4caLuu+8+DR06tN3r5+Xlqa6uznM6ePBgp2cGAADO1r7DKH4QERGhoKCgVkd7qqurWx0VkqTDhw9rx44dKisr0/Tp0yVJzc3NsixLwcHBeuONN3TllVe2Ol9oaKhCQ0P9cyUAAIAj2XYEKCQkRImJiSoqKvLaXlRUpJSUlFb7h4eHa/fu3dq1a5fnlJ2drXPOOUe7du3SiBEjAjU6AABwONuOAElSbm6uJk2apKSkJCUnJ+vJJ59URUWFsrOzJR1/+OqLL77QM888o27duikhIcHr/AMGDFBYWFir7QAAACdjawBlZGSotrZWCxcuVGVlpRISElRYWKi4uDhJUmVl5U++JxAAAEBH2RpAkpSTk6OcnJw2v7d69eqTnnfBggVasGCB74cCAABdmu2vAgMAAAg0AggAABiHAAIAAMYhgAAAgHEIIAAAYBwCCAAAGIcAAgAAxiGAAACAcQggAABgHAIIAAAYhwACAADGIYAAAIBxCCAAAGAcAggAABiHAAIAAMYhgAAAgHEIIAAAYBwCCAAAGIcAAgAAxiGAAACAcQggAABgHAIIAAAYhwACAADGIYAAAIBxCCAAAGAcAggAABiHAAIAAMYhgAAAgHEIIAAAYBwCCAAAGIcAAgAAxiGAAACAcQggAABgHAIIAAAYhwACAADGIYAAAIBxCCAAAGAcAggAABiHAAIAAMYhgAAAgHEIIAAAYBwCCAAAGIcAAgAAxiGAAACAcQggAABgHAIIAAAYhwACAADGIYAAAIBxCCAAAGAcAggAABiHAAIAAMYhgAAAgHEIIAAAYBwCCAAAGIcAAgAAxiGAAACAcWwPoOXLlys+Pl5hYWFKTEzUli1bTrjvunXrNGbMGPXv31/h4eFKTk7W66+/HsBpAQBAV2BrAK1du1azZs3SvHnzVFZWptTUVKWnp6uioqLN/Tdv3qwxY8aosLBQpaWlGj16tMaOHauysrIATw4AAJzM1gBavHixpk6dqqysLA0bNkxLlixRbGysCgoK2tx/yZIluvPOO3XxxRdryJAhWrRokYYMGaJXX301wJMDAAAnsy2AGhsbVVpaqrS0NK/taWlp2rp1a7vWaG5u1uHDh9W3b98T7tPQ0KD6+nqvEwAAMJttAVRTU6OmpiZFRkZ6bY+MjFRVVVW71njkkUd05MgRTZgw4YT75Ofny+12e06xsbGdmhsAADif7U+CdrlcXl9bltVqW1uef/55LViwQGvXrtWAAQNOuF9eXp7q6uo8p4MHD3Z6ZgAA4GzBdl1wRESEgoKCWh3tqa6ubnVU6MfWrl2rqVOn6sUXX9RVV1110n1DQ0MVGhra6XkBAEDXYdsRoJCQECUmJqqoqMhre1FRkVJSUk54vueff15TpkzRc889p+uuu87fYwIAgC7ItiNAkpSbm6tJkyYpKSlJycnJevLJJ1VRUaHs7GxJxx+++uKLL/TMM89IOh4/mZmZWrp0qS699FLP0aMePXrI7Xbbdj0AAICz2BpAGRkZqq2t1cKFC1VZWamEhAQVFhYqLi5OklRZWen1nkBPPPGEjh07pmnTpmnatGme7ZMnT9bq1asDPT4AAHAoWwNIknJycpSTk9Pm934cNcXFxf4fCAAAdHm2vwoMAAAg0AggAABgHAIIAAAYhwACAADGIYAAAIBxCCAAAGAcAggAABiHAAIAAMYhgAAAgHEIIAAAYBwCCAAAGIcAAgAAxiGAAACAcQggAABgHAIIAAAYhwACAADGIYAAAIBxCCAAAGAcAggAABiHAAIAAMYhgAAAgHEIIAAAYBwCCAAAGIcAAgAAxiGAAACAcQggAABgHAIIAAAYhwACAADGIYAAAIBxCCAAAGAcAggAABiHAAIAAMYhgAAAgHEIIAAAYBwCCAAAGIcAAgAAxiGAAACAcQggAABgHAIIAAAYhwACAADGIYAAAIBxCCAAAGAcAggAABiHAAIAAMYhgAAAgHEIIAAAYBwCCAAAGIcAAgAAxiGAAACAcQggAABgHAIIAAAYhwACAADGIYAAAIBxCCAAAGAcAggAABgn2O4BuoqmZkvvHfhK1Ye/04DeYbokvq+Curkcsb6TZ/f3+k6ePRDrwx5O/rlx8uz+Xt/JswdifV+zPYCWL1+uhx9+WJWVlTr//PO1ZMkSpaamnnD/kpIS5ebmas+ePYqJidGdd96p7OzsAE7c2sYPKnXfq3tVWfedZ1u0O0zzx56naxKiT+v1nTy7v9d38uyBWB/2cPLPjZNn9/f6Tp49EOv7g60Pga1du1azZs3SvHnzVFZWptTUVKWnp6uioqLN/Q8cOKBrr71WqampKisr0z333KOZM2fqpZdeCvDk/2vjB5X67//Z6XWjS1JV3Xf67//ZqY0fVJ626zt5dn+v7+TZA7E+7OHknxsnz+7v9Z08eyDW9xdbA2jx4sWaOnWqsrKyNGzYMC1ZskSxsbEqKChoc//HH39cgwYN0pIlSzRs2DBlZWXp1ltv1R/+8IcAT35cU7Ol+17dK6uN77Vsu+/VvWpqbmsPe9d38uz+Xt/Jswdifc9alqXQYw0KPdag5qNH/XJy8vota1tW5/6cWzj558bJs/t7fSfPHoj1/cm2h8AaGxtVWlqqu+++22t7Wlqatm7d2uZ5tm3bprS0NK9tV199tVasWKHvv/9e3bt3b3WehoYGNTQ0eL6ur6/3wfTHvXfgq1bF+0OWpMq67/Tega+UfHa/02p9J8/u7/WdPHsg1ves8+23evlv8yRJB//zX197+T//deL6LWtb//cqKbT1300d5eSfGyfP7u/1nTx7INb3J9uOANXU1KipqUmRkZFe2yMjI1VVVdXmeaqqqtrc/9ixY6qpqWnzPPn5+XK73Z5TbGysb66ApOrDJ77RT2W/QK7v5Nn9vb6TZw/E+i16htj+FEJH8NWfk5N/bpw8u7/Xd/LsgVjfn2z/G8zl8n6GuGVZrbb91P5tbW+Rl5en3Nxcz9f19fU+i6ABvcN8ul8g13fy7P5e38mzB2L9Fq4ePXTOztJOrWECV48ePlnHyT83Tp7d3+s7efZArO9PtgVQRESEgoKCWh3tqa6ubnWUp0VUVFSb+wcHB6tfv7YPrYWGhio0NNQ3Q//IJfF9Fe0OU1Xdd20+/umSFOU+/lLA0219J8/u7/WdPHsg1ves43LJ1bNnp9ZA+zn558bJs/t7fSfPHoj1/cm2h8BCQkKUmJiooqIir+1FRUVKSUlp8zzJycmt9n/jjTeUlJTU5vN//C2om0vzx54n6fiN/EMtX88fe94pvw+CP9d38uz+Xt/JswdifdjDyT83Tp7d3+s7efZArO9Ptr4KLDc3V0899ZRWrlypffv2afbs2aqoqPC8r09eXp4yMzM9+2dnZ+uzzz5Tbm6u9u3bp5UrV2rFihWaO3euXVdB1yREq+C/fqEot/fhvSh3mAr+6xedfv8Df67v5Nn9vb6TZw/E+rCHk39unDy7v9d38uyBWN9fXJavXqN5ipYvX66HHnpIlZWVSkhI0B//+EddfvnlkqQpU6aovLxcxcXFnv1LSko0e/Zszxsh3nXXXR16I8T6+nq53W7V1dUpPDzcZ9fDye+w6eTZ/b2+k2cPxPqwh5N/bpw8u7/Xd/LsgVjf17+/bQ+gQPNXAAEAAP/x9e9vPgwVAAAYhwACAADGIYAAAIBxCCAAAGAcAggAABiHAAIAAMYhgAAAgHEIIAAAYBwCCAAAGMe2T4O3S8sbX9fX19s8CQAAaK+W39u++gAL4wLo8OHDkqTY2FibJwEAAB1VW1srt9vd6XWM+yyw5uZmHTp0SL1795bL5dsPhayvr1dsbKwOHjzI54x1IdyuXRe3bdfE7do11dXVadCgQfr3v/+tPn36dHo9444AdevWTQMHDvTrZYSHh3On64K4Xbsubtuuidu1a+rWzTdPX+ZJ0AAAwDgEEAAAMA4B5EOhoaGaP3++QkND7R4FPsTt2nVx23ZN3K5dk69vV+OeBA0AAMARIAAAYBwCCAAAGIcAAgAAxiGAAACAcQggH1m+fLni4+MVFhamxMREbdmyxe6R0EkLFiyQy+XyOkVFRdk9Fjpo8+bNGjt2rGJiYuRyufTyyy97fd+yLC1YsEAxMTHq0aOHRo0apT179tgzLDrkp27bKVOmtLoPX3rppfYMi3bLz8/XxRdfrN69e2vAgAEaN26cPvzwQ699fHG/JYB8YO3atZo1a5bmzZunsrIypaamKj09XRUVFXaPhk46//zzVVlZ6Tnt3r3b7pHQQUeOHNHw4cO1bNmyNr//0EMPafHixVq2bJm2b9+uqKgojRkzxvO5gTh9/dRtK0nXXHON1324sLAwgBPiVJSUlGjatGl65513VFRUpGPHjiktLU1Hjhzx7OOT+62FTrvkkkus7Oxsr23nnnuudffdd9s0EXxh/vz51vDhw+0eAz4kyVq/fr3n6+bmZisqKsp64IEHPNu+++47y+12W48//rgNE+JU/fi2tSzLmjx5svWb3/zGlnngO9XV1ZYkq6SkxLIs391vOQLUSY2NjSotLVVaWprX9rS0NG3dutWmqeArH3/8sWJiYhQfH6/f/e532r9/v90jwYcOHDigqqoqr/tvaGiorrjiCu6/XURxcbEGDBigoUOH6rbbblN1dbXdI6GD6urqJEl9+/aV5Lv7LQHUSTU1NWpqalJkZKTX9sjISFVVVdk0FXxhxIgReuaZZ/T666/rz3/+s6qqqpSSkqLa2lq7R4OPtNxHuf92Tenp6VqzZo3efPNNPfLII9q+fbuuvPJKNTQ02D0a2smyLOXm5uqyyy5TQkKCJN/db437NHh/cblcXl9bltVqG5wlPT3d8/8XXHCBkpOTdfbZZ+vpp59Wbm6ujZPB17j/dk0ZGRme/09ISFBSUpLi4uK0YcMGjR8/3sbJ0F7Tp0/XP/7xD7311lutvtfZ+y1HgDopIiJCQUFBraqzurq6VZ3C2c444wxdcMEF+vjjj+0eBT7S8qo+7r9miI6OVlxcHPdhh5gxY4ZeeeUVbdq0SQMHDvRs99X9lgDqpJCQECUmJqqoqMhre1FRkVJSUmyaCv7Q0NCgffv2KTo62u5R4CPx8fGKioryuv82NjaqpKSE+28XVFtbq4MHD3IfPs1ZlqXp06dr3bp1evPNNxUfH+/1fV/db3kIzAdyc3M1adIkJSUlKTk5WU8++aQqKiqUnZ1t92johLlz52rs2LEaNGiQqqurdf/996u+vl6TJ0+2ezR0wDfffKNPPvnE8/WBAwe0a9cu9e3bV4MGDdKsWbO0aNEiDRkyREOGDNGiRYvUs2dPTZw40cap0R4nu2379u2rBQsW6IYbblB0dLTKy8t1zz33KCIiQtdff72NU+OnTJs2Tc8995z++te/qnfv3p4jPW63Wz169JDL5fLN/daXL1Uz2WOPPWbFxcVZISEh1i9+8QvPy/XgXBkZGVZ0dLTVvXt3KyYmxho/fry1Z88eu8dCB23atMmS1Oo0efJky7KOv6R2/vz5VlRUlBUaGmpdfvnl1u7du+0dGu1ystv26NGjVlpamtW/f3+re/fu1qBBg6zJkydbFRUVdo+Nn9DWbSrJWrVqlWcfX9xvXf+5MAAAAGPwHCAAAGAcAggAABiHAAIAAMYhgAAAgHEIIAAAYBwCCAAAGIcAAgAAxiGAAACAcQggALYpLi6Wy+XS119/HfDLdrlccrlc6tOnT7v2b5nV5XJp3Lhxfp0NgP8RQAACYtSoUZo1a5bXtpSUFFVWVsrtdtsy06pVq/TRRx+1a9+WWSdMmODnqQAEAgEEwDYhISGKioqSy+Wy5fL79OmjAQMGtGvflll79Ojh56kABAIBBMDvpkyZopKSEi1dutTzMFJ5eXmrh8BWr16tPn366G9/+5vOOecc9ezZUzfeeKOOHDmip59+WoMHD9aZZ56pGTNmqKmpybN+Y2Oj7rzzTp111lk644wzNGLECBUXF3d4zvfff1+jR49W7969FR4ersTERO3YscNHfwoATifBdg8AoOtbunSpPvroIyUkJGjhwoWSpP79+6u8vLzVvkePHtWf/vQnvfDCCzp8+LDGjx+v8ePHq0+fPiosLNT+/ft1ww036LLLLlNGRoYk6ZZbblF5ebleeOEFxcTEaP369brmmmu0e/duDRkypN1z3nzzzbroootUUFCgoKAg7dq1S927d/fJnwGA0wsBBMDv3G63QkJC1LNnT0VFRZ103++//14FBQU6++yzJUk33nijnn32WX355Zfq1auXzjvvPI0ePVqbNm1SRkaGPv30Uz3//PP6/PPPFRMTI0maO3euNm7cqFWrVmnRokXtnrOiokJ33HGHzj33XEnqUDwBcBYCCMBppWfPnp74kaTIyEgNHjxYvXr18tpWXV0tSdq5c6csy9LQoUO91mloaFC/fv06dNm5ubnKysrSs88+q6uuukq//e1vvWYB0HUQQABOKz9+yMnlcrW5rbm5WZLU3NysoKAglZaWKigoyGu/H0ZTeyxYsEATJ07Uhg0b9Nprr2n+/Pl64YUXdP3115/CNQFwOiOAAARESEiI1xOXfeWiiy5SU1OTqqurlZqa2un1hg4dqqFDh2r27Nm66aabtGrVKgII6IJ4FRiAgBg8eLDeffddlZeXq6amxnMEp7OGDh2qm2++WZmZmVq3bp0OHDig7du368EHH1RhYWG71/n22281ffp0FRcX67PPPtPbb7+t7du3a9iwYT6ZE8DphQACEBBz585VUFCQzjvvPPXv318VFRU+W3vVqlXKzMzUnDlzdM455+jXv/613n33XcXGxrZ7jaCgINXW1iozM1NDhw7VhAkTlJ6ervvuu89ncwI4fbgsy7LsHgIAAs3lcmn9+vUd/liLKVOm6Ouvv9bLL7/sl7kABAZHgAAY66abbtLAgQPbte+WLVvUq1cvrVmzxs9TAQgEjgABMNInn3wi6fhDX/Hx8T+5/7fffqsvvvhC0vFXl/3U+xkBOL0RQAAAwDg8BAYAAIxDAAEAAOMQQAAAwDgEEAAAMA4BBAAAjEMAAQAA4xBAAADAOAQQAAAwzv8H1GruQjn7eWwAAAAASUVORK5CYII="/> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=a338eede"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<h3 id="Task-0.2:-Evaluate-(and-visualize)-the-DFT">Task 0.2: Evaluate (and visualize) the DFT<a class="anchor-link" href="#Task-0.2:-Evaluate-(and-visualize)-the-DFT">¶</a></h3><p>We use <code>numpy.fft.fft</code> to compute the one-dimensional Discrete Fourier Transform (DFT) of $x_n$, which takes a signal as argument and returns an array of coefficients (refer to the <a href="https://numpy.org/doc/stable/reference/generated/numpy.fft.fft.html">documentation</a> as needed).</p> +<p>The DFT converts $N$ samples of the time domain signal $x_n$, into $N$ samples of the frequency domain. In this case, it produces $X_k$ with $k = 0, 1, 2, \ldots, N-1$, with $N$ = 20, which are complex numbers.</p> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=26d0f558-caa7-41f2-9477-60d74940fc10"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<div style="background-color:#AABAB2; color: black; vertical-align: middle; padding:15px; margin: 10px; border-radius: 10px; width: 95%"> +<p> +<b>Task 0.2:</b> +Read the code cell below before executing it and identify the following: +<ol> +<li>Where is the DFT computed, and what is the output?</li> +<li>Why is the modulus (absolute value) used on the DFT output?</li> +<li>What are the values are used for the x and y axes of the plot?</li> +<li>How is frequency information found and added to the plot (mathematically)?</li> +</ol> +Once you understand the figure, continue reading to understand <em>what do these 20 complex numbers mean, and how should we interpret them?</em> +</p> +</div> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=3acb465b"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [3]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="n">abs_fft</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">fft</span><span class="p">(</span><span class="n">xt</span><span class="p">))</span> +<span class="n">index_fft</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">20</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">index_fft</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">,</span> <span class="s1">'o'</span><span class="p">)</span> + +<span class="n">freq</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">)</span> +<span class="k">for</span> <span class="n">x</span><span class="p">,</span><span class="n">y</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">index_fft</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">):</span> + <span class="k">if</span> <span class="n">x</span><span class="o">%</span><span class="k">5</span> == 0 or x==19: + <span class="n">label</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"f=</span><span class="si">{</span><span class="n">freq</span><span class="p">[</span><span class="n">x</span><span class="p">]</span><span class="si">:</span><span class="s2">.2f</span><span class="si">}</span><span class="s2"> Hz"</span> + <span class="n">plt</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="n">label</span><span class="p">,</span> + <span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">),</span> + <span class="n">textcoords</span><span class="o">=</span><span class="s2">"offset points"</span><span class="p">,</span> + <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">10</span><span class="p">),</span> + <span class="n">fontsize</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> + <span class="n">ha</span><span class="o">=</span><span class="s1">'center'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">5</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="o">-</span><span class="mi">2</span><span class="p">,</span><span class="mi">21</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'fft-index'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'$|X_k|$'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">stem</span><span class="p">(</span><span class="n">index_fft</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">);</span> +</pre></div> +</div> +</div> +</div> +</div> +<div class="jp-Cell-outputWrapper"> +<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser"> +</div> +<div class="jp-OutputArea jp-Cell-outputArea"> +<div class="jp-OutputArea-child"> +<div class="jp-OutputPrompt jp-OutputArea-prompt"></div> +<div class="jp-RenderedImage jp-OutputArea-output" tabindex="0"> +<img alt="No description has been provided for this image" class="" src="data:image/png;base64,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4OBgDRgwwGMZScrIyHAvEx0drfDwcI82ZWVlyszMrLbf2jh79qxGjRqlnj17auHChfXuDwCAxsapon+qzakip9OphIQEPf3002rTpo1cLpdmzZqlvn37asSIEe52w4cP1+jRozV9+nRJUlJSkiZMmKCBAwcqJiZGb775pvLy8jR16lRJ508RJSYmav78+erWrZu6deum+fPnq0WLFho/fny9X+Pjjz+u/Px8ffbZZ/rpp588XntwcHC9+wcAoKERXOrolVdeUVBQkMaOHaszZ85o+PDhSktLU2BgoLvNvn37dPjwYff0uHHjdOTIEc2dO9d947v09HSPUzrPPPOMzpw5oyeffFLHjh3Trbfeqk8//VShoaH1rjkzM1MFBQXq1auXx/yNGzdWeS0MAAB247Au/eqJwUpKSuR0OlVcXKzWrVv7uhwAAHAFavP5zTUuAADAGAQXAABgDIILAAAwBsEFAAAYg+ACAACMQXABAMDLLMvSlClT5HK55HA4tGPHDl+X1GQQXAAA8LL169crLS1NH330kfu+XbVVWlqqGTNmqG3btmrZsqVGjhypgwcP1rjMiRMnlJiYqKioKDVv3lyDBw9Wdna2R5tJkybJ4XB4PAYNGlRjvykpKerfv3+l+fv372/0YEZw8YGy8gq9lfUP/Z8Pd+qtrH+orLzC1yUBALxo3759ioiI0ODBgxUeHq6goNrf7zUxMVFr167VqlWrtGXLFp08eVL33Xefzp07V+0yjz32mDIyMrRy5Url5OQoLi5OI0aM0KFDhzza3X333SooKHA/0tPTa12fr9g2uKSmprpvgd+UpKbvVs/n/qoXPt6jFV8c0Asf71HP5/6q1PTdvi4NAOAFkyZN0owZM5SXlyeHw6HOnTvXuo/i4mK99dZbevnllzVixAjdeOONevfdd5WTk6MNGzZUucyZM2f0l7/8RQsWLNBtt92mrl27KiUlRdHR0VqyZIlH25CQEIWHh7sfV/qTN5dT1dEch8OhTZs2eaV/yabBJTs7W2+++aZuuOEGX5fiVanpu/XG5lxVXHKv4gpLemNzLuEFAJqARYsWae7cuerQoYMKCgrcp2rmz5+vVq1a1fjIysqSJG3btk0///yz4uLi3P1GRkaqT58++vzzz6v8d8vLy3Xu3DldddVVHvObN2+uLVu2eMzbtGmTwsLC1L17d02ePFlF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AABjEFxge5ZlacqUKXK5XHI4HNqxY4evS0INGC+zMF4wDcEFtrd+/XqlpaXpo48+UkFBgfr06VPrPkpLSzVjxgy1bdtWLVu21MiRI3Xw4MEal0lNTdXNN9+s0NBQhYWF6YEHHtB3333n0WbSpElyOBwej0GDBtXYb0pKivr3719p/v79+5vEB4evxislJaXSWISHh3u0sSxLKSkpioyMVPPmzTVs2DDt2rXrsv0yXjWry3h17ty50ng5HA5NmzbN3aau+9egmwdUmt9UxgsEFxhg3759ioiI0ODBgxUeHq6goKBa95GYmKi1a9dq1apV2rJli06ePKn77rtP586dq3aZzMxMTZs2TVu3blVGRobKy8sVFxenU6dOebS7++67VVBQ4H6kp6fXur6mxFfjJUm9e/f2GIucnByP5xcsWKCFCxdq8eLFys7OVnh4uO68806dOHGi1jU2Fb4ar+zsbI+xysjIkCQ99NBDHu3Yv3ApggtsbdKkSZoxY4by8vLkcDjUuXPnWvdRXFyst956Sy+//LJGjBihG2+8Ue+++65ycnK0YcOGapdbv369Jk2apN69e6tfv35avny58vLytG3bNo92ISEhCg8Pdz9cLleta6xKVX9tOhwObdq0ySv9NwRfjpckBQUFeYxFu3bt3M9ZlqVXX31Vc+bM0ZgxY9SnTx+98847On36tN5///1a13kpxqt249WuXTuPsfroo4/UpUsXDR061KMd+xcuRXCBrS1atEhz585Vhw4dVFBQoOzsbEnS/Pnz1apVq0qPMNfVylv4S+Ut/KX+35YtkqRt27bp559/VlxcnLvfyMhI9enTR59//vkV11JcXCxJld44N23apLCwMHXv3l2TJ09WUVFRfV+2pPOv/eK/NGfOnKmwsDD17NnTK/03hNqM18VjFea6WllZWZLqN1579+5VZGSkoqOj9atf/Ur/+Mc/3M/l5uaqsLDQo9+QkBANHTq0VttBTa+d8TqvtvtXWVmZ3n33XT366KNyOBwez7F/4VK1PyYINCKn06nQ0FAFBgZ6XK8wdepUjR07tlL7M2XlunvR+TfUmwacP89dWFio4OBgXXPNNR5t27dvr8LCwiuqw7IsJSUlaciQIR7XAMTHx+uhhx5SVFSUcnNz9dxzz+mOO+7Qtm3bFBISUm1/OTk5CnNdrdNl5w+lhy0OlGVZlV67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"/> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=09c72cdd"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<p>The frequency resolution $\Delta f$ equals one-over-the-measurement-duration, hence $\Delta f = 1/T$. With that knowledge, we can reconstruct the frequencies expressed in Hertz.</p> +<p>The spectrum of the sampled signal is periodic in the sampling frequency $f_s$ which equals 1 Hz ($\Delta t$ = 1 s). Therefore, it is computed just for one period $[0,f_s)$. The last value, with index 19, represents the component with frequency $f$ = 0.95 Hz. A spectrum is commonly presented and interpreted as double-sided, so in the above graph we can interpret the spectral components with indices 10 to 19 corresponding to negative frequencies.</p> +<h3 id="Task-0.3:-Identify-negative-frequencies">Task 0.3: Identify negative frequencies<a class="anchor-link" href="#Task-0.3:-Identify-negative-frequencies">¶</a></h3> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=df1f483b"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [4]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="n">abs_fft</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">fft</span><span class="p">(</span><span class="n">xt</span><span class="p">))</span> +<span class="n">plt</span><span class="o">.</span><span class="n">stem</span><span class="p">(</span><span class="n">index_fft</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">index_fft</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">,</span> <span class="s1">'o'</span><span class="p">)</span> + +<span class="n">freq</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">),</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="o">-</span><span class="mf">0.5</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">)))</span> +<span class="k">for</span> <span class="n">x</span><span class="p">,</span><span class="n">y</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">index_fft</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">):</span> + <span class="k">if</span> <span class="n">x</span><span class="o">%</span><span class="k">5</span> == 0 or x==19: + <span class="n">label</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"f=</span><span class="si">{</span><span class="n">freq</span><span class="p">[</span><span class="n">x</span><span class="p">]</span><span class="si">:</span><span class="s2">.2f</span><span class="si">}</span><span class="s2"> Hz"</span> + <span class="n">plt</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="n">label</span><span class="p">,</span> + <span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">),</span> + <span class="n">textcoords</span><span class="o">=</span><span class="s2">"offset points"</span><span class="p">,</span> + <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">10</span><span class="p">),</span> + <span class="n">fontsize</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> + <span class="n">ha</span><span class="o">=</span><span class="s1">'center'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">5</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlim</span><span class="p">(</span><span class="o">-</span><span class="mi">2</span><span class="p">,</span><span class="mi">21</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'fft-index'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'$|X_k|$'</span><span class="p">);</span> +</pre></div> +</div> +</div> +</div> +</div> +<div class="jp-Cell-outputWrapper"> +<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser"> +</div> +<div class="jp-OutputArea jp-Cell-outputArea"> +<div class="jp-OutputArea-child"> +<div class="jp-OutputPrompt jp-OutputArea-prompt"></div> +<div class="jp-RenderedImage jp-OutputArea-output" tabindex="0"> +<img alt="No description has been provided for this image" class="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAi4AAAG2CAYAAABYlw1sAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA0xklEQVR4nO3de1hVdd7//9cGBEFxFxJuGBFpPGVYplbiaNHJUStNZia7bUjv2zAnj0NeFXn3k9sp6G5mLO9xsrIpO9joNd9bp6YhJjIFm7RhVMpTjnmjUEHmCc8gsn5/OO5xuzkIbNjrw34+rmtdutb+rMV7r89ae79YJxyWZVkCAAAwQJC/CwAAALhUBBcAAGAMggsAADAGwQUAABiD4AIAAIxBcAEAAMYguAAAAGMQXAAAgDEILgAAwBgEFwAAYAxbBZesrCw5HA6PweVy+bssAABgEyH+LuBiV199tT788EP3eHBwsB+rAQAAdmK74BISEsJRFgAAUCfbBZfdu3crLi5OYWFhuvHGG5Wdna0rr7yyzrZVVVWqqqpyj9fW1urQoUPq2rWrHA5HW5UMAABawLIsHTt2THFxcQoKavgqFodlWVYb1dWo999/XydPnlSfPn307bff6qmnntIXX3yh7du3q2vXrl7ts7Ky9F//9V9+qBQAAPhaWVmZunfv3mAbWwWXi504cULf//739eijjyojI8Pr9YuPuFRWVqpHjx4qKytTly5d2rJUAADQTEePHlV8fLyOHDkip9PZYFvbnSq6UKdOnTRgwADt3r27ztfDwsIUFhbmNb1Lly4EFwAADHMpl3nY6nboi1VVVWnnzp2KjY31dykAAMAGbBVc5s6dq4KCApWUlOjTTz/Vj3/8Yx09elSTJk3yd2kAAMAGbHWq6KuvvtK//du/6cCBA7riiis0dOhQbdy4UQkJCf4uDQAA2ICtgsuKFSv8XQIAALAxW50qAgAAaAjBBQAAGIPgAgAAjEFwAQAAxiC4AAAAYxBcAACAMQguAADAGAQXAABgDIILAAAwBsEFAAAYg+ACAACMQXABAADGILgAAABjEFwAAIAxCC4AAMAYBBcAAGAMggsAADAGwQUAABiD4AIAAIxBcAEAAMYguAAAAGMQXAAAgDEILgAAwBgEFwAAYAyCCwAAMAbBBQAAGIPgAgAAjEFwAQAAxiC4AAAAYxBcAACAMQguAADAGAQXAABgDIILAAAwBsEFAAAYg+ACAACMQXABAADGILgAAABjEFwAAIAxCC4AAMAYBBcAAGAMggsAADAGwQUAABiD4AIAAIwRkMHFsixNnTpVUVFRcjgcKi4u9ndJAADgEgRkcMnLy9OyZcv03nvvqby8XElJSU1eRlVVlWbOnKno6Gh16tRJY8eO1VdffdXofC+88IISExPVsWNHDR48WOvXr/d43bIsZWVlKS4uTuHh4UpJSdH27dsbXGZWVpYGDhzoNX3v3r0EMwBAuxKQwWXPnj2KjY3VsGHD5HK5FBIS0uRlzJkzR6tXr9aKFSv08ccf6/jx47rrrrt09uzZeudZuXKl5syZo3nz5mnLli0aMWKERo8erdLSUnebZ599VgsXLtTixYtVVFQkl8ulO+64Q8eOHWvWewUAoF2x2pHKykpLklVZWVlvm0mTJlmS3ENCQkKTf86RI0esDh06WCtWrHBP+/rrr62goCArLy+v3vluuOEGa9q0aR7T+vXrZz3++OOWZVlWbW2t5XK5rGeeecb9+unTpy2n02m9+OKL9S53/vz51rXXXus1vaSkxJJkbdmyxbIs7/d+fli7du0lvGsAAFrHpXx/nxdwR1wWLVqkBQsWqHv37iovL1dRUZEkKTs7W507d25wOH9aZ9OmTTpz5oxGjhzpXm5cXJySkpL0ySef1Plzq6urtWnTJo95JGnkyJHueUpKSlRRUeHRJiwsTDfffHO9y23qey8vL3cPs2fPVkxMjPr169fiZQMA0Baafo7EcE6nU5GRkQoODpbL5XJPnzZtmu69994G5/3e974nSaqoqFBoaKguv/xyj9e7deumioqKOuc9cOCAzp49q27dutU7z/l/62qzb9++BmvbunWrOnfu7DHNsiyPcafTKafTKUlatWqVXnzxRX344Yce6wEAADsLuOBSn6ioKEVFRbVoGZZlyeFwNNjm4tfrmudS2lysb9++evfddz2mff3110pJSfFqu2XLFj3wwAP67W9/q+HDhze4XAAA7CTgThXVpymnilwul6qrq3X48GGPZezfv9/raMl50dHRCg4O9joic+E85498NNSmPqGhoerVq5fHkJCQ4NWuoqJCY8eO1ZQpUzRlypQGlwkAgN0QXP5p2rRpKi4ubnAYMmSIJGnw4MHq0KGD8vPz3fOXl5dr27ZtGjZsWJ3LDw0N1eDBgz3mkaT8/Hz3PImJiXK5XB5tqqurVVBQUO9ym+L06dMaN26c+vXrp4ULF7Z4eQAAtDVOFf1TU04VOZ1OTZkyRY888oi6du2qqKgozZ07VwMGDNDtt9/ubnfbbbdp/PjxmjFjhiQpIyNDaWlpGjJkiJKTk/Xyyy+rtLRU06ZNk3TuFNGcOXOUnZ2t3r17q3fv3srOzlZERIQmTpzY4vf40EMPqaysTGvWrNF3333n8d5DQ0NbvHwAAFobwaWZnnvuOYWEhOjee+/VqVOndNttt2nZsmUKDg52t9mzZ48OHDjgHp8wYYIOHjyoBQsWuB98l5ub63FK59FHH9WpU6f08MMP6/Dhw7rxxhv1wQcfKDIyssU1FxQUqLy8XP379/eYvnbt2jqvhQEAwG4c1sW3nhjs6NGjcjqdqqysVJcuXfxdDgAAuARN+f7mGhcAAGAMggsAADAGwQUAABiD4AIAAIxBcAEAAMYguAAA4COWZWnq1KmKioqSw+FQcXGxv0tqdwguAAD4SF5enpYtW6b33nvP/bwuXzh8+LDS0tLcfyw3LS1NR44caXAey7KUlZWluLg4hYeHKyUlRdu3b/dok5KSIofD4THcd999DS538uTJuueee7ymr1u3Tg6Ho9G6Worg4gfVNbX63fr/0//3zjb9bv3/qbqm1t8lAQB8YM+ePYqNjdWwYcPkcrkUEuKb57xOnDhRxcXFysvLU15enoqLi5WWltbgPM8++6wWLlyoxYsXq6ioSC6XS3fccYeOHTvm0S49PV3l5eXu4aWXXvJJza3FtsElJyfH/Qj89iQnd4f6Pfm+fvHnnXpjwz794s871e/J95WTu8PfpQEAWmDy5MmaOXOmSktL5XA41LNnT58sd+fOncrLy9Mrr7yi5ORkJScna+nSpXrvvfe0a9euOuexLEvPP/+85s2bp9TUVCUlJen111/XyZMn9fbbb3u0jYiIkMvlcg9Op9Mnddd1NMfhcGjv3r0tWq4tg0tRUZFefvllXXPNNf4uxadycnfopcIS1V70rOJaS3qpsITwAgAGW7RokRYsWKDu3burvLxcRUVFkqTs7Gx17ty5wWH9+vX1LnfDhg1yOp268cYb3dOGDh0qp9OpTz75pM55SkpKVFFRoZEjR7qnhYWF6eabb/aaZ/ny5YqOjtbVV1+tuXPneh2Raa5Vq1Z5HMlJTU1V37591a1btxYt13Z/q+j48eO6//77tXTpUj311FP+LsdnqmtqtXR9SYNtlq4v0SMj+yk0xJZ5EgDQAKfTqcjISAUHB8vlcrmnT5s2Tffee2+D837ve9+r97WKigrFxMR4TY+JiVFFRUW980jyCgndunXTvn373OP333+/EhMT5XK5tG3bNmVmZuqzzz5Tfn5+g/W+99576ty5s8e0s2fPeoxf+IeLn3vuOX300Uf69NNPFR4e3uCyG2O74DJ9+nTdeeeduv322xsNLlVVVaqqqnKPHz16tLXLa7Y3N+z1OtJysVrrXLspI65sm6IAAK0uKirK40u8IdOmTdNbb73lHj9+/LgkyeFweLW1LKvO6Re6+PWL50lPT3f/PykpSb1799aQIUO0efNmDRo0qN7l3nLLLVqyZInHtE8//VQ//elPvdq+//77evzxx/WnP/1Jffr0abDeS2GrX+1XrFihzZs3Kycn55La5+TkuK+wdjqdio+Pb+UKm2/foZM+bQcAMENTThUtWLBAxcXF7kGSXC6Xvv32W6/lfvfdd/Wedjl/xOfiIzL79+9v8FTNoEGD1KFDB+3evbvB99SpUyf16tXLY6jrqNGOHTt033336ZlnnvE4bdUStjniUlZWptmzZ+uDDz5Qx44dL2mezMxMZWRkuMePHj1q2/CSEBXh03YAADM05VRRTEyM12mh5ORkVVZW6m9/+5tuuOEGSeeOblRWVmrYsGF1Lu/86Z/8/Hxdd911kqTq6moVFBTov//7v+utY/v27Tpz5oxiY2Mv+f3V5+DBg7r77ruVmpqqn//85y1e3nm2CS6bNm3S/v37NXjwYPe0s2fPqrCwUIsXL1ZVVZWCg4M95gkLC1NYWFhbl9osack99XTuzgZPFwU5zrUDALQfTTlVVJerrrpKo0aNUnp6uvtW5alTp+quu+5S37593e369eunnJwcjR8/3n1XbnZ2tnr37q3evXsrOztbERERmjhxoqRzt24vX75cY8aMUXR0tHbs2KFHHnlE1113nX7wgx+07E1LSk1NVXh4uLKysjyO/FxxxRVe3+dNYZvgctttt2nr1q0e0/793/9d/fr102OPPdaiN2kHoSFBSh+RqJcK679AN31EIhfmAgC8LF++XLNmzXKfbhk7dqwWL17s0WbXrl2qrKx0jz/66KM6deqUHn74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"/> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=2d87a9a6"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<p>Now we can interpret the DFT of the $x(t)=\Pi(\frac{t}{4})$. The sampling interval is $\Delta t$ = 1 second, and the obsesrvation length is T=20 seconds, and we have N=20 samples.</p> +<ul> +<li>We can recognize a bit of a sinc function.</li> +<li>The DFT is computed from 0 Hz, for positive frequencies up to $\frac{fs}{2} = 0.5$ Hz, after which the negative frequencies follow from -0.5 to -0.05 Hz.</li> +<li>$X(f)=4 \textrm{sinc}(4f)$ has its first null at $f=0.25$Hz.</li> +</ul> +<h3 id="Task-0.4:-Create-symmetric-plot">Task 0.4: Create symmetric plot<a class="anchor-link" href="#Task-0.4:-Create-symmetric-plot">¶</a></h3><p>For convenient visualization, we may want to explicitly shift the negative frequencies to the left-hand side to create a symmetric plot. We can use <code>numpy.fft.fftshift</code> to do that. In other words, the zero-frequency component appears in the center of the spectrum. Now, it nicely shows a symmetric sprectrum. It well resembles the sinc-function (taking into account that we plot the modulus/absolute value). The output of the DFT still consists of $N$ = 20 elements. To enable this, we set up a new frequency array (in Hz) on the interval $[-fs/2,fs/2)$.</p> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=e1eef6b6-1e90-43db-b059-6521b2a840d3"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<div style="background-color:#AABAB2; color: black; vertical-align: middle; padding:15px; margin: 10px; border-radius: 10px; width: 95%"> +<p> +<b>Task 0.4:</b> +Read the code cell below before executing it and identify how the plot is modified based on the (new) specification of frequency. Note that it is more than just the <code>freq</code> variable! +</p> +</div> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=a8aac894"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [5]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="n">abs_fft_shift</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">fftshift</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">fft</span><span class="p">(</span><span class="n">xt</span><span class="p">)))</span> +<span class="n">freq</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="o">-</span><span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">stem</span><span class="p">(</span><span class="n">freq</span><span class="p">,</span> <span class="n">abs_fft_shift</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">freq</span><span class="p">,</span> <span class="n">abs_fft_shift</span><span class="p">,</span> <span class="s1">'o'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'|Xk|'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'frequency [Hz]'</span><span class="p">);</span> +</pre></div> +</div> +</div> +</div> +</div> +<div class="jp-Cell-outputWrapper"> +<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser"> +</div> +<div class="jp-OutputArea jp-Cell-outputArea"> +<div class="jp-OutputArea-child"> +<div class="jp-OutputPrompt jp-OutputArea-prompt"></div> +<div class="jp-RenderedImage jp-OutputArea-output" tabindex="0"> +<img alt="No description has been provided for this image" class="" src="data:image/png;base64,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GS1fvlyXX365evfurcGDB2vWrFn68ssvO69oL7Zq1SpFRESoR48eio6OVmFhYYv98/PzFR0drR49emj48OFavXp1J1VqnraM/datWzV58mQNHDhQgYGBiomJ0TvvvNOJ1Zqjrev8Oe+//758fX01duxY1xboYoSbLu6uu+5SaWmpduzYoR07dqi0tFQJCQmtWvbNN9/UBx98oMGDB7u4SvO0ddxPnz6tPXv26PHHH9eePXu0detW/f3vf9fNN9/ciVV7py1btmjJkiV69NFHVVJSotjYWE2bNk0VFRVN9i8vL1d8fLxiY2NVUlKiFStWaPHixcrKyurkyr1fW8e+oKBAkydPVnZ2tnbv3q1rr71WN910k0pKSjq5cu/W1nE/p7q6WrNmzdKkSZM6qVIXstBllZWVWZKsXbt2OdqKioosSdZnn33W4rJffPGF9S//8i/WJ598Yg0bNsx68cUXXVytOS5l3M/34YcfWpKsw4cPu6JMY1x11VXWwoULndouu+wy65FHHmmyf1JSknXZZZc5tS1YsMC6+uqrXVajqdo69k0ZNWqU9dRTT3V0aUZr77jPnDnTeuyxx6wnnnjCuuKKK1xYoeux56YLKyoqUlBQkH7+85872q6++moFBQXpb3/7W7PL2e12JSQk6OGHH1ZUVFRnlGqU9o77haqrq2Wz2dS3b18XVGmGuro67d69W1OmTHFqnzJlSrNjXVRU1Kj/1KlTVVxcrDNnzrisVtO0Z+wvZLfbdfLkSfXr188VJRqpveO+YcMGHTx4UE888YSrS+wUXfKHM3FWVVWVgoODG7UHBwerqqqq2eV+97vfydfXV4sXL3ZlecZq77if74cfftAjjzyiu+66y+t+9K4zHT9+XA0NDQoJCXFqDwkJaXasq6qqmuxfX1+v48ePKzQ01GX1mqQ9Y3+hF154QadOndIdd9zhihKN1J5xP3DggB555BEVFhbK19eMWMCeGwM9+eSTstlsLU7FxcWSJJvN1mh5y7KabJek3bt366WXXlJmZmazfboqV477+c6cOaM777xTdrtdq1at6vDnYaILx/ViY91U/6bacXFtHftz3njjDT355JPasmVLk/8MoGWtHfeGhgbdddddeuqpp/STn/yks8pzOTMiGpw88MADuvPOO1vsEx4ero8//lhfffVVo9v+7//+r1HqP6ewsFDHjh3T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edE67r33XiUkJOjFF1/Uhg0bNHPmTPXq1atVz+FCgwYN0ogRI5zaAgIC9O233zq1PfPMM9qxY4c+/PDDRuENwKUj3ABok5/+9KfKyspSeHi4fH0bf4SMGDFC3bt3165duzR06FBJ0jfffKO///3vTntQBg4cqMrKSsf8gQMHdPr0aafH2bJli4KDgxUYGNiuWi+//HLZ7Xbl5+c32qNyTnx8vHr37q309HS9/fbbKigoaNdjtVZWVpaefvppvf322y45rwcAJxQDaKNFixbpxIkT+vd//3d9+OGH+sc//qGdO3dq7ty5amhoUJ8+fTRv3jw9/PDD+t///V998sknmjNnTqNDL9ddd51efvll7dmzR8XFxVq4cKHTXpi7775bAwYM0PTp01VYWKjy8nLl5+froYce0hdffNGqWsPDwzV79mzNnTtXb775psrLy5WXl6c//vGPjj7dunXTnDlzlJycrBEjRjgdTuton3zyiWbNmqXly5crKipKVVVVqqqq0okTJ1z2mEBXRLgB0CaDBw/W+++/r4aGBk2dOlWjR4/WQw89pKCgIEeAef755xUXF6ebb75Z119/vcaPH6/o6Gin+3nhhRcUFhamuLg43XXXXVq2bJnT4aBevXqpoKBAQ4cO1a233qqRI0dq7ty5+v7779u0Jyc9PV233Xab7r//fl122WWaP3++Tp065dRn3rx5qqur09y5cy9hZC6uuLhYp0+f1jPPPKPQ0FDHdOutt7r0cYGuxmZdeNAbAFxg4sSJGjt2rNLS0txdSiPvv/++Jk6cqC+++EIhISEt9p0zZ46+/fbbDv/phc5+DMBk7LkB0GXV1tbq888/1+OPP6477rjjosHmnO3bt6tPnz7avn17h9ZTWFioPn36NHkSNYDW44RiAF3WG2+8oXnz5mns2LHauHFjq5Z57rnn9Nhjj0k6++2wjjRu3DjHD5Y29VV7AK3DYSkAAGAUDksBAACjEG4AAIBRCDcAAMAohBsAAGAUwg0AADAK4QYAABiFcAMAAIxCuAEAAEb5f+MVs8jcKRfhAAAAAElFTkSuQmCC"/> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=569ca2d3"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<h3 id="Task-0.5:-Showing-spectrum-only-for-positive-frequencies">Task 0.5: Showing spectrum only for positive frequencies<a class="anchor-link" href="#Task-0.5:-Showing-spectrum-only-for-positive-frequencies">¶</a></h3><p>In practice, because of the symmetry, one typically plots only the right-hand side of the (double-sided) spectrum, hence only the part for positive frequencies $f \geq 0$. This is simply a matter of preference, and a way to save some space.</p> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=a26e361d-c5fa-47a2-b32c-416cc3d10659"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<div style="background-color:#AABAB2; color: black; vertical-align: middle; padding:15px; margin: 10px; border-radius: 10px; width: 95%"> +<p> +<b>Task 0.5:</b> +Can you identify what has changed (in the code and visually), compared to the previous plot? +</p> +</div> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=b9608638"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [6]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="n">N</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">xt</span><span class="p">)</span> +<span class="n">abs_fft</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">fft</span><span class="p">(</span><span class="n">xt</span><span class="p">))</span> +<span class="n">freq</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.05</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">freq</span><span class="p">[:</span><span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="o">/</span><span class="mi">2</span><span class="p">)],</span> <span class="n">abs_fft</span><span class="p">[:</span><span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="o">/</span><span class="mi">2</span><span class="p">)],</span> <span class="s1">'o'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">stem</span><span class="p">(</span><span class="n">freq</span><span class="p">[:</span><span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="o">/</span><span class="mi">2</span><span class="p">)],</span> <span class="n">abs_fft</span><span class="p">[:</span><span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="o">/</span><span class="mi">2</span><span class="p">)])</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'$|X_k|$'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'frequency [Hz]'</span><span class="p">);</span> +</pre></div> +</div> +</div> +</div> +</div> +<div class="jp-Cell-outputWrapper"> +<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser"> +</div> +<div class="jp-OutputArea jp-Cell-outputArea"> +<div class="jp-OutputArea-child"> +<div class="jp-OutputPrompt jp-OutputArea-prompt"></div> +<div class="jp-RenderedImage jp-OutputArea-output" tabindex="0"> +<img alt="No description has been provided for this image" class="" src="data:image/png;base64,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E9zmjxw5okOHDqlfv35Naj/99FN9/fXXcjqdio2NdY0PGDBAUVFRrXrdI0eO6JNPPlH//v3dxv/2t7+57WKKjo5Wr169XPOhoaH68MMPJUnHjh1Tr169FB8f7/E1QkNDdf/992vr1q367ne/qzfffFN/+9vf9OCDD7aq16uef/553XvvvW5jjz/+uBoaGprULliwQBcuXFBubq58fNjoDngTYQdAq/Tt29dtvrGxUdOmTdOvf/3rJrWhoaE6depUi57X4XDIsiy3sWuPtWlsbFRMTIx+//vfN1l20KBBrv/u3bt3k+dtbGyUJAUEBNywj4ULF2r27Nl6/vnntW3bNs2cOVOBgYEteg/fNGTIEI0cOdJtrH///vryyy/dxn75y1/qwIEDeu+995qEOQDtR9gB0C7f+c53lJ2drYiICPn6Nv2TMnLkSPXu3VuHDx/W8OHDJUn/8z//o48//thtC8ugQYNUVVXlmj916pQuXbrk9jqvvvqqBg8erKCgoDb1esstt6ixsVH5+flNtrhclZSUpL59+2rjxo3av3+/CgoK2vRaLZWdna01a9Zo//79HXJcEAAOUAbQTosXL9b58+f14x//WO+9957+/Oc/6+DBg5o/f74aGhrUr18/LViwQD/72c/0X//1X/roo480b968Jrtq7rnnHr344os6evSoiouLlZyc7LaV5uGHH9bNN9+s6dOnq7CwUGVlZcrPz9eyZcv0l7/8pUW9RkREaO7cuZo/f75ee+01lZWVKS8vT//+7//uqunVq5fmzZun1NRUjRw50m33m7d99NFHmjNnjh5//HFFR0erurpa1dXVOn/+fIe9JtATEXYAtMvQoUP1zjvvqKGhQVOmTNHYsWO1bNkyBQcHuwLNv/3bv2nSpEn6h3/4B91777266667FBMT4/Y8zz33nMLCwjRp0iTNmjVLK1eudNt9FBgYqIKCAg0fPlw/+tGPNHr0aM2fP19ff/11q7b0bNy4Uf/4j/+oRx99VKNGjdKiRYt08eJFt5oFCxbI6XRq/vz57fhkbqy4uFiXLl3SL3/5S4WGhrqmH/3oRx36ukBP47C+uZMcADpBQkKCxo0bp/T09K5upYl33nlHCQkJ+stf/qKQkJBma+fNm6cvv/zS67eK6OzXAEzGlh0A+F91dXX65JNP9NRTT+mhhx66YdC56s0331S/fv305ptverWfwsJC9evXz+NB2QBajgOUAeB/vfLKK1qwYIHGjRunHTt2tGiZ3/zmN/r5z38u6crZZ940YcIE1w1YPZ3aD6Bl2I0FAACMxm4sAABgNMIOAAAwGmEHAAAYjbADAACMRtgBAABGI+wAAACjEXYAAIDRCDsAAMBo/x/fK7l1H/ZV1AAAAABJRU5ErkJggg=="/> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=83c4ca67-9234-4741-a56f-294a12bcd98a"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<div style="background-color:#AABAB2; color: black; vertical-align: middle; padding:15px; margin: 10px; border-radius: 10px; width: 95%"> +<p> +<b>Task 0.6:</b> +Confirm that you understand how we have arrived at the plot above, which illustrates the magnitude (amplitude) spectrum for frequencies $f \in [0,f_s/2)$, rather than $[0,f_s)$. +</p> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=9f5558b4"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<h2 id="Task-1:-Application-of-DFT-using-simple-cosine">Task 1: Application of DFT using simple cosine<a class="anchor-link" href="#Task-1:-Application-of-DFT-using-simple-cosine">¶</a></h2> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=46dd5c0c"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<p>It is always a good idea, in spectral analysis, to run a test with a very simple, basic signal. In this way you can test and verify your coding and interpretation of the results.</p> +<p>Our basic signal is just a plain cosine. We take the amplitude equal to one, and zero initial phase, so the signal reads $x(t) = \cos(2 \pi f_c t)$, with $f_c$ = 3 Hz in this exercise. With such a simple signal, we know in advance how the spectrum should look like. Namely just a spike at $f$ = 3 Hz, and also one at $f$ = -3 Hz, as we're, for mathematical convenience, working with double sided spectra. The spectrum should be zero at all other frequencies.</p> +<p>As a side note: the cosine is strictly a periodic function, not a-periodic (as above); still, the Fourier transform of the cosine is defined as two Dirac delta pulses or peaks (at 3 Hz and -3 Hz). You may want to check out the second worked example in Chapter 3 on the Fourier transform: Fourier transform in the limit.</p> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=87de3cc5"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<div style="background-color:#AABAB2; color: black; vertical-align: middle; padding:15px; margin: 10px; border-radius: 10px; width: 95%"> +<p> +<b>Task 1:</b> +<p>Create a sampled (discrete time) cosine signal by sampling at $f_s$ = 10 Hz, for a duration of $T$ = 2 seconds (make sure you use exactly $N$ = 20 samples). Plot the sampled signal, compute its DFT and plot its magnitude spectrum $|X_k|$ with proper labeling of the axes (just like we did in the first part of this notebook). Include a plot of the spectrum of the sampled cosine signal using only the positive frequencies (up to $f_s/2$, as in the last plot of the previous task).</p> +<p><em>Note: you are expected to produce three separate plots.</em></p> +</p> +</div> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=28ad034e"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [13]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="c1">### SOLUTION</span> + +<span class="n">fc</span><span class="o">=</span><span class="mi">3</span> +<span class="n">fs</span><span class="o">=</span><span class="mi">10</span> +<span class="n">dt</span><span class="o">=</span><span class="mi">1</span><span class="o">/</span><span class="n">fs</span> +<span class="n">T</span><span class="o">=</span><span class="mi">2</span> +<span class="n">N</span><span class="o">=</span><span class="n">T</span><span class="o">*</span><span class="n">fs</span> +<span class="n">t</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">T</span><span class="p">,</span><span class="n">dt</span><span class="p">)</span> +<span class="n">xt</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="o">*</span><span class="n">fc</span><span class="o">*</span><span class="n">t</span><span class="p">)</span> + +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">t</span><span class="p">,</span><span class="n">xt</span><span class="p">,</span> <span class="n">marker</span> <span class="o">=</span> <span class="s1">'o'</span><span class="p">)</span> + +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'time [s]'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'xn'</span><span class="p">);</span> +</pre></div> +</div> +</div> +</div> +</div> +<div class="jp-Cell-outputWrapper"> +<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser"> +</div> +<div class="jp-OutputArea jp-Cell-outputArea"> +<div class="jp-OutputArea-child"> +<div class="jp-OutputPrompt jp-OutputArea-prompt"></div> +<div class="jp-RenderedImage jp-OutputArea-output" tabindex="0"> +<img alt="No description has been provided for this image" class="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAksAAAGwCAYAAAC5ACFFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACO6UlEQVR4nO29eZgb1ZX3/y3tvardrd6MGy/gBWMgtsF4wRgGMCaBTMIAJgkm5DVkCMMkhjBJPEmGZd4JYSYJEGYgG8T5AQEmMU7Ci3EwBC/EC3gjcTDejY1pdbd6UasX7fX7Q7qlUrdaLalLqnurzud59IDVpVJVqc6tc88953skWZZlEARBEARBEBmx6H0ABEEQBEEQPEPOEkEQBEEQRBbIWSIIgiAIgsgCOUsEQRAEQRBZIGeJIAiCIAgiC+QsEQRBEARBZIGcJYIgCIIgiCzY9D4AIxCPx/Hxxx+jqqoKkiTpfTgEQRAEQeSALMsIBAIYP348LJaR40fkLGnAxx9/jJaWFr0PgyAIgiCIAjh16hQmTJgw4t/JWdKAqqoqAImLXV1drfPREARBEASRC729vWhpaVGe4yNBzpIGsKW36upqcpYIgiAIQjBGS6GhBG+CIAiCIIgskLNEEARBEASRBXKWCIIgCIIgskDOEkEQBEEQRBbIWSIIgiAIgsgCOUsEQRAEQRBZIGeJIAiCIAgiC+QsEQRBEARBZIGcJYIgCIIgiCyQgjenxOIy3jnehfZAEA1VLsybXAurhZr0EgTPkN0ShDERKrK0ZcsWXHfddRg/fjwkScLvfve7UT+zefNmzJ07Fy6XC1OmTMFPfvKTYdusXbsWM2fOhNPpxMyZM7Fu3boiHH3ubNjfikse+RM+9/Md+NqL+/C5n+/AJY/8CRv2t+p6XARBjAzZLUEYF6Gcpf7+flxwwQX47//+75y2P378OD75yU9i8eLF2Lt3L/71X/8VX/3qV7F27Vplm+3bt2P58uVYsWIF3nvvPaxYsQI33XQTdu7cWazTyMqG/a34ynN70OoPpr3v9Qfxlef20MBLEBxCdksQxkaSZVnW+yAKQZIkrFu3Dp/5zGdG3Oab3/wm/vCHP+DAgQPKe3feeSfee+89bN++HQCwfPly9Pb24rXXXlO2WbZsGcaNG4cXXnghp2Pp7e2F2+2G3+8fUyPdWFzGJY/8adiAy5AANLldePubf0ehfYLgBLJbghCXXJ/fQkWW8mX79u1YunRp2ntXX301du3ahUgkknWbbdu2jbjfUCiE3t7etJcWvHO8a8QBFwBkAK3+IN453qXJ9xEEMXbIbgnC+BjaWfJ6vWhsbEx7r7GxEdFoFD6fL+s2Xq93xP0+/PDDcLvdyqulpUWT420PjDzgFrIdQRDFh+yWIIyPoZ0lILFcp4atOqrfz7TN0PfUrF69Gn6/X3mdOnVKk2NtqHJpuh1BEMWH7JYgjI+hpQOampqGRYja29ths9lQV1eXdZuh0SY1TqcTTqdT8+OdN7kWzW4XvP4gMiWSsdyHeZNrNf9ugiAKg+yWIIyPoSNLCxYswMaNG9Pee/3113HhhRfCbrdn3WbhwoUlO06G1SLh/utmAkgMsGrYv++/biYliRIER6jtdihktwRhDIRylvr6+rBv3z7s27cPQEIaYN++fTh58iSAxPLYrbfeqmx/55134sMPP8S9996LAwcO4JlnnsHTTz+N++67T9nma1/7Gl5//XU88sgj+OCDD/DII4/gjTfewKpVq0p5agrLZjXjqVvmoMmdHrJvcrvw1C1zsGxWsy7HRRDEyDC7tVvTHSKyW4IwBkJJB2zatAmXX375sPe/+MUvYs2aNbjttttw4sQJbNq0Sfnb5s2bcc899+Bvf/sbxo8fj29+85u488470z7/29/+Ft/5zndw7NgxnHXWWfiP//gPXH/99Tkfl1bSAWpicRnbj/qw4ul3IAPY/q2/Q3NNmSb7JgiiOCz43hto7Q0BAL60aBK+8ymKKBEEz+T6/BbKWeKVYjhLjPnfexPe3iD+cPcinD+hRtN9EwShHbG4jGnfeQ2xeGJI/cplZ+Gby2bofFQEQWSDdJYMQmNyOS6bjgtBEPrT2RdSHCUAaCObJQjDQM4S5zRXJ5yltl4aeAmCZ4ZOaGiCQxDGgZwlzmmiyBJBCIE3OaFhKUo0wSEI40DOEucwZ8lLzhJBcA2z0elNibyHVn8QlBJKEMaAnCXOaSZniSCEgEV/P9HiBgAMRmLoHYzqeUgEQWgEOUuc05jMWfJSSJ8guIYtu02qq8C48oToLdktQRgDcpY4p1nJWRqkkD5BcEyrfxBAYumcTXLYewRBiA05S5zDBt1gJE4hfYLgGLZU3lTtouVzgjAY5CxxjstuVUL6rb00SyUIHpFlWVlya3K7UoUZtAxHEIaAnCUBaHIn2pzQLJUg+MQ/GEEwEgeQiAY3VZPNEoSRIGdJAJqqnQBo4CUIXmERpNoKB1x2a2oZjiJLBGEIyFkSABZZImFKguATZpssx7CRcpYIwlCQsyQAbJZKisAEwSfMKWK22kzK+wRhKMhZEoCmahp4CYJnlEq4pJPE/usfjGAwHNPtuAiC0AZylgSAWp4QBN+oZQMAoMppQ7nDmvgbRYQJQnjIWRIAShYlCL5p7U2PLEmSpGqCTZIfBCE65CwJQCOF9AmCa9qGRJbU/0+5hgQhPuQsCUCV04YKCukTBLew6BGLAgNQRZbIZglCdMhZEgBJkpToEoX0CYIvBsJR9AYTrYiaVM6SUsVKzhJBCA85S4JAvaYIgk+YTVY4rKhy2ZX3qYqVIIyDTe8DIHJDaZ9Ay3AAgFhcxjvHu9AeCKKhyoV5k2thtUh6H5YpoGufzlDZAIbSpohsFgDdN3pC137skLMkCE1uannC2LC/FQ++8n7ajL3Z7cL9183EslnNOh6Z8aFrPxzmDDUnnSMGRYNT0H2jH3TttYGW4QSBWp4k2LC/FV95bs+w6+D1B/GV5/Zgw/5WnY7M+NC1z8zQVicM9u+OvhAisXjJj4sX6L7RD7r22kHOkiA0UxkyYnEZD77yPuQMf2PvPfjK+4jFM21BjAW69iMztNUJo67CAbtVgiwD7YGQHoemO3Tf6Adde20hZ0kQqAwZeOd4V9bzl5G4Pu8c7yrdQZkEuvYjw5bhGoc4SxaLhIYqcy/F0X2jH3TttYWcJUFgzpLPxCH99kBuD5xctyNyh679yCiRpSHLcADlLdF9ox907bWFnCVBqC2nkD6bpWu1HZE7dO1Hxjuk1YmaJpO3KqL7Rj/o2msLOUuCYLFISsKo16TClPMm16LZ7cJIBa8SEjP5eZNrS3lYpoBd+5Ew67UPR+Pw9SUmLxmdJbJZslmdoGuvLeQsCUQqpG/OyJLVIuH+62Zm/BsbEO6/bibphxQBuvaZaQ8EIcuAw2pBbblj2N/NnmtI941+sGufKX2brn3+kLMkEI2KIrA5Z6kAsGxWM566ZQ7sQwy80e3CU7fMId2QIrJsVjMm1ZUPe7/JxNe+TUnudsKS4aHDtJfMXMXKbLbSmS7rV1NuN+19UyqWzWrGZ2efMex9M9tsoZAopUCYPVmUsWxWMzyVf0NrbyrC9vBnz8PlMxp0PCrj090fxoddA2nvPXXLHCyd2WTa2SmLGDVlSO4GUmKyZo0sMZbNasb2Y5341bYPlfeWnttED+sSMPR58X8WTcK3P0URpXwRLrL05JNPYvLkyXC5XJg7dy62bt064ra33XYbJEka9jr33HOVbdasWZNxm2CQv8GN2ickkGUZnf0RAMDiqR4AwJbDHXoekinYcrgDsgzMaKqCpzLhBEysrTD1oJtqdVKW8e9NqshS3OR6Nl1DbHbroQ7IsrmvSbHpC0Wx68OENAC77pUuu6lttlCEcpZeeuklrFq1Ct/+9rexd+9eLF68GNdccw1OnjyZcfvHH38cra2tyuvUqVOora3FjTfemLZddXV12natra1wufirEEgli5rbWQqEoggn5ROun5MIMW8+RM5SsWHXeMm0engqE/k5nf3mzJ9jKM5StTPj3xuqnJAkIBKT0TUQLuWhcUdnMhH+U+c1w2Gz4GN/EEfa+3Q+KmOz7YgPkZiMiXXlmHPmOACp34HID6GcpR/96EdYuXIlbr/9dpxzzjl47LHH0NLSgqeeeirj9m63G01NTcpr165d6O7uxpe+9KW07SRJStuuqampFKeTN2ZPFmV09iUeOpVOG/5uRiOsFgnHOvpxasgSEaEd8biMLYd8AJizlHAO2G9hVlp7s0eW7FaLcq3MPslh98qEceW4OFmBRZOc4pI2wakimx0LwjhL4XAYu3fvxtKlS9PeX7p0KbZt25bTPp5++mlceeWVmDhxYtr7fX19mDhxIiZMmIBrr70We/fuzbqfUCiE3t7etFcpYM5Se8DcIX1Wql1X6YC7zI65yRnTJhp4i8b7rb3w9YVQ7rDiwkm1qEtGlnwmn6W2jdDqRA3lGiZQ2+1l0xP5hZsOks0WC1mWlet72fR6eCrIZseCMM6Sz+dDLBZDY2Nj2vuNjY3wer2jfr61tRWvvfYabr/99rT3Z8yYgTVr1uAPf/gDXnjhBbhcLixatAiHDx8ecV8PP/ww3G638mppaSnspPJEHdLv7Dfv7ICFkeuSxr9kej0AYDMNvEWDzVAXnuWBw2ZBXUViluoz+Sx1pCa6apQqVhPnGsbiqWXIukoHlkxL2Ow7x7swEI7qeWiG5WhHP073DMJhtWD+lDrUsWiwiZ8dY0EYZ4khSemJabIsD3svE2vWrEFNTQ0+85nPpL0/f/583HLLLbjggguwePFi/O///i+mTZuGJ554YsR9rV69Gn6/X3mdOnWqoHPJF7vVgvrkDW/mUuSO5AOaLW+wgXfbUR/CUXO2gik2zBFljqmnimap8bis2GFukSXzSn50D4Qhy4AkJboRnFVfgTNqyhCOxbHjWKfeh2dI2ARn3uRalDtsSp6hz6QdIMaKMM6Sx+OB1WodFkVqb28fFm0aiizLeOaZZ7BixQo4HMOF49RYLBZcdNFFWSNLTqcT1dXVaa9SQXlLqshS0lma2VwNT6UTA+EYdp2gppBa4x+MYPfJbgDAZUnH1FPB8h/MO/B29ocRjcuwSEB9VeYEb0DV8sSkYrJAyqkeV+6AzWqBJEm4LOl401Jccdh0sB0AlOvMxstAKIpgJKbbcYmKMM6Sw+HA3LlzsXHjxrT3N27ciIULF2b97ObNm3HkyBGsXLly1O+RZRn79u1DczOf+h9mb58ApBIU2UzJYpFw6bREWSwljGrPtiM+xOIyptRXoKU2IUpZp1TDmTekz3KQPJVO2K0jD6WKzfaSzbKlcyAVESab1Z7BcAw7jycmjuw6V7tscCTv0y4T222hCOMsAcC9996LX/ziF3jmmWdw4MAB3HPPPTh58iTuvPNOAInlsVtvvXXY555++mlcfPHFmDVr1rC/Pfjgg/jjH/+IY8eOYd++fVi5ciX27dun7JM3mk3emBNIzVLZMhxAA28xUVfUMNi1N3NInynpZ1uCAygaDGS22YVne2C3SviwcwAnfP16HZoh2XG8E+FoHOPdLpzdUAkgkcJChRmFI5SC9/Lly9HZ2YmHHnoIra2tmDVrFtavX69Ut7W2tg7TXPL7/Vi7di0ef/zxjPvs6enBl7/8ZXi9XrjdbsyePRtbtmzBvHnzin4+hdBIA29qllqZmqVeOrUekgR84A2g1T+otJkgxkZ6RU1KIV0ZdPvDOecNGg2l1UmW5G4gXR/NrNfKl8FmK502XDixFtuPdWLTwXbc5pms1+EZjlSOYUPa/VZX6UCrP0jyAQUglLMEAHfddRfuuuuujH9bs2bNsPfcbjcGBkbW33n00Ufx6KOPanV4RYfKkAFfP6uGS81Sx1U4cMGEGuw71YMthzqw/KIz9To8Q3GorQ/e3iCcNouijQOkIgThaBx9oSiqXHa9DlE3WnOQDQBSkaWBcAyBUBTVJrxWnRkiS0CiYGD7sU5sPtSB2xaRs6QVmaLBAFRVrBRZyhehluGI1CzW1MtwyaWf+qr0ZH1aitOezYcSSaLzp9TBZbcq77vsVqUxqlnlA7yjCFIyyh02uMsSDlKbSSc5qWW4zDa7/VgnJR1rxIed/Tju64fNImHR2XVpf1OWz01qs2OBnCXBYMtLLKRvNsLROHqDCV0WdWQJSFV9bD3sQzRGEgJaoBa1G4qS5G3SWWqqL9zIlXAMthRn1uXz1NJ5+rWa0VSFxmongpE43jlOlaxawCaLcyeOGxbx9ZjcZscCOUuCwQZdFtI3G6yKw2qRlNk64/wJNagptyMQjGLvqR4djs5Y9IeiePdEekWNmjpFEdics9RUX7jR8+OaTL587usfXg0HJJKOKSKsLUM10dRQFWvhkLMkGGUOq+IkmHHg9anUuy1DOmdbLRIWTyU1b63YfrQTkZiMltoyTPZUDPt7KqRvvlmqLMvKMtxoOUvqbcy6fM6Wzj0Z9KiWTEsUDpCzNHZC0Ri2HU2IfGaa4JjZZscKOUsC0mziijjfEEHKoTDRxE3JXBuicNg1vGxaQ8YKrjoTN9PtDUYxEE7k2DTl4Cw1mngZTpZldCaLMjwVw+32kqkeWC0SjrT34aNuaoY9Ft493o3BSAz1VU7MbB4ullxHOUsFQ86SgLDB2YzJokMFKYeyOClOuf90LzpMrAE0VtSSAZlmqIAq/6HffNeZRXVryu1pie8jYeaWJwPhGIKRRA5hXQa7dZfZMbulBgBFl8YKK8hYMq0+8wSngnKWCoWcJQExc7JoJnE7NQ1VLpw7PjGj2nqYBt5COe7rx0fdiSacC86qy7iNmUP6SiXcKBpLjEZlGc5814rdH2V2KyqcmdVqlLwlWj4fEyNJBjBYW57O/jDicfMVCI0FcpYEREkWNWH7hM4REkXVUM+pscOu3UWTx434gEupAZsvpM8iRLkswQHmjixlEqQcChM8/fMRaoZdKB/3DOJQWx8sErB4qifjNuPKE79BLC7DPxgp5eEJDzlLAqJWBDYbo+UsAamE0a2HOxCj2VNBjDZDBVLSDWYM6bOmuLkkdwNAc7JirnsgYjo9oaGNrzNx7vhq1FU40B+OYfeH3aU6NEPBbPYTLTWoKc/smDpsFqVAyIzL52OBnCUBMXOvKd8oOUsAMPvMGlQ5begeiOCvp/2lOjTDEIzEsOMYq6hpGHE7JgpqyshSMqo7WqsTRnWZDS57YrhtM1lFHLs/6rPYbKIZNkkIjAVFMiCLzQKpsbMjYD67HQvkLAkIE6Y026ALjNw2QY3dasElyTD0poNUFZcvO451IhSNo9ntwrTGyhG3Y5El/2DEdEsnubY6YUiSpNit2SY5SmQpQyWcmtTyOdlsvkRicfz5iA9AZgFZNUoVK0WW8oKcJQFhy3BmDOmPluDNIKG7wlEvwWVr+uous8Oa1LrqMpnIXUq9O/eGzcxuzTbJYXmGnqqRI0sAcMnZHqUZttmu0VjZ82E3AqEoaiscOO8Md9ZtWWTJR9XCeUHOkoBUl9lQlixXNlPekizLqrYJ2Qdepl773qkedJvsQT5WcslXAhJLJykVb3MNvPlWwwHmXT7vyDGyVFfpxPnJBz1NcvKDXa/FUz3DxHqH4qlMVcQRuUPOkoAkQvrmUwTuHYwimkzYrs1SDQckliqnN1YhLgNbk+FpYnROdQ3gWEc/rBYJi0aoqFFTZ8KBNxiJoWcgUUmUazWcelszTXAAdYJ3dpsFgCXJqjiSEMiPbD0ch8KcVjPmGo4FcpYEpdGEFXFshlrlsuUkBMiiSzTw5s4m1oTzzHGoHtKEMxNmDOkzmyuzW1HtyiyrkAmzVrF2KgneozccZtHMrYc7qBl2jrT3BvF+ay8AKO2esuGpMmc0eKyQsyQoZmx5kktytxp13hIJsOVGtiacmfCYMFlUndydLadrKMoynImiwUBuch+MT7TUwF1mR28wivc+6inykRmDLYcTkfPzznDnNDaaWfJjLJCzJChMEdhMiZC5CFKquXDSOJQ7rPD1hXDA21vMQzME4Wgc244mBt7R8pUYqfYJ5gnpM5vLZwkOSE1wzNSmKBqLozu5ZJnLMlyiGXZi+ZciwrnB8pVyWYID1G2KzGOzWkDOkqCkIkvmUQTOtRKO4bRZsTDZqoPUvEdn14kuDIRj8FRmbsKZCdZFvsNEs1QWWconuVu9fXsgaJolpq6BxAPZIqXUo0djidIMm2x2NGJxWWnrlOsER2lTZKKlcy0gZ0lQlPwHE/WayqVtwlBIQiB32DW6dNroFTUMM0aW8m11wqirdMJmkRCXzeNc+pLCh7UVDkVmYjSYzf7lIz/l1YzCex/1oGcggmqXDZ9INiMeDTZ+9odjGAybS3pmLJCzJChNJuw1lUvbhKEwNds9H3ajN0i9kLKRCudnVwBWY8acJVaBmqsgJcNqkUxXmMHui9FkA9Q0VLuUyObbh6mSNRtsqXLx1HrYrLk9ziudNjhsiW3NZLdjhZwlQWHOUkcgZJqQPptlZmubMJQz68oxxVOBaFzGNpIQGJFW/yA+8AYgScDis0eXDGCkQvpmiiwlHJ1cW52oaax2pu3D6ChL56MIUg5lCal558SmHDXR1EiSpFQmknxA7pCzJCieCvOF9FOClLnPUgFQz6kc2JK8NhdMqMG4HBPogVRIv7M/BFk2R8Vhqhoud/Vuhtlanig2m0dkCUg9/Lcc9lEl6wh09Yfxl2TF4KV5OEuAym5N8uzQAnKWBMWiCumbZuDNsxqOcZlKb8ksD/R8ybeihsHEQSMxGb3BqObHxRuRWFyZnDS683MAgFQ0yixVrIXkGQLA3InjUOm0oas/jP0fUzPsTGw93AFZBmY0VeWfP2fCXMOxQs6SwJhNEZhVb7AKrFyZP6UOTpsFH/uDONzeV4xDE5poLI6th/OTDGC47FZUJYUZzZCM2xEIQZYBm0WCJ89oCWA+fbR8K1gZdqsFi86mStZs5KuJpob9HmZZldACcpYExkyKwMFIDIFQInKR70PKZbfi4imJgZe0W4az91QPAsEoxpXbcf6Emrw/ryR5m2CWypK7G6tdOVcMqmkyWZuilJBsfpElIFWcQcvnw4nHZWzJUzJATZ2JbFYryFkSGDMNvKyrvd0qobos9xYTjMsob2lE1BU1uZZ3q0mF9I0/S2UTk3yXPRhmiwanls7zj8KxiMnek93wD1Alq5r3W3vh6wujwmHFhRNr8/68R5VrSOQGOUsC02yigden6lyeT4sJBht43znehf6Q8XNr8mHToUTFUSEzVEBVEWcCZ6l1rM5SdWqCY4b8uUKXzgHgjJoyTG2oTDbDpkmOGlYluPBsjyIDkA9mslmtIGdJYMyk2dJZYKIoY4qnAhPGlSEci2PHsU4tD01oOgIh7D+daAWTb0UNg/0mZihDZonZzQXIBgApmw1HU21AjIosy/AVWJTBUERlafk8jc0FSAaoSVXDGd9mtYKcJYFRkkV7jS9MWWiiKEOSpFRVHC3FKbBWCbPOqEZ9AbN/QJX/YIKQ/lgjSw6bRVkCMXqror5QFOFoQgOuULtlAqmbD1ElK8M/GMGekz0AxuAsVZDOUr6QsyQwTUpjTuNr3BRagqyGJYxuIgkBBVZpVOigC6REQs0gTFloqxM1ZslbYjZb4bCizGEtaB8XThqHMrsV7YEQDrQGtDw8YfnzER9icRln1Vegpba8oH0wkdCu/hBipGOVE+QsCUxDVTKkH4srCdBGpXOMkSUAWHBWHexWCSe7BnCic0CrQxOW9Cacubc4GYqZIkusmCLfJrpq1HlLRqaQ9kRDcdmtWJBshk0R4QSKZMAYbLY22dQ4LgM9A8Z+dmiFcM7Sk08+icmTJ8PlcmHu3LnYunXriNtu2rQJkiQNe33wwQdp261duxYzZ86E0+nEzJkzsW7dumKfhiYkQvqJgcjoui2+MZQgMyqdNlw0KVE5spnaKOCvp/3oHoigymXDnDNrCt4Py0cxekg/HpfR5k/chxRZGh12P4zFZgGVqOwhsllZlgsWkFVjs1owrtwOwPh2qxVCOUsvvfQSVq1ahW9/+9vYu3cvFi9ejGuuuQYnT57M+rmDBw+itbVVeU2dOlX52/bt27F8+XKsWLEC7733HlasWIGbbroJO3fuLPbpaEJTUkXY6IrAYylBVsOWmzbRLFWpqLnkbE/OTTgzwSqdjF5Z0zUQRjgWhySlorqFYJaWJz4NIktAymZ3nehGwOTNsA+2BeDtDcJlt2De5PwlA9Sk9NGMbbdaIZSz9KMf/QgrV67E7bffjnPOOQePPfYYWlpa8NRTT2X9XENDA5qampSX1ZpaP3/sscdw1VVXYfXq1ZgxYwZWr16NK664Ao899liRz0YbmqrNMvCOPWcJSEkI7DjWiWAkNubjEpmxVtQwmEhoIBhFKGrca8oiQXUVzoLKtRlmaXnSqVFkaWJdBSbVlSeaYR81dyUrW4KbP6UOLntheWAMpYrV4CkcWiGMsxQOh7F7924sXbo07f2lS5di27ZtWT87e/ZsNDc344orrsBbb72V9rft27cP2+fVV1+ddZ+hUAi9vb1pL70wi9bSWKvhGNMbq9BU7UIwEsc7x7u0ODQh6e4P471TPQAKa5egprrMBrs1oX1l5FJkr9JAt/CokvrzRp/gsBy2sdoskF4VZ2aUJbgxTnCAVMSPaWER2RHGWfL5fIjFYmhsbEx7v7GxEV6vN+Nnmpub8bOf/Qxr167Fyy+/jOnTp+OKK67Ali1blG28Xm9e+wSAhx9+GG63W3m1tLSM4czGhhlUvONxWUlgH+vAK0lSainOxNotW4/4EJcTziNbFioUSZKU5VFDO0ssuXuMzlKqitW4NguohWTHFlkC0vWWzFrJ2heK4t0TiQnekumFJ3cz6k1UmKEF+feN0Jmh6s2yLI+o6Dx9+nRMnz5d+feCBQtw6tQp/OAHP8Cll15a0D4BYPXq1bj33nuVf/f29urmMJmhP5x/MKKUt9ZqMfBOr8dLu04lE0Znjnl/IjKWJpyZqKt0wNsbhM/AA6/S6mQMlXDqzwdCUQSCEVS57GM+Nh5JLZ2PPbI0f0odHDYLTvcM4mhHH85uqBrzPkVj+9FORGIyzqwtx6S6wiQD1KTaFBl3gqMlwkSWPB4PrFbrsIhPe3v7sMhQNubPn4/Dhw8r/25qasp7n06nE9XV1WkvvWg2QWSJzVDdZfYx5YowFp3tgdUi4WhHP051mU9CIB6XNQ3nA+YI6Y9VkJJR4bShypWYpxo5b0kLuQ9GmcOKi5MJzWaNCLNqwMum1xfU8mkoddTyJC+EcZYcDgfmzp2LjRs3pr2/ceNGLFy4MOf97N27F83Nzcq/FyxYMGyfr7/+el771JNGE+QsaZXczXCX2ZVSeTPmQCSacIZQ7rBi7qRxmuwz1ZjTuLPUNg00lhipiLBxH1RaSQcwlpi4GbYsy5oIyKrxmKhNkRYItQx37733YsWKFbjwwguxYMEC/OxnP8PJkydx5513Akgsj50+fRr/3//3/wFIVLpNmjQJ5557LsLhMJ577jmsXbsWa9euVfb5ta99DZdeeikeeeQR/P3f/z1+//vf44033sDbb7+tyznmCxt0+wwc0lcSRccoG6BmybR6vHuiG5sPdeCW+RM1268IsIfNwrPq4LSNraKGYYYyZNaeZKwJ3kAiOnW4vc+wLU/C0Tj8g4kyfy2W4YBEROX/vnoAO491YSAcRblDqMfXmDjm68dH3YNwWC2KSOdYMZOYrBYIdbctX74cnZ2deOihh9Da2opZs2Zh/fr1mDgx8bBrbW1N01wKh8O47777cPr0aZSVleHcc8/Fq6++ik9+8pPKNgsXLsSLL76I73znO/jud7+Ls846Cy+99BIuvvjikp9fIbCQfiAYRVtv0JDOUqpzuTYzVCBRXfOD1w9h2xEfwtG4Jst7oqBIBmiQJMowwyzVq9EyHGD8KtbupCq01SKhpkybMems+kqcUVOG0z2D2HmsC5fP0O7+5R2WYzhvcq1mTmK9snRuXJvVEqGcJQC46667cNddd2X825o1a9L+/Y1vfAPf+MY3Rt3nDTfcgBtuuEGLw9OFZrcLgWAfWv1BQyY+aiVIqWZmczU8lQ74+sLY9WEXFp7l0WzfPNMbjGD3h90AgCVTtQnnA+rGnMacpQaCEfSHExpSWjhLRm950pGc4NRWOGCxjD2/BkhWsk6vx693nsSmg+2mcpY2aaSJpoalNQxGYqaL1BWCeabTBqbJ4IrAWucsAYDFIuHSqebLgdiWbMI5xVOBMzWoqGGw38aolTUsAlTtsmnyUGE2a9TIUmqCo53NAubMWwpGYth5LCHGqVX1KgCUO6xw2RMugFHtVkvIWTIATdXJlicGHXi1EqQcCht4Npuouia1BKfdoAukfhujRpZYBGismlQMo1exsqXz+iptbXbR2R7YLBJOdA7ghK9f033zyo5jnQhF4xjvdmFqQ6Vm+5UkSbHbDoParZaQs2QAlMiSQQfeTg2a6GZi8dR6SBLwgTdg6BJuhizLqo7lxXGWuvrDiMeNJxrIoraNGizBAamWJ8aNLGknSKmm0mnDhckKzi2HzTHJUU9wtJAMUKMkeVNkaVTIWTIAzQZXBFZC+hpHlmorHDh/Qg0Ac0SXDrf34WN/EE6bBfOnaFNRw2BiodG4jF4DNjtVWp1oIBsApGy2sz9syH56nRoKUg5lybRErpJZ9JaKNcEBAI8iTEmRpdEgZ8kAsGRRw+YsBYqzDAekRBnNkAOhZRPOoThsFriTVU9GXIpjy2VaRZZqylMCq+29xrteHUVaOgcSEgJAQtHa6M2wT3YO4JivHzaLhIVna1+EYvTlcy0hZ8kAGLk/3GA4plQhaZngzWC5O1sPdyAai2u+f57YXISKGjV1BpYP0KqJLkOSJEM31O0sQlEGY0ZTFRqqnBiMxLDrRLfm++eJzcmlxjkTx6G6CLIwRrZZrSFnyQCwyFJXf9hwMy2W++CwWVDl1L609YIJNagpt6M3GMW+Uz2a758X+kNRvHOcNeEsjrPkMXAzXa1anahJRYSNJ0zJ7La+CJGl9GbY7Zrvnyc2J8+veBMcJkxpPJvVGnKWDEBNuR1Og4b0lZYJFQ7NkxuBhGjeYhNICOw41olwLI6W2jJM8VQU5TuYaKgRQ/patjphMMfLiMUFTOiwGJElICEqCxjbZkPRGLYdTUgGXFasCQ6LLBm4p6NWkLNkANJD+saapbLEw2IkijLMoN2iXoIrhtMJpIQpjZYsGozE0JWceWu1DAeknCWjLcPJspyqhiuS3V5ytgcWKVG0cLrHWGMeY/eJbgyEY6ivcmJmc3GatXuo5UnOkLNkEBoNqgjsK5JsgJpLpyUSJ//ykd+QUZH0JpzFUz1mUYQOgy3DsWity55KYtcCVllntMhSbzCKSCwhH6G1dADDXW7H7DMTEgJGrWRlqt2XTi3iBIdylnKGnCWDYNReU74iliAzGqpcOHd8Yua21YDaLSc6B3CyawB2q4SFGjXhzIRRm+myaG1TtUvTh5ZRI0tswlHltGledakmVclqzLwl5gQWawkOSNls90DY8AUuY4WcJYOgtE8w2Cy1mFU1apSlOAPOUlmS6EWTalFRhCR5Bov+GS1ZlNmUlsndif0Zs+VJyWw26UT8+UgnIgZ70Lf6B3GwLQCLlFhyLBbjyh2QJECWge4B4+mjaQk5SwaBtTwx2sDLZqnFqKpRw5ylLYd9hlOgLkYTzkzUGVSzhdmUlsnd6v21B0KIGeie6yyixpKaWePdqKtwoC8UVZpDGwU2abugpQbjirSUCSQKXGrLjVuYoSXkLBkEozbTTSWKFneWOmfiOFQ5bejqD+Ovp/1F/a5SEozEsOMYq6gpbpd2j0FbJ6RkA7TpC8eor3LCapEQi8uGelD5+kpjsxaLhEsNWpzBzueyIuYYMoxqt1pDzpJBaDZoGbIS0q8o7izVbrVgUTLcbaSB953jXQhG4miqdmFao3ZNODPBHo59oaih9L60FqRkWC0SGpKNZo00ySlFniHDiMvnkVgcbx/2ASieJpqaOmX53DgOezEgZ8kgsHyK9kDIUIl6vhKF9IHUwGQkobtNB4svGcCoctrgsCaGFCNFSpRWJxovw6n3aaTlc/bQLYXNLp7qgSQB77f2ot0gE8W9J3sQCEUxrtyO885wF/37mFPbQVpLWSFnySB4KtUhfWOEU2NxWdG3KaZ0AIPNUved6kHPgDGuIasUKmZFDUOSpFSSt0HuQaB4kSX1Pr0G0kdjgpSlsNm6SifOTzoURokIM5u9dFo9rJbiTnAA4xZmaA05SwZBHdI3SkVcz0AYLO+1mEmOjPE1ZZjWWIm4DLx9xFf07ys2p7oGcLSjH9YiNeHMRJ3BRO6isbjSFLYYzlKqr6MxrhegyjMs8tI5w2iissXu4TgUo0p+aA05SwaiyWCzVBYhG1duh91amls11XNK/IGXDbpzzqzRVEwxG4rIXcAYs1RfXxixuAyrRSpKDk5TtbFsFkhFFUsRWQLUzbB9wqcgtAeC2H+6FwCUNkzFhgmHGmVFoliQs2QgjCZMWYpWJ0NR95ySZbHLuZWKmiJXwalhs1SfQSJLTJCyMVm5pjVGFKbsKLHdXjAhMRnwD0bw3kdiV7JuPZSIaJ93hhv1VaW5fhRZyg1ylgwESxZtNcgynK+fVcKVZoYKABdOGgeXzYKOQAhPbTqK7Uc7hdPAicVlbD3UgS3JRPViitoNpc5gOUusurSxCEtwQCqyZJQq1lA0hkAwCqB0kSWb1YJLpibu8ed3fojf7zstnN3G4jK2H+3E8zs/BJBIXC8V1PIkN4on50uUHKNFllgnbE+JZlgA8NYH7WBD7H/+8SCAxHW9/7qZWDaruWTHUSgb9rfiwVfeT4tU/OOzu/HAp0tz/PUGE6ZsLWJyd2K/KX00WZaLXrFYbFhBhs0ilWzpFwBqkxOql/ecxst7TgMQx24z2exL757C+RPcJTl2j8pmjXAPFguKLBkIo7VPUEqQSxRZ2rC/FV95bg9C0fS8B68/iK88twcb9reW5DgKhR3/0CWdtt7SHb/RIksp9W5tBSkZDUnl/VA0jh4DtJtguWp1lY6SPXQ37G/Fs9s/HPa+CHY7ks129YdLbrOhaBz9YePoo2kNOUsGQkkWNUhIv7OE4naxuIwHX3kfmQL37L0HX3mf29A+L8fPKqCMEllK9YUrzj3osluVqIgR7NZX4ko4dt9ngne75cVmyx02lDsSDY8pb2lkyFkyEM2qZFHRk5OB0gpSvnO8K2uSrYzEdX3neFfRj6UQeDn+VEjfGJGlYrU6UdNkIGFKpRKuREvnvNz3hcDTsXsMtnxeDMhZMhAspB82Ski/RN3LgUTJrpbblRpejp8l9Xb1hwzRkJglXhcrZ0m9b0NElvpKu3TOy31fCDwdOyV5jw45SwbCabMqlWNGKEUuZWSpoSq3h2Gu25UaXo6fiYfGZaBbcBV0WZZTkaUitDphNBpIPoAt45QqssTLfV8IPB270ZbPiwE5SwajyUANdUspbjdvci2a3S6MlJIqIREBmDe5tujHUgi8HL/dasG48kQVlOjtE7oHIggnk/1Z1LYYNBtImFKJBpcossTLfV8IPB17fZWxCjOKATlLBoPNgEWfpQ6EoxhMdq4vRYK31SLh/utmAsCwwYv9+/7rZpakV1MhqI9/KKU+/jqD5D+wHKK6CgecNmvRvqfRQC1PfCUWpBTZbrmy2QoSphwNcpYMhlFanrASZJfdggpH8R5UapbNasZTt8xRriGjye3CU7fM4V6vhR2/05Zu1qU+fqO0T/D2Jmxo6P2gNUZqplvqVieA2HbLjn2oJlXJbZZylkaFRCkNhlGSRdUlyKUUSVs2qxlXzWzCmwfa8OVndwMA3vz6EpQ7xDCVZbOacVb9YbzfGsCXL52My6c3Yt7k2pLOrFm+iuiz1GILUjKaDZSzVMo8QzXMbj/1+FZ80BbAV//ubHztymlcRpSGsmxWMw56A3j0jcOYP7kWX7tyWult1iDR4GIiXGTpySefxOTJk+FyuTB37lxs3bp1xG1ffvllXHXVVaivr0d1dTUWLFiAP/7xj2nbrFmzBpIkDXsFg2IOXI0GWYbTY4bKsFokXDWzEY5khEa0dfz2pPL533/iDCw4q67kDwxWCSXadRtKW9KGGouY3K3efyAYRX8oWtTvKibxuKwoeJeignUoVouEqU1VAIDqMrsQjhKD2ey8ybW62KwiJit4nmExEcpZeumll7Bq1Sp8+9vfxt69e7F48WJcc801OHnyZMbtt2zZgquuugrr16/H7t27cfnll+O6667D3r1707arrq5Ga2tr2svl4q96IheaDaLirdcMlSFJkpAin6FoTAmlNxdRGygbRslZKlVkqcplR6UzEbkU6V4bSm8wgmhSLqJUopRDETVK5y2Bnlc2KLI0OkI5Sz/60Y+wcuVK3H777TjnnHPw2GOPoaWlBU899VTG7R977DF84xvfwEUXXYSpU6fie9/7HqZOnYpXXnklbTtJktDU1JT2EhWmNCzyoAuklnD0mKEyRBQLbE8mCTtsqaq0UmMUYcqUenfxH2BKFatA99pQ2IO22mVTorKlplHACQ5QfKX40WA22zMQQSQWH2VrcyKMsxQOh7F7924sXbo07f2lS5di27ZtOe0jHo8jEAigtja9FLOvrw8TJ07EhAkTcO211w6LPA0lFAqht7c37cULbGAPBKPoEzik7ythq5ORSCXLizPwKoNutUu3hpipkL7Ys1RvCTSWGEaoYvUpS+f62ayozcSL3YNwNGrK7GArf920FJcRYZwln8+HWCyGxsbGtPcbGxvh9Xpz2scPf/hD9Pf346abblLemzFjBtasWYM//OEPeOGFF+ByubBo0SIcPnx4xP08/PDDcLvdyqulpaWwkyoClU4bqlhIX7ABQ43ey3CAmCH9VHsO/ZaRPUpljUGcpRJcyyYDFGZ0cuAsiTjBCUVjSq5QsZd8R8JikVCbXDrtENxui4UwzhJj6GxZluWcZtAvvPACHnjgAbz00ktoaGhQ3p8/fz5uueUWXHDBBVi8eDH+93//F9OmTcMTTzwx4r5Wr14Nv9+vvE6dOlX4CRUBptsisjClngneDBbSF+k6tpUwGjIS7GEpcoJ3XyiKQDIyWxJnScAl36H4OFo6b+sNCtNuR710XqPT0jmQGmtFtttiIkY9NACPxwOr1TositTe3j4s2jSUl156CStXrsRvfvMbXHnllVm3tVgsuOiii7JGlpxOJ5xO/WZPo9HsduFIe59QEZGhdJa4e3kmUpElcfRvSpWUnA22dDoQjmEgHBVGdkENc1qqnDYl+bqYNAkYxRwKD3mG9VVOWCQgGpfh6w9x2eZkKGqb1WvpHGCTnIDwy+fFQpjIksPhwNy5c7Fx48a09zdu3IiFCxeO+LkXXngBt912G37961/jU5/61KjfI8sy9u3bh+ZmfoXMRqNJwIjIUJT8hyodZ6kChvRLJaSYjQqHVRHGFHWWWsolOECtjyaOYz4UX7/+y3B2qwX1SZ0vUeyWTcb0jAYDKmHKgJg2W2yEcZYA4N5778UvfvELPPPMMzhw4ADuuecenDx5EnfeeSeAxPLYrbfeqmz/wgsv4NZbb8UPf/hDzJ8/H16vF16vF36/X9nmwQcfxB//+EccO3YM+/btw8qVK7Fv3z5lnyLSJGBERE00FleasOoZWWLXsT0QQkyQkH4pk5JHQpIk4UuRU9VJpbmOShWXX8zrBQC+QGlbnYyEaEuabSW+10ZCsVmKLGVEqPj48uXL0dnZiYceegitra2YNWsW1q9fj4kTJwIAWltb0zSXfvrTnyIajeKf/umf8E//9E/K+1/84hexZs0aAEBPTw++/OUvw+v1wu12Y/bs2diyZQvmzZtX0nPTEhEjImq6ByKQZUCSoFv5OwDUV6ZC+p19ITToPPPLhVJHREbCU+nA6Z5BgSNLpZ3ts8iSry+EcDSuW+n9WGBJyp4SNdEdiSa3C+995BcmWZ6HogxAVcUqqM0WG6GcJQC46667cNddd2X8G3OAGJs2bRp1f48++igeffRRDY6MH0QUU1TDohG15Q7YrPo9NGzJkH5bbwje3iD3zlIsLitKwPoPvMaILJUq96u2wgGH1YJwLI72QBATxpWX5Hu1hOUssXY3eiFsZEnn8cVTIbbNFhvxpi/EqIgeWers069lwlCYbpUIibedfSFE4zIsUiIqpicewdsnMNtpLJGzJEkSGt1i5doMRdFG0z2yJFYXAx6KMoBUfihFljJDzpIBYW0ufH1hhKIxnY8mf1g1hp6JooxmgWapbNBtqHLpGpEDxI8s6fEAa64WxzEfSjASU0Rw9Y4siaaPpnerEwbLDxW9AXaxIGfJgIwrtys5D0zDQyQ6OEkUBcQSC2THWKpoSDZYdEHUlidsaaTYTXTViKyPxiKIDqtFEcXVC5H00dKWznmphusLQ5bFKGgpJeQsGRBRm8Ay2MCrdzgfEGtJkx1jMwe5Vax8W8RZql7NiEWLiKhJVcI5dNUKAtKvI+8PfV9fotLWapEUm9ELFskPx+KKICuRgpwlgyLSQ34obODVe/AAxBKm5KWqBkiF9EVchtOrGbFoiclqeFo6Z/f/YCSG3kG+H/qppXMnrBZ9nUyX3aoIsLIxmEhBzpJBEXvg5SeylArp8z948KLXAoidLKpXM2KRlnyH4uOoKMNltyptQ3i/lkohAQfRYED8woxiQs6SQRE5pJ9qm6D/LFUdWeI9pM+iX3pX1QCpyFLXQFgYQU+GXhE6oaPBzGZ1FJFVwyaLvEeEvRzZLJAac0VcPi825CwZFJGSHIfi46CJLoNdx2Akzn1In0W/eJiljiu3Q5IAWQa6BJultulUyt2sSvAWpQkso5OD9kRqmgRJlvdyZLNAKprfIWBEuNiQs2RQRMq1USPLsjJL5SH/wWW3KnkrrRz37ZJlmavIks1qQW05C+mLNUtt1alljFoxXrSWE4rNchJZEiWyzltkySNwYUaxIWfJoIga0u8PxxCKxgHwkf8AiCFM6R+MIBhJXDduZqmCtk/QqxmxTcAmsAyehGQBoKlaDGFKnooygFSrGtFsthSQs2RQRGwCC6SqMModVpQ7+OjG01SdeIC1cTzwskTWceV2uOxWnY8mgagVcXo2Ixa1MIOnaDAANDE1dM6X4XhpdcIQXUy2mJCzZFCGNoEVBbZkw8sMFRAjstTKiQqwGhbSF02YUs9mxKJWxPFUDQeI0fIksXTO8uP4sFuPkuAtls2WAnKWDIrNakFDlXgDb6q/FB8zVCCVT8DzwOvVKSk5G3VKSF8cZz0Wl9GWjG7q8QBrFsAxH0o8LqOLI50lQIycpZ6BiJJy0FDNx3VTVLwFy5krBeQsGZhGAQaMofAWzgcghBo6b3otQKqaUaSQfmdSUdki6VONqVSxCmSzPYMRsJX+Wg600YDUdfQPRjAY5rM/JhtPaisc3CydKzZLopTDIGfJwIjUBJbRyZFsAEOEZHkeI0sihvT1bkYsQkRkKMwZrim3w65zA2dGtcuGckfCAeF1kqNnbtxIMJvtDUYRTka9iAR83NlEURAx/yElSMmhs8TxdfRyligKqJJFBdJZ8uqsgi6KPpCalCAlPzab1h+TU8dT73stE9UuO2zJtiui6aMVG3KWDIwIEZGhpAQpOVqGc6dC+gNhPoUp9UxKHok6AUP6es/2U8rT/DeBZXRyaLOAepLDpz4ab7IBAGCxSMpSqkjL56WAnCUDI6IwpY+jVieMKqcNFSykz6njyZMgJaOeLcP1h4R58Ov9ABOpCSyDxzxDIHUteV3SVAQpOYoGA6nfkZyldMhZMjAiNYFlsAaOHs5C+o0cL8UNhKPoDSYerI0cOUssshSMxDHAaZLtUPRuRixSE1gGb4KUjCbOk+WVVicc2SwgrphssSFnycCI1ASWocxSq/iapfIsH8COqcJhRZWTDyFPACh32FCWrPIRZZbKQ4ROlCawjE7OZAMYvCfL89bqhEGRpcyQs2RgRGoCCwCRWBw9AxEAfCWLAqn2CTwOvOp8JUmSdD6adFhjVVGEKfXOWQL4dswz0RHgNLLEhCk5jdC1cljBCqQqkTspwTsNcpYMjChNYBndSeO0SMC4ct4G3mTLEw4HXh6rahhMXFQEYUpZlrm4liJUX6rhNbLEczVcfyiKAFs65yxniVqeZIacJYMjQqsORkfSOGsrnLBY+IqQ8HwdlaTkaj5aJqhJCVPyP0vlpRmxKE1gGTxqowEpp7OjL4RIjC/NIOYIVzptqHLZdT6adOoqxLHZUkLOksERoQksg9dBF1Ali3I4208lJfM1swfUwpT8z1J5UVRuFiyylNJZ4uv+q6twwG6VIMtAB2fyFW2K4j5f1wxI5YuKYLOlhJwlg8NzRGQovJYgA3wni/LYRJdRJ1DLk1blAabvskijQDlLA+GoUunIW1GGxSIp/TF5s1veGuiq8VTQMlwmyFkyOCIli/JaggykQvo+HkP6bODlLPcBSEUbRFDx5qVlDM+O+VCYzTptFkWLjCd4Hf94yI0bCbV0gChV1KWAnCWDI0ITWAbrdM1bOB8AastTIf12zkL6PA+8IoX0eWlGLEITWIY6GsxbJSYAbvXReKi6HAnmLEXjshBV1KWCnCWDI1LLE1+yBJmVm/OExSIpDzEvR/o34WhceWBx6SwJlCzKS2RJhCawDJ7zDAF1M3F+bBbQXyk+G06bFVWuhF5bhwCTnFJBzpLBESlZVClB5jCyBPC5PNIeCEKWAYfVglrO5BYAsSJLrZxE6CRJUrXq4OshPxRmszy1J1LDa8sT1q9Ob8d8JOoFKswoFeQsGRwWhua5CSyD55wlAKrIEj8DL6uEa6jmT24BSJUhdw9EEOUs12sobRwtjfBcfamGRQx5E5FlMGeJt+vo9SdbnXBwr2WijoQph5F3b4T+/n58//vfx5tvvon29nbE4+kD4LFjxzQ7OGLssCaw/eEYvP4gptRX6n1II8JzNRzAZ7IoryrAjJpyBywSEJeBrv4wGjh9OAB8tDph8BoRGQqv7YkYPEaD1UvnPNxrmaijirhh5B1Zuv322/H0009j8eLFuPvuu/G1r30t7VVsnnzySUyePBkulwtz587F1q1bs26/efNmzJ07Fy6XC1OmTMFPfvKTYdusXbsWM2fOhNPpxMyZM7Fu3bpiHX7J4b0JLEOWZXEiSxxdR16SkkfCapFQqwy8/M5S1c2I9V6GA1IPUd710To5jywxu2jvDSEe56Oyqz2Q+E0dVgtqOb1uorUpKgV5R5Zee+01vPrqq1i0aFExjicrL730ElatWoUnn3wSixYtwk9/+lNcc801eP/993HmmWcO2/748eP45Cc/iTvuuAPPPfcc/vznP+Ouu+5CfX09/uEf/gEAsH37dixfvhz//u//js9+9rNYt24dbrrpJrz99tu4+OKLS32KRaHZ7cKxjn6uIiJDCYSiCCeXafiNLPGnrMxLUnI2PJUO+PpCSn4Lj6Q1I+ZAUTnVTJefey0TvEeDG6pckCQgHIujayDMxXEqExw3nxWEgFhtikpF3pGlcePGoba2thjHMio/+tGPsHLlStx+++0455xz8Nhjj6GlpQVPPfVUxu1/8pOf4Mwzz8Rjjz2Gc845B7fffjv+z//5P/jBD36gbPPYY4/hqquuwurVqzFjxgysXr0aV1xxBR577LESnVXx4bkJLMOXLMevdNp0VU/OBo9LI6mkZP7E7RgiCFN6OatO4r0JLCNVDae/E5IJh82iHBsvkxxl6ZzD9kQMjwA2W2rydpb+/d//Hf/2b/+GgYGBYhzPiITDYezevRtLly5Ne3/p0qXYtm1bxs9s37592PZXX301du3ahUgkknWbkfYJAKFQCL29vWkvnuG5CSyDJRLyugQHpB6k7YEgNyF9npKSRyLV8oTfkD5vWlU8N4FVo7Q64dluObuWbBxu5ORey4QINltq8l6G++EPf4ijR4+isbERkyZNgt2eHrLes2ePZgenxufzIRaLobGxMe39xsZGeL3ejJ/xer0Zt49Go/D5fGhubh5xm5H2CQAPP/wwHnzwwQLPpPSI0PKkU+kvxe+g21DlhCQBkZiMzv4w6jlIauVZr4VRJ0DOEm/NiIc2gbVb+StcjsVldA2IMcn562m/EoXVG96LMoCUFARVw6XI21n6zGc+U4TDyJ2ha7yyLGdd9820/dD3893n6tWrce+99yr/7u3tRUtLy+gHrxPNnM2sMtHBeTgfAOxWC+ornWgPhOD1B3V3luJxWZml8j3w8h/S5y33izWBjcRktAdCOKOGDydOTfdAGLIMSBK41PhipKpY+dCs4lm9m6HYLGfdCvQkb2dp0aJFuPLKKzP+7ac//emYD2gkPB4PrFbrsIhPe3v7sMgQo6mpKeP2NpsNdXV1WbcZaZ8A4HQ64XTy+1AfSpMA1XBKZIljZwlIXMv2QAje3iDOg1vXY+nsDyMalyFJ0N1xy4YIAndezpZGWBPY0z2D8PqDXDpLzPkdV+6AjcPIFyOlj8bH/cfbkm8m2KQ1EIoiGIlxm0daSvK+wz/1qU/h61//OsLhVHiuo6MD1113HVavXq3pwalxOByYO3cuNm7cmPb+xo0bsXDhwoyfWbBgwbDtX3/9dVx44YXK8uFI24y0TxHhuQksg/e2CYwmjtonsBlqfaWTy2UahggCdzw2I+ZR10sN77IBjFQXA/1tFuCvmCAT1S4b7NbE6koXx3ZbSvIeYbds2YJXXnkFF110Ef72t7/h1VdfxaxZsxAIBPDee+8V4xgV7r33XvziF7/AM888gwMHDuCee+7ByZMnceeddwJILI/deuutyvZ33nknPvzwQ9x77704cOAAnnnmGTz99NO47777lG2+9rWv4fXXX8cjjzyCDz74AI888gjeeOMNrFq1qqjnUkp4bgLL4L0EmcFTlE6EGSqQihbyHNLn8VrydK9lQhib5SgNQb10zvMynCRJJEw5hLyX4S6++GLs3bsXd955J+bOnYt4PI7/+3//L/7lX/6l6JoRy5cvR2dnJx566CG0trZi1qxZWL9+PSZOnAgAaG1txcmTJ5XtJ0+ejPXr1+Oee+7B//zP/2D8+PH48Y9/rGgsAcDChQvx4osv4jvf+Q6++93v4qyzzsJLL71kGI0lINUE9qPuQXj9g1yG9HkXpGTwJB/Aols8D7qAqgy5PzxqPqAe8NqMmKcoZiZ8Atqs3vefrz+EaFyGhfOlcyAhTOntDVJFXJK8nSUAOHjwIN59911MmDABH3/8MT744AMMDAygoqJC6+Mbxl133YW77ror49/WrFkz7L0lS5aMWqF3ww034IYbbtDi8Lil2Z1wlnh4yGdClFkqT0sjIlTVAKlquHA0jkAoimoORB/V8NqMmCfHPBOdgtgsu44D4Zju95+ydF7F99I5kLLbDoosAShgGe773/8+FixYgKuuugr79+/Hu+++i7179+L888/H9u3bi3GMhAbw2ARWTcpZ4udhlQmeWp7wlpQ8EmUOKyociQRRHmepvDYj5rUJLEOUPMNyhw3VrkRcQO/2MSJUwjGUXEMObVYP8naWHn/8cfzud7/DE088AZfLhXPPPRfvvPMOrr/+elx22WVFOERCC3iKiAwlHI0rfbnYbIZX1C1PmAyFXvBW7p4N1miVx4o4XiN0PDaBVeMTpIIVSNmt3teSx9y4kRChirWU5O0s/fWvf8U111yT9p7dbsd//dd/4fXXX9fswAhtUYQpOZylsp5hNosEdxlfSzRDYTPCgXBMcfD0wsuZkGI2WMUUj8miqeokvq4jO562Xn4U49X4+vnXRmM0cTJZTDnmfN1rmRBBH62U5O0seTyeEf+2ZMmSMR0MUTzYQ17vMHQmWJi3tsLB1TJIJsocVsWh03N5RJZloWapSkUchyH9lNPJ10NfrRjPlLJ5olOAVieMJk6Wz9n42yjCMhxrpkvSAQAKcJYIMeE5WVSkcD7Ax/JIbzCKgXAMgBj5Dzz3muK1GbHdyl8TWIYsy6k8Q86XzgF+xj9el3wzwZbOeZzg6AE5SyaBxyawDJ8giaKMRg6idCyq5S6zo8zBv7ouz13M2zh+gPGaazgQjiEYSQjceqr4t1tekuWVJroCTHB4XjrXA3KWTMLQJrA8IUoJMoOHyJJIM1QgNfCy/DSeaOV4aYQdE2+5hixCWGa3otxRkAJNSeEhsiTLslB2y8bjrv4wdxNsPSBnySSwJrAAf7NU5rzx3jaBkVJW1k8sUBGkFGDQBfgN6fPejJi3JrCMDoHylQA+rmPvYBSDkeTSOYf32lBqk+NxLC7DPxjR+Wj0h5wlE8Fr+wTWBsPDuaItg4f2CawpqAj5SgC4bZ3AezNi3prAMkSLBjM76R6IIJh0WEoNG3dryu1CNKZ12CxKMQtvdqsH5CyZCF7bJ/gEjSzpGdJnUS0RZqgAUF/Fp8Ad782IeWsCy+jsFyvP0F1mh8ue+H31yltqFaQ9kZpUriFfdqsH/I0ORNHgIdcmE6LNUhVhSh0jdCLlPgCpyJJ/MIJwNK7z0aRgDzBeryMPjnkmWDSYdxFZhiRJugtTiiQiy2AVyjzmGpYacpZMRCOvy3CCOUtsZtijZ0if46TkTLjL7LAmNbS6OCow4L06Sb3kq7divBolsiRAJRyjMamjpVdkSSRdNIYSWQqQs0TOkongsQxZlmVlaUaUZNHqMhvKkjkHel1Lr5KUzJc20EhYLBKXpci8R+iGNoHlBUUbTZDIEqB/yxORFPcZij4aRxMcvSBnyUTw1ASW0TsYRTRZllorSM6SJEm6JssHIzH0DCSqU0TKf6jjcOD1cipIySh32FKK8RxNcnyCVcMB+jcTT91r4jiYqcIMfmxWL8hZMhE8NYFlsBLkKpdNiAoRhp4Vcew7y+xWVJfxr3HD4DGkn+oLx+8DjN1rPOUtsWhwvSBL54D+kXVeexBmg/rDpSBnyUTw1ASWIVpyN0PPZHn10pEk8d1LT42Hw2RREZZGeGkCq0a0FkWAKllet2o4vpd8M5FqU8SPzeoFOUsmgpcmsGpEK0FmNOrYPoH3pOSRUFS8OQnpi9KMmJcmsIxoLI7u5DKwSHarZzPxwXBMEXYUyW7Z78vT0rlekLNkMniTDxAxURRQX8fS69+IOEMFUlGIDk5mqaI0I+ZNPqBrIPHgtEhATbk4zhKzl/ZAENFYaeUrmKNb7rCi2iXO0jmzWZ6WzvWCnCWT0cSB7L8an2CVcAx9c5bEEqRkKLNUTiJL7LerKee7GTEPrTrU+AKJ36+2wqHIQYhAXaUTNouEuFx6h71VZbNiLZ0nbLY/HMNgWB+ZFF4gZ8lkNHHWPkE0jSWGntVwIiwdZYL9xrwkiyrXkeOoEqDWR+PjurGcM9Fs1mqR0FClT3/MNkHutaFUOm1w2BJuAi92qxfkLJkMHprAqkkleAsWWUpex45AqPQhfb+YA28dd5ElMSJ0vEWWRNNFU6NXsnyrX8wJjiRJ8FRQ3hJAzpLp4KEJrJrUwCvWLNVToV9IX/TIUmd/iAvpClFyv5qTlXp6NoFVI2qeIaBfRLhN0AkOkGpwbvaKOHKWTAZvyaKiLsNZLJJS1VLKaxmJxdGeTLYUzVlioqORmIzeQf2lK0SpKqwus+neBFYNyzMUzWaBlESEXpEl3h3zTPCovK8H5CyZDB6awKqhkH5+dARCkGXAZpHgEWxm77JbUeVMVAL5ONBaEuUBxkMTWDWdAqp3M/SqBuZdKT4bSkUcJ8vnekHOksngoQksIxhJ9bsS7cEP6LOk6VVFQywCVSIxUiF9/QdekZoR690EVo1P0DxDQL9m4qLmGQJqYUr9bVZPyFkyGTw0gWWwhEG7VRKqbQdDj/wHr6CJogyeQvoiNSPmKrLUL+4ynB4tTyKxuJLXKKLdeqjlCQBylkxHIqTPR95SpypRVCTtEYYeA6/wzpJSEafvwJvWjFiAa8lTyxNRizKAdDX0UhUZsKVzu1VSJgsiodgsB0vnekLOkglhyw56h/RFzlcC9OliLoo20Eh4OMl/SGtGLICiMi9VrLIsK1ESER/8zGbD0VTLlmLDJqUNVYIundMyHABylkwJL5GlDkEr4RjKdSyhZpUoSckjUceJMKVozYj1bgLL6AtFEY4mdMVEtFuHzaIsK5WqVZFXdJut4MNm9YacJRPCBl6KLI0N5Tr6S6cb1Cb4MhwvLU+YKKso15EXYUr2u1U4rFy3iMlGqcc/UXXRGMxmu/rDiMX110fTC3KWTEhKa0nvgVfsyFJDVTKkH4ujq0TqtiyKJfoynN75D6zdjyjXkR2nHorxahRBSkFtFkhdy1JF1hWleEHutaEwfbS4DPQMmHcpThhnqbu7GytWrIDb7Ybb7caKFSvQ09Mz4vaRSATf/OY3cd5556GiogLjx4/Hrbfeio8//jhtu8suuwySJKW9br755iKfjb7wkv8gcgkywEL6iYdGKQZeWZbR5he3qgZQV8PpnbMkVmRJzyawalKClGLaLFD6ZHlRW50wbFYLxpXbAehvt3oijLP0+c9/Hvv27cOGDRuwYcMG7Nu3DytWrBhx+4GBAezZswff/e53sWfPHrz88ss4dOgQPv3pTw/b9o477kBra6vy+ulPf1rMU9EdPZvAqmElyCK2TWA0uUunf9PVH0Y4GVVgUS3R4CVnSbSlET2bwKphEUEjRJZKdR3bBLvXMlGnJHmbN2+J/zIQAAcOHMCGDRuwY8cOXHzxxQCAn//851iwYAEOHjyI6dOnD/uM2+3Gxo0b09574oknMG/ePJw8eRJnnnmm8n55eTmampqKexIcwYy2PRBCJBaH3aqPz+wTPGcJSLRP2H+6tySRJfYdnkqn0glcNOqTg24gGEUoGoPTpk/ei4gigU1uFz72B3V1lnwBI0SWStvFQPSiDCDxex9pB3wmbqYrxIi7fft2uN1uxVECgPnz58PtdmPbtm0578fv90OSJNTU1KS9//zzz8Pj8eDcc8/Ffffdh0AgkHU/oVAIvb29aS+RYE1gZTmRA6EXovaFU9NcwmTRtl7xB93qMhvs1kT1mZ5J3qkHGP+ClAwehClZZMkINlsKpzMel9Hey5bOxbnXhqJEhHV8XuiNEM6S1+tFQ0PDsPcbGhrg9Xpz2kcwGMS3vvUtfP7zn0d1dbXy/he+8AW88MIL2LRpE7773e9i7dq1uP7667Pu6+GHH1Zyp9xuN1paWvI7IZ1RN4HVaykuHpeVpGiRB95SNiZm3yFCe46RkCRJWXbVy1lSKyo3usW593jQR1MqWAXUWGKUUh+tayCxdC5JUJZRRaSek8IMPdHVWXrggQeGJVcPfe3atQsAMmqhyLKck0ZKJBLBzTffjHg8jieffDLtb3fccQeuvPJKzJo1CzfffDN++9vf4o033sCePXtG3N/q1avh9/uV16lTp/I8c/3RWxHYPxhRylBrBR54S5n/ILpeC4Mtu+rVTFfUZsQ86KMp2mgCP/jZ2BcIRdGX7E1ZLLyqpXO90h20gDnHekt+6ImuOUt33333qJVnkyZNwl/+8he0tbUN+1tHRwcaGxuzfj4SieCmm27C8ePH8ac//SktqpSJOXPmwG634/Dhw5gzZ07GbZxOJ5xOcQcLoLQRkUywJTh3mV3Y/BtAFdIvwWxftKTkkdA7pK+O0ImkqKz3BAdIb1EkKpVOG6pcNgSCUXj9QZzdUFm07zLOBIePwgw90dVZ8ng88Hg8o263YMEC+P1+vPPOO5g3bx4AYOfOnfD7/Vi4cOGIn2OO0uHDh/HWW2+hrq5u1O/629/+hkgkgubm5txPRECadA7pGyG5G1B1MS9hZEmkpORMKMKUOiWLilqdxEMVqxGkA4CEDQWCfUV3lpjiushL54C6ma55I0tCTOnPOeccLFu2DHfccQd27NiBHTt24I477sC1116bVgk3Y8YMrFu3DgAQjUZxww03YNeuXXj++ecRi8Xg9Xrh9XoRDid+8KNHj+Khhx7Crl27cOLECaxfvx433ngjZs+ejUWLFulyrqVC75C+EZK7gZTj0heKIhAsbq8pJiIq+izVw0lkSThnSYcmsGrC0Tj8g4l7XHi7LZEwr9cgNkuRJUGcJSBRsXbeeedh6dKlWLp0Kc4//3w8++yzadscPHgQfr8fAPDRRx/hD3/4Az766CN84hOfQHNzs/JiFXQOhwNvvvkmrr76akyfPh1f/epXsXTpUrzxxhuwWsWU8s8VlrD3/mk/th/tLLmMfafggpSMimRIHyh+lK6tlyUlCz7wVugXWYrFZew92Q0AkOOyUO0b1E1gX3jnZMnttjup3my1SHCX2Uv2vcWgVJF1phRvlMiSHjlLsbiM7Uc78ft9p3V5VjGE0FkCgNraWjz33HNZt1HPtiZNmjTq7KulpQWbN2/W5PhEYsP+Vjz0/94HABz19eNzP9+BZrcL9183E8tmlWb50QiClIxmdyKk3+oP4uyGqqJ8RyAYUZJRxV+G02eWumF/Kx585X0lsrR+vxd7H/lTSe/7sfCnD9pgkRJtJ/513X4AKKndMpmR2gqHULlemShVZJ31IBQ9ssRsdjASw0A4inJHaVyHoTYLlPaeVyNMZInQhg37W/GV5/YMm9V7/UF85bk92LC/tSTHYZRlOEAlclfEgZfNgKtdNlQ4hZnjZKROh/wHdt8PfTiW+r4vFHb8QyfVpTz+TgNIfTCYzRY/siTmku9Qyh1WuOwJd4EJkxYb3myWnCUTEYvLePCV95Ep3sbee/CV90sS5jRKgjcANFUXvw2FqHk2mfCUuHUCT/d9IfBy/EZZOgdSbYqKGVmSZTllt4JHg9X6aKWQ/ODlnldDzpKJeOd4V9bBQUZi8HjneFfRj8VYA29SWbmIs9SUsySuCjCDOUtd/WHESzDY8XTfFwIvx+9TZAMMYLPVxY8GB0JRDIRjie8zwiSnqnRisrzc82rIWTIR7YHcBoZctxsLqRJk8UP6SsuTYi7DMb0WwWeoQEqENBqXleqqYsLTfV8IvBx/pwFttrM/jFA0VpTvYDbrLrOXLMenmHgq2PJ58SNLvNzzashZMhG5dqovRUd7RdzOAAMvC7EXM6Sv6LUYYIbqsFlQnawgLEX7BJ7u+0Lg5fhTS+fi22xNeUoMl/Vu0xqjLMEx6pSKOHPaLDlLJmLe5Fo0u10YqY5FQmLGNW9ybVGPYzAcQ38yPG2InKUSiAUaRQmYwUL6pUjy5uW+LxRejl9ZhjOAzUqSVPSKOKMkdzNSVazmtFlylkyE1SLh/utmAsCIN+H9182EtchlwWzQddgsqBK8sgtIzRy7+sMIRooT0jeKejeD9WQrRUif3feZsqPYnV6K+75QstltKY+fRQHrDRBZAlD0ZuJKeyKD2GwphSnV9/xQ9LJZcpZMxrJZzXjqljnDZjvlDiueumVOSbQrlBLkCkdOjZB5p6bcDmeRQ/pG6QvHqCuxyN2yWc24beHEYe83uV0lu+/Hwkh2W8rj7zRQBSug6utYJBVvI1WwAqUXplw2qxk/uPGCYe/rZbPiT+uJvFk2qxlXzWzCO8e78OYHbfjF1uOoq3Dg6nObSvL9RspXAlIh/ROdA/D2BnFmXbmm+w9GYuhKOpiGWYYrsXwAAHT1J5LJP/OJ8bh8RgMaqhJhfF4jSkNhdvvnIx1Y+atdiMRk/GzFhThvgrvo3y3LsspZMobdphoTF+ceZBpOhrPZEuQZMsociU4a490ufPOaGbraLEWWTIrVImHBWXW458ppsFslnOoexInOgZJ8t89AsgGMRiXJW/tZKotWOW0W4dtMMFh0oqNEs9RYXMbWwx0AgC/Mn4i//8QZWHBWnTCOEsNqkXDptAZcOrUeAPD2EV9Jvrc3GEU4FgdgDOkAQN1rr7iRJSMUZQD6iMluOtgOIDFR0NtmyVkyORVOGy6alEiS25y8MYuNkapqGKmQvvb5D+oGukZYtgRSv32pIkt/Pe1H90AEVS4bZrfUlOQ7i8mS6QlnafOh0tgs+52qnDa47Mbom1n8BG9jtDphMFHK7oEwoknHuZjIsozNhxITnMuS97uekLNEYMm0xI24KXljFhuj5T4AqpYnRUgWNVq+EgDUV5a2mS6boV5ytgc2q/jDHrPZXSe6EQgWX6vKSIr7DKXlSRGcpWAkhu6BxO/SXC2+kCyQ0EeTJECWoZxbMTnYFkBbbwguu4WLSlXxRw1izFw2vQEAsONYZ9GqudSwZTijVNUAxW15YrRKOKC0lTUAuJqhasHEugpM9lQgGpex7Whn0b+v00C9HBnMntoCIc3bZrB8JZfdguoyY6QGWy0SastLJ0y56WDCZudPqeMimknOEoFpjZVoqnYhGImXptVJv3H0WhhKy5OiLMMZp9UJg+W9lKKyprs/jPdO9QAALp1mDGcJSEWXNpcgIuzrN15kqb7KCatFQiwua/7wb1V00coMs3QOlLaKdXPSWbqME5slZ4mAJEmppbiDJRh4A8Zpm8BgS2TF6GLepui1GOd6MVHKvlC06NHMrUd8iMvA9MYqNBvI4VScpYMdkOXi9tjzBYwXWbJaJCW6rXVEmNlso4FsFlALUxY3stQXimLXh4mJ+5LkyofekLNEAEgtT5QiYVSJLFUYZyBhSZztRQjpGzGyVOW0wZHMHSr2wKvMUA2yBMeYP6UODpsFp3sGcbSjr6jflYoGG8dmgdQkR+uIsDqyZCRKtXy+7YgPkZiMM2vLMUljKZZCIWeJAAAsPNsDq0XC0Y5+nOoqnoRALC4rmkFGkg7wVBYvpG80vRYgEc0shchdPJ6qqFnCSThfK8ocVlycTHwtdkQ41UTXODYLqJpgaxwRNlqrE4anRIUZ6hxDXpYxyVkiACQ6Y885swZAcXMgugfCYIGXWoPotQCJkH5DcmlJy1lqNBZHe3IJxGgDbylmqe+39sLXF0K5w4q5k8YV7Xv0olR5Sz4DJngDan20IjlLBirKAFTLcIHi2axaMoCnCQ45S4QCq4or5sDLZqjjyu2GKOFW01SE9gm+vjBicRlWi2S4B1UpkkXZvbzwLA+cNv0rarSG2ezOY10YCEeL9j2K3IeBJjhA8VqetBpQ7gNQFWYUMbJ0zNePj7oH4bBasOCsuqJ9T74Y62lFjAnmxW874kM4WhzRMaO1OlFTDGFKprHUmKzcMRLKLLWI7ROUGarB8pUYZ9VX4IyaMoRjcew8VrxKVp9B7VaZ4Gi8DNfmN97SOVCaNkVsSXne5FqUO/iRXSBniVCY2VwNT6UD/eEYdn/YXZTv6DBgqxOGEtLXcOBlM16jtExQo7RPCBRnltobjCj3MS/lx1ojSZLiCG4qkgJ/KBpDbzARtTKSNhqganmi+dK5MZfhStHyhMclOICcJUKFxSIpOjSbilQVZ7RmnGqKEVlqNegMFQA8FcVtzLntiA+xuIwp9RVoqeWjoqYYXFbkvCVWkGGzSIYRWGQ0q/TRtJJf6OgLIS4nrpfRxjm1dEAx5CqCkRh2HkuIrPIWDSZniUhDrd1SDNiD0WOw3AcgFVkqyjKcwWaoAOCpKm7OEq8zVK1ZeLYHNouEE50DOOHr13z/LPJXV+ngpjJJKxqSOkihaBz+QW1aeDD7bzDg0jmLLIWicfSHtddH236sE6FoHOPdLkxtqNR8/2OBnCUijcVT6yFJwAfeQFEEFo0oSMloLkJ/OK+BI0tMZ6sY1XCyLCu5D0Z3liqdNlyYrPQrRnSJ5ZQZ0WZddqtSlatVRZxRZQMAoNxhQ7kjUShRjIo4NklfwpFkAIOcJSKN2goHzp9QA6A40SWjitsB6ctwWoWovQYUpGQUM//hcHsfWv1BOG0WzJ/CT0VNsVgyrXiVrEZeOgdUeUsaTXK8ii6a8WwWUFWxFmH5fAvH0WBylohhFDMHwojdyxnqkH6PRl25vb3GTBQFUsnCXf0hxDVWPd/MWRPOYsPUybcf1b4ZtqKxZMClc0At+aFtZMmIS+eAOm9J20nOyc4BHPP1w2aRsPBsj6b71gJylohhsMS6rYc7EI1pKyFgVHE7AHDarIoOiRYhfVmWDZ3gPS55reJyQqxUS1iBAo8z1GIwo6kKDVVODEZiePeEthICrEyc9fMzGlq3PDGyzQLFWz5nrbbmTByHapdd031rATlLxDAumFCDmnI7eoNR7Et2a9cKo7ZNYGjZULdnIKLoXTUYrCEnANitFtSUJwZFLUXu+kNRvHs8IRnAW0VNsVA3w9Z6+dyogpSM5mQEqE2ryJJBBSkZxWpTxHtBBjlLxDCsFgmLp2q/FDcQjmIwuURg9PwHLWapbB91FQ5Dqk8DxelivuNYJ8KxOFpqyzDFU6HZfnmnWAr8HQYVpGQwDTOt9NGMnOANFEeYMhSNYdvRhGQArw2vyVkiMlKMnlOsEs5lt6DCYcyHv5YtT7y9g2n7NCIsWqFl/oO6Co63ippicsnZHlikRHL76R7t2ncYPRqsZcsTWZYNnWcIFKcwY9eJbgyEY6ivcmJmc7Vm+9UScpaIjFw6LZFg95eP/JrN+lkJcl2F07APMS0ra7z+UNo+jYjWs1RZllX5Sg2a7FMU3OV2zD4zKSGg4VJcp4GlAwBtVby7VUvnRk3wLkYDbDYpv3QqvxMcYZyl7u5urFixAm63G263GytWrEBPT0/Wz9x2222QJCntNX/+/LRtQqEQ/vmf/xkejwcVFRX49Kc/jY8++qiIZyIGDVUunDs+4eFvPazNwKvMUA2aKApomyzKZrpGjixpnf9wonMAp7oGYbdKWMhRE85Skapk1UaBPx6XVZElY9ots6/eYHTMzYhbkzbrqXTAYRPm8ZoXis1qmGfIWvXwnGMozK/5+c9/Hvv27cOGDRuwYcMG7Nu3DytWrBj1c8uWLUNra6vyWr9+fdrfV61ahXXr1uHFF1/E22+/jb6+Plx77bWIxbRXJxUNrRNGjV6CDKS0VbRI8E7ptRjXWdJ6lsoG3Ysm1aLCaazWHLnAHjZ/PtKpSTPs3mAE0aSsQ61B7bbKZUdl8l4Za3SpzeDJ3YD2eYYf9wziUFsfLBKwmEPJAIYQo8mBAwewYcMG7NixAxdffDEA4Oc//zkWLFiAgwcPYvr06SN+1ul0oqmpKePf/H4/nn76aTz77LO48sorAQDPPfccWlpa8MYbb+Dqq6/W/mQEYsm0ejy56Si2HPYhHpdhGaN0f6eSKGrMQRcAmtyJgUTLBG+jhvMB7fMfeK+oKTazxrtRV+FAZ38Ye052j1mQk/0u1S6bYSMlANBY7URfRxRefxBT6gtvs8Fs1shL5yzPsGcggkgsDrt1bPcFE6K8oKVGkRPhESHu/u3bt8PtdiuOEgDMnz8fbrcb27Zty/rZTZs2oaGhAdOmTcMdd9yB9vZUeHr37t2IRCJYunSp8t748eMxa9asrPsNhULo7e1NexmRORPHocppQ1d/GH897R/z/nwGD+cDKaXtQDCK/tDYQvqpVifGVAIGtJ2lBiMx7DjGKmrMla/EUDfD1qI4w2dwjSWGuqHuWDB6JRwAjCt3gM2buzRYihOlLZEQzpLX60VDw/DBr6GhAV6vd8TPXXPNNXj++efxpz/9CT/84Q/x7rvv4u/+7u8QCoWU/TocDowbNy7tc42NjVn3+/DDDyu5U263Gy0tLQWeGd/YrRYsSoZFtRx4jVqCDCT6dFWxkP4Yl+KMrtcCqPMfxu4s7TzehWAkjqZqF6Y18tWEs5Swh84mDZbPlXylCuPaLKCqYh2rzZpggmOxSKjVSJgyEovjz0d8APif4OjqLD3wwAPDErCHvnbt2gUAGTPkZVnOmjm/fPlyfOpTn8KsWbNw3XXX4bXXXsOhQ4fw6quvZj2u0fa7evVq+P1+5XXq1Kkcz1g8WA4EywUZC0YvQWY0atA+oS8URSCYiEwZ2VliasBaJHhvNqlkwFAWT/VAkoADrb1jzp1L9XI0ts1qVRHHnC0jL50D2hVm7D3Zg0AoinHldpx3hluLQysauuYs3X333bj55puzbjNp0iT85S9/QVtb27C/dXR0oLGxMefva25uxsSJE3H48GEAQFNTE8LhMLq7u9OiS+3t7Vi4cOGI+3E6nXA6jT3TYrBZ6r5TPegZCKOmvPBB08itTtQ0u104kmzkWihs0K5y2pTkUyPClncGwjEMhKModxR+rqwCjFdRu1JRV+nE+We48d5Hfmw51IEbLyw88s06yxvdZrWqYjV6qxNG4n4IjDmyxCbhi6fWwzrGnNhio2tkyePxYMaMGVlfLpcLCxYsgN/vxzvvvKN8dufOnfD7/VmdmqF0dnbi1KlTaG5uBgDMnTsXdrsdGzduVLZpbW3F/v3789qvkRlfU4ZpjZWIy8DbyXBpobBSU6PPUtmsciyzevbZRoMPuhUOK5zJxOGxzFJPdQ3gaEc/rJw24Sw1ylLcGJfPfSax2SYNbBZItUwxemSpTqPIEkvvEGGCI0TO0jnnnINly5bhjjvuwI4dO7Bjxw7ccccduPbaa9Mq4WbMmIF169YBAPr6+nDfffdh+/btOHHiBDZt2oTrrrsOHo8Hn/3sZwEAbrcbK1euxNe//nW8+eab2Lt3L2655Racd955SnUcoU0ORDQWV5ql1hk8/6FZmaUWrghslhmqJEmaJHmzQXfOmTVwl/HXhLPUsOXztw/7xtQMu9MEeYaANpGlvlAUgZDxl84BVTPdMeQatgeC+NvHieIo1l6LZ4RwlgDg+eefx3nnnYelS5di6dKlOP/88/Hss8+mbXPw4EH4/YmqLavVir/+9a/4+7//e0ybNg1f/OIXMW3aNGzfvh1VVVXKZx599FF85jOfwU033YRFixahvLwcr7zyCqxWY7bjKAR1zylZlgvaR9dAGLIMSJJx9VoYqZYnhQ8kbQZvmaDGo4F8QGqGyneSaKm4YELCafQPRvDeR4VXsrLfpN7gkSU2KensDxWsT6UsnbuMvXQOAJ6qpM0GCrfZLYcSKxWzzqhGvQDVlsL8orW1tXjuueeybqN+kJeVleGPf/zjqPt1uVx44okn8MQTT4z5GI3KhZPGocxuRUcghAOtAcwcn3/vHhaurS13cL82PVZSLU/GElkyvno3o26MLU/C0Ti2JZeIeS8/LhU2qwWXTPXg1b+0YvPBdsydOG70D2XALJGl2goHHFYLwrE42gNBTBhXnvc+vCbQWGKw6sixVLEqExxB2hIJE1ki9MNpsyqtIwqVEGDOktFzHwB1ZGnsCd5mcJbG2j5h14dd6A/H4Kl0cNuEUw+0aIat2K3Bo8GSJKExKShbqN2aaYLDIkuF5izF4rLSRovnFidqyFkicuKyMUoImKUSDkhprPj6woWH9E3Q6oTBohYdgcJmqUoTzmn1Y1aZNxKsT9xfTvsLitoFIzElB8foopQA0FydsNtCtZbazGSzY9RZeu+jHvQMRFDlsmF2S42GR1Y8yFkicoJ1cN/9YTcCwUjenzeDICVjXLldaQ1RaHWN1yRVNUAqalFoZGmzIArApaah2oVzmqshy8DWw/lXsrLfw2G1KEKrRmas+mhmaHXCUFfDFZLHymx28VQPbGNsl1IqxDhKQnfOrCvHZE8FonEZ24525v15RTbA4OF8IBHST+Ut5T/whqIxJbHWyErADJbcWUj0w+sP4gNvAJIkRkVNqRnLUhzTWKqrdJhC5LN5jBVxqaVz49ssWyEIx+JK9DEfROzhSM4SkTNjkRBgA68IVQ9aMBZF4PbexLVy2CwYV278MvixhPSVJpwTagxfZVkIbPl8y6EOxOP5RQBY8q4Zls6BVBS30GW4VHsi418vl92qVPz58lw+7+oP472PegBA6WMoAuQsETmzRDXw5ht6NVNkCRhbkrdXJRtghhn9WATuNiVVu0WaoZaSOWeOQ6XThs7+MPZ/nJ+EgM9ERRlAKrJU6DJcqhrO+JElQGW3eS6fbz3cAVkGZjRVCRU5J2eJyJn5k+vgsFlwumcQRzv68vqsWUqQGc1jaMxppko4IBW56BoII5ZH9CMaiyu5OKJU1JQah82SqmTNMyKs5BkaXESWMZYJTigaU5wGMyR4Aym7zXf5XMQlOICcJSIPyhxWzJ+SGHjzXYrzmaSJLqNxDMtwZtJrARIJ8ZIEyHIiRJ8r+071IBCMoqbcjgsm1BTvAAVHLSqbD0rj6ypz2Ky65Um+S5bqpfMaEyydA6lVgo48IsLxuKwsnZOzRBiaQhJGZVk2lXQAMLaWJ2ZpdcKwWS0YV85C+rnPUjcpFTX8N+HUk0unJXrl7TnZDf9A7pWsLGLgMUlkqb7KCYsERONy3m081DZrhqVzoDAx2fdbe+HrC6PcYcWFk2qLdWhFgZwlIi+Ys7TzWBcGwrlVQfSHYwgl9YbMkv/AQvptvfknLSutTkziLAEqYco8ZqmihvNLzYRx5Ti7If9m2D6TRZbsVotSgNKWZ6sir4naEzHqx2CzC8/yKPIqoiDW0RK6c1Z9Bc6oKUM4FseOY7lJCLBqiXKHFeUO4+u1AGpnKZhXHg6gUgI20cCbb0Wcry+Ev55OJCyzyAkxMqmIcO6ismbLWQJSNpdvRNhrIvVuRl0BDbCZqLGIOYbkLBF5IUmSUo6ca8IoW1oxS1QJAOorUyH9fBMgzZbgDaTujVyb6bK8h3PHV6OhyjzXqVAUm82jklWpYDWR3TYVWJjRamKbzTWy5B+MYM/JHgApdXmRIGeJyJt885Y6Aiy52zwzVJsqpJ/PwBuLy2hPRuLMNPB68pyl0hJcflw0qRYuuwVtvSF84A2Mun08LivJ9vUmsttC9dHaTLgMl6/NbjviQywuY0p9BVpq829UrDfkLBF5s/BsD+xWCSc6B3DC1z/q9kpkyUThfCCl5JuPInBnXwjRuAyLZK6HVCpnafSBNyZwRY1euOxWLJiSezPsnsGIsnw8ziTaaEDKZvN1lsxWlAGkbNYsExxyloi8qXTacOHERCVDLgNvp8lkAxjNqlLkXGFRqIYqlzA9k7QgVVkzekj/r6f96B6IoMppw5yJ44p9aIaBSQjk0gybOa015XbYTXQfFqqP1maiVicMNvntDUZHbRguy7JSvcruQ9EwjxUQmrJkeu5LcWaTDWA0FdBrim3baKIZKpBfSJ/lyi0622OqB/lYYTP6XSe60TdKP68Ok9psIfposbiMNrZ0bqJlOHeZHbakZMdokh+H2vrg7Q3CabPg4sliSQYwaKQhCoINvNuO+hCMxLJu22mytgmMQhSB2bbNJhp0gfwSvFlFl4gVNXoyyVOBiXXliWbYo0gIKDZroiU4IL2Zbq6J8L6+EGJxGVaLZJrelwBgsUhKP8bRIsLMZudPqYPLbi36sRUDcpaIgpjRVIXGaieCkTjePdGVdVufyVqdMArpNeU1ocYSkBI+7OwPZX1I9QyEse9UDwBxcx/0hFUhbRolItxp0sgSs7vBSAy9wdx05Jh9N1Q5TSeOmqt8QGoJTlybJWeJKAhJklJVcaNICKSW4cw1Sy2ki7kZZQOAlPBhMBJHf3jkSOXWwz7EZWBaYyXG15gnP0QrlqhkP7I5pWZrT8Rw2a1Ku5JcJznK0rnJosGAOsl75MhSfyiqTKhFnuCQs0QUzJJpyYTR0Wap/eaTDgDSW57kGtJnYnhmqqoBgHKHDWXJ8Hy2ijjRK2r0Zv6UOjisrBn2yJWsKW00c9kskL8wpdekNgvk1kx3+9FORGIyWmrLMNlTUapD0xxyloiCuWSqB1aLhCPtffioeyDjNpFYHD3JflRmy39gM81gJI7ewdxC+qw9ihlnqaPlLcXjsuIsiVpRozflDhsunpJIsM1WFeczaZ4hkK6+nwteM9ssy1nK0gB7UzJf6bJpDUL3zSNniSgYd5kds1tqAABbDmVOGGXCdhYJSrNUs+CyWzEuGdJv7R19lirLsmkjS8DoFXEHvL3oCIRQZrfiwkkkGVAouYjKmrWCFUhP8s4FU0eWkgntrKXVUNSSAaJHg8lZIsbEaD2n2KBbW+GExWTJj0B+Ine9g1EEIwm9EjPOUkdrpptqwlkHp03MihoeUJphH+/C4Aj5YWbVRgOApuqEzeYeWTJnniGQiiz5RogsHff146PuQTisFiw4q66Uh6Y55CwRY4Ith/z5SGdGYTIzD7oA0FSdbHmSg7PEok/jyu3ClteOhdHyH4xQUcMDZzdUJpphR0duht1pwia6jCZ34pxzjyyZr9UJg0WWRrPZiyaPQ4VT7Cbq5CwRY+Lc8dWoq3CgLxTFnpPdw/5u5nA+kF/Lk1YTqgCrqcvSPqE3GMGeDxP3FyssIApDkiRcmmUpbjAcUyoSPSbSDWLkEw1OLJ2zVifms1sm+THS0rmRCjLIWSLGhMWSfeA1qyAlozmPZNE2E/aXUsOiGJlC+tuOdCIalzHZU4Ez68Rrwskb2fKW2IPPabOgwmG+CGc+LU/8gxGEkhH1hmrzOZZ1qqXzoRW/wUhMiVwaYYJDzhIxZtiyyKYMeks+kzbRZaTKkHOPLJkxXwnIHtJXVLsNMEPlgUVn18FmkXDc148PO9MlBNTRYJGrlwqF2V/PQGTEnC4Gs9naCocpl86ZsxSNy8Mqfncc60QoGkez24VpjZV6HJ6mkLNEjJlLzvZAkoADrb3DIii+QDJnqcqckaV8Wp54TR5Z8lRklg6QZVkRPqUWJ9pQ5bJjbrIJ8dDoktnzDKtdNpQnI2qjRZfMnK8EAE6bFVWuRC5Sx5BJjnoJzghONzlLxJipq3Ti/DPcAIAtQwfeZGTJY9bIUh4hfaWqxqQDb90ICd5H2vvwsT8Ih82C+ZPFrqjhCbWatxozC1ICiZyuphwb6pq5Eo4xUmGGkfKVAHKWCI1YMj2zmrcS0jd5ZMk/OHpI36ytThgsktE9EEEklqqsZMu786fUocyEOTTF4rJkHsm2o51pzbDN2upETWqSk10frdXkNgtkbnlyqmsAxzr6YbVIWDTVo9ehaQo5S4QmsNnD24d9iKoedKnu5eacpVY5bUqS7Kgh/V5zL8PVlDvApLi6VUneRpuh8sI5zVWor3JiMBLDrhOpSlazNr5Wk1o+z94gVinKMGk0GEiN7SwiCaQmzXPPHIdql12X49IaYZyl7u5urFixAm63G263GytWrEBPT0/Wz0iSlPH1X//1X8o2l1122bC/33zzzUU+G+PxiZYauMvs8A9G8N5HfgCJXBOzV8NJkoRGVY+4kRgIR+EfTLSFaTSps2S1SKgdkrc0EI7inePiN+HkkbRm2CpR2dQEx5w2C0C1DDdKZCk5wTGrzQKZ2xQZMcdQGGfp85//PPbt24cNGzZgw4YN2LdvH1asWJH1M62trWmvZ555BpIk4R/+4R/StrvjjjvStvvpT39azFMxJFaLhMXJcOvmZM+p3mAU4WSUyaw6S4CqFDlL/gP7W4XDiirBxdvGwtCWJ9uPdiIci2PCuDKcVS9uE05eyVTJyq59vQk1lhi5tjwxc6sTxlCbDUVj2HY00f7KSBMcIUblAwcOYMOGDdixYwcuvvhiAMDPf/5zLFiwAAcPHsT06dMzfq6pqSnt37///e9x+eWXY8qUKWnvl5eXD9uWyJ8l0+rx//7Sis2HOnDv0ulKwl+l02bKsloGa5+QbRlOnShqhMqRQlF0W5IhfaNV1PDGJWd7YJGAw+19ON0ziDNqyky/dA6khClH00czewUroG5TlLDZ3Se6MRCOwVPpxMzmaj0PTVOEiCxt374dbrdbcZQAYP78+XC73di2bVtO+2hra8Orr76KlStXDvvb888/D4/Hg3PPPRf33XcfAoFA1n2FQiH09vamvYjULOIvp/3o7AspnajNugTHYO0TcoksmTlRFFDlPyQf2JSvVFxqyh34hNIMO3GtU9Vw5rXbXPTR+kNR9AYT2kJm1UYD1FWs6TZ76TSPofqBCuEseb1eNDQMVwBtaGiA1+vNaR+/+tWvUFVVheuvvz7t/S984Qt44YUXsGnTJnz3u9/F2rVrh20zlIcffljJnXK73Whpacn9ZAxMQ7ULM5urIcvA1sM+pRO1mZfggNxanihVNdXma5mght0rHX2hpGDiAOxWCQvPNkZFDY+w/o6bDrYjFpfR1c+q4cxrt2zS0tEXSqvMVMOiwZVOG6oMksRcCEOX4diSrtEmOLo6Sw888MCISdjstWvXLgDIGIKXZTnn0PwzzzyDL3zhC3C50mcAd9xxB6688krMmjULN998M37729/ijTfewJ49e0bc1+rVq+H3+5XXqVOn8jhrY6NotxzqUNpWmDlRFEjNUrOF9NuUZTjzPqCA9PYJLPftwom1qDRxHlexYQ+1Px/pREcghLgMSFKiobNZqatwwG6VIMtARyBzRVyborhPNgskbLbVP4iDbQFIEnDpVGM5S7qOQHffffeolWeTJk3CX/7yF7S1tQ37W0dHBxobG0f9nq1bt+LgwYN46aWXRt12zpw5sNvtOHz4MObMmZNxG6fTCafT3AYyEkum1eOpTUex5VAHWmoTPbzMXIIM5JYsavYmugx1/oOyBGegihoeOe8MN2orHOjqD2Pj+4lI/bhyB2xWIRYeioLFIqGhyoXTPYNo9Qcxvma4XZq5ga4aJjgcCEWx8f3Ec/qCCTUYZ7BJsq7Oksfjgcczenh9wYIF8Pv9eOeddzBv3jwAwM6dO+H3+7Fw4cJRP//0009j7ty5uOCCC0bd9m9/+xsikQiam5tHPwFiGHMnjkOl04bO/rDysKs3ce4DkArp+5IhfXuGhxCLLJlZrwVIhfRP9wziZNcAAOOF83nDkqxk/f2+j/HbPacBmFuQktHsTjhLI0WESb07QXWZDXarhEhMxtrk/WNEmxVi6nDOOedg2bJluOOOO7Bjxw7s2LEDd9xxB6699tq0SrgZM2Zg3bp1aZ/t7e3Fb37zG9x+++3D9nv06FE89NBD2LVrF06cOIH169fjxhtvxOzZs7Fo0aKin5cRsVstWHR2oiXFe6d6AFBkqbY8FdJvHyGkT0rACdi9cqitD8FIHI3VTsxoqtL5qIwPkxBQbNbElXCMxlEiwmbvC8eQJEm5X9j9c5kBo8FCOEtAomLtvPPOw9KlS7F06VKcf/75ePbZZ9O2OXjwIPx+f9p7L774ImRZxuc+97lh+3Q4HHjzzTdx9dVXY/r06fjqV7+KpUuX4o033oDVat5S97GyZFp6Mn5nfwixuKzT0eiPxSIp1TKZRO4isbiSHGl2Z6mmLD1PZvFUD0kGlIDFQ/JLZMimtlkgFeUdSZiSJjgpaitSdlvhtOLc8W4dj6Y4CJM1WVtbi+eeey7rNrI83Li//OUv48tf/nLG7VtaWrB582ZNjo9IISP9d/jxm0fwm10f4f7rZmLZLHMubza7XfioezBj+4T2QAiyDDisFtSWm3f5Y8P+Vjzwh7+lvffGgXZs2N9q2vumVOw60QW7RUIk6SDtONaFSx75k6ltNtUfboQEb5O3J2Js2N+KIx39yr/7QzEs+a+3DHfvCBNZIsRgw/5WfGfd/mHve/1BfOW5Pdiwv1WHo9KfRkW3Zfgslc1cG6qdhtIlyYcN+1vxlef2DHsw+Qcipr5vSgG79pEhkSSz22yqP1z2yJKZNZbYvROOpssrGPHeIWeJ0IxYXMaDr7yPTMF79t6Dr7xvyvB+tpYnrSZXAab7Rj/o2o9MtirWcDS1dE52Oxwj3jvkLBGa8c7xrqzl8TISAw9rjGomlJylDJU1XpPPUOm+0Q+69iPD7LG9N4T4kAd+eyBxzRxWi9L82WyY7d4hZ4nQDDaAaLWdkWBaLJkiS2bvL0X3jX7QtR+ZhioXJAkIx+LoGgin/U2Z4Lidpi1AMNu9Q84SoRkNVbk97HPdzkikkkUzOEuKXos5xe3ovtEPuvYj47BZFN2voZMcr6KLZk6bBcx375CzRGjGvMm1aHa7MNI8S0IiejJvcm0pD4sLmLPU1hscFtI3u14L3Tf6Qdc+O02KfMAQZ0mJLJnTZgHz3TvkLBGaYbVIuP+6mQAwzIDYv++/biasJqz4aqhyQpKASExGZ396SN/sei103+gHXfvsMJtsHRIRNntRBmC+e4ecJUJTls1qxlO3zBn24G9yu/DULXMMpbuRD3arBfXJkL66fUI8Litr+mYeeOm+0Q+69iPDbLJthGU4s0aDGWa6d4QRpSTEYdmsZlw1swnvHO9CeyCIhqpEKNYoM4xCaXK70B4IodUfxKwzEgq3nf1hRGIyJAmorzJ3iwm6b/SDrn1mUvpomZfhzBoNVmOWe4ecJaIoWC0SFpxVp/dhcEVTtQt/gT9N5I4NuvWVzowNds0G3Tf6Qdd+OIo+Wm+6MCU5S+mY4d6h0ZkgSkRzhoo4L7VMIAhuSal4py+dU6sT80HOEkGUiExdzFmUyayClATBM5mq4Xz9IUTjMiwSlDxEwviQs0QQJaJZJR/AoMgSQfALiyz1h2MIBCMAgLZkM+z6KidstHRuGuiXJogSkSlZtJX0WgiCW8odNlS7Eqm9LLrEmmGbvRLObJCzRBAlQt3yRJZl5f8Tf6OBlyB4hNktm9ikFPfJZs0EOUsEUSLYTHQgHEMgFAWg1msxb9sEguCZoa2KUhMcslkzQc4SQZSIMocV7jI7gFR0iUqQCYJvhiZ5K61OaBnOVJCzRBAlpFlVEdcbjGIgHANA+Q8EwStNQ6pYqdWJOSFniSBKSJOqfQKriqspt6PMYdXzsAiCGIGhVaxtlLNkSkjBmyBKSJOqIq6RLcFRVIkguEWtjybLcqrxNdmtqaDIEkGUEHWyaBvlKxEE96gjS73BKAYjyaVzsltTQZElgighqWTRQbQm/59mqATBL8w+u/rD+LCzH0Bi6dxlp6VzM0GRJYIoIepkUdack2aoBMEv7jI7XPbEo/K9Uz0AaIJjRshZIogSwrRZ2nqDJEhJEAIgSZJit3uTzhLZrPkgZ4kgSgibkXYPRHCicwAA6bUQBO80Vica5u472QOAosFmhJwlgigh1WU2lCVzHY77EvkPpARMEHzDbPRY0mZJcd98kLNEECUkEdJPn5XSLJUg+GaojdIynPkgZ4kgSox62a3MblW6mhMEwSdDE7obyVkyHeQsEUSJUc9Km90uSJKk49EQBDEaFFkiyFkiiBKjnpVScjdB8M+wyBLZrekgZ4kgSgyrrAEAm0VCLC7reDQEQYxGQ1XKZp02Cyqol6PpEMZZ+o//+A8sXLgQ5eXlqKmpyekzsizjgQcewPjx41FWVobLLrsMf/vb39K2CYVC+Od//md4PB5UVFTg05/+ND766KMinAFBABv2t+LxNw4r/956xIdLHvkTNuxv1fGoCIIYiQ37W/HZJ7cp/w5F41j8n2+RzZoMYZylcDiMG2+8EV/5yldy/sx//ud/4kc/+hH++7//G++++y6amppw1VVXIRAIKNusWrUK69atw4svvoi3334bfX19uPbaaxGLxYpxGoSJ2bC/FV95bg+6ByJp73v9QXzluT00+BIEZzCb9fYG094nmzUfkizLQq0BrFmzBqtWrUJPT0/W7WRZxvjx47Fq1Sp885vfBJCIIjU2NuKRRx7BP/7jP8Lv96O+vh7PPvssli9fDgD4+OOP0dLSgvXr1+Pqq6/O6Zh6e3vhdrvh9/tRXV09pvMjjEksLuOSR/6kdCwfioREEunb3/w7WC2U8E0QekM2aw5yfX4LE1nKl+PHj8Pr9WLp0qXKe06nE0uWLMG2bYmQ6u7duxGJRNK2GT9+PGbNmqVsk4lQKITe3t60F0Fk453jXSMOugAgI9Ev7p3jXaU7KIIgRoRsllBjWGfJ6/UCABobG9Peb2xsVP7m9XrhcDgwbty4EbfJxMMPPwy32628WlpaND56wmi0B0YedAvZjiCI4kI2S6jR1Vl64IEHIElS1teuXbvG9B1DNWxkWR5V12a0bVavXg2/36+8Tp06NaZjJIxPQ1Vupca5bkcQRHEhmyXU6CodfPfdd+Pmm2/Ous2kSZMK2ndTUxOARPSoublZeb+9vV2JNjU1NSEcDqO7uzstutTe3o6FCxeOuG+n0wmn0zni3wliKPMm16LZ7YLXH0SmJEGW/zBvcm2pD40giAyQzRJqdI0seTwezJgxI+vL5SrMa588eTKampqwceNG5b1wOIzNmzcrjtDcuXNht9vTtmltbcX+/fuzOksEkS9Wi4T7r5sJIDHIqmH/vv+6mZQoShCcQDZLqBEmZ+nkyZPYt28fTp48iVgshn379mHfvn3o6+tTtpkxYwbWrVsHILH8tmrVKnzve9/DunXrsH//ftx2220oLy/H5z//eQCA2+3GypUr8fWvfx1vvvkm9u7di1tuuQXnnXcerrzySl3OkzAuy2Y146lb5gxrndDkduGpW+Zg2azmET5JEIQekM0SDGE6eP7bv/0bfvWrXyn/nj17NgDgrbfewmWXXQYAOHjwIPx+v7LNN77xDQwODuKuu+5Cd3c3Lr74Yrz++uuoqqpStnn00Udhs9lw0003YXBwEFdccQXWrFkDq5UUWgntWTarGVfNbMI7x7vQHgiioSoRxqfZKUHwCdksAQios8QjpLNEEARBEOJhep0lgiAIgiAILSBniSAIgiAIIgvkLBEEQRAEQWSBnCWCIAiCIIgskLNEEARBEASRBXKWCIIgCIIgskDOEkEQBEEQRBbIWSIIgiAIgsgCOUsEQRAEQRBZEKbdCc8wEfTe3l6dj4QgCIIgiFxhz+3RmpmQs6QBgUAAANDS0qLzkRAEQRAEkS+BQABut3vEv1NvOA2Ix+P4+OOPUVVVBUnSrrlib28vWlpacOrUKVP0nDPT+dK5GhcznS+dq3Exy/nKsoxAIIDx48fDYhk5M4kiSxpgsVgwYcKEou2/urra0DfrUMx0vnSuxsVM50vnalzMcL7ZIkoMSvAmCIIgCILIAjlLBEEQBEEQWSBniWOcTifuv/9+OJ1OvQ+lJJjpfOlcjYuZzpfO1biY7XxHgxK8CYIgCIIgskCRJYIgCIIgiCyQs0QQBEEQBJEFcpYIgiAIgiCyQM4SQRAEQRBEFshZKjFPPvkkJk+eDJfLhblz52Lr1q1Zt9+8eTPmzp0Ll8uFKVOm4Cc/+cmwbdauXYuZM2fC6XRi5syZWLduXbEOPy/yOdeXX34ZV111Ferr61FdXY0FCxbgj3/8Y9o2a9asgSRJw17BYLDYpzIq+Zzrpk2bMp7HBx98kLYdr78rkN/53nbbbRnP99xzz1W24fW33bJlC6677jqMHz8ekiThd7/73aifEdVm8z1XkW0233MV3WbzPV+RbbZYkLNUQl566SWsWrUK3/72t7F3714sXrwY11xzDU6ePJlx++PHj+OTn/wkFi9ejL179+Jf//Vf8dWvfhVr165Vttm+fTuWL1+OFStW4L333sOKFStw0003YefOnaU6rYzke65btmzBVVddhfXr12P37t24/PLLcd1112Hv3r1p21VXV6O1tTXt5XK5SnFKI5LvuTIOHjyYdh5Tp05V/sbr7wrkf76PP/542nmeOnUKtbW1uPHGG9O24/G37e/vxwUXXID//u//zml7kW0233MV2WbzPVeGqDab7/mKbLNFQyZKxrx58+Q777wz7b0ZM2bI3/rWtzJu/41vfEOeMWNG2nv/+I//KM+fP1/590033SQvW7YsbZurr75avvnmmzU66sLI91wzMXPmTPnBBx9U/v3LX/5SdrvdWh2iZuR7rm+99ZYMQO7u7h5xn7z+rrI89t923bp1siRJ8okTJ5T3eP1t1QCQ161bl3UbkW1WTS7nmglRbFZNLucqus2qKeS3FdVmtYQiSyUiHA5j9+7dWLp0adr7S5cuxbZt2zJ+Zvv27cO2v/rqq7Fr1y5EIpGs24y0z1JQyLkOJR6PIxAIoLa2Nu39vr4+TJw4ERMmTMC11147bBZbasZyrrNnz0ZzczOuuOIKvPXWW2l/4/F3BbT5bZ9++mlceeWVmDhxYtr7vP22hSCqzWqBKDY7FkS0WS0wss3mCjlLJcLn8yEWi6GxsTHt/cbGRni93oyf8Xq9GbePRqPw+XxZtxlpn6WgkHMdyg9/+EP09/fjpptuUt6bMWMG1qxZgz/84Q944YUX4HK5sGjRIhw+fFjT48+HQs61ubkZP/vZz7B27Vq8/PLLmD59Oq644gps2bJF2YbH3xUY+2/b2tqK1157Dbfffnva+zz+toUgqs1qgSg2Wwgi2+xYMbrN5opN7wMwG5Ikpf1bluVh7422/dD3891nqSj0uF544QU88MAD+P3vf4+Ghgbl/fnz52P+/PnKvxctWoQ5c+bgiSeewI9//GPtDrwA8jnX6dOnY/r06cq/FyxYgFOnTuEHP/gBLr300oL2WWoKPbY1a9agpqYGn/nMZ9Le5/m3zReRbbZQRLTZfDCCzRaKGWw2FyiyVCI8Hg+sVuuwWUZ7e/uw2Qijqakp4/Y2mw11dXVZtxlpn6WgkHNlvPTSS1i5ciX+93//F1deeWXWbS0WCy666CJdZzJjOVc18+fPTzsPHn9XYGznK8synnnmGaxYsQIOhyPrtjz8toUgqs2OBdFsVitEsdmxYAabzRVylkqEw+HA3LlzsXHjxrT3N27ciIULF2b8zIIFC4Zt//rrr+PCCy+E3W7Pus1I+ywFhZwrkJid3nbbbfj1r3+NT33qU6N+jyzL2LdvH5qbm8d8zIVS6LkOZe/evWnnwePvCoztfDdv3owjR45g5cqVo34PD79tIYhqs4Uios1qhSg2OxbMYLM5U/qccvPy4osvyna7XX766afl999/X161apVcUVGhVBh861vfklesWKFsf+zYMbm8vFy+55575Pfff19++umnZbvdLv/2t79Vtvnzn/8sW61W+fvf/7584MAB+fvf/75ss9nkHTt2lPz81OR7rr/+9a9lm80m/8///I/c2tqqvHp6epRtHnjgAXnDhg3y0aNH5b1798pf+tKXZJvNJu/cubPk56cm33N99NFH5XXr1smHDh2S9+/fL3/rW9+SAchr165VtuH1d5Xl/M+Xccstt8gXX3xxxn3y+tsGAgF579698t69e2UA8o9+9CN579698ocffijLsrFsNt9zFdlm8z1X0W023/NliGizxYKcpRLzP//zP/LEiRNlh8Mhz5kzR968ebPyty9+8YvykiVL0rbftGmTPHv2bNnhcMiTJk2Sn3rqqWH7/M1vfiNPnz5dttvt8owZM9IMWE/yOdclS5bIAIa9vvjFLyrbrFq1Sj7zzDNlh8Mh19fXy0uXLpW3bdtWwjMamXzO9ZFHHpHPOuss2eVyyePGjZMvueQS+dVXXx22T15/V1nO/z7u6emRy8rK5J/97GcZ98frb8tKxke6L41ks/meq8g2m++5im6zhdzHotpssZBkOZl9SBAEQRAEQQyDcpYIgiAIgiCyQM4SQRAEQRBEFshZIgiCIAiCyAI5SwRBEARBEFkgZ4kgCIIgCCIL5CwRBEEQBEFkgZwlgiAIgiCILJCzRBAEQRAEkQVylgiCMBSbNm2CJEno6ekp+XdLkgRJklBTU5PT9uxYJUka1tWdIAh+IGeJIAhhueyyy7Bq1aq09xYuXIjW1la43W5djumXv/wlDh06lNO27FhvuummIh8VQRBjgZwlgiAMhcPhQFNTEyRJ0uX7a2pq0NDQkNO27FjLysqKfFQEQYwFcpYIghCS2267DZs3b8bjjz+uLGWdOHFi2DLcmjVrUFNTg//3//4fpk+fjvLyctxwww3o7+/Hr371K0yaNAnjxo3DP//zPyMWiyn7D4fD+MY3voEzzjgDFRUVuPjii7Fp06a8j/O9997D5ZdfjqqqKlRXV2Pu3LnYtWuXRleBIIhSYNP7AAiCIArh8ccfx6FDhzBr1iw89NBDAID6+nqcOHFi2LYDAwP48Y9/jBdffBGBQADXX389rr/+etTU1GD9+vU4duwY/uEf/gGXXHIJli9fDgD40pe+hBMnTuDFF1/E+PHjsW7dOixbtgx//etfMXXq1JyP8wtf+AJmz56Np556ClarFfv27YPdbtfkGhAEURrIWSIIQkjcbjccDgfKy8vR1NSUddtIJIKnnnoKZ511FgDghhtuwLPPPou2tjZUVlZi5syZuPzyy/HWW29h+fLlOHr0KF544QV89NFHGD9+PADgvvvuw4YNG/DLX/4S3/ve93I+zpMnT+Jf/uVfMGPGDADIy9EiCIIPyFkiCMLwlJeXK44SADQ2NmLSpEmorKxMe6+9vR0AsGfPHsiyjGnTpqXtJxQKoa6uLq/vvvfee3H77bfj2WefxZVXXokbb7wx7VgIguAfcpYIgjA8Q5e9JEnK+F48HgcAxONxWK1W7N69G1arNW07tYOVCw888AA+//nP49VXX8Vrr72G+++/Hy+++CI++9nPFnAmBEHoATlLBEEIi8PhSEvK1orZs2cjFouhvb0dixcvHvP+pk2bhmnTpuGee+7B5z73Ofzyl78kZ4kgBIKq4QiCEJZJkyZh586dOHHiBHw+nxIZGivTpk3DF77wBdx66614+eWXcfz4cbz77rt45JFHsH79+pz3Mzg4iLvvvhubNm3Chx9+iD//+c949913cc4552hynARBlAZylgiCEJb77rsPVqsVM2fORH19PU6ePKnZvn/5y1/i1ltvxde//nVMnz4dn/70p7Fz5060tLTkvA+r1YrOzk7ceuutmDZtGm666SZcc801ePDBBzU7ToIgio8ky7Ks90EQBEEYAUmSsG7durxbl9x2223o6enB7373u6IcF0EQY4MiSwRBEBryuc99DhMmTMhp261bt6KyshLPP/98kY+KIIixQJElgiAIjThy5AiAxPLb5MmTR91+cHAQp0+fBpCoshtNL4ogCH0gZ4kgCIIgCCILtAxHEARBEASRBXKWCIIgCIIgskDOEkEQBEEQRBbIWSIIgiAIgsgCOUsEQRAEQRBZIGeJIAiCIAgiC+QsEQRBEARBZIGcJYIgCIIgiCz8/0VQl+TQ6YeGAAAAAElFTkSuQmCC"/> +</div> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=af87d120"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [15]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="c1">### SOLUTION</span> + +<span class="n">abs_fft</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">fft</span><span class="p">(</span><span class="n">xt</span><span class="p">))</span> +<span class="n">freq</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">fs</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="n">T</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">stem</span><span class="p">(</span><span class="n">freq</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">freq</span><span class="p">,</span> <span class="n">abs_fft</span><span class="p">,</span> <span class="s1">'o'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'|Xk|'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'frequency [Hz]'</span><span class="p">);</span> +</pre></div> +</div> +</div> +</div> +</div> +<div class="jp-Cell-outputWrapper"> +<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser"> +</div> +<div class="jp-OutputArea jp-Cell-outputArea"> +<div class="jp-OutputArea-child"> +<div class="jp-OutputPrompt jp-OutputArea-prompt"></div> +<div class="jp-RenderedImage jp-OutputArea-output" tabindex="0"> +<img alt="No description has been provided for this image" class="" src="data:image/png;base64,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"/> +</div> +</div> +</div> +</div> +</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=6fd9014c"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"> +<div class="jp-InputPrompt jp-InputArea-prompt">In [9]:</div> +<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline"> +<div class="cm-editor cm-s-jupyter"> +<div class="highlight hl-ipython3"><pre><span></span><span class="c1">### SOLUTION</span> + +<span class="n">abs_fft</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">fft</span><span class="p">(</span><span class="n">xt</span><span class="p">))</span> +<span class="n">freq</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">fs</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="n">T</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">stem</span><span class="p">(</span><span class="n">freq</span><span class="p">[:</span><span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="o">/</span><span class="mi">2</span><span class="p">)],</span> <span class="n">abs_fft</span><span class="p">[:</span><span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="o">/</span><span class="mi">2</span><span class="p">)])</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">freq</span><span class="p">[:</span><span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="o">/</span><span class="mi">2</span><span class="p">)],</span> <span class="n">abs_fft</span><span class="p">[:</span><span class="nb">int</span><span class="p">(</span><span class="n">N</span><span class="o">/</span><span class="mi">2</span><span class="p">)],</span> <span class="s1">'o'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'|Xk|'</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'frequency [Hz]'</span><span class="p">);</span> +</pre></div> +</div> +</div> +</div> +</div> +<div class="jp-Cell-outputWrapper"> +<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser"> +</div> +<div class="jp-OutputArea jp-Cell-outputArea"> +<div class="jp-OutputArea-child"> +<div class="jp-OutputPrompt jp-OutputArea-prompt"></div> +<div class="jp-RenderedImage jp-OutputArea-output" tabindex="0"> +<img alt="No description has been provided for this image" class="" src="data:image/png;base64,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"/> +</div> +</div> +</div> +</div> +</div> +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=35961e4d"> +<div class="jp-Cell-inputWrapper" tabindex="0"> +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> +</div> +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> +<p><strong>End of notebook.</strong></p> +<h2 style="height: 60px"> +</h2> +<h3 style="position: absolute; display: flex; flex-grow: 0; flex-shrink: 0; flex-direction: row-reverse; bottom: 60px; right: 50px; margin: 0; border: 0"> +<style> + .markdown {width:100%; position: relative} + article { position: relative } + </style> +<a href="http://creativecommons.org/licenses/by/4.0/" rel="license"> +<img alt="Creative Commons License" src="https://i.creativecommons.org/l/by/4.0/88x31.png" style="border-width:; width:88px; height:auto; padding-top:10px"> +</img></a> +<a href="https://www.tudelft.nl/en/ceg" rel="TU Delft"> +<img alt="TU Delft" src="https://gitlab.tudelft.nl/mude/public/-/raw/main/tu-logo/TU_P1_full-color.png" style="border-width:0; width:100px; height:auto; padding-bottom:0px"> +</img></a> +<a href="http://mude.citg.tudelft.nl/" rel="MUDE"> +<img alt="MUDE" src="https://gitlab.tudelft.nl/mude/public/-/raw/main/mude-logo/MUDE_Logo-small.png" style="border-width:0; width:100px; height:auto; padding-bottom:0px"> +</img></a> +</h3> +<span style="font-size: 75%"> +© Copyright 2024 <a href="http://mude.citg.tudelft.nl/" rel="MUDE">MUDE</a> TU Delft. This work is licensed under a <a href="http://creativecommons.org/licenses/by/4.0/" rel="license">CC BY 4.0 License</a>. + +</span></div> +</div> +</div> +</div> +</main> +</body> +<script type="application/vnd.jupyter.widget-state+json"> +{"state": {}, "version_major": 2, "version_minor": 0} +</script> +</html>