\" + n + '
' + (0, o.Iu)(\"transformWizardLabel\") + '
' + (0, o.Iu)(\"transformWizardFilter\") + '
== != < <= \">> =\">>=
' + (0, o.Iu)(\"transformWizardSortBy\") + '
Ascending Descending
' + (0, o.Iu)(\"transformWizardSelectFields\") + '
' + (0, o.Iu)(\"transformQueryLabel\") + '
' + (0, o.Iu)(\"transformPreviewLabel\") + '
';\n i()({\n parent: t,\n content: e,\n overlayClass: \"jsoneditor-modal-overlay\",\n overlayStyles: {\n backgroundColor: \"rgb(1,1,1)\",\n opacity: .3\n },\n modalClass: \"jsoneditor-modal jsoneditor-modal-transform\",\n focus: !1\n }).afterCreate(function (t) {\n var e = t.modalElem(),\n n = e.querySelector(\"#wizard\"),\n r = e.querySelector(\"#ok\"),\n o = e.querySelector(\"#filterField\"),\n s = e.querySelector(\"#filterRelation\"),\n a = e.querySelector(\"#filterValue\"),\n l = e.querySelector(\"#sortField\"),\n c = e.querySelector(\"#sortOrder\"),\n h = e.querySelector(\"#selectFields\"),\n d = e.querySelector(\"#query\"),\n u = e.querySelector(\"#preview\");\n Array.isArray(S) || (n.style.fontStyle = \"italic\", n.textContent = \"(wizard not available for objects, only for arrays)\");\n (0, T.getChildPaths)(I).forEach(function (e) {\n var e = f(e),\n t = document.createElement(\"option\"),\n t = (t.text = e, t.value = e, o.appendChild(t), document.createElement(\"option\"));\n t.text = e, t.value = e, l.appendChild(t);\n });\n var n = (0, T.getChildPaths)(I, !0).filter(function (e) {\n return \"\" !== e;\n }),\n n = (0 < n.length ? n.forEach(function (e) {\n var e = f(e),\n t = document.createElement(\"option\");\n t.text = e, t.value = e, h.appendChild(t);\n }) : (n = e.querySelector(\"#selectFieldsPart\")) && (n.style.display = \"none\"), new (x())(o, {\n defaultSelected: !1,\n clearable: !0,\n allowDeselect: !0,\n placeholder: \"field...\"\n })),\n i = new (x())(s, {\n defaultSelected: !1,\n clearable: !0,\n allowDeselect: !0,\n placeholder: \"compare...\"\n }),\n g = new (x())(l, {\n defaultSelected: !1,\n clearable: !0,\n allowDeselect: !0,\n placeholder: \"field...\"\n }),\n p = new (x())(c, {\n defaultSelected: !1,\n clearable: !0,\n allowDeselect: !0,\n placeholder: \"order...\"\n }),\n m = new (x())(h, {\n multiple: !0,\n clearable: !0,\n defaultSelected: !1,\n placeholder: \"select fields...\"\n });\n function f(e) {\n return \"\" === e ? \"@\" : \".\" === e[0] ? e.slice(1) : e;\n }\n n.on(\"selectr.change\", v), i.on(\"selectr.change\", v), a.oninput = v, g.on(\"selectr.change\", v), p.on(\"selectr.change\", v), m.on(\"selectr.change\", v), e.querySelector(\".pico-modal-contents\").onclick = function (e) {\n \"A\" !== e.target.nodeName && e.preventDefault();\n };\n var C = (0, T.debounce)(function () {\n try {\n var e = A(S, d.value);\n u.className = \"jsoneditor-transform-preview\", u.value = (t = e, n = 2, i = R.WF, \"number\" == typeof n ? 10 < n ? o = E(\" \", 10) : 1 <= n && (o = E(\" \", n)) : \"string\" == typeof n && \"\" !== n && (o = n), (n = k(t, o, \"\", i)).length > i ? (t = n, (\"number\" == typeof (o = i) ? t.slice(0, o) : t) + \"...\") : n), r.disabled = !1;\n } catch (e) {\n u.className = \"jsoneditor-transform-preview jsoneditor-error\", u.value = e.toString(), r.disabled = !0;\n }\n var t, n, i, o;\n }, 300);\n function y(t, e) {\n try {\n d.value = b(t, e), r.disabled = !1, C();\n } catch (e) {\n t = 'Error: an error happened when executing \"createQuery\": ' + (e.message || e.toString());\n d.value = \"\", r.disabled = !0, u.className = \"jsoneditor-transform-preview jsoneditor-error\", u.value = t;\n }\n }\n function v() {\n var e = {};\n if (o.value && s.value && a.value && (e.filter = {\n field: o.value,\n relation: s.value,\n value: a.value\n }), l.value && c.value && (e.sort = {\n field: l.value,\n direction: c.value\n }), h.value) {\n for (var t, n = [], i = 0; i < h.options.length; i++) h.options[i].selected && (t = h.options[i].value, n.push(t));\n e.projection = {\n fields: n\n };\n }\n y(I, e);\n }\n d.oninput = C, r.onclick = function (e) {\n e.preventDefault(), e.stopPropagation(), t.close(), w(d.value);\n }, y(I, {}), setTimeout(function () {\n d.select(), d.focus(), d.selectionStart = 3, d.selectionEnd = 3;\n });\n }).afterClose(function (e) {\n e.destroy();\n }).show();\n }\n },\n 8458: function (e, t, n) {\n \"use strict\";\n\n n.r(t), n.d(t, {\n textModeMixins: function () {\n return A;\n }\n });\n var i = n(1262),\n t = n(8170),\n l = n.n(t),\n a = n(4188),\n c = n(6436),\n h = n(2474),\n d = n(7907),\n u = n(6056),\n g = n(6617),\n o = n(6210),\n p = n(2558),\n m = n(9125),\n f = n(7026),\n C = n(9791);\n function r(e) {\n return (r = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (e) {\n return typeof e;\n } : function (e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n })(e);\n }\n function s(e, t) {\n for (var n = 0; n < t.length; n++) {\n var i = t[n];\n i.enumerable = i.enumerable || !1, i.configurable = !0, \"value\" in i && (i.writable = !0), Object.defineProperty(e, function (e) {\n e = function (e, t) {\n if (\"object\" !== r(e) || null === e) return e;\n var n = e[Symbol.toPrimitive];\n if (void 0 === n) return (\"string\" === t ? String : Number)(e);\n n = n.call(e, t || \"default\");\n if (\"object\" !== r(n)) return n;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }(e, \"string\");\n return \"symbol\" === r(e) ? e : String(e);\n }(i.key), i);\n }\n }\n var y = function () {\n function n(e, t) {\n if (!(this instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n this.schema = e, this.schemaRefs = t || {}, this.suggestions = {}, this.suggestionsRefs = {}, this._buildSuggestions();\n }\n var e, t, i;\n return e = n, (t = [{\n key: \"_buildSuggestions\",\n value: function () {\n for (var e in this._handleSchemaEntry(\"\", this.schema, this.suggestions), this.schemaRefs) this.suggestionsRefs[e] = {}, this._handleSchemaEntry(\"\", this.schemaRefs[e], this.suggestionsRefs[e]);\n }\n }, {\n key: \"_handleRef\",\n value: function (e, t, n) {\n n[e] = n[e] || {}, n[e].refs = n[e].refs || [], n[e].refs = (0, C.uniqueMergeArrays)(n[e].refs, [t]);\n }\n }, {\n key: \"_handleSchemaEntry\",\n value: function (e, t, n) {\n if (t) {\n if (t.$ref) this._handleRef(e, t.$ref, n);else {\n var i = this._checkOfConditon(t);\n if (i) this._handleOfCondition(e, t[i], n);else switch (t.type) {\n case \"object\":\n this._handleObject(e, t, n);\n break;\n case \"string\":\n case \"number\":\n case \"integer\":\n this._handlePrimitive(e, t, n);\n break;\n case \"boolean\":\n this._handleBoolean(e, t, n);\n break;\n case \"array\":\n this._handleArray(e, t, n);\n }\n }\n } else console.error(\"SchemaTextCompleter: schema node is missing for path\", e);\n }\n }, {\n key: \"_handleObject\",\n value: function (t, n, i) {\n var e,\n o = this;\n (0, C.isObject)(n.properties) && (e = Object.keys(n.properties), i[t] = i[t] || {}, i[t].props = i[t].props || [], i[t].props = (0, C.uniqueMergeArrays)(i[t].props, e), e.forEach(function (e) {\n (0, C.asyncExec)(function () {\n o._handleSchemaEntry(\"\".concat(t, \"/\").concat(e), n.properties[e], i);\n });\n }));\n }\n }, {\n key: \"_handlePrimitive\",\n value: function (e, t, n) {\n n[e] = n[e] || {}, (0, C.isArray)(t.examples) && (n[e].examples = n[e].examples || [], n[e].examples = (0, C.uniqueMergeArrays)(n[e].examples, t.examples)), (0, C.isArray)(t.enum) && (n[e].enum = n[e].enum || [], n[e].enum = (0, C.uniqueMergeArrays)(n[e].enum, t.enum));\n }\n }, {\n key: \"_handleBoolean\",\n value: function (e, t, n) {\n n[e] || (n[e] = {\n bool: [!0, !1]\n });\n }\n }, {\n key: \"_handleArray\",\n value: function (e, t, n) {\n var i = this;\n t.items && (0, C.asyncExec)(function () {\n i._handleSchemaEntry(\"\".concat(e, \"/\\\\d+\"), t.items, n);\n });\n }\n }, {\n key: \"_handleOfCondition\",\n value: function (t, e, n) {\n var i = this;\n e && e.length && e.forEach(function (e) {\n (0, C.asyncExec)(function () {\n i._handleSchemaEntry(t, e, n);\n });\n });\n }\n }, {\n key: \"_checkOfConditon\",\n value: function (e) {\n if (e) return e.oneOf ? \"oneOf\" : e.anyOf ? \"anyOf\" : e.allOf ? \"allOf\" : void 0;\n }\n }, {\n key: \"getCompletions\",\n value: function (e, t, i, n, s) {\n var c = this;\n try {\n var o = f.parse(t.getValue()).pointers || {},\n r = function (i) {\n function e(t) {\n var e,\n n = {\n props: \"property\",\n enum: \"enum\",\n bool: \"boolean\",\n examples: \"examples\"\n };\n i && null != (e = i[t]) && e.length && (o = o.concat(i[t].map(function (e) {\n return {\n caption: e + \"\",\n meta: \"schema [\".concat(n[t], \"]\"),\n score: r++,\n value: e + \"\"\n };\n })));\n }\n var o = [],\n r = 0;\n e(\"props\"), e(\"enum\"), e(\"bool\"), e(\"examples\"), o.length && s(null, o);\n };\n Object.keys(o).forEach(function (n) {\n (0, C.asyncExec)(function () {\n function l(n, e, i) {\n var t,\n o = Object.keys(e).reduce(function (e, t) {\n return new RegExp(\"^\".concat(i).concat(t)).test(n) && (!e || e.length < t.length) ? t : e;\n });\n if (\"string\" == typeof o) {\n if (null != (t = e[o]) && null != (t = t.refs) && t.length) {\n var r,\n s = {};\n for (r in e[o].refs) {\n var a = e[o].refs[r];\n c.suggestionsRefs[a] && (null != (a = l(n, c.suggestionsRefs[a], \"\".concat(i).concat(o))) && a.enum && (s.enum = (0, C.uniqueMergeArrays)(s.enum, a.enum)), null != a && a.examples && (s.examples = (0, C.uniqueMergeArrays)(s.examples, a.examples)), null != a && a.bool && (s.bool = (0, C.uniqueMergeArrays)(s.bool, a.bool)), null != a) && a.props && (s.props = (0, C.uniqueMergeArrays)(s.props, a.props));\n }\n return s;\n }\n if (new RegExp(\"^\".concat(i).concat(o, \"$\")).test(n)) return e[o];\n }\n }\n var e, t;\n (null == (t = o[n].key) ? void 0 : t.line) === i.row && i.column >= o[n].key.column && i.column <= o[n].keyEnd.column && (e = n.slice(0, n.lastIndexOf(\"/\"))), (e = (null == (t = o[n].value) ? void 0 : t.line) === i.row && (null == (t = o[n].value) ? void 0 : t.line) === (null == (t = o[n].valueEnd) ? void 0 : t.line) && i.column >= o[n].value.column && i.column <= o[n].valueEnd.column ? n : e) && (t = l(e, c.suggestions, \"\"), r(t));\n });\n });\n } catch (e) {}\n }\n }]) && s(e.prototype, t), i && s(e, i), Object.defineProperty(e, \"prototype\", {\n writable: !1\n }), n;\n }();\n function v(e) {\n return (v = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (e) {\n return typeof e;\n } : function (e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n })(e);\n }\n var t = {},\n I = \"ace/theme/jsoneditor\";\n function b() {\n try {\n this.format();\n } catch (e) {}\n }\n t.create = function (e) {\n var t,\n n,\n i,\n o = this,\n r = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : {},\n s = (void 0 === r.statusBar && (r.statusBar = !0), r.mainMenuBar = !1 !== r.mainMenuBar, r.enableSort = !1 !== r.enableSort, r.enableTransform = !1 !== r.enableTransform, r.createQuery = r.createQuery || u.r, r.executeQuery = r.executeQuery || u.J, r.showErrorTable = void 0 !== r.showErrorTable ? r.showErrorTable : [\"text\", \"preview\"], \"number\" == typeof (this.options = r).indentation ? this.indentation = Number(r.indentation) : this.indentation = 2, (0, d.cC)(this.options.languages), (0, d.m0)(this.options.language), r.ace || l()),\n a = (this.mode = \"code\" === r.mode ? \"code\" : \"text\", \"code\" === this.mode && void 0 === s && (this.mode = \"text\", console.warn(\"Failed to load Ace editor, falling back to plain text mode. Please use a JSONEditor bundle including Ace, or pass Ace as via the configuration option `ace`.\")), this.theme = r.theme || I, this.theme === I && s && (0, m.O)(), r.onTextSelectionChange && this.onTextSelectionChange(r.onTextSelectionChange), this),\n e = (this.container = e, this.dom = {}, this.aceEditor = void 0, this.textarea = void 0, this.validateSchema = null, this.annotations = [], this.lastSchemaErrors = void 0, this._debouncedValidate = (0, C.debounce)(this._validateAndCatch.bind(this), this.DEBOUNCE_INTERVAL), this.width = e.clientWidth, this.height = e.clientHeight, this.frame = document.createElement(\"div\"), this.frame.className = \"jsoneditor jsoneditor-mode-\" + this.options.mode, this.frame.onclick = function (e) {\n e.preventDefault();\n }, this.frame.onkeydown = function (e) {\n a._onKeyDown(e);\n }, {\n target: this.frame,\n onFocus: this.options.onFocus || null,\n onBlur: this.options.onBlur || null\n }),\n e = (this.frameFocusTracker = new h.R(e), this.content = document.createElement(\"div\"), this.content.className = \"jsoneditor-outer\", this.options.mainMenuBar && ((0, C.addClassName)(this.content, \"has-main-menu-bar\"), this.menu = document.createElement(\"div\"), this.menu.className = \"jsoneditor-menu\", this.frame.appendChild(this.menu), (e = document.createElement(\"button\")).type = \"button\", e.className = \"jsoneditor-format\", e.title = (0, d.Iu)(\"formatTitle\"), this.menu.appendChild(e), e.onclick = function () {\n try {\n a.format(), a._onChange();\n } catch (e) {\n a._onError(e);\n }\n }, (e = document.createElement(\"button\")).type = \"button\", e.className = \"jsoneditor-compact\", e.title = (0, d.Iu)(\"compactTitle\"), this.menu.appendChild(e), e.onclick = function () {\n try {\n a.compact(), a._onChange();\n } catch (e) {\n a._onError(e);\n }\n }, this.options.enableSort && ((e = document.createElement(\"button\")).type = \"button\", e.className = \"jsoneditor-sort\", e.title = (0, d.Iu)(\"sortTitleShort\"), e.onclick = function () {\n a._showSortModal();\n }, this.menu.appendChild(e)), this.options.enableTransform && ((e = document.createElement(\"button\")).type = \"button\", e.title = (0, d.Iu)(\"transformTitleShort\"), e.className = \"jsoneditor-transform\", e.onclick = function () {\n a._showTransformModal();\n }, this.menu.appendChild(e)), (e = document.createElement(\"button\")).type = \"button\", e.className = \"jsoneditor-repair\", e.title = (0, d.Iu)(\"repairTitle\"), this.menu.appendChild(e), e.onclick = function () {\n try {\n a.repair(), a._onChange();\n } catch (e) {\n a._onError(e);\n }\n }, \"code\" === this.mode && ((e = document.createElement(\"button\")).type = \"button\", e.className = \"jsoneditor-undo jsoneditor-separator\", e.title = (0, d.Iu)(\"undo\"), e.onclick = function () {\n o.aceEditor.getSession().getUndoManager().undo();\n }, this.menu.appendChild(e), this.dom.undo = e, (e = document.createElement(\"button\")).type = \"button\", e.className = \"jsoneditor-redo\", e.title = (0, d.Iu)(\"redo\"), e.onclick = function () {\n o.aceEditor.getSession().getUndoManager().redo();\n }, this.menu.appendChild(e), this.dom.redo = e), this.options && this.options.modes && this.options.modes.length && (this.modeSwitcher = new g.x(this.menu, this.options.modes, this.options.mode, function (e) {\n try {\n a.setMode(e), a.modeSwitcher.focus();\n } catch (e) {\n a._onError(e);\n }\n })), \"code\" === this.mode) && ((t = document.createElement(\"a\")).appendChild(document.createTextNode(\"powered by ace\")), t.href = \"https://ace.c9.io/\", t.target = \"_blank\", t.className = \"jsoneditor-poweredBy\", t.onclick = function () {\n window.open(t.href, t.target, \"noreferrer\");\n }, this.menu.appendChild(t)), this.options.onEditable && v(\"function\" === this.options.onEditable) && !this.options.onEditable({})),\n s = (this.frame.appendChild(this.content), this.container.appendChild(this.frame), \"code\" === this.mode ? (this.editorDom = document.createElement(\"div\"), this.editorDom.style.height = \"100%\", this.editorDom.style.width = \"100%\", this.content.appendChild(this.editorDom), i = (s = s.edit(this.editorDom)).getSession(), s.$blockScrolling = 1 / 0, s.setTheme(this.theme), s.setOptions({\n readOnly: e\n }), s.setShowPrintMargin(!1), s.setFontSize(\"14px\"), i.setMode(\"ace/mode/json\"), i.setTabSize(this.indentation), i.setUseSoftTabs(!0), i.setUseWrapMode(!0), n = i.setAnnotations, i.setAnnotations = function (e) {\n n.call(this, e && e.length ? e : a.annotations);\n }, s.commands.bindKey(\"Ctrl-L\", null), s.commands.bindKey(\"Command-L\", null), s.commands.bindKey(\"Ctrl-\\\\\", null), s.commands.bindKey(\"Command-\\\\\", null), s.commands.bindKey(\"Ctrl-Shift-\\\\\", null), s.commands.bindKey(\"Command-Shift-\\\\\", null), (this.aceEditor = s).on(\"change\", this._onChange.bind(this)), s.on(\"changeSelection\", this._onSelect.bind(this))) : ((i = document.createElement(\"textarea\")).className = \"jsoneditor-text\", i.spellcheck = !1, this.content.appendChild(i), this.textarea = i, this.textarea.readOnly = e, null === this.textarea.oninput ? this.textarea.oninput = this._onChange.bind(this) : this.textarea.onchange = this._onChange.bind(this), i.onselect = this._onSelect.bind(this), i.onmousedown = this._onMouseDown.bind(this), i.onblur = this._onBlur.bind(this)), this._updateHistoryButtons(), Array.isArray(this.options.showErrorTable) ? this.options.showErrorTable.includes(this.mode) : !0 === this.options.showErrorTable);\n this.errorTable = new c.Q({\n errorTableVisible: s,\n onToggleVisibility: function () {\n a._validateAndCatch();\n },\n onFocusLine: function (e) {\n a.isFocused = !0, isNaN(e) || a.setTextSelection({\n row: e,\n column: 1\n }, {\n row: e,\n column: 1e3\n });\n },\n onChangeHeight: function (e) {\n e = e + (a.dom.statusBar ? a.dom.statusBar.clientHeight : 0) + 1;\n a.content.style.marginBottom = -e + \"px\", a.content.style.paddingBottom = e + \"px\";\n }\n }), this.frame.appendChild(this.errorTable.getErrorTable()), r.statusBar && ((0, C.addClassName)(this.content, \"has-status-bar\"), this.curserInfoElements = {}, e = document.createElement(\"div\"), (this.dom.statusBar = e).className = \"jsoneditor-statusbar\", this.frame.appendChild(e), (i = document.createElement(\"span\")).className = \"jsoneditor-curserinfo-label\", i.innerText = \"Ln:\", (s = document.createElement(\"span\")).className = \"jsoneditor-curserinfo-val\", s.innerText = \"1\", e.appendChild(i), e.appendChild(s), (r = document.createElement(\"span\")).className = \"jsoneditor-curserinfo-label\", r.innerText = \"Col:\", (i = document.createElement(\"span\")).className = \"jsoneditor-curserinfo-val\", i.innerText = \"1\", e.appendChild(r), e.appendChild(i), this.curserInfoElements.colVal = i, this.curserInfoElements.lnVal = s, (r = document.createElement(\"span\")).className = \"jsoneditor-curserinfo-label\", r.innerText = \"characters selected\", r.style.display = \"none\", (i = document.createElement(\"span\")).className = \"jsoneditor-curserinfo-count\", i.innerText = \"0\", i.style.display = \"none\", this.curserInfoElements.countLabel = r, this.curserInfoElements.countVal = i, e.appendChild(i), e.appendChild(r), e.appendChild(this.errorTable.getErrorCounter()), e.appendChild(this.errorTable.getWarningIcon()), e.appendChild(this.errorTable.getErrorIcon())), this.setSchema(this.options.schema, this.options.schemaRefs);\n }, t._onSchemaChange = function (e, t) {\n this.aceEditor && (this.options.allowSchemaSuggestions && e ? (this.aceEditor.setOption(\"enableBasicAutocompletion\", [new y(e, t)]), this.aceEditor.setOption(\"enableLiveAutocompletion\", !0)) : (this.aceEditor.setOption(\"enableBasicAutocompletion\", void 0), this.aceEditor.setOption(\"enableLiveAutocompletion\", !1)));\n }, t._onChange = function () {\n var e = this;\n if (!this.onChangeDisabled) {\n if (setTimeout(function () {\n e._updateHistoryButtons && e._updateHistoryButtons();\n }), this._debouncedValidate(), this.options.onChange) try {\n this.options.onChange();\n } catch (e) {\n console.error(\"Error in onChange callback: \", e);\n }\n if (this.options.onChangeText) try {\n this.options.onChangeText(this.getText());\n } catch (e) {\n console.error(\"Error in onChangeText callback: \", e);\n }\n }\n }, t._updateHistoryButtons = function () {\n var e;\n this.aceEditor && this.dom.undo && this.dom.redo && (e = this.aceEditor.getSession().getUndoManager()) && e.hasUndo && e.hasRedo && (this.dom.undo.disabled = !e.hasUndo(), this.dom.redo.disabled = !e.hasRedo());\n }, t._showSortModal = function () {\n try {\n var n = this,\n e = this.options.modalAnchor || a.qD,\n i = this.get();\n (0, o.showSortModal)(e, i, function (e) {\n var t;\n Array.isArray(i) && (t = (0, C.sort)(i, e.path, e.direction), n.sortedBy = e, n.update(t)), (0, C.isObject)(i) && (t = (0, C.sortObjectKeys)(i, e.direction), n.sortedBy = e, n.update(t));\n }, n.sortedBy);\n } catch (e) {\n this._onError(e);\n }\n }, t._showTransformModal = function () {\n var t = this;\n try {\n var e = this.options,\n n = e.modalAnchor,\n i = e.createQuery,\n o = e.executeQuery,\n r = e.queryDescription,\n s = this.get();\n (0, p.showTransformModal)({\n container: n || a.qD,\n json: s,\n queryDescription: r,\n createQuery: i,\n executeQuery: o,\n onTransform: function (e) {\n e = o(s, e);\n t.update(e);\n }\n });\n } catch (e) {\n this._onError(e);\n }\n }, t._onSelect = function () {\n this._updateCursorInfo(), this._emitSelectionChange();\n }, t._onKeyDown = function (e) {\n var t = !1;\n 73 === (e.which || e.keyCode) && e.ctrlKey && (e.shiftKey ? this.compact() : this.format(), this._onChange(), t = !0), t && (e.preventDefault(), e.stopPropagation()), this._updateCursorInfo(), this._emitSelectionChange();\n }, t._onMouseDown = function () {\n this._updateCursorInfo(), this._emitSelectionChange();\n }, t._onBlur = function () {\n var e = this;\n setTimeout(function () {\n e.isFocused || (e._updateCursorInfo(), e._emitSelectionChange()), e.isFocused = !1;\n });\n }, t._updateCursorInfo = function () {\n var e,\n t,\n n,\n i,\n o,\n r = this;\n function s() {\n r.curserInfoElements.countVal.innerText !== o && (r.curserInfoElements.countVal.innerText = o, r.curserInfoElements.countVal.style.display = o ? \"inline\" : \"none\", r.curserInfoElements.countLabel.style.display = o ? \"inline\" : \"none\"), r.curserInfoElements.lnVal.innerText = n, r.curserInfoElements.colVal.innerText = i;\n }\n this.textarea ? setTimeout(function () {\n var e = (0, C.getInputSelection)(r.textarea);\n e.startIndex !== e.endIndex && (o = e.endIndex - e.startIndex), i = (o && r.cursorInfo && r.cursorInfo.line === e.end.row && r.cursorInfo.column === e.end.column ? (n = e.start.row, e.start) : (n = e.end.row, e.end)).column, r.cursorInfo = {\n line: n,\n column: i,\n count: o\n }, r.options.statusBar && s();\n }, 0) : this.aceEditor && this.curserInfoElements && (e = this.aceEditor.getCursorPosition(), t = this.aceEditor.getSelectedText(), n = e.row + 1, i = e.column + 1, o = t.length, r.cursorInfo = {\n line: n,\n column: i,\n count: o\n }, this.options.statusBar) && s();\n }, t._emitSelectionChange = function () {\n var e;\n this._selectionChangedHandler && (e = this.getTextSelection(), this._selectionChangedHandler(e.start, e.end, e.text));\n }, t._refreshAnnotations = function () {\n var e,\n t = this.aceEditor && this.aceEditor.getSession();\n t && (e = t.getAnnotations().filter(function (e) {\n return \"error\" === e.type;\n }), t.setAnnotations(e));\n }, t.destroy = function () {\n this.aceEditor && (this.aceEditor.destroy(), this.aceEditor = null), this.frame && this.container && this.frame.parentNode === this.container && this.container.removeChild(this.frame), this.modeSwitcher && (this.modeSwitcher.destroy(), this.modeSwitcher = null), this.textarea = null, this._debouncedValidate = null, this.frameFocusTracker.destroy();\n }, t.compact = function () {\n var e = this.get(),\n e = JSON.stringify(e);\n this.updateText(e);\n }, t.format = function () {\n var e = this.get(),\n e = JSON.stringify(e, null, this.indentation);\n this.updateText(e);\n }, t.repair = function () {\n var e = this.getText();\n try {\n var t = (0, i.K)(e);\n this.updateText(t);\n } catch (e) {}\n }, t.focus = function () {\n this.textarea && this.textarea.focus(), this.aceEditor && this.aceEditor.focus();\n }, t.resize = function () {\n this.aceEditor && this.aceEditor.resize(!1);\n }, t.set = function (e) {\n this.setText(JSON.stringify(e, null, this.indentation));\n }, t.update = function (e) {\n this.updateText(JSON.stringify(e, null, this.indentation));\n }, t.get = function () {\n var e = this.getText();\n return (0, C.parse)(e);\n }, t.getText = function () {\n return this.textarea ? this.textarea.value : this.aceEditor ? this.aceEditor.getValue() : \"\";\n }, t._setText = function (e, t) {\n var n,\n i = this,\n e = !0 === this.options.escapeUnicode ? (0, C.escapeUnicodeChars)(e) : e;\n this.textarea && (this.textarea.value = e), this.aceEditor && (this.onChangeDisabled = !0, this.aceEditor.setValue(e, -1), this.onChangeDisabled = !1, t && (n = this, setTimeout(function () {\n n.aceEditor && n.aceEditor.session.getUndoManager().reset();\n })), setTimeout(function () {\n i._updateHistoryButtons && i._updateHistoryButtons();\n })), this._debouncedValidate();\n }, t.setText = function (e) {\n this._setText(e, !0);\n }, t.updateText = function (e) {\n this.getText() !== e && this._setText(e, !1);\n }, t.validate = function () {\n var t,\n n = this,\n i = [],\n o = [];\n try {\n var r = this.get(),\n s = (this.validateSchema && !this.validateSchema(r) && (i = this.validateSchema.errors.map(function (e) {\n return e.type = \"validation\", (0, C.improveSchemaError)(e);\n })), this.validationSequence = (this.validationSequence || 0) + 1, this),\n a = this.validationSequence;\n return function (e, t) {\n if (!t) return Promise.resolve([]);\n try {\n var n = t(e);\n return ((0, C.isPromise)(n) ? n : Promise.resolve(n)).then(function (e) {\n return Array.isArray(e) ? e.filter(function (e) {\n var t = (0, C.isValidValidationError)(e);\n return t || console.warn('Ignoring a custom validation error with invalid structure. Expected structure: {path: [...], message: \"...\"}. Actual error:', e), t;\n }).map(function (e) {\n return {\n dataPath: (0, C.stringifyPath)(e.path),\n message: e.message,\n type: \"customValidation\"\n };\n }) : [];\n });\n } catch (e) {\n return Promise.reject(e);\n }\n }(r, this.options.onValidate).then(function (e) {\n return a === s.validationSequence && (e = i.concat(o).concat(e), s._renderErrors(e), \"function\" == typeof n.options.onValidationError && (0, C.isValidationErrorChanged)(e, n.lastSchemaErrors) && n.options.onValidationError.call(n, e), n.lastSchemaErrors = e), n.lastSchemaErrors;\n });\n } catch (e) {\n return this.getText() && ((r = /\\w*line\\s*(\\d+)\\w*/g.exec(e.message)) && (t = +r[1]), o = [{\n type: \"error\",\n message: e.message.replace(/\\n/g, \" \"),\n line: t\n }]), this._renderErrors(o), \"function\" == typeof this.options.onValidationError && (0, C.isValidationErrorChanged)(o, this.lastSchemaErrors) && this.options.onValidationError.call(this, o), this.lastSchemaErrors = o, Promise.resolve(this.lastSchemaErrors);\n }\n }, t._validateAndCatch = function () {\n this.validate().catch(function (e) {\n console.error(\"Error running validation:\", e);\n });\n }, t._renderErrors = function (i) {\n var e = this.getText(),\n t = [],\n e = (i.reduce(function (e, t) {\n return \"string\" == typeof t.dataPath && -1 === e.indexOf(t.dataPath) && e.push(t.dataPath), e;\n }, t), (0, C.getPositionForPath)(e, t));\n this.aceEditor && (this.annotations = e.map(function (t) {\n var e = i.filter(function (e) {\n return e.dataPath === t.path;\n }),\n n = e.map(function (e) {\n return e.message;\n }).join(\"\\n\");\n return n ? {\n row: t.line,\n column: t.column,\n text: \"Schema validation error\" + (1 !== e.length ? \"s\" : \"\") + \": \\n\" + n,\n type: \"warning\",\n source: \"jsoneditor\"\n } : {};\n }), this._refreshAnnotations()), this.errorTable.setErrors(i, e), this.aceEditor && this.aceEditor.resize(!1);\n }, t.getTextSelection = function () {\n var e,\n t,\n n,\n i = {};\n return this.textarea ? (n = (0, C.getInputSelection)(this.textarea), this.cursorInfo && this.cursorInfo.line === n.end.row && this.cursorInfo.column === n.end.column ? (i.start = n.end, i.end = n.start) : i = n, {\n start: i.start,\n end: i.end,\n text: this.textarea.value.substring(n.startIndex, n.endIndex)\n }) : this.aceEditor ? (n = this.aceEditor.getSelection(), e = this.aceEditor.getSelectedText(), t = n.getRange(), (n = n.getSelectionLead()).row === t.end.row && n.column === t.end.column ? i = t : (i.start = t.end, i.end = t.start), {\n start: {\n row: i.start.row + 1,\n column: i.start.column + 1\n },\n end: {\n row: i.end.row + 1,\n column: i.end.column + 1\n },\n text: e\n }) : void 0;\n }, t.onTextSelectionChange = function (e) {\n \"function\" == typeof e && (this._selectionChangedHandler = (0, C.debounce)(e, this.DEBOUNCE_INTERVAL));\n }, t.setTextSelection = function (e, t) {\n var n, i, o;\n e && t && (this.textarea ? (n = (0, C.getIndexForPosition)(this.textarea, e.row, e.column), o = (0, C.getIndexForPosition)(this.textarea, t.row, t.column), -1 < n && -1 < o && (this.textarea.setSelectionRange ? (this.textarea.focus(), this.textarea.setSelectionRange(n, o)) : this.textarea.createTextRange && ((i = this.textarea.createTextRange()).collapse(!0), i.moveEnd(\"character\", o), i.moveStart(\"character\", n), i.select()), o = (this.textarea.value.match(/\\n/g) || []).length + 1, n = this.textarea.scrollHeight / o, i = e.row * n, this.textarea.scrollTop = i > this.textarea.clientHeight ? i - this.textarea.clientHeight / 2 : 0)) : this.aceEditor && (o = {\n start: {\n row: e.row - 1,\n column: e.column - 1\n },\n end: {\n row: t.row - 1,\n column: t.column - 1\n }\n }, this.aceEditor.selection.setRange(o), this.aceEditor.scrollToLine(e.row - 1, !0)));\n };\n var A = [{\n mode: \"text\",\n mixin: t,\n data: \"text\",\n load: b\n }, {\n mode: \"code\",\n mixin: t,\n data: \"text\",\n load: b\n }];\n },\n 8038: function (W, e, t) {\n \"use strict\";\n\n t.r(e), t.d(e, {\n treeModeMixins: function () {\n return D;\n }\n });\n var w = {\n start: function (e, t, n) {\n return 0 === t.indexOf(e);\n },\n contain: function (e, t, n) {\n return -1 < t.indexOf(e);\n }\n };\n var s = t(897),\n a = t(2474);\n function o(e) {\n return (o = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (e) {\n return typeof e;\n } : function (e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n })(e);\n }\n function r(e, t) {\n for (var n = 0; n < t.length; n++) {\n var i = t[n];\n i.enumerable = i.enumerable || !1, i.configurable = !0, \"value\" in i && (i.writable = !0), Object.defineProperty(e, function (e) {\n e = function (e, t) {\n if (\"object\" !== o(e) || null === e) return e;\n var n = e[Symbol.toPrimitive];\n if (void 0 === n) return (\"string\" === t ? String : Number)(e);\n n = n.call(e, t || \"default\");\n if (\"object\" !== o(n)) return n;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }(e, \"string\");\n return \"symbol\" === o(e) ? e : String(e);\n }(i.key), i);\n }\n }\n var S = function () {\n function e() {\n if (!(this instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n this.locked = !1;\n }\n var t, n, i;\n return t = e, (n = [{\n key: \"highlight\",\n value: function (e) {\n this.locked || (this.node !== e && (this.node && this.node.setHighlight(!1), this.node = e, this.node.setHighlight(!0)), this._cancelUnhighlight());\n }\n }, {\n key: \"unhighlight\",\n value: function () {\n var e;\n this.locked || (e = this).node && (this._cancelUnhighlight(), this.unhighlightTimer = setTimeout(function () {\n e.node.setHighlight(!1), e.node = void 0, e.unhighlightTimer = void 0;\n }, 0));\n }\n }, {\n key: \"_cancelUnhighlight\",\n value: function () {\n this.unhighlightTimer && (clearTimeout(this.unhighlightTimer), this.unhighlightTimer = void 0);\n }\n }, {\n key: \"lock\",\n value: function () {\n this.locked = !0;\n }\n }, {\n key: \"unlock\",\n value: function () {\n this.locked = !1;\n }\n }]) && r(t.prototype, n), i && r(t, i), Object.defineProperty(t, \"prototype\", {\n writable: !1\n }), e;\n }(),\n l = t(7907),\n i = t(6056),\n c = t(6617),\n e = t(233),\n h = t.n(e),\n d = t(2602),\n k = t(9791);\n var u = t(6210),\n g = t(2558),\n p = t(4188);\n function H(e) {\n return function (e) {\n if (Array.isArray(e)) return f(e);\n }(e) || function (e) {\n if (\"undefined\" != typeof Symbol && null != e[Symbol.iterator] || null != e[\"@@iterator\"]) return Array.from(e);\n }(e) || m(e) || function () {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }();\n }\n function P(e, t) {\n return function (e) {\n if (Array.isArray(e)) return e;\n }(e) || function (e, t) {\n var n = null == e ? null : \"undefined\" != typeof Symbol && e[Symbol.iterator] || e[\"@@iterator\"];\n if (null != n) {\n var i,\n o,\n r,\n s,\n a = [],\n l = !0,\n c = !1;\n try {\n if (r = (n = n.call(e)).next, 0 === t) {\n if (Object(n) !== n) return;\n l = !1;\n } else for (; !(l = (i = r.call(n)).done) && (a.push(i.value), a.length !== t); l = !0);\n } catch (e) {\n c = !0, o = e;\n } finally {\n try {\n if (!l && null != n.return && (s = n.return(), Object(s) !== s)) return;\n } finally {\n if (c) throw o;\n }\n }\n return a;\n }\n }(e, t) || m(e, t) || function () {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }();\n }\n function x(e, t) {\n var n,\n i,\n o,\n r,\n s = \"undefined\" != typeof Symbol && e[Symbol.iterator] || e[\"@@iterator\"];\n if (s) return i = !(n = !0), {\n s: function () {\n s = s.call(e);\n },\n n: function () {\n var e = s.next();\n return n = e.done, e;\n },\n e: function (e) {\n i = !0, o = e;\n },\n f: function () {\n try {\n n || null == s.return || s.return();\n } finally {\n if (i) throw o;\n }\n }\n };\n if (Array.isArray(e) || (s = m(e)) || t && e && \"number\" == typeof e.length) return s && (e = s), r = 0, {\n s: t = function () {},\n n: function () {\n return r >= e.length ? {\n done: !0\n } : {\n done: !1,\n value: e[r++]\n };\n },\n e: function (e) {\n throw e;\n },\n f: t\n };\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n function m(e, t) {\n var n;\n if (e) return \"string\" == typeof e ? f(e, t) : \"Map\" === (n = \"Object\" === (n = Object.prototype.toString.call(e).slice(8, -1)) && e.constructor ? e.constructor.name : n) || \"Set\" === n ? Array.from(e) : \"Arguments\" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? f(e, t) : void 0;\n }\n function f(e, t) {\n (null == t || t > e.length) && (t = e.length);\n for (var n = 0, i = new Array(t); n < t; n++) i[n] = e[n];\n return i;\n }\n function E(e) {\n return (E = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (e) {\n return typeof e;\n } : function (e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n })(e);\n }\n function C(e, t) {\n for (var n = 0; n < t.length; n++) {\n var i = t[n];\n i.enumerable = i.enumerable || !1, i.configurable = !0, \"value\" in i && (i.writable = !0), Object.defineProperty(e, function (e) {\n e = function (e, t) {\n if (\"object\" !== E(e) || null === e) return e;\n var n = e[Symbol.toPrimitive];\n if (void 0 === n) return (\"string\" === t ? String : Number)(e);\n n = n.call(e, t || \"default\");\n if (\"object\" !== E(n)) return n;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }(e, \"string\");\n return \"symbol\" === E(e) ? e : String(e);\n }(i.key), i);\n }\n }\n var T = function () {\n function x(e, t) {\n if (!(this instanceof x)) throw new TypeError(\"Cannot call a class as a function\");\n this.editor = e, this.dom = {}, this.expanded = !1, t && t instanceof Object ? (this.setField(t.field, t.fieldEditable), \"value\" in t && this.setValue(t.value, t.type), \"internalValue\" in t && this.setInternalValue(t.internalValue)) : (this.setField(\"\"), this.setValue(null)), this._debouncedOnChangeValue = (0, k.debounce)(this._onChangeValue.bind(this), x.prototype.DEBOUNCE_INTERVAL), this._debouncedOnChangeField = (0, k.debounce)(this._onChangeField.bind(this), x.prototype.DEBOUNCE_INTERVAL), this.visibleChilds = this.getMaxVisibleChilds();\n }\n var e, t, n;\n return e = x, (t = [{\n key: \"getMaxVisibleChilds\",\n value: function () {\n return this.editor && this.editor.options && this.editor.options.maxVisibleChilds ? this.editor.options.maxVisibleChilds : G;\n }\n }, {\n key: \"_updateEditability\",\n value: function () {\n var e, t;\n this.editable = {\n field: !0,\n value: !0\n }, this.editor && (this.editable.field = \"tree\" === this.editor.options.mode, this.editable.value = \"view\" !== this.editor.options.mode, \"tree\" !== this.editor.options.mode && \"form\" !== this.editor.options.mode || \"function\" != typeof this.editor.options.onEditable || (e = this.getValue.bind(this), \"boolean\" == typeof (t = this.editor.options.onEditable({\n field: this.field,\n get value() {\n return e();\n },\n path: this.getPath()\n })) ? (this.editable.field = t, this.editable.value = t) : \"object\" === E(t) && null !== t ? (\"boolean\" == typeof t.field && (this.editable.field = t.field), \"boolean\" == typeof t.value && (this.editable.value = t.value)) : (console.error(\"Invalid return value for function onEditable.\", \"Actual value:\", t, \".\", \"Either a boolean or object { field: boolean, value: boolean } expected.\"), this.editable.field = !1, this.editable.value = !1)));\n }\n }, {\n key: \"getPath\",\n value: function () {\n for (var e = this, t = []; e;) {\n var n = e.getName();\n void 0 !== n && t.unshift(n), e = e.parent;\n }\n return t;\n }\n }, {\n key: \"getInternalPath\",\n value: function () {\n for (var e = this, t = []; e;) e.parent && t.unshift(e.getIndex()), e = e.parent;\n return t;\n }\n }, {\n key: \"getName\",\n value: function () {\n return this.parent ? \"array\" !== this.parent.type ? this.field : this.index : void 0;\n }\n }, {\n key: \"findNodeByPath\",\n value: function (e) {\n if (e) {\n if (0 === e.length) return this;\n if (e.length && this.childs && this.childs.length) for (var t = 0; t < this.childs.length; ++t) if (\"\" + e[0] == \"\" + this.childs[t].getName()) return this.childs[t].findNodeByPath(e.slice(1));\n }\n }\n }, {\n key: \"findNodeByInternalPath\",\n value: function (e) {\n if (e) {\n for (var t = this, n = 0; n < e.length && t; n++) var i = e[n], t = t.childs[i];\n return t;\n }\n }\n }, {\n key: \"serialize\",\n value: function () {\n return {\n value: this.getValue(),\n path: this.getPath()\n };\n }\n }, {\n key: \"findNode\",\n value: function (e) {\n for (var n = (0, k.parsePath)(e), i = this; i && 0 < n.length;) !function () {\n var t = n.shift();\n if (\"number\" == typeof t) {\n if (\"array\" !== i.type) throw new Error(\"Cannot get child node at index \" + t + \": node is no array\");\n i = i.childs[t];\n } else {\n if (\"object\" !== i.type) throw new Error(\"Cannot get child node \" + t + \": node is no object\");\n i = i.childs.filter(function (e) {\n return e.field === t;\n })[0];\n }\n }();\n return i;\n }\n }, {\n key: \"findParents\",\n value: function () {\n for (var e = [], t = this.parent; t;) e.unshift(t), t = t.parent;\n return e;\n }\n }, {\n key: \"setError\",\n value: function (e, t) {\n this.error = e, this.errorChild = t, this.dom && this.dom.tr && this.updateError();\n }\n }, {\n key: \"updateError\",\n value: function () {\n var n = this,\n i = this.fieldError || this.valueError || this.error,\n e = this.dom.tdError;\n if (i && this.dom && this.dom.tr) {\n (0, k.addClassName)(this.dom.tr, \"jsoneditor-validation-error\"), e || (e = document.createElement(\"td\"), this.dom.tdError = e, this.dom.tdValue.parentNode.appendChild(e));\n var o = document.createElement(\"button\"),\n t = (o.type = \"button\", o.className = \"jsoneditor-button jsoneditor-schema-error\", function () {\n n.dom.popupAnchor && n.dom.popupAnchor.destroy();\n }),\n r = function () {\n delete n.dom.popupAnchor;\n },\n s = function (e) {\n var t = n.editor.frame,\n e = (n.dom.popupAnchor = (0, d.w)(o, n.editor.getPopupAnchor(), r, e), o.getBoundingClientRect()),\n t = 120 < t.getBoundingClientRect().width - e.x ? \"jsoneditor-above\" : \"jsoneditor-left\",\n e = document.createElement(\"div\");\n e.className = \"jsoneditor-popover \" + t, e.appendChild(document.createTextNode(i.message)), n.dom.popupAnchor.appendChild(e);\n },\n a = (o.onmouseover = function () {\n n.dom.popupAnchor || s(!0);\n }, o.onfocus = function () {\n t(), s(!1);\n }, o.onblur = function () {\n t();\n }, this.errorChild);\n for (a && (o.onclick = function () {\n a.findParents().forEach(function (e) {\n e.expand(!1);\n }), a.scrollTo(function () {\n a.focus();\n });\n }); e.firstChild;) e.removeChild(e.firstChild);\n e.appendChild(o);\n } else this.dom.tr && (0, k.removeClassName)(this.dom.tr, \"jsoneditor-validation-error\"), e && (this.dom.tdError.parentNode.removeChild(this.dom.tdError), delete this.dom.tdError);\n }\n }, {\n key: \"getIndex\",\n value: function () {\n var e;\n return this.parent ? -1 !== (e = this.parent.childs.indexOf(this)) ? e : null : -1;\n }\n }, {\n key: \"setParent\",\n value: function (e) {\n this.parent = e;\n }\n }, {\n key: \"setField\",\n value: function (e, t) {\n this.field = e, this.previousField = e, this.fieldEditable = !0 === t;\n }\n }, {\n key: \"getField\",\n value: function () {\n return void 0 === this.field && this._getDomField(), this.field;\n }\n }, {\n key: \"setValue\",\n value: function (e, t) {\n var n,\n i,\n o,\n r,\n s,\n a,\n l = this.childs;\n if (this.type = this._getType(e), t && t !== this.type) {\n if (\"string\" !== t || \"auto\" !== this.type) throw new Error('Type mismatch: cannot cast value of type \"' + this.type + ' to the specified type \"' + t + '\"');\n this.type = t;\n }\n if (\"array\" === this.type) {\n for (this.childs || (this.childs = []), n = 0; n < e.length; n++) void 0 === (s = e[n]) || s instanceof Function || (n < this.childs.length ? ((o = this.childs[n]).fieldEditable = !1, o.index = n, o.setValue(s)) : (o = new x(this.editor, {\n value: s\n }), r = n < this.getMaxVisibleChilds(), this.appendChild(o, r, !1)));\n for (i = this.childs.length; i >= e.length; i--) this.removeChild(this.childs[i], !1);\n } else if (\"object\" === this.type) {\n for (this.childs || (this.childs = []), i = this.childs.length - 1; 0 <= i; i--) v(e, this.childs[i].field) || this.removeChild(this.childs[i], !1);\n for (var c in n = 0, e) v(e, c) && (void 0 === (s = e[c]) || s instanceof Function || ((a = this.findChildByProperty(c)) ? (a.setField(c, !0), a.setValue(s)) : (a = new x(this.editor, {\n field: c,\n value: s\n }), c = n < this.getMaxVisibleChilds(), this.appendChild(a, c, !1))), n++);\n !(this.value = \"\") === this.editor.options.sortObjectKeys && this.sort([], \"asc\", !1);\n } else this.hideChilds(), delete this.append, delete this.showMore, delete this.expanded, delete this.childs, this.value = e;\n Array.isArray(l) !== Array.isArray(this.childs) && this.recreateDom(), this.updateDom({\n updateIndexes: !0\n }), this.previousValue = this.value;\n }\n }, {\n key: \"setInternalValue\",\n value: function (e) {\n var t,\n n,\n i,\n o,\n r,\n s = this.childs;\n if (this.type = e.type, \"array\" === e.type) {\n for (this.childs || (this.childs = []), o = 0; o < e.childs.length; o++) void 0 === (t = e.childs[o]) || t instanceof Function || (o < this.childs.length ? ((n = this.childs[o]).fieldEditable = !1, n.index = o, n.setInternalValue(t)) : (n = new x(this.editor, {\n internalValue: t\n }), i = o < this.getMaxVisibleChilds(), this.appendChild(n, i, !1)));\n for (r = this.childs.length; r >= e.childs.length; r--) this.removeChild(this.childs[r], !1);\n } else if (\"object\" === e.type) {\n for (this.childs || (this.childs = []), o = 0; o < e.childs.length; o++) void 0 === (t = e.childs[o]) || t instanceof Function || (o < this.childs.length ? (delete (n = this.childs[o]).index, n.setField(t.field, !0), n.setInternalValue(t.value)) : (n = new x(this.editor, {\n field: t.field,\n internalValue: t.value\n }), i = o < this.getMaxVisibleChilds(), this.appendChild(n, i, !1)));\n for (r = this.childs.length; r >= e.childs.length; r--) this.removeChild(this.childs[r], !1);\n } else this.hideChilds(), delete this.append, delete this.showMore, delete this.expanded, delete this.childs, this.value = e.value;\n Array.isArray(s) !== Array.isArray(this.childs) && this.recreateDom(), this.updateDom({\n updateIndexes: !0\n }), this.previousValue = this.value;\n }\n }, {\n key: \"recreateDom\",\n value: function () {\n var e;\n this.dom && this.dom.tr && this.dom.tr.parentNode ? (e = this._detachFromDom(), this.clearDom(), this._attachToDom(e)) : this.clearDom();\n }\n }, {\n key: \"getValue\",\n value: function () {\n var t, n;\n return \"array\" === this.type ? (t = [], this.childs.forEach(function (e) {\n t.push(e.getValue());\n }), t) : \"object\" === this.type ? (n = {}, this.childs.forEach(function (e) {\n n[e.getField()] = e.getValue();\n }), n) : (void 0 === this.value && this._getDomValue(), this.value);\n }\n }, {\n key: \"getInternalValue\",\n value: function () {\n return \"array\" === this.type ? {\n type: this.type,\n childs: this.childs.map(function (e) {\n return e.getInternalValue();\n })\n } : \"object\" === this.type ? {\n type: this.type,\n childs: this.childs.map(function (e) {\n return {\n field: e.getField(),\n value: e.getInternalValue()\n };\n })\n } : (void 0 === this.value && this._getDomValue(), {\n type: this.type,\n value: this.value\n });\n }\n }, {\n key: \"getLevel\",\n value: function () {\n return this.parent ? this.parent.getLevel() + 1 : 0;\n }\n }, {\n key: \"getNodePath\",\n value: function () {\n var e = this.parent ? this.parent.getNodePath() : [];\n return e.push(this), e;\n }\n }, {\n key: \"clone\",\n value: function () {\n var t, n;\n return (t = new x(this.editor)).type = this.type, t.field = this.field, t.fieldInnerText = this.fieldInnerText, t.fieldEditable = this.fieldEditable, t.previousField = this.previousField, t.value = this.value, t.valueInnerText = this.valueInnerText, t.previousValue = this.previousValue, t.expanded = this.expanded, t.visibleChilds = this.visibleChilds, this.childs ? (n = [], this.childs.forEach(function (e) {\n e = e.clone();\n e.setParent(t), n.push(e);\n }), t.childs = n) : t.childs = void 0, t;\n }\n }, {\n key: \"expand\",\n value: function (t) {\n this.childs && (this.expanded = !0, this.dom.expand && (this.dom.expand.className = \"jsoneditor-button jsoneditor-expanded\"), this.showChilds(), !1 !== t && this.childs.forEach(function (e) {\n e.expand(t);\n }), this.updateDom({\n recurse: !1\n }));\n }\n }, {\n key: \"collapse\",\n value: function (t) {\n this.childs && (this.hideChilds(), !1 !== t && this.childs.forEach(function (e) {\n e.collapse(t);\n }), this.dom.expand && (this.dom.expand.className = \"jsoneditor-button jsoneditor-collapsed\"), this.expanded = !1, this.updateDom({\n recurse: !1\n }));\n }\n }, {\n key: \"showChilds\",\n value: function () {\n var e = this.childs;\n if (e && this.expanded) {\n var e = this.dom.tr,\n t = e ? e.parentNode : void 0;\n if (t) {\n for (var n = this.getAppendDom(), i = (n.parentNode || ((o = e.nextSibling) ? t.insertBefore(n, o) : t.appendChild(n)), Math.min(this.childs.length, this.visibleChilds)), o = this._getNextTr(), r = 0; r < i; r++) {\n var s = this.childs[r];\n s.getDom().parentNode || t.insertBefore(s.getDom(), o), s.showChilds();\n }\n e = this.getShowMoreDom();\n o = this._getNextTr(), e.parentNode || t.insertBefore(e, o), this.showMore.updateDom();\n }\n }\n }\n }, {\n key: \"_getNextTr\",\n value: function () {\n return this.showMore && this.showMore.getDom().parentNode ? this.showMore.getDom() : this.append && this.append.getDom().parentNode ? this.append.getDom() : void 0;\n }\n }, {\n key: \"hide\",\n value: function (e) {\n var t = this.dom.tr,\n n = t ? t.parentNode : void 0;\n n && n.removeChild(t), this.dom.popupAnchor && this.dom.popupAnchor.destroy(), this.hideChilds(e);\n }\n }, {\n key: \"hideChilds\",\n value: function (e) {\n var t;\n this.childs && this.expanded && ((t = this.getAppendDom()).parentNode && t.parentNode.removeChild(t), this.childs.forEach(function (e) {\n e.hide();\n }), (t = this.getShowMoreDom()).parentNode && t.parentNode.removeChild(t), e && !e.resetVisibleChilds || (this.visibleChilds = this.getMaxVisibleChilds()));\n }\n }, {\n key: \"_updateCssClassName\",\n value: function () {\n var e, t;\n this.dom.field && this.editor && this.editor.options && \"function\" == typeof this.editor.options.onClassName && this.dom.tree && ((0, k.removeAllClassNames)(this.dom.tree), e = this.getValue.bind(this), t = this.editor.options.onClassName({\n path: this.getPath(),\n field: this.field,\n get value() {\n return e();\n }\n }) || \"\", (0, k.addClassName)(this.dom.tree, \"jsoneditor-values \" + t));\n }\n }, {\n key: \"recursivelyUpdateCssClassesOnNodes\",\n value: function () {\n if (this._updateCssClassName(), Array.isArray(this.childs)) for (var e = 0; e < this.childs.length; e++) this.childs[e].recursivelyUpdateCssClassesOnNodes();\n }\n }, {\n key: \"expandTo\",\n value: function () {\n for (var e = this.parent; e;) e.expanded || e.expand(), e = e.parent;\n }\n }, {\n key: \"appendChild\",\n value: function (e, t, n) {\n var i, o;\n this._hasChilds() && (e.setParent(this), e.fieldEditable = \"object\" === this.type, \"array\" === this.type && (e.index = this.childs.length), \"object\" === this.type && void 0 === e.field && e.setField(\"\"), this.childs.push(e), this.expanded && !1 !== t && (t = e.getDom(), o = (i = this._getNextTr()) ? i.parentNode : void 0, i && o && o.insertBefore(t, i), e.showChilds(), this.visibleChilds++), !1 !== n) && (this.updateDom({\n updateIndexes: !0\n }), e.updateDom({\n recurse: !0\n }));\n }\n }, {\n key: \"moveBefore\",\n value: function (e, t, n) {\n var i, o, r;\n this._hasChilds() && ((i = this.dom.tr ? this.dom.tr.parentNode : void 0) && ((o = document.createElement(\"tr\")).style.height = i.clientHeight + \"px\", i.appendChild(o)), e.parent && e.parent.removeChild(e), t instanceof _ || !t ? this.childs.length + 1 > this.visibleChilds ? (r = this.childs[this.visibleChilds - 1], this.insertBefore(e, r, n)) : this.appendChild(e, !0, n) : this.insertBefore(e, t, n), i) && o && i.removeChild(o);\n }\n }, {\n key: \"insertBefore\",\n value: function (e, t, n) {\n if (this._hasChilds()) {\n if (this.visibleChilds++, \"object\" === this.type && void 0 === e.field && e.setField(\"\"), t === this.append) e.setParent(this), e.fieldEditable = \"object\" === this.type, this.childs.push(e);else {\n var i = this.childs.indexOf(t);\n if (-1 === i) throw new Error(\"Node not found\");\n e.setParent(this), e.fieldEditable = \"object\" === this.type, this.childs.splice(i, 0, e);\n }\n var o;\n this.expanded && (i = e.getDom(), o = (t = t.getDom()) ? t.parentNode : void 0, t && o && o.insertBefore(i, t), e.showChilds(), this.showChilds()), !1 !== n && (this.updateDom({\n updateIndexes: !0\n }), e.updateDom({\n recurse: !0\n }));\n }\n }\n }, {\n key: \"insertAfter\",\n value: function (e, t) {\n this._hasChilds() && (t = this.childs.indexOf(t), (t = this.childs[t + 1]) ? this.insertBefore(e, t) : this.appendChild(e));\n }\n }, {\n key: \"search\",\n value: function (t, n) {\n Array.isArray(n) || (n = []);\n var e = t ? t.toLowerCase() : void 0;\n return delete this.searchField, delete this.searchValue, void 0 !== this.field && n.length <= this.MAX_SEARCH_RESULTS && (-1 !== String(this.field).toLowerCase().indexOf(e) && (this.searchField = !0, n.push({\n node: this,\n elem: \"field\"\n })), this._updateDomField()), this._hasChilds() ? this.childs && this.childs.forEach(function (e) {\n e.search(t, n);\n }) : void 0 !== this.value && n.length <= this.MAX_SEARCH_RESULTS && (-1 !== String(this.value).toLowerCase().indexOf(e) && (this.searchValue = !0, n.push({\n node: this,\n elem: \"value\"\n })), this._updateDomValue()), n;\n }\n }, {\n key: \"scrollTo\",\n value: function (e) {\n this.expandPathToNode(), this.dom.tr && this.dom.tr.parentNode && this.editor.scrollTo(this.dom.tr.offsetTop, e);\n }\n }, {\n key: \"expandPathToNode\",\n value: function () {\n for (var e = this; e && e.parent;) {\n for (var t = \"array\" === e.parent.type ? e.index : e.parent.childs.indexOf(e); e.parent.visibleChilds < t + 1;) e.parent.visibleChilds += this.getMaxVisibleChilds();\n e.parent.expand(!1), e = e.parent;\n }\n }\n }, {\n key: \"focus\",\n value: function (e) {\n if (x.focusElement = e, this.dom.tr && this.dom.tr.parentNode) {\n var t = this.dom;\n switch (e) {\n case \"drag\":\n (t.drag || t.menu).focus();\n break;\n case \"menu\":\n t.menu.focus();\n break;\n case \"expand\":\n this._hasChilds() ? t.expand.focus() : t.field && this.fieldEditable ? (t.field.focus(), (0, k.selectContentEditable)(t.field)) : t.value && !this._hasChilds() ? (t.value.focus(), (0, k.selectContentEditable)(t.value)) : t.menu.focus();\n break;\n case \"field\":\n t.field && this.fieldEditable ? (t.field.focus(), (0, k.selectContentEditable)(t.field)) : t.value && !this._hasChilds() ? (t.value.focus(), (0, k.selectContentEditable)(t.value)) : (this._hasChilds() ? t.expand : t.menu).focus();\n break;\n default:\n t.select ? t.select.focus() : t.value && !this._hasChilds() ? (t.value.focus(), (0, k.selectContentEditable)(t.value)) : t.field && this.fieldEditable ? (t.field.focus(), (0, k.selectContentEditable)(t.field)) : (this._hasChilds() ? t.expand : t.menu).focus();\n }\n }\n }\n }, {\n key: \"containsNode\",\n value: function (e) {\n if (this === e) return !0;\n var t = this.childs;\n if (t) for (var n = 0, i = t.length; n < i; n++) if (t[n].containsNode(e)) return !0;\n return !1;\n }\n }, {\n key: \"removeChild\",\n value: function (e, t) {\n if (this.childs) {\n var n = this.childs.indexOf(e);\n if (-1 !== n) return n < this.visibleChilds && this.expanded && this.visibleChilds--, e.hide(), delete e.searchField, delete e.searchValue, (e = this.childs.splice(n, 1)[0]).parent = null, !1 !== t && this.updateDom({\n updateIndexes: !0\n }), e;\n }\n }\n }, {\n key: \"_remove\",\n value: function (e) {\n this.removeChild(e);\n }\n }, {\n key: \"changeType\",\n value: function (e) {\n var t,\n n = this.type;\n n !== e && (\"string\" !== e && \"auto\" !== e || \"string\" !== n && \"auto\" !== n ? (t = this._detachFromDom(), this.clearDom(), \"object\" === (this.type = e) ? (this.childs || (this.childs = []), this.childs.forEach(function (e) {\n e.clearDom(), delete e.index, e.fieldEditable = !0, void 0 === e.field && (e.field = \"\");\n }), \"string\" !== n && \"auto\" !== n || (this.expanded = !0)) : \"array\" === e ? (this.childs || (this.childs = []), this.childs.forEach(function (e, t) {\n e.clearDom(), e.fieldEditable = !1, e.index = t;\n }), \"string\" !== n && \"auto\" !== n || (this.expanded = !0)) : this.expanded = !1, this._attachToDom(t)) : this.type = e, \"auto\" !== e && \"string\" !== e || (this.value = \"string\" === e ? String(this.value) : (0, k.parseString)(String(this.value)), this.focus()), this.updateDom({\n updateIndexes: !0\n }));\n }\n }, {\n key: \"deepEqual\",\n value: function (e) {\n var t;\n if (\"array\" === this.type) {\n if (!Array.isArray(e)) return !1;\n if (this.childs.length !== e.length) return !1;\n for (t = 0; t < this.childs.length; t++) if (!this.childs[t].deepEqual(e[t])) return !1;\n } else if (\"object\" === this.type) {\n if (\"object\" !== E(e) || !e) return !1;\n var n = Object.keys(e);\n if (this.childs.length !== n.length) return !1;\n for (t = 0; t < n.length; t++) {\n var i = this.childs[t];\n if (i.field !== n[t] || !i.deepEqual(e[i.field])) return !1;\n }\n } else if (this.value !== e) return !1;\n return !0;\n }\n }, {\n key: \"_getDomValue\",\n value: function () {\n if (this._clearValueError(), this.dom.value && \"array\" !== this.type && \"object\" !== this.type && (this.valueInnerText = (0, k.getInnerText)(this.dom.value), \"\" === this.valueInnerText) && \"\" !== this.dom.value.innerHTML && (this.dom.value.textContent = \"\"), void 0 !== this.valueInnerText) try {\n var e, t;\n (t = \"string\" === this.type ? this._unescapeHTML(this.valueInnerText) : (e = this._unescapeHTML(this.valueInnerText), (0, k.parseString)(e))) !== this.value && (this.value = t, this._debouncedOnChangeValue());\n } catch (e) {\n this._setValueError((0, l.Iu)(\"cannotParseValueError\"));\n }\n }\n }, {\n key: \"_setValueError\",\n value: function (e) {\n this.valueError = {\n message: e\n }, this.updateError();\n }\n }, {\n key: \"_clearValueError\",\n value: function () {\n this.valueError && (this.valueError = null, this.updateError());\n }\n }, {\n key: \"_setFieldError\",\n value: function (e) {\n this.fieldError = {\n message: e\n }, this.updateError();\n }\n }, {\n key: \"_clearFieldError\",\n value: function () {\n this.fieldError && (this.fieldError = null, this.updateError());\n }\n }, {\n key: \"_onChangeValue\",\n value: function () {\n var e,\n t = this.editor.getDomSelection(),\n n = (t.range && (n = (0, k.textDiff)(String(this.value), String(this.previousValue)), t.range.startOffset = n.start, t.range.endOffset = n.end), this.editor.getDomSelection());\n n.range && (e = (0, k.textDiff)(String(this.previousValue), String(this.value)), n.range.startOffset = e.start, n.range.endOffset = e.end), this.editor._onAction(\"editValue\", {\n path: this.getInternalPath(),\n oldValue: this.previousValue,\n newValue: this.value,\n oldSelection: t,\n newSelection: n\n }), this.previousValue = this.value;\n }\n }, {\n key: \"_onChangeField\",\n value: function () {\n var e = this.editor.getDomSelection(),\n t = this.previousField || \"\",\n n = (e.range && (n = (0, k.textDiff)(this.field, t), e.range.startOffset = n.start, e.range.endOffset = n.end), this.editor.getDomSelection());\n n.range && (t = (0, k.textDiff)(t, this.field), n.range.startOffset = t.start, n.range.endOffset = t.end), this.editor._onAction(\"editField\", {\n parentPath: this.parent.getInternalPath(),\n index: this.getIndex(),\n oldValue: this.previousField,\n newValue: this.field,\n oldSelection: e,\n newSelection: n\n }), this.previousField = this.field;\n }\n }, {\n key: \"_updateDomValue\",\n value: function () {\n var e = this.dom.value;\n if (e) {\n var t = [\"jsoneditor-value\"],\n n = this.value,\n i = \"auto\" === this.type ? (0, k.getType)(n) : this.type,\n o = \"string\" === i && (0, k.isUrl)(n);\n if (t.push(\"jsoneditor-\" + i), o && t.push(\"jsoneditor-url\"), \"\" === String(this.value) && \"array\" !== this.type && \"object\" !== this.type && t.push(\"jsoneditor-empty\"), this.searchValueActive && t.push(\"jsoneditor-highlight-active\"), this.searchValue && t.push(\"jsoneditor-highlight\"), e.className = t.join(\" \"), \"array\" === i || \"object\" === i ? (t = this.childs ? this.childs.length : 0, e.title = this.type + \" containing \" + t + \" items\") : o && this.editable.value ? e.title = (0, l.Iu)(\"openUrl\") : e.title = \"\", \"boolean\" === i && this.editable.value ? (this.dom.checkbox || (this.dom.checkbox = document.createElement(\"input\"), this.dom.checkbox.type = \"checkbox\", this.dom.tdCheckbox = document.createElement(\"td\"), this.dom.tdCheckbox.className = \"jsoneditor-tree\", this.dom.tdCheckbox.appendChild(this.dom.checkbox), this.dom.tdValue.parentNode.insertBefore(this.dom.tdCheckbox, this.dom.tdValue)), this.dom.checkbox.checked = this.value) : this.dom.tdCheckbox && (this.dom.tdCheckbox.parentNode.removeChild(this.dom.tdCheckbox), delete this.dom.tdCheckbox, delete this.dom.checkbox), this.enum && this.editable.value ? (this.dom.select || (this.dom.select = document.createElement(\"select\"), this.id = this.field + \"_\" + new Date().getUTCMilliseconds(), this.dom.select.id = this.id, this.dom.select.name = this.dom.select.id, (t = document.createElement(\"option\")).value = \"\", t.textContent = \"--\", this.dom.select.appendChild(t), this._updateEnumOptions(), this.dom.tdSelect = document.createElement(\"td\"), this.dom.tdSelect.className = \"jsoneditor-tree\", this.dom.tdSelect.appendChild(this.dom.select), this.dom.tdValue.parentNode.insertBefore(this.dom.tdSelect, this.dom.tdValue)), this.dom.select.value = -1 !== this.enum.indexOf(this.value) ? this.value : \"\", !this.schema || v(this.schema, \"oneOf\") || v(this.schema, \"anyOf\") || v(this.schema, \"allOf\") ? delete this.valueFieldHTML : (this.valueFieldHTML = this.dom.tdValue.innerHTML, this.dom.tdValue.style.visibility = \"hidden\", this.dom.tdValue.textContent = \"\")) : this.dom.tdSelect && (this.dom.tdSelect.parentNode.removeChild(this.dom.tdSelect), delete this.dom.tdSelect, delete this.dom.select, this.dom.tdValue.innerHTML = this.valueFieldHTML, this.dom.tdValue.style.visibility = \"\", delete this.valueFieldHTML, this.dom.tdValue.appendChild(this.dom.value)), this.editor.options.colorPicker && \"string\" == typeof n && (0, k.isValidColor)(n) ? (this.dom.color || (this.dom.color = document.createElement(\"div\"), this.dom.color.className = \"jsoneditor-color\", this.dom.tdColor = document.createElement(\"td\"), this.dom.tdColor.className = \"jsoneditor-tree\", this.dom.tdColor.appendChild(this.dom.color), this.dom.tdValue.parentNode.insertBefore(this.dom.tdColor, this.dom.tdValue)), (0, k.addClassName)(this.dom.value, \"jsoneditor-color-value\"), (this.editable.value ? (0, k.removeClassName) : (0, k.addClassName))(this.dom.color, \"jsoneditor-color-readonly\"), this.dom.color.style.backgroundColor = n) : this._deleteDomColor(), this._showTimestampTag()) {\n this.dom.date || (this.dom.date = document.createElement(\"div\"), this.dom.date.className = \"jsoneditor-date\", this.dom.value.parentNode.appendChild(this.dom.date));\n o = null;\n if (o = \"function\" == typeof this.editor.options.timestampFormat ? this.editor.options.timestampFormat({\n field: this.field,\n value: this.value,\n path: this.getPath()\n }) : o) {\n for (; this.dom.date.firstChild;) this.dom.date.removeChild(this.dom.date.firstChild);\n this.dom.date.appendChild(document.createTextNode(o));\n } else this.dom.date.textContent = new Date(n).toISOString();\n this.dom.date.title = new Date(n).toString();\n } else this.dom.date && (this.dom.date.parentNode.removeChild(this.dom.date), delete this.dom.date);\n (0, k.stripFormatting)(e), this._updateDomDefault();\n }\n }\n }, {\n key: \"_updateEnumOptions\",\n value: function () {\n if (this.enum && this.dom.select) {\n this.dom.select.innerHTML = \"\";\n for (var e = 0; e < this.enum.length; e++) {\n var t = document.createElement(\"option\");\n t.value = this.enum[e], t.textContent = this.enum[e], this.dom.select.appendChild(t);\n }\n }\n }\n }, {\n key: \"_deleteDomColor\",\n value: function () {\n this.dom.color && (this.dom.tdColor.parentNode.removeChild(this.dom.tdColor), delete this.dom.tdColor, delete this.dom.color, (0, k.removeClassName)(this.dom.value, \"jsoneditor-color-value\"));\n }\n }, {\n key: \"_updateDomField\",\n value: function () {\n var e,\n t = this.dom.field;\n t && ((e = (0, k.makeFieldTooltip)(this.schema, this.editor.options.language)) && (t.title = e), (\"\" === String(this.field) && this.parent && \"array\" !== this.parent.type ? (0, k.addClassName) : (0, k.removeClassName))(t, \"jsoneditor-empty\"), (this.searchFieldActive ? (0, k.addClassName) : (0, k.removeClassName))(t, \"jsoneditor-highlight-active\"), (this.searchField ? (0, k.addClassName) : (0, k.removeClassName))(t, \"jsoneditor-highlight\"), (0, k.stripFormatting)(t));\n }\n }, {\n key: \"_getDomField\",\n value: function (e) {\n if (this._clearFieldError(), this.dom.field && this.fieldEditable && (this.fieldInnerText = (0, k.getInnerText)(this.dom.field), \"\" === this.fieldInnerText) && \"\" !== this.dom.field.innerHTML && (this.dom.field.textContent = \"\"), void 0 !== this.fieldInnerText) try {\n var t = this._unescapeHTML(this.fieldInnerText),\n n = this.parent.getFieldNames(this);\n -1 !== n.indexOf(t) ? e ? (t = (0, k.findUniqueName)(t, n)) !== this.field && (this.field = t, this._debouncedOnChangeField()) : this._setFieldError((0, l.Iu)(\"duplicateFieldError\")) : t !== this.field && (this.field = t, this._debouncedOnChangeField());\n } catch (e) {\n this._setFieldError((0, l.Iu)(\"cannotParseFieldError\"));\n }\n }\n }, {\n key: \"_updateDomDefault\",\n value: function () {\n var e;\n this.schema && void 0 !== this.schema.default && !this._hasChilds() && (e = this.dom.select || this.dom.value) && (this.value === this.schema.default ? (e.title = (0, l.Iu)(\"default\"), (0, k.addClassName)(e, \"jsoneditor-is-default\"), k.removeClassName) : (e.removeAttribute(\"title\"), (0, k.removeClassName)(e, \"jsoneditor-is-default\"), k.addClassName))(e, \"jsoneditor-is-not-default\");\n }\n }, {\n key: \"_showTimestampTag\",\n value: function () {\n var e, t;\n return \"number\" == typeof this.value && (\"function\" == typeof (e = this.editor.options.timestampTag) ? \"boolean\" == typeof (t = e({\n field: this.field,\n value: this.value,\n path: this.getPath()\n })) ? t : (0, k.isTimestamp)(this.field, this.value) : !0 === e && (0, k.isTimestamp)(this.field, this.value));\n }\n }, {\n key: \"clearDom\",\n value: function () {\n this.dom = {};\n }\n }, {\n key: \"getDom\",\n value: function () {\n var e,\n t,\n n = this.dom;\n return n.tr || (this._updateEditability(), n.tr = document.createElement(\"tr\"), \"tree\" === (n.tr.node = this).editor.options.mode && (t = document.createElement(\"td\"), this.editable.field && this.parent && ((e = document.createElement(\"button\")).type = \"button\", (n.drag = e).className = \"jsoneditor-button jsoneditor-dragarea\", e.title = (0, l.Iu)(\"drag\"), t.appendChild(e)), n.tr.appendChild(t), e = document.createElement(\"td\"), (t = document.createElement(\"button\")).type = \"button\", (n.menu = t).className = \"jsoneditor-button jsoneditor-contextmenu-button\", t.title = (0, l.Iu)(\"actionsMenu\"), e.appendChild(n.menu), n.tr.appendChild(e)), t = document.createElement(\"td\"), n.tr.appendChild(t), n.tree = this._createDomTree(), t.appendChild(n.tree), this.updateDom({\n updateIndexes: !0\n })), n.tr;\n }\n }, {\n key: \"isVisible\",\n value: function () {\n return this.dom && this.dom.tr && this.dom.tr.parentNode || !1;\n }\n }, {\n key: \"isDescendantOf\",\n value: function (e) {\n for (var t = this.parent; t;) {\n if (t === e) return !0;\n t = t.parent;\n }\n return !1;\n }\n }, {\n key: \"_createDomField\",\n value: function () {\n return document.createElement(\"div\");\n }\n }, {\n key: \"setHighlight\",\n value: function (t) {\n this.dom.tr && ((t ? (0, k.addClassName) : (0, k.removeClassName))(this.dom.tr, \"jsoneditor-highlight\"), this.append && this.append.setHighlight(t), this.childs) && this.childs.forEach(function (e) {\n e.setHighlight(t);\n });\n }\n }, {\n key: \"setSelected\",\n value: function (t, e) {\n this.selected = t, this.dom.tr && ((t ? (0, k.addClassName) : (0, k.removeClassName))(this.dom.tr, \"jsoneditor-selected\"), (e ? (0, k.addClassName) : (0, k.removeClassName))(this.dom.tr, \"jsoneditor-first\"), this.append && this.append.setSelected(t), this.showMore && this.showMore.setSelected(t), this.childs) && this.childs.forEach(function (e) {\n e.setSelected(t);\n });\n }\n }, {\n key: \"updateValue\",\n value: function (e) {\n this.value = e, this.previousValue = e, this.valueError = void 0, this.updateDom();\n }\n }, {\n key: \"updateField\",\n value: function (e) {\n this.field = e, this.previousField = e, this.fieldError = void 0, this.updateDom();\n }\n }, {\n key: \"updateDom\",\n value: function (t) {\n var e,\n n = this.dom.tree,\n n = (n && (n.style.marginLeft = 24 * this.getLevel() + \"px\"), this.dom.field),\n n = (n && (this.fieldEditable ? (n.contentEditable = this.editable.field, n.spellcheck = !1, n.className = \"jsoneditor-field\") : (n.contentEditable = !1, n.className = \"jsoneditor-readonly\"), e = void 0 !== this.index ? this.index : void 0 !== this.field ? this.field : (e = this.editor.options.schema ? x._findSchema(this.editor.options.schema, this.editor.options.schemaRefs || {}, this.getPath()) : void 0) && e.title ? e.title : this._hasChilds() ? this.type : \"\", e = this._escapeHTML(e), document.activeElement !== n && e !== this._unescapeHTML((0, k.getInnerText)(n)) && (n.innerHTML = e), this._updateSchema(), this._updateEnumOptions()), this.dom.value),\n n = (n && (\"array\" === this.type || \"object\" === this.type ? this.updateNodeName() : (e = this._escapeHTML(this.value), document.activeElement !== n && e !== this._unescapeHTML((0, k.getInnerText)(n)) && (n.innerHTML = e))), this.dom.tr);\n n && (\"array\" === this.type || \"object\" === this.type ? ((0, k.addClassName)(n, \"jsoneditor-expandable\"), this.expanded ? ((0, k.addClassName)(n, \"jsoneditor-expanded\"), (0, k.removeClassName)(n, \"jsoneditor-collapsed\")) : ((0, k.addClassName)(n, \"jsoneditor-collapsed\"), (0, k.removeClassName)(n, \"jsoneditor-expanded\"))) : ((0, k.removeClassName)(n, \"jsoneditor-expandable\"), (0, k.removeClassName)(n, \"jsoneditor-expanded\"), (0, k.removeClassName)(n, \"jsoneditor-collapsed\"))), this._updateDomField(), this._updateDomValue(), t && !0 === t.updateIndexes && this._updateDomIndexes(), t && !0 === t.recurse && this.childs && this.childs.forEach(function (e) {\n e.updateDom(t);\n }), this.error && this.updateError(), this.append && this.append.updateDom(), this.showMore && this.showMore.updateDom(), this._updateCssClassName();\n }\n }, {\n key: \"_updateSchema\",\n value: function () {\n this.editor && this.editor.options && (this.schema = this.editor.options.schema ? x._findSchema(this.editor.options.schema, this.editor.options.schemaRefs || {}, this.getPath()) : null, this.schema ? this.enum = x._findEnum(this.schema) : delete this.enum);\n }\n }, {\n key: \"_updateDomIndexes\",\n value: function () {\n var e = this.dom.value,\n t = this.childs;\n e && t && (\"array\" === this.type ? t.forEach(function (e, t) {\n e.index = t;\n e = e.dom.field;\n e && (e.textContent = t);\n }) : \"object\" === this.type && t.forEach(function (e) {\n void 0 !== e.index && (delete e.index, void 0 === e.field) && (e.field = \"\");\n }));\n }\n }, {\n key: \"_createDomValue\",\n value: function () {\n var e;\n return \"array\" === this.type ? (e = document.createElement(\"div\")).textContent = \"[...]\" : \"object\" === this.type ? (e = document.createElement(\"div\")).textContent = \"{...}\" : (!this.editable.value && (0, k.isUrl)(this.value) ? (e = document.createElement(\"a\")).href = this.value : ((e = document.createElement(\"div\")).contentEditable = this.editable.value, e.spellcheck = !1), e.innerHTML = this._escapeHTML(this.value)), e;\n }\n }, {\n key: \"_createDomExpandButton\",\n value: function () {\n var e = document.createElement(\"button\");\n return e.type = \"button\", this._hasChilds() ? (e.className = this.expanded ? \"jsoneditor-button jsoneditor-expanded\" : \"jsoneditor-button jsoneditor-collapsed\", e.title = (0, l.Iu)(\"expandTitle\")) : (e.className = \"jsoneditor-button jsoneditor-invisible\", e.title = \"\"), e;\n }\n }, {\n key: \"_createDomTree\",\n value: function () {\n var e = this.dom,\n t = document.createElement(\"table\"),\n n = document.createElement(\"tbody\"),\n i = (t.style.borderCollapse = \"collapse\", t.className = \"jsoneditor-values\", t.appendChild(n), document.createElement(\"tr\")),\n n = (n.appendChild(i), document.createElement(\"td\")),\n n = (n.className = \"jsoneditor-tree\", i.appendChild(n), e.expand = this._createDomExpandButton(), n.appendChild(e.expand), e.tdExpand = n, document.createElement(\"td\")),\n n = (n.className = \"jsoneditor-tree\", i.appendChild(n), e.field = this._createDomField(), n.appendChild(e.field), e.tdField = n, document.createElement(\"td\")),\n n = (n.className = \"jsoneditor-tree\", i.appendChild(n), \"object\" !== this.type && \"array\" !== this.type && (n.appendChild(document.createTextNode(\":\")), n.className = \"jsoneditor-separator\"), e.tdSeparator = n, document.createElement(\"td\"));\n return n.className = \"jsoneditor-tree\", i.appendChild(n), e.value = this._createDomValue(), n.appendChild(e.value), e.tdValue = n, t;\n }\n }, {\n key: \"onEvent\",\n value: function (e) {\n var t,\n n = e.type,\n i = e.target || e.srcElement,\n o = this.dom,\n r = this,\n s = this._hasChilds(),\n a = (i !== o.drag && i !== o.menu || (\"mouseover\" === n ? this.editor.highlighter.highlight(this) : \"mouseout\" === n && this.editor.highlighter.unhighlight()), \"click\" === n && i === o.menu && ((t = r.editor.highlighter).highlight(r), t.lock(), (0, k.addClassName)(o.menu, \"jsoneditor-selected\"), this.showContextMenu(o.menu, function () {\n (0, k.removeClassName)(o.menu, \"jsoneditor-selected\"), t.unlock(), t.unhighlight();\n })), \"click\" === n && i === o.expand && s && (d = e.ctrlKey, this._onExpand(d)), \"click\" !== n || e.target !== r.dom.tdColor && e.target !== r.dom.color || !this.editable.value || this._showColorPicker(), \"change\" === n && i === o.checkbox && (this.dom.value.textContent = String(!this.value), this._getDomValue(), this._updateDomDefault()), \"change\" === n && i === o.select && (this.dom.value.innerHTML = this._escapeHTML(o.select.value), this._getDomValue(), this._updateDomValue()), o.value);\n if (i === a) switch (n) {\n case \"blur\":\n case \"change\":\n this._getDomValue(), this._clearValueError(), this._updateDomValue();\n var l = this._escapeHTML(this.value);\n l !== this._unescapeHTML((0, k.getInnerText)(a)) && (a.innerHTML = l);\n break;\n case \"input\":\n this._getDomValue(), this._updateDomValue();\n break;\n case \"keydown\":\n case \"mousedown\":\n this.editor.selection = this.editor.getDomSelection();\n break;\n case \"click\":\n e.ctrlKey && this.editable.value && (0, k.isUrl)(this.value) && (e.preventDefault(), window.open(this.value, \"_blank\", \"noreferrer\"));\n break;\n case \"keyup\":\n this._getDomValue(), this._updateDomValue();\n break;\n case \"cut\":\n case \"paste\":\n setTimeout(function () {\n r._getDomValue(), r._updateDomValue();\n }, 1);\n }\n var c = o.field;\n if (i === c) switch (n) {\n case \"blur\":\n this._getDomField(!0), this._updateDomField();\n var h = this._escapeHTML(this.field);\n h !== this._unescapeHTML((0, k.getInnerText)(c)) && (c.innerHTML = h);\n break;\n case \"input\":\n this._getDomField(), this._updateSchema(), this._updateDomField(), this._updateDomValue();\n break;\n case \"keydown\":\n case \"mousedown\":\n this.editor.selection = this.editor.getDomSelection();\n break;\n case \"keyup\":\n this._getDomField(), this._updateDomField();\n break;\n case \"cut\":\n case \"paste\":\n setTimeout(function () {\n r._getDomField(), r._updateDomField();\n }, 1);\n }\n var d = o.tree;\n d && i === d.parentNode && \"click\" === n && !e.hasMoved && ((void 0 !== e.offsetX ? e.offsetX < 24 * (this.getLevel() + 1) : e.pageX < (0, k.getAbsoluteLeft)(o.tdSeparator)) || s ? c && ((0, k.setEndOfContentEditable)(c), c.focus()) : a && !this.enum && ((0, k.setEndOfContentEditable)(a), a.focus())), (i !== o.tdExpand || s) && i !== o.tdField && i !== o.tdSeparator || \"click\" !== n || e.hasMoved || c && ((0, k.setEndOfContentEditable)(c), c.focus()), \"keydown\" === n && this.onKeyDown(e), \"function\" == typeof this.editor.options.onEvent && this._onEvent(e);\n }\n }, {\n key: \"_onEvent\",\n value: function (e) {\n var t = e.target,\n n = t === this.dom.field,\n t = t === this.dom.value || t === this.dom.checkbox || t === this.dom.select;\n (n || t) && (n = {\n field: this.getField(),\n path: this.getPath()\n }, t && !this._hasChilds() && (n.value = this.getValue()), this.editor.options.onEvent(n, e));\n }\n }, {\n key: \"onKeyDown\",\n value: function (e) {\n var t,\n n,\n i,\n o,\n r,\n s,\n a,\n l,\n c,\n h,\n d,\n u,\n g,\n p,\n m = e.which || e.keyCode,\n f = e.target || e.srcElement,\n C = e.ctrlKey,\n y = e.shiftKey,\n v = e.altKey,\n I = !1,\n b = \"tree\" === this.editor.options.mode,\n A = 0 < this.editor.multiselection.nodes.length ? this.editor.multiselection.nodes : [this],\n w = A[0],\n S = A[A.length - 1];\n 13 === m ? f === this.dom.value ? this.editable.value && !e.ctrlKey || (0, k.isUrl)(this.value) && (window.open(this.value, \"_blank\", \"noreferrer\"), I = !0) : f === this.dom.expand && this._hasChilds() && (g = e.ctrlKey, this._onExpand(g), f.focus(), I = !0) : 68 === m ? C && b && (x.onDuplicate(A), I = !0) : 69 === m ? C && (this._onExpand(y), f.focus(), I = !0) : 77 === m && b ? C && (this.showContextMenu(f), I = !0) : 46 === m && b ? C && (x.onRemove(A), I = !0) : 45 === m && b ? C && !y ? (this._onInsertBefore(), I = !0) : C && y && (this._onInsertAfter(), I = !0) : 35 === m ? v && ((g = this._lastNode()) && g.focus(x.focusElement || this._getElementName(f)), I = !0) : 36 === m ? v && ((g = this._firstNode()) && g.focus(x.focusElement || this._getElementName(f)), I = !0) : 37 === m ? v && !y ? ((g = this._previousElement(f)) && this.focus(this._getElementName(g)), I = !0) : v && y && b && (g = S.expanded ? (g = S.getAppendDom()) ? g.nextSibling : void 0 : S.getDom().nextSibling) && (d = x.getNodeFromTarget(g), g = g.nextSibling, u = x.getNodeFromTarget(g), d) && d instanceof _ && 1 !== S.parent.childs.length && u && u.parent && (n = this.editor.getDomSelection(), i = (o = w.parent).childs[S.getIndex() + 1] || o.append, r = w.getIndex(), s = u.getIndex(), a = o.getInternalPath(), l = u.parent.getInternalPath(), A.forEach(function (e) {\n u.parent.moveBefore(e, u);\n }), this.focus(x.focusElement || this._getElementName(f)), this.editor._onAction(\"moveNodes\", {\n count: A.length,\n fieldNames: A.map(R),\n oldParentPath: o.getInternalPath(),\n newParentPath: w.parent.getInternalPath(),\n oldIndex: i.getIndex(),\n newIndex: w.getIndex(),\n oldIndexRedo: r,\n newIndexRedo: s,\n oldParentPathRedo: a,\n newParentPathRedo: l,\n oldSelection: n,\n newSelection: this.editor.getDomSelection()\n })) : 38 === m ? v && !y ? ((t = this._previousNode()) && (this.editor.deselect(!0), t.focus(x.focusElement || this._getElementName(f))), I = !0) : !v && C && y && b ? ((t = this._previousNode()) && ((h = this.editor.multiselection).start = h.start || this, h.end = t, c = this.editor._findTopLevelNodes(h.start, h.end), this.editor.select(c), t.focus(\"field\")), I = !0) : v && y && b && ((t = w._previousNode()) && t.parent && (n = this.editor.getDomSelection(), i = (o = w.parent).childs[S.getIndex() + 1] || o.append, r = w.getIndex(), s = t.getIndex(), a = o.getInternalPath(), l = t.parent.getInternalPath(), A.forEach(function (e) {\n t.parent.moveBefore(e, t);\n }), this.focus(x.focusElement || this._getElementName(f)), this.editor._onAction(\"moveNodes\", {\n count: A.length,\n fieldNames: A.map(R),\n oldParentPath: o.getInternalPath(),\n newParentPath: w.parent.getInternalPath(),\n oldIndex: i.getIndex(),\n newIndex: w.getIndex(),\n oldIndexRedo: r,\n newIndexRedo: s,\n oldParentPathRedo: a,\n newParentPathRedo: l,\n oldSelection: n,\n newSelection: this.editor.getDomSelection()\n })), I = !0) : 39 === m ? v && !y ? ((g = this._nextElement(f)) && this.focus(this._getElementName(g)), I = !0) : v && y && b && (g = w.getDom().previousSibling) && (t = x.getNodeFromTarget(g)) && t.parent && !t.isVisible() && (n = this.editor.getDomSelection(), i = (o = w.parent).childs[S.getIndex() + 1] || o.append, r = w.getIndex(), s = t.getIndex(), a = o.getInternalPath(), l = t.parent.getInternalPath(), A.forEach(function (e) {\n t.parent.moveBefore(e, t);\n }), this.focus(x.focusElement || this._getElementName(f)), this.editor._onAction(\"moveNodes\", {\n count: A.length,\n fieldNames: A.map(R),\n oldParentPath: o.getInternalPath(),\n newParentPath: w.parent.getInternalPath(),\n oldIndex: i.getIndex(),\n newIndex: w.getIndex(),\n oldIndexRedo: r,\n newIndexRedo: s,\n oldParentPathRedo: a,\n newParentPathRedo: l,\n oldSelection: n,\n newSelection: this.editor.getDomSelection()\n })) : 40 === m && (v && !y ? ((d = this._nextNode()) && (this.editor.deselect(!0), d.focus(x.focusElement || this._getElementName(f))), I = !0) : !v && C && y && b ? ((d = this._nextNode()) && ((h = this.editor.multiselection).start = h.start || this, h.end = d, c = this.editor._findTopLevelNodes(h.start, h.end), this.editor.select(c), d.focus(\"field\")), I = !0) : v && y && b && ((p = (d = (d = (d = S.expanded ? S.append ? S.append._nextNode() : void 0 : S._nextNode()) && !d.isVisible() ? d.parent.showMore : d) && d instanceof _ ? S : d) && (d._nextNode() || d.parent.append)) && p.parent && (n = this.editor.getDomSelection(), i = (o = w.parent).childs[S.getIndex() + 1] || o.append, r = w.getIndex(), s = p.getIndex(), a = o.getInternalPath(), l = p.parent.getInternalPath(), A.forEach(function (e) {\n p.parent.moveBefore(e, p);\n }), this.focus(x.focusElement || this._getElementName(f)), this.editor._onAction(\"moveNodes\", {\n count: A.length,\n fieldNames: A.map(R),\n oldParentPath: o.getInternalPath(),\n newParentPath: w.parent.getInternalPath(),\n oldParentPathRedo: a,\n newParentPathRedo: l,\n oldIndexRedo: r,\n newIndexRedo: s,\n oldIndex: i.getIndex(),\n newIndex: w.getIndex(),\n oldSelection: n,\n newSelection: this.editor.getDomSelection()\n })), I = !0)), I && (e.preventDefault(), e.stopPropagation());\n }\n }, {\n key: \"_onExpand\",\n value: function (e) {\n var t, n, i;\n e && (i = (n = (t = this.dom.tr.parentNode).parentNode).scrollTop, n.removeChild(t)), this.expanded ? this.collapse(e) : this.expand(e), e && (n.appendChild(t), n.scrollTop = i), \"function\" == typeof this.editor.options.onExpand && this.editor.options.onExpand({\n path: this.getPath(),\n isExpand: this.expanded,\n recursive: e\n });\n }\n }, {\n key: \"_showColorPicker\",\n value: function () {\n var t, e;\n \"function\" == typeof this.editor.options.onColorPicker && this.dom.color && ((t = this)._deleteDomColor(), t.updateDom(), e = (0, d.w)(this.dom.color, this.editor.getPopupAnchor()), this.editor.options.onColorPicker(e, this.value, function (e) {\n \"string\" == typeof e && e !== t.value && (t._deleteDomColor(), t.value = e, t.updateDom(), t._debouncedOnChangeValue());\n }));\n }\n }, {\n key: \"getFieldNames\",\n value: function (t) {\n return \"object\" === this.type ? this.childs.filter(function (e) {\n return e !== t;\n }).map(function (e) {\n return e.field;\n }) : [];\n }\n }, {\n key: \"_onInsertBefore\",\n value: function (e, t, n) {\n var i = this.editor.getDomSelection(),\n e = new x(this.editor, {\n field: void 0 !== e ? e : \"\",\n value: void 0 !== t ? t : \"\",\n type: n\n }),\n t = (e.expand(!0), this.getInternalPath()),\n n = (this.parent.insertBefore(e, this), this.editor.highlighter.unhighlight(), e.focus(\"field\"), this.editor.getDomSelection());\n this.editor._onAction(\"insertBeforeNodes\", {\n nodes: [e],\n paths: [e.getInternalPath()],\n beforePath: t,\n parentPath: this.parent.getInternalPath(),\n oldSelection: i,\n newSelection: n\n });\n }\n }, {\n key: \"_onInsertAfter\",\n value: function (e, t, n) {\n var i = this.editor.getDomSelection(),\n e = new x(this.editor, {\n field: void 0 !== e ? e : \"\",\n value: void 0 !== t ? t : \"\",\n type: n\n }),\n t = (e.expand(!0), this.parent.insertAfter(e, this), this.editor.highlighter.unhighlight(), e.focus(\"field\"), this.editor.getDomSelection());\n this.editor._onAction(\"insertAfterNodes\", {\n nodes: [e],\n paths: [e.getInternalPath()],\n afterPath: this.getInternalPath(),\n parentPath: this.parent.getInternalPath(),\n oldSelection: i,\n newSelection: t\n });\n }\n }, {\n key: \"_onAppend\",\n value: function (e, t, n) {\n var i = this.editor.getDomSelection(),\n e = new x(this.editor, {\n field: void 0 !== e ? e : \"\",\n value: void 0 !== t ? t : \"\",\n type: n\n }),\n t = (e.expand(!0), this.parent.appendChild(e), this.editor.highlighter.unhighlight(), e.focus(\"field\"), this.editor.getDomSelection());\n this.editor._onAction(\"appendNodes\", {\n nodes: [e],\n paths: [e.getInternalPath()],\n parentPath: this.parent.getInternalPath(),\n oldSelection: i,\n newSelection: t\n });\n }\n }, {\n key: \"_onChangeType\",\n value: function (e) {\n var t,\n n,\n i = this.type;\n e !== i && (t = this.editor.getDomSelection(), this.changeType(e), n = this.editor.getDomSelection(), this.editor._onAction(\"changeType\", {\n path: this.getInternalPath(),\n oldType: i,\n newType: e,\n oldSelection: t,\n newSelection: n\n }));\n }\n }, {\n key: \"sort\",\n value: function (n, e) {\n var t,\n i,\n o = !(2 < arguments.length && void 0 !== arguments[2]) || arguments[2];\n \"string\" == typeof n && (n = (0, k.parsePath)(n)), this._hasChilds() && (this.hideChilds(), t = this.childs, this.childs = this.childs.concat(), i = \"desc\" === e ? -1 : 1, \"object\" === this.type ? this.childs.sort(function (e, t) {\n return i * h()(e.field, t.field);\n }) : this.childs.sort(function (e, t) {\n var e = e.getNestedChild(n),\n t = t.getNestedChild(n);\n return e ? t ? (e = e.value, t = t.value, \"string\" != typeof e && \"string\" != typeof t ? t < e ? i : e < t ? -i : 0 : i * h()(e, t)) : -i : i;\n }), this._updateDomIndexes(), this.showChilds(), !0 === o) && this.editor._onAction(\"sort\", {\n path: this.getInternalPath(),\n oldChilds: t,\n newChilds: this.childs\n });\n }\n }, {\n key: \"update\",\n value: function (e) {\n var t = this.getInternalValue();\n this.setValue(e), this.editor._onAction(\"transform\", {\n path: this.getInternalPath(),\n oldValue: t,\n newValue: this.getInternalValue()\n });\n }\n }, {\n key: \"_detachFromDom\",\n value: function () {\n var e = this.dom.tr ? this.dom.tr.parentNode : void 0,\n t = this.expanded ? this.getAppendDom() : this.getDom(),\n t = t && t.parentNode ? t.nextSibling : void 0;\n return this.hide({\n resetVisibleChilds: !1\n }), {\n table: e,\n nextTr: t\n };\n }\n }, {\n key: \"_attachToDom\",\n value: function (e) {\n e.table && (e.nextTr ? e.table.insertBefore(this.getDom(), e.nextTr) : e.table.appendChild(this.getDom())), this.expanded && this.showChilds();\n }\n }, {\n key: \"transform\",\n value: function (e) {\n if (this._hasChilds()) {\n this.hideChilds();\n try {\n var t = this.getInternalValue(),\n n = this.getValue(),\n i = this.editor.options.executeQuery(n, e),\n o = (this.setValue(i), this.getInternalValue());\n this.editor._onAction(\"transform\", {\n path: this.getInternalPath(),\n oldValue: t,\n newValue: o\n }), this.showChilds();\n } catch (e) {\n this.showChilds(), this.editor._onError(e);\n }\n }\n }\n }, {\n key: \"extract\",\n value: function () {\n this.editor.node.hideChilds(), this.hideChilds();\n try {\n var e = this.editor.node.getInternalValue(),\n t = (this.editor._setRoot(this), this.editor.node.getInternalValue());\n this.editor._onAction(\"transform\", {\n path: this.editor.node.getInternalPath(),\n oldValue: e,\n newValue: t\n });\n } catch (e) {\n this.editor._onError(e);\n } finally {\n this.updateDom({\n recurse: !0\n }), this.showChilds();\n }\n }\n }, {\n key: \"getNestedChild\",\n value: function (e) {\n for (var t = 0, n = this; n && t < e.length;) n = n.findChildByProperty(e[t]), t++;\n return n;\n }\n }, {\n key: \"findChildByProperty\",\n value: function (t) {\n if (\"object\" === this.type) return this.childs.find(function (e) {\n return e.field === t;\n });\n }\n }, {\n key: \"getAppendDom\",\n value: function () {\n return this.append || (this.append = new _(this.editor), this.append.setParent(this)), this.append.getDom();\n }\n }, {\n key: \"getShowMoreDom\",\n value: function () {\n return this.showMore || (this.showMore = new F(this.editor, this)), this.showMore.getDom();\n }\n }, {\n key: \"nextSibling\",\n value: function () {\n var e = this.parent.childs.indexOf(this);\n return this.parent.childs[e + 1] || this.parent.append;\n }\n }, {\n key: \"_previousNode\",\n value: function () {\n var e = null,\n t = this.getDom();\n if (t && t.parentNode) for (var n = t; n = n.previousSibling, e = x.getNodeFromTarget(n), n && e && e instanceof _ && !e.isVisible(););\n return e;\n }\n }, {\n key: \"_nextNode\",\n value: function () {\n var e = null,\n t = this.getDom();\n if (t && t.parentNode) for (var n = t; n = n.nextSibling, e = x.getNodeFromTarget(n), n && e && e instanceof _ && !e.isVisible(););\n return e;\n }\n }, {\n key: \"_firstNode\",\n value: function () {\n var e = null,\n t = this.getDom();\n return t && t.parentNode && (t = t.parentNode.firstChild, e = x.getNodeFromTarget(t)), e;\n }\n }, {\n key: \"_lastNode\",\n value: function () {\n var e = null,\n t = this.getDom();\n if (t && t.parentNode) for (var n = t.parentNode.lastChild, e = x.getNodeFromTarget(n); n && e && !e.isVisible();) n = n.previousSibling, e = x.getNodeFromTarget(n);\n return e;\n }\n }, {\n key: \"_previousElement\",\n value: function (e) {\n var t = this.dom;\n switch (e) {\n case t.value:\n if (this.fieldEditable) return t.field;\n case t.field:\n if (this._hasChilds()) return t.expand;\n case t.expand:\n return t.menu;\n case t.menu:\n if (t.drag) return t.drag;\n default:\n return null;\n }\n }\n }, {\n key: \"_nextElement\",\n value: function (e) {\n var t = this.dom;\n switch (e) {\n case t.drag:\n return t.menu;\n case t.menu:\n if (this._hasChilds()) return t.expand;\n case t.expand:\n if (this.fieldEditable) return t.field;\n case t.field:\n if (!this._hasChilds()) return t.value;\n default:\n return null;\n }\n }\n }, {\n key: \"_getElementName\",\n value: function (t) {\n var n = this;\n return Object.keys(this.dom).find(function (e) {\n return n.dom[e] === t;\n });\n }\n }, {\n key: \"_hasChilds\",\n value: function () {\n return \"array\" === this.type || \"object\" === this.type;\n }\n }, {\n key: \"addTemplates\",\n value: function (t, n) {\n var i = this,\n e = i.editor.options.templates;\n null != e && (e.length && t.push({\n type: \"separator\"\n }), e.forEach(function (e) {\n t.push({\n text: e.text,\n className: e.className || \"jsoneditor-type-object\",\n title: e.title,\n click: (n ? function (e, t) {\n i._onAppend(e, t);\n } : function (e, t) {\n i._onInsertBefore(e, t);\n }).bind(this, e.field, e.value)\n });\n }));\n }\n }, {\n key: \"showContextMenu\",\n value: function (e, t) {\n var n,\n i = this,\n o = [];\n this.editable.value && o.push({\n text: (0, l.Iu)(\"type\"),\n title: (0, l.Iu)(\"typeTitle\"),\n className: \"jsoneditor-type-\" + this.type,\n submenu: [{\n text: (0, l.Iu)(\"auto\"),\n className: \"jsoneditor-type-auto\" + (\"auto\" === this.type ? \" jsoneditor-selected\" : \"\"),\n title: (0, l.Iu)(\"autoType\"),\n click: function () {\n i._onChangeType(\"auto\");\n }\n }, {\n text: (0, l.Iu)(\"array\"),\n className: \"jsoneditor-type-array\" + (\"array\" === this.type ? \" jsoneditor-selected\" : \"\"),\n title: (0, l.Iu)(\"arrayType\"),\n click: function () {\n i._onChangeType(\"array\");\n }\n }, {\n text: (0, l.Iu)(\"object\"),\n className: \"jsoneditor-type-object\" + (\"object\" === this.type ? \" jsoneditor-selected\" : \"\"),\n title: (0, l.Iu)(\"objectType\"),\n click: function () {\n i._onChangeType(\"object\");\n }\n }, {\n text: (0, l.Iu)(\"string\"),\n className: \"jsoneditor-type-string\" + (\"string\" === this.type ? \" jsoneditor-selected\" : \"\"),\n title: (0, l.Iu)(\"stringType\"),\n click: function () {\n i._onChangeType(\"string\");\n }\n }]\n }), this._hasChilds() && (this.editor.options.enableSort && o.push({\n text: (0, l.Iu)(\"sort\"),\n title: (0, l.Iu)(\"sortTitle\", {\n type: this.type\n }),\n className: \"jsoneditor-sort-asc\",\n click: function () {\n i.showSortModal();\n }\n }), this.editor.options.enableTransform && o.push({\n text: (0, l.Iu)(\"transform\"),\n title: (0, l.Iu)(\"transformTitle\", {\n type: this.type\n }),\n className: \"jsoneditor-transform\",\n click: function () {\n i.showTransformModal();\n }\n }), this.parent) && o.push({\n text: (0, l.Iu)(\"extract\"),\n title: (0, l.Iu)(\"extractTitle\", {\n type: this.type\n }),\n className: \"jsoneditor-extract\",\n click: function () {\n i.extract();\n }\n }), this.parent && this.parent._hasChilds() && (o.length && o.push({\n type: \"separator\"\n }), n = i.parent.childs, i === n[n.length - 1] && (n = [{\n text: (0, l.Iu)(\"auto\"),\n className: \"jsoneditor-type-auto\",\n title: (0, l.Iu)(\"autoType\"),\n click: function () {\n i._onAppend(\"\", \"\", \"auto\");\n }\n }, {\n text: (0, l.Iu)(\"array\"),\n className: \"jsoneditor-type-array\",\n title: (0, l.Iu)(\"arrayType\"),\n click: function () {\n i._onAppend(\"\", []);\n }\n }, {\n text: (0, l.Iu)(\"object\"),\n className: \"jsoneditor-type-object\",\n title: (0, l.Iu)(\"objectType\"),\n click: function () {\n i._onAppend(\"\", {});\n }\n }, {\n text: (0, l.Iu)(\"string\"),\n className: \"jsoneditor-type-string\",\n title: (0, l.Iu)(\"stringType\"),\n click: function () {\n i._onAppend(\"\", \"\", \"string\");\n }\n }], i.addTemplates(n, !0), o.push({\n text: (0, l.Iu)(\"appendText\"),\n title: (0, l.Iu)(\"appendTitle\"),\n submenuTitle: (0, l.Iu)(\"appendSubmenuTitle\"),\n className: \"jsoneditor-append\",\n click: function () {\n i._onAppend(\"\", \"\", \"auto\");\n },\n submenu: n\n })), n = [{\n text: (0, l.Iu)(\"auto\"),\n className: \"jsoneditor-type-auto\",\n title: (0, l.Iu)(\"autoType\"),\n click: function () {\n i._onInsertBefore(\"\", \"\", \"auto\");\n }\n }, {\n text: (0, l.Iu)(\"array\"),\n className: \"jsoneditor-type-array\",\n title: (0, l.Iu)(\"arrayType\"),\n click: function () {\n i._onInsertBefore(\"\", []);\n }\n }, {\n text: (0, l.Iu)(\"object\"),\n className: \"jsoneditor-type-object\",\n title: (0, l.Iu)(\"objectType\"),\n click: function () {\n i._onInsertBefore(\"\", {});\n }\n }, {\n text: (0, l.Iu)(\"string\"),\n className: \"jsoneditor-type-string\",\n title: (0, l.Iu)(\"stringType\"),\n click: function () {\n i._onInsertBefore(\"\", \"\", \"string\");\n }\n }], i.addTemplates(n, !1), o.push({\n text: (0, l.Iu)(\"insert\"),\n title: (0, l.Iu)(\"insertTitle\"),\n submenuTitle: (0, l.Iu)(\"insertSub\"),\n className: \"jsoneditor-insert\",\n click: function () {\n i._onInsertBefore(\"\", \"\", \"auto\");\n },\n submenu: n\n }), this.editable.field) && (o.push({\n text: (0, l.Iu)(\"duplicateText\"),\n title: (0, l.Iu)(\"duplicateField\"),\n className: \"jsoneditor-duplicate\",\n click: function () {\n x.onDuplicate(i);\n }\n }), o.push({\n text: (0, l.Iu)(\"removeText\"),\n title: (0, l.Iu)(\"removeField\"),\n className: \"jsoneditor-remove\",\n click: function () {\n x.onRemove(i);\n }\n })), this.editor.options.onCreateMenu && (n = i.getPath(), o = this.editor.options.onCreateMenu(o, {\n type: \"single\",\n path: n,\n paths: [n]\n })), new s.x(o, {\n close: t\n }).show(e, this.editor.getPopupAnchor());\n }\n }, {\n key: \"showSortModal\",\n value: function () {\n var n = this,\n e = this.editor.options.modalAnchor || p.qD,\n t = this.getValue();\n (0, u.showSortModal)(e, t, function (e) {\n var t = e.path,\n t = (0, k.parsePath)(t);\n n.sortedBy = e, n.sort(t, e.direction);\n }, n.sortedBy);\n }\n }, {\n key: \"showTransformModal\",\n value: function () {\n var t = this,\n e = this.editor.options,\n n = e.modalAnchor,\n i = e.createQuery,\n o = e.executeQuery,\n e = e.queryDescription,\n r = this.getValue();\n (0, g.showTransformModal)({\n container: n || p.qD,\n json: r,\n queryDescription: e,\n createQuery: i,\n executeQuery: o,\n onTransform: function (e) {\n t.transform(e);\n }\n });\n }\n }, {\n key: \"_getType\",\n value: function (e) {\n return e instanceof Array ? \"array\" : e instanceof Object ? \"object\" : \"string\" == typeof e && \"string\" != typeof (0, k.parseString)(e) ? \"string\" : \"auto\";\n }\n }, {\n key: \"_escapeHTML\",\n value: function (e) {\n return \"string\" != typeof e ? String(e) : (e = String(e).replace(/&/g, \"&\").replace(//g, \">\").replace(/ {2}/g, \" \").replace(/^ /, \" \").replace(/ $/, \" \"), e = (e = JSON.stringify(e)).substring(1, e.length - 1), !0 === this.editor.options.escapeUnicode ? (0, k.escapeUnicodeChars)(e) : e);\n }\n }, {\n key: \"_unescapeHTML\",\n value: function (e) {\n e = '\"' + this._escapeJSON(e) + '\"';\n return (0, k.parse)(e).replace(/</g, \"<\").replace(/>/g, \">\").replace(/ |\\u00A0/g, \" \").replace(/&/g, \"&\");\n }\n }, {\n key: \"_escapeJSON\",\n value: function (e) {\n for (var t = \"\", n = 0; n < e.length;) {\n var i = e.charAt(n);\n \"\\n\" === i ? t += \"\\\\n\" : \"\\\\\" === i ? (t += i, n++, \"\" !== (i = e.charAt(n)) && -1 !== '\"\\\\/bfnrtu'.indexOf(i) || (t += \"\\\\\"), t += i) : t += '\"' === i ? '\\\\\"' : i, n++;\n }\n return t;\n }\n }, {\n key: \"updateNodeName\",\n value: function () {\n var e = this.childs ? this.childs.length : 0;\n if (\"object\" === this.type || \"array\" === this.type) {\n if (this.editor.options.onNodeName) try {\n var t = this.getValue.bind(this),\n n = this.editor.options.onNodeName({\n path: this.getPath(),\n size: e,\n type: this.type,\n get value() {\n return t();\n }\n });\n } catch (e) {\n console.error(\"Error in onNodeName callback: \", e);\n }\n this.dom.value.textContent = \"object\" === this.type ? \"{\" + (n || e) + \"}\" : \"[\" + (n || e) + \"]\";\n }\n }\n }, {\n key: \"recursivelyUpdateNodeName\",\n value: function () {\n if (this.expanded && (this.updateNodeName(), \"undefined\" !== this.childs)) for (var e in this.childs) this.childs[e].recursivelyUpdateNodeName();\n }\n }]) && C(e.prototype, t), n && C(e, n), Object.defineProperty(e, \"prototype\", {\n writable: !1\n }), x;\n }(),\n G = (T.prototype.DEBOUNCE_INTERVAL = 150, T.prototype.MAX_SEARCH_RESULTS = 999, 100);\n function y(e) {\n return e.getInternalPath();\n }\n function R(e) {\n return e.getField();\n }\n function v(e, t) {\n return Object.prototype.hasOwnProperty.call(e, t);\n }\n T.focusElement = void 0, T.select = function (e) {\n setTimeout(function () {\n (0, k.selectContentEditable)(e);\n }, 0);\n }, T.onDragStart = function (t, e) {\n if (!Array.isArray(t)) return T.onDragStart([t], e);\n var n, i, o, r, s;\n 0 !== t.length && (n = t[0], i = t[t.length - 1], o = n.parent, s = T.getNodeFromTarget(e.target), r = n.editor, s = (0, k.getAbsoluteTop)(s.dom.tr) - (0, k.getAbsoluteTop)(n.dom.tr), r.mousemove || (r.mousemove = (0, k.addEventListener)(e.view, \"mousemove\", function (e) {\n T.onDrag(t, e);\n })), r.mouseup || (r.mouseup = (0, k.addEventListener)(e.view, \"mouseup\", function (e) {\n T.onDragEnd(t, e);\n })), r.highlighter.lock(), r.drag = {\n oldCursor: document.body.style.cursor,\n oldSelection: r.getDomSelection(),\n oldPaths: t.map(y),\n oldParent: o,\n oldNextNode: o.childs[i.getIndex() + 1] || o.append,\n oldParentPathRedo: o.getInternalPath(),\n oldIndexRedo: n.getIndex(),\n mouseX: e.pageX,\n offsetY: s,\n level: n.getLevel()\n }, document.body.style.cursor = \"move\", e.preventDefault());\n }, T.onDrag = function (e, t) {\n if (!Array.isArray(e)) return T.onDrag([e], t);\n if (0 !== e.length) {\n var n,\n i,\n o,\n r,\n s,\n a = e[0].editor,\n l = t.pageY - a.drag.offsetY,\n c = t.pageX,\n h = !1,\n d = e[0],\n u = d.dom.tr,\n g = (0, k.getAbsoluteTop)(u),\n p = u.offsetHeight;\n if (l < g) {\n for (y = u; y = y.previousSibling, v = T.getNodeFromTarget(y), o = y ? (0, k.getAbsoluteTop)(y) : 0, y && l < o;);\n (v = v && !v.parent ? void 0 : v) || (y = (u = u.parentNode.firstChild) ? u.nextSibling : void 0, (v = T.getNodeFromTarget(y)) === d && (v = void 0)), !(v = v && v.isVisible() && (o = (y = v.dom.tr) ? (0, k.getAbsoluteTop)(y) : 0) + p < l ? void 0 : v) || !1 !== a.options.limitDragging && v.parent !== e[0].parent || (e.forEach(function (e) {\n v.parent.moveBefore(e, v);\n }), h = !0);\n } else {\n var m = e[e.length - 1];\n if (p = (u = m.expanded && m.append ? m.append.getDom() : m.dom.tr) ? u.nextSibling : void 0) {\n for (r = (0, k.getAbsoluteTop)(p), n = p; i = T.getNodeFromTarget(n), n && (s = n.nextSibling ? (0, k.getAbsoluteTop)(n.nextSibling) : 0, s = n ? s - r : 0, i && i.parent.childs.length === e.length && i.parent.childs[e.length - 1] === m && (g += 27), n = n.nextSibling), n && g + s < l;);\n if (i && i.parent) {\n for (var p = c - a.drag.mouseX, p = Math.round(p / 24 / 2), f = a.drag.level + p, C = i.getLevel(), y = i.dom.tr && i.dom.tr.previousSibling; C < f && y;) {\n var v = T.getNodeFromTarget(y),\n I = e.some(function (e) {\n return e === v || v.isDescendantOf(e);\n });\n if (!I) {\n if (!(v instanceof _)) break;\n I = v.parent.childs;\n if (I.length === e.length && I[e.length - 1] === m) break;\n C = (i = T.getNodeFromTarget(y)).getLevel();\n }\n y = y.previousSibling;\n }\n (i = i instanceof _ && !i.isVisible() && i.parent.showMore.isVisible() ? i._nextNode() : i) && (!1 === a.options.limitDragging || i.parent === e[0].parent) && i.dom.tr && i.dom.tr !== u.nextSibling && (e.forEach(function (e) {\n i.parent.moveBefore(e, i);\n }), h = !0);\n }\n }\n }\n h && (a.drag.mouseX = c, a.drag.level = d.getLevel()), a.startAutoScroll(l), t.preventDefault();\n }\n }, T.onDragEnd = function (e, t) {\n if (!Array.isArray(e)) return T.onDrag([e], t);\n var n, i, o, r, s, a, l, c, h;\n 0 !== e.length && (a = e[0], n = a.editor, a && a.dom.menu && a.dom.menu.focus(), i = n.drag.oldParent.getInternalPath(), o = a.parent.getInternalPath(), r = n.drag.oldParent === a.parent, s = n.drag.oldNextNode.getIndex(), a = a.getIndex(), l = n.drag.oldParentPathRedo, c = n.drag.oldIndexRedo, h = r && c < a ? a + e.length : a, r && c === a || n._onAction(\"moveNodes\", {\n count: e.length,\n fieldNames: e.map(R),\n oldParentPath: i,\n newParentPath: o,\n oldIndex: s,\n newIndex: a,\n oldIndexRedo: c,\n newIndexRedo: h,\n oldParentPathRedo: l,\n newParentPathRedo: null,\n oldSelection: n.drag.oldSelection,\n newSelection: n.getDomSelection()\n }), document.body.style.cursor = n.drag.oldCursor, n.highlighter.unlock(), e.forEach(function (e) {\n e.updateDom(), t.target !== e.dom.drag && t.target !== e.dom.menu && n.highlighter.unhighlight();\n }), delete n.drag, n.mousemove && ((0, k.removeEventListener)(t.view, \"mousemove\", n.mousemove), delete n.mousemove), n.mouseup && ((0, k.removeEventListener)(t.view, \"mouseup\", n.mouseup), delete n.mouseup), n.stopAutoScroll(), t.preventDefault());\n }, T._findEnum = function (e) {\n if (e.enum) return e.enum;\n e = e.oneOf || e.anyOf || e.allOf;\n if (e) {\n e = e.filter(function (e) {\n return e.enum;\n });\n if (0 < e.length) return e[0].enum;\n }\n return null;\n }, T._findSchema = function (e, t, n) {\n for (var i = 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : e, o = n.slice(1, n.length), r = n[0], s = [i], a = 0, l = [i.oneOf, i.anyOf, i.allOf]; a < l.length; a++) {\n var c = l[a];\n Array.isArray(c) && (s = s.concat(c));\n }\n var h,\n d = x(s);\n try {\n for (d.s(); !(h = d.n()).done;) {\n if (\"$ref\" in (i = h.value) && \"string\" == typeof i.$ref) {\n var u,\n g = i.$ref;\n if (g in t) i = t[g];else {\n if (!g.startsWith(\"#/\")) {\n if (1 === (null == (u = g.match(/#\\//g)) ? void 0 : u.length)) {\n var p,\n m,\n f,\n C = P(g.split(\"#/\"), 2),\n y = C[0],\n v = C[1];\n if (y in t) return p = t[y], m = {\n $ref: \"#/\".concat(v)\n }, (f = []).push(r), 0 < o.length && f.push.apply(f, H(o)), T._findSchema(p, t, f, m);\n }\n throw Error(\"Unable to resolve reference \".concat(g));\n }\n var I,\n b = g.substring(2).split(\"/\"),\n i = e,\n A = x(b);\n try {\n for (A.s(); !(I = A.n()).done;) {\n var w = I.value;\n if (!(w in i)) throw Error(\"Unable to resolve reference \".concat(g));\n i = i[w];\n }\n } catch (e) {\n A.e(e);\n } finally {\n A.f();\n }\n }\n }\n if (void 0 === r) return i;\n if (\"string\" == typeof r) {\n if (\"object\" === E(i.properties) && null !== i.properties && r in i.properties) return i = i.properties[r], T._findSchema(e, t, o, i);\n if (\"object\" === E(i.patternProperties) && null !== i.patternProperties) for (var S in i.patternProperties) if (r.match(S)) return i = i.patternProperties[S], T._findSchema(e, t, o, i);\n if (\"object\" === E(i.additionalProperties)) return i = i.additionalProperties, T._findSchema(e, t, o, i);\n } else if (\"number\" == typeof r && \"object\" === E(i.items) && null !== i.items) return i = i.items, T._findSchema(e, t, o, i);\n }\n } catch (e) {\n d.e(e);\n } finally {\n d.f();\n }\n return null;\n }, T.onRemove = function (e) {\n if (!Array.isArray(e)) return T.onRemove([e]);\n var t, n, i, o, r, s;\n e && 0 < e.length && (t = (i = e[0]).parent, n = i.editor, i = i.getIndex(), n.highlighter.unhighlight(), o = n.getDomSelection(), T.blurNodes(e), r = n.getDomSelection(), s = e.map(y), e.forEach(function (e) {\n e.parent._remove(e);\n }), n._onAction(\"removeNodes\", {\n nodes: e,\n paths: s,\n parentPath: t.getInternalPath(),\n index: i,\n oldSelection: o,\n newSelection: r\n }));\n }, T.onDuplicate = function (e) {\n if (!Array.isArray(e)) return T.onDuplicate([e]);\n var t, i, n, o, r, s, a;\n e && 0 < e.length && (t = e[e.length - 1], i = t.parent, (n = t.editor).deselect(n.multiselection.nodes), o = n.getDomSelection(), r = t, s = e.map(function (e) {\n var t,\n n = e.clone();\n return \"object\" === e.parent.type && (t = e.parent.getFieldNames(), n.field = (0, k.findUniqueName)(e.field, t)), i.insertAfter(n, r), r = n;\n }), 1 === e.length ? \"object\" === s[0].parent.type ? (s[0].dom.field.innerHTML = e[0]._escapeHTML(e[0].field), s[0].focus(\"field\")) : s[0].focus() : n.select(s), a = n.getDomSelection(), n._onAction(\"duplicateNodes\", {\n paths: e.map(y),\n clonePaths: s.map(y),\n afterPath: t.getInternalPath(),\n parentPath: i.getInternalPath(),\n oldSelection: o,\n newSelection: a\n }));\n }, T.getNodeFromTarget = function (e) {\n for (; e;) {\n if (e.node) return e.node;\n e = e.parentNode;\n }\n }, T.targetIsColorPicker = function (e) {\n var t = T.getNodeFromTarget(e);\n if (t) for (var n = e && e.parentNode; n;) {\n if (n === t.dom.color) return !0;\n n = n.parentNode;\n }\n return !1;\n }, T.blurNodes = function (e) {\n var t, n;\n Array.isArray(e) ? (t = (n = e[0]).parent, n = n.getIndex(), (t.childs[n + e.length] ? t.childs[n + e.length] : t.childs[n - 1] || t).focus()) : T.blurNodes([e]);\n };\n (n.prototype = new T()).getDom = function () {\n var e = this.dom;\n if (e.tr) return e.tr;\n this._updateEditability();\n var t = document.createElement(\"tr\"),\n n = (t.className = \"jsoneditor-append\", t.node = this, e.tr = t, \"tree\" === this.editor.options.mode && (e.tdDrag = document.createElement(\"td\"), i = document.createElement(\"td\"), e.tdMenu = i, (n = document.createElement(\"button\")).type = \"button\", n.className = \"jsoneditor-button jsoneditor-contextmenu-button\", n.title = \"Click to open the actions menu (Ctrl+M)\", e.menu = n, i.appendChild(e.menu)), document.createElement(\"td\")),\n i = document.createElement(\"div\");\n return i.appendChild(document.createTextNode(\"(\" + (0, l.Iu)(\"empty\") + \")\")), i.className = \"jsoneditor-readonly\", n.appendChild(i), e.td = n, e.text = i, this.updateDom(), t;\n }, n.prototype.getPath = function () {\n return null;\n }, n.prototype.getIndex = function () {\n return null;\n }, n.prototype.updateDom = function (e) {\n var t = this.dom,\n n = t.td,\n i = (n && (n.style.paddingLeft = 24 * this.getLevel() + 26 + \"px\"), t.text),\n i = (i && (i.firstChild.nodeValue = \"(\" + (0, l.Iu)(\"empty\") + \" \" + this.parent.type + \")\"), t.tr);\n this.isVisible() ? t.tr.firstChild || (t.tdDrag && i.appendChild(t.tdDrag), t.tdMenu && i.appendChild(t.tdMenu), i.appendChild(n)) : t.tr.firstChild && (t.tdDrag && i.removeChild(t.tdDrag), t.tdMenu && i.removeChild(t.tdMenu), i.removeChild(n));\n }, n.prototype.isVisible = function () {\n return 0 === this.parent.childs.length;\n }, n.prototype.showContextMenu = function (e, t) {\n var n,\n i = this,\n o = [{\n text: (0, l.Iu)(\"auto\"),\n className: \"jsoneditor-type-auto\",\n title: (0, l.Iu)(\"autoType\"),\n click: function () {\n i._onAppend(\"\", \"\", \"auto\");\n }\n }, {\n text: (0, l.Iu)(\"array\"),\n className: \"jsoneditor-type-array\",\n title: (0, l.Iu)(\"arrayType\"),\n click: function () {\n i._onAppend(\"\", []);\n }\n }, {\n text: (0, l.Iu)(\"object\"),\n className: \"jsoneditor-type-object\",\n title: (0, l.Iu)(\"objectType\"),\n click: function () {\n i._onAppend(\"\", {});\n }\n }, {\n text: (0, l.Iu)(\"string\"),\n className: \"jsoneditor-type-string\",\n title: (0, l.Iu)(\"stringType\"),\n click: function () {\n i._onAppend(\"\", \"\", \"string\");\n }\n }],\n o = (i.addTemplates(o, !0), [{\n text: (0, l.Iu)(\"appendText\"),\n title: (0, l.Iu)(\"appendTitleAuto\"),\n submenuTitle: (0, l.Iu)(\"appendSubmenuTitle\"),\n className: \"jsoneditor-insert\",\n click: function () {\n i._onAppend(\"\", \"\", \"auto\");\n },\n submenu: o\n }]);\n this.editor.options.onCreateMenu && (n = i.parent.getPath(), o = this.editor.options.onCreateMenu(o, {\n type: \"append\",\n path: n,\n paths: [n]\n })), new s.x(o, {\n close: t\n }).show(e, this.editor.getPopupAnchor());\n }, n.prototype.onEvent = function (e) {\n var t,\n n = e.type,\n i = e.target || e.srcElement,\n o = this.dom;\n i === o.menu && (\"mouseover\" === n ? this.editor.highlighter.highlight(this.parent) : \"mouseout\" === n && this.editor.highlighter.unhighlight()), \"click\" === n && i === o.menu && ((t = this.editor.highlighter).highlight(this.parent), t.lock(), (0, k.addClassName)(o.menu, \"jsoneditor-selected\"), this.showContextMenu(o.menu, function () {\n (0, k.removeClassName)(o.menu, \"jsoneditor-selected\"), t.unlock(), t.unhighlight();\n })), \"keydown\" === n && this.onKeyDown(e);\n };\n var _ = n;\n function n(e) {\n this.editor = e, this.dom = {};\n }\n (I.prototype = new T()).getDom = function () {\n var t, n, e, i, o, r;\n return this.dom.tr || (this._updateEditability(), this.dom.tr || (n = (t = this).parent, (o = document.createElement(\"a\")).appendChild(document.createTextNode((0, l.Iu)(\"showMore\"))), o.href = \"#\", o.onclick = function (e) {\n return n.visibleChilds = Math.floor(n.visibleChilds / n.getMaxVisibleChilds() + 1) * n.getMaxVisibleChilds(), t.updateDom(), n.showChilds(), e.preventDefault(), !1;\n }, (r = document.createElement(\"a\")).appendChild(document.createTextNode((0, l.Iu)(\"showAll\"))), r.href = \"#\", r.onclick = function (e) {\n return n.visibleChilds = 1 / 0, t.updateDom(), n.showChilds(), e.preventDefault(), !1;\n }, e = document.createElement(\"div\"), i = document.createTextNode(this._getShowMoreText()), e.className = \"jsoneditor-show-more\", e.appendChild(i), e.appendChild(o), e.appendChild(document.createTextNode(\". \")), e.appendChild(r), e.appendChild(document.createTextNode(\". \")), (o = document.createElement(\"td\")).appendChild(e), r = document.createElement(\"tr\"), \"tree\" === this.editor.options.mode && (r.appendChild(document.createElement(\"td\")), r.appendChild(document.createElement(\"td\"))), r.appendChild(o), r.className = \"jsoneditor-show-more\", this.dom.tr = r, this.dom.moreContents = e, this.dom.moreText = i), this.updateDom()), this.dom.tr;\n }, I.prototype.updateDom = function (e) {\n var t;\n this.isVisible() ? (this.dom.tr.node = this.parent.childs[this.parent.visibleChilds], this.dom.tr.parentNode || (t = this.parent._getNextTr()) && t.parentNode.insertBefore(this.dom.tr, t), this.dom.moreText.nodeValue = this._getShowMoreText(), this.dom.moreContents.style.marginLeft = 24 * (this.getLevel() + 1) + \"px\") : this.dom.tr && this.dom.tr.parentNode && this.dom.tr.parentNode.removeChild(this.dom.tr);\n }, I.prototype._getShowMoreText = function () {\n return (0, l.Iu)(\"showMoreStatus\", {\n visibleChilds: this.parent.visibleChilds,\n totalChilds: this.parent.childs.length\n }) + \" \";\n }, I.prototype.isVisible = function () {\n return this.parent.expanded && this.parent.childs.length > this.parent.visibleChilds;\n }, I.prototype.onEvent = function (e) {\n \"keydown\" === e.type && this.onKeyDown(e);\n };\n var F = I;\n function I(e, t) {\n this.editor = e, this.parent = t, this.dom = {};\n }\n function b(e) {\n return (b = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (e) {\n return typeof e;\n } : function (e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n })(e);\n }\n function A(e, t) {\n for (var n = 0; n < t.length; n++) {\n var i = t[n];\n i.enumerable = i.enumerable || !1, i.configurable = !0, \"value\" in i && (i.writable = !0), Object.defineProperty(e, function (e) {\n e = function (e, t) {\n if (\"object\" !== b(e) || null === e) return e;\n var n = e[Symbol.toPrimitive];\n if (void 0 === n) return (\"string\" === t ? String : Number)(e);\n n = n.call(e, t || \"default\");\n if (\"object\" !== b(n)) return n;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }(e, \"string\");\n return \"symbol\" === b(e) ? e : String(e);\n }(i.key), i);\n }\n }\n var V = function () {\n function e(t) {\n if (!(this instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n function r(e) {\n return t.node.findNodeByInternalPath(e);\n }\n this.editor = t, this.history = [], this.index = -1, this.clear(), this.actions = {\n editField: {\n undo: function (e) {\n r(e.parentPath).childs[e.index].updateField(e.oldValue);\n },\n redo: function (e) {\n r(e.parentPath).childs[e.index].updateField(e.newValue);\n }\n },\n editValue: {\n undo: function (e) {\n r(e.path).updateValue(e.oldValue);\n },\n redo: function (e) {\n r(e.path).updateValue(e.newValue);\n }\n },\n changeType: {\n undo: function (e) {\n r(e.path).changeType(e.oldType);\n },\n redo: function (e) {\n r(e.path).changeType(e.newType);\n }\n },\n appendNodes: {\n undo: function (e) {\n var t = r(e.parentPath);\n e.paths.map(r).forEach(function (e) {\n t.removeChild(e);\n });\n },\n redo: function (e) {\n var t = r(e.parentPath);\n e.nodes.forEach(function (e) {\n t.appendChild(e);\n });\n }\n },\n insertBeforeNodes: {\n undo: function (e) {\n var t = r(e.parentPath);\n e.paths.map(r).forEach(function (e) {\n t.removeChild(e);\n });\n },\n redo: function (e) {\n var t = r(e.parentPath),\n n = r(e.beforePath);\n e.nodes.forEach(function (e) {\n t.insertBefore(e, n);\n });\n }\n },\n insertAfterNodes: {\n undo: function (e) {\n var t = r(e.parentPath);\n e.paths.map(r).forEach(function (e) {\n t.removeChild(e);\n });\n },\n redo: function (e) {\n var t = r(e.parentPath),\n n = r(e.afterPath);\n e.nodes.forEach(function (e) {\n t.insertAfter(e, n), n = e;\n });\n }\n },\n removeNodes: {\n undo: function (e) {\n var t = r(e.parentPath),\n n = t.childs[e.index] || t.append;\n e.nodes.forEach(function (e) {\n t.insertBefore(e, n);\n });\n },\n redo: function (e) {\n var t = r(e.parentPath);\n e.paths.map(r).forEach(function (e) {\n t.removeChild(e);\n });\n }\n },\n duplicateNodes: {\n undo: function (e) {\n var t = r(e.parentPath);\n e.clonePaths.map(r).forEach(function (e) {\n t.removeChild(e);\n });\n },\n redo: function (e) {\n var i = r(e.parentPath),\n o = r(e.afterPath);\n e.paths.map(r).forEach(function (e) {\n var t,\n n = e.clone();\n \"object\" === i.type && (t = i.getFieldNames(), n.field = (0, k.findUniqueName)(e.field, t)), i.insertAfter(n, o), o = n;\n });\n }\n },\n moveNodes: {\n undo: function (n) {\n var i = r(n.oldParentPath),\n e = r(n.newParentPath),\n o = i.childs[n.oldIndex] || i.append;\n e.childs.slice(n.newIndex, n.newIndex + n.count).forEach(function (e, t) {\n e.field = n.fieldNames[t], i.moveBefore(e, o);\n }), null === n.newParentPathRedo && (n.newParentPathRedo = e.getInternalPath());\n },\n redo: function (n) {\n var e = r(n.oldParentPathRedo),\n i = r(n.newParentPathRedo),\n o = i.childs[n.newIndexRedo] || i.append;\n e.childs.slice(n.oldIndexRedo, n.oldIndexRedo + n.count).forEach(function (e, t) {\n e.field = n.fieldNames[t], i.moveBefore(e, o);\n });\n }\n },\n sort: {\n undo: function (e) {\n var t = r(e.path);\n t.hideChilds(), t.childs = e.oldChilds, t.updateDom({\n updateIndexes: !0\n }), t.showChilds();\n },\n redo: function (e) {\n var t = r(e.path);\n t.hideChilds(), t.childs = e.newChilds, t.updateDom({\n updateIndexes: !0\n }), t.showChilds();\n }\n },\n transform: {\n undo: function (e) {\n r(e.path).setInternalValue(e.oldValue);\n },\n redo: function (e) {\n r(e.path).setInternalValue(e.newValue);\n }\n }\n };\n }\n var t, n, i;\n return t = e, (n = [{\n key: \"onChange\",\n value: function () {}\n }, {\n key: \"add\",\n value: function (e, t) {\n this.index++, this.history[this.index] = {\n action: e,\n params: t,\n timestamp: new Date()\n }, this.index < this.history.length - 1 && this.history.splice(this.index + 1, this.history.length - this.index - 1), this.onChange();\n }\n }, {\n key: \"clear\",\n value: function () {\n this.history = [], this.index = -1, this.onChange();\n }\n }, {\n key: \"canUndo\",\n value: function () {\n return 0 <= this.index;\n }\n }, {\n key: \"canRedo\",\n value: function () {\n return this.index < this.history.length - 1;\n }\n }, {\n key: \"undo\",\n value: function () {\n if (this.canUndo()) {\n var e = this.history[this.index];\n if (e) {\n var t = this.actions[e.action];\n if (t && t.undo) {\n if (t.undo(e.params), e.params.oldSelection) try {\n this.editor.setDomSelection(e.params.oldSelection);\n } catch (e) {\n console.error(e);\n }\n } else console.error(new Error('unknown action \"' + e.action + '\"'));\n }\n this.index--, this.onChange();\n }\n }\n }, {\n key: \"redo\",\n value: function () {\n if (this.canRedo()) {\n this.index++;\n var e = this.history[this.index];\n if (e) {\n var t = this.actions[e.action];\n if (t && t.redo) {\n if (t.redo(e.params), e.params.newSelection) try {\n this.editor.setDomSelection(e.params.newSelection);\n } catch (e) {\n console.error(e);\n }\n } else console.error(new Error('unknown action \"' + e.action + '\"'));\n }\n this.onChange();\n }\n }\n }, {\n key: \"destroy\",\n value: function () {\n this.editor = null, this.history = [], this.index = -1;\n }\n }]) && A(t.prototype, n), i && A(t, i), Object.defineProperty(t, \"prototype\", {\n writable: !1\n }), e;\n }();\n function $(e) {\n return ($ = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (e) {\n return typeof e;\n } : function (e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n })(e);\n }\n function L(e, t) {\n for (var n = 0; n < t.length; n++) {\n var i = t[n];\n i.enumerable = i.enumerable || !1, i.configurable = !0, \"value\" in i && (i.writable = !0), Object.defineProperty(e, function (e) {\n e = function (e, t) {\n if (\"object\" !== $(e) || null === e) return e;\n var n = e[Symbol.toPrimitive];\n if (void 0 === n) return (\"string\" === t ? String : Number)(e);\n n = n.call(e, t || \"default\");\n if (\"object\" !== $(n)) return n;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }(e, \"string\");\n return \"symbol\" === $(e) ? e : String(e);\n }(i.key), i);\n }\n }\n var O = function () {\n function o(e, t) {\n if (!(this instanceof o)) throw new TypeError(\"Cannot call a class as a function\");\n var n = this,\n e = (this.editor = e, this.timeout = void 0, this.delay = 200, this.lastText = void 0, this.results = null, this.dom = {}, this.dom.container = t, document.createElement(\"div\")),\n t = ((this.dom.wrapper = e).className = \"jsoneditor-search\", t.appendChild(e), document.createElement(\"div\")),\n t = ((this.dom.results = t).className = \"jsoneditor-results\", e.appendChild(t), document.createElement(\"div\")),\n e = ((this.dom.input = t).className = \"jsoneditor-frame\", t.title = (0, l.Iu)(\"searchTitle\"), e.appendChild(t), document.createElement(\"button\")),\n i = (e.type = \"button\", e.className = \"jsoneditor-refresh\", t.appendChild(e), document.createElement(\"input\")),\n e = (i.type = \"text\", (this.dom.search = i).oninput = function (e) {\n n._onDelayedSearch(e);\n }, i.onchange = function (e) {\n n._onSearch();\n }, i.onkeydown = function (e) {\n n._onKeyDown(e);\n }, i.onkeyup = function (e) {\n n._onKeyUp(e);\n }, e.onclick = function (e) {\n i.select();\n }, t.appendChild(i), document.createElement(\"button\")),\n e = (e.type = \"button\", e.title = (0, l.Iu)(\"searchNextResultTitle\"), e.className = \"jsoneditor-next\", e.onclick = function () {\n n.next();\n }, t.appendChild(e), document.createElement(\"button\"));\n e.type = \"button\", e.title = (0, l.Iu)(\"searchPreviousResultTitle\"), e.className = \"jsoneditor-previous\", e.onclick = function () {\n n.previous();\n }, t.appendChild(e);\n }\n var e, t, n;\n return e = o, (t = [{\n key: \"next\",\n value: function (e) {\n var t;\n this.results && ((t = null !== this.resultIndex ? this.resultIndex + 1 : 0) > this.results.length - 1 && (t = 0), this._setActiveResult(t, e));\n }\n }, {\n key: \"previous\",\n value: function (e) {\n var t, n;\n this.results && (t = this.results.length - 1, n = null !== this.resultIndex ? this.resultIndex - 1 : t, this._setActiveResult(n = n < 0 ? t : n, e));\n }\n }, {\n key: \"_setActiveResult\",\n value: function (e, t) {\n var n, i, o;\n this.activeResult && (n = this.activeResult.node, \"field\" === this.activeResult.elem ? delete n.searchFieldActive : delete n.searchValueActive, n.updateDom()), this.results && this.results[e] ? (this.resultIndex = e, i = this.results[this.resultIndex].node, \"field\" === (o = this.results[this.resultIndex].elem) ? i.searchFieldActive = !0 : i.searchValueActive = !0, this.activeResult = this.results[this.resultIndex], i.updateDom(), i.scrollTo(function () {\n t && i.focus(o);\n })) : (this.resultIndex = void 0, this.activeResult = void 0);\n }\n }, {\n key: \"_clearDelay\",\n value: function () {\n void 0 !== this.timeout && (clearTimeout(this.timeout), delete this.timeout);\n }\n }, {\n key: \"_onDelayedSearch\",\n value: function (e) {\n this._clearDelay();\n var t = this;\n this.timeout = setTimeout(function (e) {\n t._onSearch();\n }, this.delay);\n }\n }, {\n key: \"_onSearch\",\n value: function (e) {\n this._clearDelay();\n var t = this.dom.search.value,\n t = 0 < t.length ? t : void 0;\n if (t !== this.lastText || e) {\n this.lastText = t, this.results = this.editor.search(t);\n var e = this.results[0] ? this.results[0].node.MAX_SEARCH_RESULTS : 1 / 0,\n n = 0;\n if (this.activeResult) for (var i = 0; i < this.results.length; i++) if (this.results[i].node === this.activeResult.node) {\n n = i;\n break;\n }\n this._setActiveResult(n, !1), void 0 !== t ? (t = this.results.length, this.dom.results.textContent = 0 === t ? \"no results\" : 1 === t ? \"1 result\" : e < t ? e + \"+ results\" : t + \" results\") : this.dom.results.textContent = \"\";\n }\n }\n }, {\n key: \"_onKeyDown\",\n value: function (e) {\n var t = e.which;\n 27 === t ? (this.dom.search.value = \"\", this._onSearch(), e.preventDefault(), e.stopPropagation()) : 13 === t && (e.ctrlKey ? this._onSearch(!0) : e.shiftKey ? this.previous() : this.next(), e.preventDefault(), e.stopPropagation());\n }\n }, {\n key: \"_onKeyUp\",\n value: function (e) {\n var t = e.keyCode;\n 27 !== t && 13 !== t && this._onDelayedSearch(e);\n }\n }, {\n key: \"clear\",\n value: function () {\n this.dom.search.value = \"\", this._onSearch();\n }\n }, {\n key: \"forceSearch\",\n value: function () {\n this._onSearch(!0);\n }\n }, {\n key: \"isEmpty\",\n value: function () {\n return \"\" === this.dom.search.value;\n }\n }, {\n key: \"destroy\",\n value: function () {\n this.editor = null, this.dom.container.removeChild(this.dom.wrapper), this.dom = null, this.results = null, this.activeResult = null, this._clearDelay();\n }\n }]) && L(e.prototype, t), n && L(e, n), Object.defineProperty(e, \"prototype\", {\n writable: !1\n }), o;\n }();\n function N(e) {\n return (N = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (e) {\n return typeof e;\n } : function (e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n })(e);\n }\n function B(e, t) {\n for (var n = 0; n < t.length; n++) {\n var i = t[n];\n i.enumerable = i.enumerable || !1, i.configurable = !0, \"value\" in i && (i.writable = !0), Object.defineProperty(e, function (e) {\n e = function (e, t) {\n if (\"object\" !== N(e) || null === e) return e;\n var n = e[Symbol.toPrimitive];\n if (void 0 === n) return (\"string\" === t ? String : Number)(e);\n n = n.call(e, t || \"default\");\n if (\"object\" !== N(n)) return n;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }(e, \"string\");\n return \"symbol\" === N(e) ? e : String(e);\n }(i.key), i);\n }\n }\n var Z = function () {\n function n(e, t) {\n if (!(this instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n e && (this.root = t, this.path = document.createElement(\"div\"), this.path.className = \"jsoneditor-treepath\", this.path.setAttribute(\"tabindex\", 0), this.contentMenuClicked = !1, e.appendChild(this.path), this.reset());\n }\n var e, t, i;\n return e = n, (t = [{\n key: \"reset\",\n value: function () {\n this.path.textContent = (0, l.Iu)(\"selectNode\");\n }\n }, {\n key: \"setPath\",\n value: function (o) {\n var r = this;\n this.path.textContent = \"\", o && o.length && o.forEach(function (n, i) {\n var e,\n t = document.createElement(\"span\");\n t.className = \"jsoneditor-treepath-element\", t.innerText = n.name, t.onclick = function (e) {\n this.selectionCallback && this.selectionCallback(e);\n }.bind(r, n), r.path.appendChild(t), n.children.length && ((e = document.createElement(\"span\")).className = \"jsoneditor-treepath-seperator\", e.textContent = \"►\", e.onclick = function () {\n r.contentMenuClicked = !0;\n var t = [];\n n.children.forEach(function (e) {\n t.push({\n text: e.name,\n className: \"jsoneditor-type-modes\" + (o[i + 1] + 1 && o[i + 1].name === e.name ? \" jsoneditor-selected\" : \"\"),\n click: function (e, t) {\n this.contextMenuCallback && this.contextMenuCallback(e, t);\n }.bind(r, n, e.name)\n });\n }), new s.x(t, {\n limitHeight: !0\n }).show(e, r.root, !0);\n }, r.path.appendChild(e)), i === o.length - 1 && (t = (e || t).getBoundingClientRect().right, r.path.offsetWidth < t && (r.path.scrollLeft = t), r.path.scrollLeft) && ((t = document.createElement(\"span\")).className = \"jsoneditor-treepath-show-all-btn\", t.title = \"show all path\", t.textContent = \"...\", t.onclick = function (e) {\n (r.contentMenuClicked = !1, k.addClassName)(r.path, \"show-all\"), r.path.style.width = r.path.parentNode.getBoundingClientRect().width - 10 + \"px\", r.path.onblur = function () {\n r.contentMenuClicked ? (r.contentMenuClicked = !1, r.path.focus()) : ((0, k.removeClassName)(r.path, \"show-all\"), r.path.onblur = void 0, r.path.style.width = \"\", r.setPath(e));\n };\n }.bind(r, o), r.path.insertBefore(t, r.path.firstChild));\n });\n }\n }, {\n key: \"onSectionSelected\",\n value: function (e) {\n \"function\" == typeof e && (this.selectionCallback = e);\n }\n }, {\n key: \"onContextMenuItemSelected\",\n value: function (e) {\n \"function\" == typeof e && (this.contextMenuCallback = e);\n }\n }]) && B(e.prototype, t), i && B(e, i), Object.defineProperty(e, \"prototype\", {\n writable: !1\n }), n;\n }(),\n e = t(8037),\n M = t.n(e),\n t = {},\n D = (t.create = function (e, t) {\n if (!e) throw new Error(\"No container element provided.\");\n function r(e) {\n var t, n;\n document.createRange ? ((t = document.createRange()).selectNodeContents(e), t.collapse(!1), (n = window.getSelection()).removeAllRanges(), n.addRange(t)) : document.selection && ((t = document.body.createTextRange()).moveToElementText(e), t.collapse(!1), t.select());\n }\n function s(e) {\n return void 0 === n && ((n = document.createElement(\"span\")).style.visibility = \"hidden\", n.style.position = \"fixed\", n.style.outline = \"0\", n.style.margin = \"0\", n.style.padding = \"0\", n.style.border = \"0\", n.style.left = \"0\", n.style.whiteSpace = \"pre\", n.style.fontSize = o, n.style.fontFamily = u, n.style.fontWeight = \"normal\", document.body.appendChild(n)), n.textContent = e, n.getBoundingClientRect().right;\n }\n function a() {\n this.style.backgroundColor = \"#ddd\";\n }\n function l() {\n this.style.backgroundColor = \"\";\n }\n function c() {\n y.hide(), y.onmouseselection(this.__hint, y.rs);\n }\n var h, n, d, o, u, g, p, m, f, C, i, y, v, I, b, A;\n this.container = e, this.dom = {}, this.highlighter = new S(), this.selection = void 0, this.multiselection = {\n nodes: []\n }, this.validateSchema = null, this.validationSequence = 0, this.errorNodes = [], this.lastSchemaErrors = void 0, this.node = null, this.focusTarget = null, this._setOptions(t), t.autocomplete && (this.autocomplete = ((h = (h = t.autocomplete) || {}).filter = h.filter || \"start\", h.trigger = h.trigger || \"keydown\", h.confirmKeys = h.confirmKeys || [39, 35, 9], h.caseSensitive = h.caseSensitive || !1, u = o = \"\", (g = document.createElement(\"div\")).style.position = \"relative\", g.style.outline = \"0\", g.style.border = \"0\", g.style.margin = \"0\", g.style.padding = \"0\", (p = document.createElement(\"div\")).className = \"autocomplete dropdown\", p.style.position = \"absolute\", p.style.visibility = \"hidden\", m = p, f = [], i = -1, I = y = {\n rs: v = {\n onArrowDown: function () {},\n onArrowUp: function () {},\n onEnter: function () {},\n onTab: function () {},\n startFrom: C = 0,\n options: [],\n element: null,\n elementHint: null,\n elementStyle: null,\n wrapper: g,\n show: function (e, t, n) {\n var i = this;\n this.startFrom = t, this.wrapper.remove(), this.elementHint && (this.elementHint.remove(), this.elementHint = null), \"\" === o && (o = window.getComputedStyle(e).getPropertyValue(\"font-size\")), \"\" === u && (u = window.getComputedStyle(e).getPropertyValue(\"font-family\")), p.style.marginLeft = \"0\", p.style.marginTop = e.getBoundingClientRect().height + \"px\", this.options = n.map(String), this.element !== e && (this.element = e, this.elementStyle = {\n zIndex: this.element.style.zIndex,\n position: this.element.style.position,\n backgroundColor: this.element.style.backgroundColor,\n borderColor: this.element.style.borderColor\n }), this.element.style.zIndex = 3, this.element.style.position = \"relative\", this.element.style.backgroundColor = \"transparent\", this.element.style.borderColor = \"transparent\", this.elementHint = e.cloneNode(), this.elementHint.className = \"autocomplete hint\", this.elementHint.style.zIndex = 2, this.elementHint.style.position = \"absolute\", this.elementHint.onfocus = function () {\n i.element.focus();\n }, this.element.addEventListener && (this.element.removeEventListener(\"keydown\", b), this.element.addEventListener(\"keydown\", b, !1), this.element.removeEventListener(\"blur\", A), this.element.addEventListener(\"blur\", A, !1)), g.appendChild(this.elementHint), g.appendChild(p), e.parentElement.appendChild(g), this.repaint(e);\n },\n setText: function (e) {\n this.element.innerText = e;\n },\n getText: function () {\n return this.element.innerText;\n },\n hideDropDown: function () {\n this.wrapper.remove(), this.elementHint && (this.elementHint.remove(), this.elementHint = null, I.hide(), this.element.style.zIndex = this.elementStyle.zIndex, this.element.style.position = this.elementStyle.position, this.element.style.backgroundColor = this.elementStyle.backgroundColor, this.element.style.borderColor = this.elementStyle.borderColor);\n },\n repaint: function (e) {\n var e = (e = e.innerText).replace(\"\\n\", \"\"),\n t = this.options.length,\n n = e.substring(this.startFrom);\n d = e.substring(0, this.startFrom);\n for (var i = 0; i < t; i++) {\n var o = this.options[i];\n if (!h.caseSensitive && 0 === o.toLowerCase().indexOf(n.toLowerCase()) || h.caseSensitive && 0 === o.indexOf(n)) {\n this.elementHint.innerText = d + n + o.substring(n.length), this.elementHint.realInnerText = d + o;\n break;\n }\n }\n p.style.left = s(d) + \"px\", I.refresh(n, this.options), this.elementHint.style.width = s(this.elementHint.innerText) + 10 + \"px\", \"hidden\" !== p.style.visibility && (this.elementHint.style.width = s(this.elementHint.innerText) + p.clientWidth + \"px\");\n }\n },\n hide: function () {\n m.style.visibility = \"hidden\";\n },\n refresh: function (i, e) {\n m.style.visibility = \"hidden\", C = 0, m.textContent = \"\";\n var t = window.innerHeight || document.documentElement.clientHeight,\n n = m.parentNode.getBoundingClientRect(),\n o = n.top - 6,\n t = t - n.bottom - 6,\n r = (f = [], \"function\" == typeof h.filter ? h.filter : w[h.filter]),\n n = r ? e.filter(function (e) {\n return r(h.caseSensitive ? i : i.toLowerCase(), h.caseSensitive ? e : e.toLowerCase(), h);\n }) : [];\n 0 === (f = n.map(function (e) {\n var t = document.createElement(\"div\"),\n n = (t.className = \"item\", t.onmouseover = a, t.onmouseout = l, t.onmousedown = c, t.__hint = e, t.textContent = \"\", t.appendChild(document.createTextNode(e.substring(0, i.length))), document.createElement(\"b\"));\n return n.appendChild(document.createTextNode(e.substring(i.length))), t.appendChild(n), m.appendChild(t), t;\n })).length || 1 === f.length && (i.toLowerCase() === f[0].__hint.toLowerCase() && !h.caseSensitive || i === f[0].__hint && h.caseSensitive) || f.length < 2 || (y.highlight(0), 3 * t < o ? (m.style.maxHeight = o + \"px\", m.style.top = \"\", m.style.bottom = \"100%\") : (m.style.top = \"100%\", m.style.bottom = \"\", m.style.maxHeight = t + \"px\"), m.style.visibility = \"visible\");\n },\n highlight: function (e) {\n -1 !== i && f[i] && (f[i].className = \"item\"), f[e].className = \"item hover\", i = e;\n },\n move: function (e) {\n return \"hidden\" === m.style.visibility ? \"\" : (C + e !== -1 && C + e !== f.length && (C += e, y.highlight(C)), f[C].__hint);\n },\n onmouseselection: function () {}\n }, b = function (e) {\n var t = (e = e || window.event).keyCode;\n if (null != this.elementHint && 33 !== t && 34 !== t) if (27 === t) v.hideDropDown(), v.element.focus(), e.preventDefault(), e.stopPropagation();else {\n var n,\n i = (i = this.element.innerText).replace(\"\\n\", \"\");\n if (0 <= h.confirmKeys.indexOf(t)) 9 === t && 0 === this.elementHint.innerText.length && v.onTab(), 0 < this.elementHint.innerText.length && this.element.innerText !== this.elementHint.realInnerText && (this.element.innerText = this.elementHint.realInnerText, v.hideDropDown(), r(this.element), 9 === t) && (v.element.focus(), e.preventDefault(), e.stopPropagation());else if (13 === t) {\n if (0 === this.elementHint.innerText.length) v.onEnter();else {\n var o = \"hidden\" === p.style.visibility;\n if (I.hide(), o) return v.hideDropDown(), v.element.focus(), void v.onEnter();\n this.element.innerText = this.elementHint.realInnerText, v.hideDropDown(), r(this.element), e.preventDefault(), e.stopPropagation();\n }\n } else 40 === t ? (o = i.substring(this.startFrom), \"\" === (n = I.move(1)) && v.onArrowDown(), this.elementHint.innerText = d + o + n.substring(o.length), this.elementHint.realInnerText = d + n, e.preventDefault(), e.stopPropagation()) : 38 === t && (o = i.substring(this.startFrom), \"\" === (n = I.move(-1)) && v.onArrowUp(), this.elementHint.innerText = d + o + n.substring(o.length), this.elementHint.realInnerText = d + n, e.preventDefault(), e.stopPropagation());\n }\n }.bind(v), A = function (e) {\n v.hideDropDown();\n }, I.onmouseselection = function (e, t) {\n t.element.innerText = t.elementHint.innerText = d + e, t.hideDropDown(), window.setTimeout(function () {\n t.element.focus(), r(t.element);\n }, 1);\n }, v)), this.options.history && \"view\" !== this.options.mode && (this.history = new V(this)), this._createFrame(), this._createTable();\n }, t.destroy = function () {\n this.frame && this.container && this.frame.parentNode === this.container && (this.container.removeChild(this.frame), this.frame = null), this.container = null, this.dom = null, this.clear(), this.node = null, this.focusTarget = null, this.selection = null, this.multiselection = null, this.errorNodes = null, this.validateSchema = null, this._debouncedValidate = null, this.history && (this.history.destroy(), this.history = null), this.searchBox && (this.searchBox.destroy(), this.searchBox = null), this.modeSwitcher && (this.modeSwitcher.destroy(), this.modeSwitcher = null), this.frameFocusTracker.destroy();\n }, t._setOptions = function (t) {\n var n = this;\n this.options = {\n search: !0,\n history: !0,\n mode: \"tree\",\n name: void 0,\n schema: null,\n schemaRefs: null,\n autocomplete: null,\n navigationBar: !0,\n mainMenuBar: !0,\n limitDragging: !1,\n onSelectionChange: null,\n colorPicker: !0,\n onColorPicker: function (e, t, n) {\n var i;\n M() ? (i = e.getBoundingClientRect().top, i = (0, k.getWindow)(e).innerHeight - i < 300 && 300 < i, new (M())({\n parent: e,\n color: t,\n popup: i ? \"top\" : \"bottom\",\n onDone: function (e) {\n e = 1 === e.rgba[3] ? e.hex.substr(0, 7) : e.hex;\n n(e);\n }\n }).show()) : console.warn(\"Cannot open color picker: the `vanilla-picker` library is not included in the bundle. Either use the full bundle or implement your own color picker using `onColorPicker`.\");\n },\n timestampTag: !0,\n timestampFormat: null,\n createQuery: i.r,\n executeQuery: i.J,\n onEvent: null,\n enableSort: !0,\n enableTransform: !0\n }, t && (Object.keys(t).forEach(function (e) {\n n.options[e] = t[e];\n }), null == t.limitDragging) && null != t.schema && (this.options.limitDragging = !0), this.setSchema(this.options.schema, this.options.schemaRefs), this._debouncedValidate = (0, k.debounce)(this._validateAndCatch.bind(this), this.DEBOUNCE_INTERVAL), t.onSelectionChange && this.onSelectionChange(t.onSelectionChange), (0, l.cC)(this.options.languages), (0, l.m0)(this.options.language);\n }, t.set = function (e) {\n e instanceof Function || void 0 === e ? this.clear() : (this.content.removeChild(this.table), e = {\n field: this.options.name,\n value: e\n }, e = new T(this, e), this._setRoot(e), this._validateAndCatch(), this.node.expand(!1), this.content.appendChild(this.table)), this.history && this.history.clear(), this.searchBox && this.searchBox.clear();\n }, t.update = function (e) {\n var t, n;\n this.node.deepEqual(e) || (t = this.getSelection(), this.onChangeDisabled = !0, this.node.update(e), this.onChangeDisabled = !1, this._validateAndCatch(), this.searchBox && !this.searchBox.isEmpty() && this.searchBox.forceSearch(), t && t.start && t.end && (e = this.node.findNodeByPath(t.start.path), n = this.node.findNodeByPath(t.end.path), e) && n ? this.setSelection(t.start, t.end) : this.setSelection({}, {}));\n }, t.get = function () {\n if (this.node) return this.node.getValue();\n }, t.getText = function () {\n return JSON.stringify(this.get());\n }, t.setText = function (t) {\n try {\n this.set((0, k.parse)(t));\n } catch (e) {\n t = (0, k.tryJsonRepair)(t);\n this.set((0, k.parse)(t));\n }\n }, t.updateText = function (t) {\n try {\n this.update((0, k.parse)(t));\n } catch (e) {\n t = (0, k.tryJsonRepair)(t);\n this.update((0, k.parse)(t));\n }\n }, t.setName = function (e) {\n this.options.name = e, this.node && this.node.updateField(this.options.name);\n }, t.getName = function () {\n return this.options.name;\n }, t.focus = function () {\n var e = this.scrollableContent.querySelector(\"[contenteditable=true]\");\n e ? e.focus() : this.node.dom.expand ? this.node.dom.expand.focus() : this.node.dom.menu ? this.node.dom.menu.focus() : (e = this.frame.querySelector(\"button\")) && e.focus();\n }, t.clear = function () {\n this.node && (this.node.hide(), delete this.node), this.treePath && this.treePath.reset();\n }, t._setRoot = function (e) {\n this.clear(), (this.node = e).setParent(null), e.setField(this.getName(), !1), delete e.index, this.tbody.appendChild(e.getDom());\n }, t.search = function (e) {\n var t;\n return this.node ? (this.content.removeChild(this.table), t = this.node.search(e), this.content.appendChild(this.table)) : t = [], t;\n }, t.expandAll = function () {\n this.node && (this.content.removeChild(this.table), this.node.expand(), this.content.appendChild(this.table));\n }, t.collapseAll = function () {\n this.node && (this.content.removeChild(this.table), this.node.collapse(), this.content.appendChild(this.table));\n }, t.expand = function (e) {\n var t;\n e && (t = this.node ? this.node.findNodeByPath(e.path) : null) && (e.isExpand ? t.expand(e.recursive) : t.collapse(e.recursive));\n }, t._onAction = function (e, t) {\n this.history && this.history.add(e, t), this._onChange();\n }, t._onChange = function () {\n if (!this.onChangeDisabled) {\n var e;\n if (this.selection = this.getDomSelection(), this._debouncedValidate(), this.treePath && ((e = this.node && this.selection ? this.node.findNodeByInternalPath(this.selection.path) : this.multiselection ? this.multiselection.nodes[0] : void 0) ? this._updateTreePath(e.getNodePath()) : this.treePath.reset()), this.options.onChange) try {\n this.options.onChange();\n } catch (e) {\n console.error(\"Error in onChange callback: \", e);\n }\n if (this.options.onChangeJSON) try {\n this.options.onChangeJSON(this.get());\n } catch (e) {\n console.error(\"Error in onChangeJSON callback: \", e);\n }\n if (this.options.onChangeText) try {\n this.options.onChangeText(this.getText());\n } catch (e) {\n console.error(\"Error in onChangeText callback: \", e);\n }\n if (this.options.onClassName && this.node.recursivelyUpdateCssClassesOnNodes(), this.options.onNodeName && this.node.childs) try {\n this.node.recursivelyUpdateNodeName();\n } catch (e) {\n console.error(\"Error in onNodeName callback: \", e);\n }\n }\n }, t.validate = function () {\n var t = this,\n n = this.node;\n if (n) {\n var e = n.getValue(),\n i = [];\n this.validateSchema && !this.validateSchema(e) && (i = this.validateSchema.errors.map(function (e) {\n return (0, k.improveSchemaError)(e);\n }).map(function (e) {\n return {\n node: n.findNode(e.dataPath),\n error: e,\n type: \"validation\"\n };\n }).filter(function (e) {\n return null != e.node;\n }));\n try {\n this.validationSequence++;\n var o = this,\n r = this.validationSequence;\n return this._validateCustom(e).then(function (e) {\n return r === o.validationSequence && (e = [].concat(i, e || []), o._renderValidationErrors(e), \"function\" == typeof t.options.onValidationError && (0, k.isValidationErrorChanged)(e, t.lastSchemaErrors) && t.options.onValidationError.call(t, e), t.lastSchemaErrors = e), t.lastSchemaErrors;\n });\n } catch (e) {\n return Promise.reject(e);\n }\n }\n }, t._validateAndCatch = function () {\n this.validate().catch(function (e) {\n console.error(\"Error running validation:\", e);\n });\n }, t._renderValidationErrors = function (e) {\n this.errorNodes && this.errorNodes.forEach(function (e) {\n e.setError(null);\n });\n var t = e.reduce(function (e, t) {\n return t.node.findParents().filter(function (t) {\n return !e.some(function (e) {\n return e[0] === t;\n });\n }).map(function (e) {\n return [e, t.node];\n }).concat(e);\n }, []);\n this.errorNodes = t.map(function (e) {\n return {\n node: e[0],\n child: e[1],\n error: {\n message: \"object\" === e[0].type ? (0, l.Iu)(\"containsInvalidProperties\") : (0, l.Iu)(\"containsInvalidItems\")\n }\n };\n }).concat(e).map(function (e) {\n return e.node.setError(e.error, e.child), e.node;\n });\n }, t._validateCustom = function (e) {\n try {\n var n, t;\n if (this.options.onValidate) return n = this.node, t = this.options.onValidate(e), ((0, k.isPromise)(t) ? t : Promise.resolve(t)).then(function (e) {\n return Array.isArray(e) ? e.filter(function (e) {\n var t = (0, k.isValidValidationError)(e);\n return t || console.warn('Ignoring a custom validation error with invalid structure. Expected structure: {path: [...], message: \"...\"}. Actual error:', e), t;\n }).map(function (e) {\n var t;\n try {\n t = e && e.path ? n.findNodeByPath(e.path) : null;\n } catch (e) {}\n return t || console.warn(\"Ignoring validation error: node not found. Path:\", e.path, \"Error:\", e), {\n node: t,\n error: e,\n type: \"customValidation\"\n };\n }).filter(function (e) {\n return e && e.node && e.error && e.error.message;\n }) : null;\n });\n } catch (e) {\n return Promise.reject(e);\n }\n return Promise.resolve(null);\n }, t.refresh = function () {\n this.node && this.node.updateDom({\n recurse: !0\n });\n }, t.startAutoScroll = function (e) {\n var t = this,\n n = this.scrollableContent,\n i = (0, k.getAbsoluteTop)(n),\n o = n.clientHeight,\n r = i + o;\n e < i + 24 && 0 < n.scrollTop ? this.autoScrollStep = (i + 24 - e) / 3 : r - 24 < e && o + n.scrollTop < n.scrollHeight ? this.autoScrollStep = (r - 24 - e) / 3 : this.autoScrollStep = void 0, this.autoScrollStep ? this.autoScrollTimer || (this.autoScrollTimer = setInterval(function () {\n t.autoScrollStep ? n.scrollTop -= t.autoScrollStep : t.stopAutoScroll();\n }, 50)) : this.stopAutoScroll();\n }, t.stopAutoScroll = function () {\n this.autoScrollTimer && (clearTimeout(this.autoScrollTimer), delete this.autoScrollTimer), this.autoScrollStep && delete this.autoScrollStep;\n }, t.setDomSelection = function (e) {\n var t, n, i;\n e && (\"scrollTop\" in e && this.scrollableContent && (this.scrollableContent.scrollTop = e.scrollTop), e.paths ? (t = this, n = e.paths.map(function (e) {\n return t.node.findNodeByInternalPath(e);\n }), this.select(n)) : (i = (n = e.path ? this.node.findNodeByInternalPath(e.path) : null) && e.domName ? n.dom[e.domName] : null, e.range && i ? (e = Object.assign({}, e.range, {\n container: i\n }), (0, k.setSelectionOffset)(e)) : n && n.focus()));\n }, t.getDomSelection = function () {\n var t = T.getNodeFromTarget(this.focusTarget),\n n = this.focusTarget,\n e = t ? Object.keys(t.dom).find(function (e) {\n return t.dom[e] === n;\n }) : null,\n i = (0, k.getSelectionOffset)();\n return (i = (i = i && \"DIV\" !== i.container.nodeName ? null : i) && i.container !== n ? null : i) && delete i.container, {\n path: t ? t.getInternalPath() : null,\n domName: e,\n range: i,\n paths: 0 < this.multiselection.length ? this.multiselection.nodes.map(function (e) {\n return e.getInternalPath();\n }) : null,\n scrollTop: this.scrollableContent ? this.scrollableContent.scrollTop : 0\n };\n }, t.scrollTo = function (e, n) {\n var i,\n t,\n o,\n r,\n s = this.scrollableContent;\n s ? ((i = this).animateTimeout && (clearTimeout(i.animateTimeout), delete i.animateTimeout), i.animateCallback && (i.animateCallback(!1), delete i.animateCallback), t = s.clientHeight, o = s.scrollHeight - t, r = Math.min(Math.max(e - t / 4, 0), o), function e() {\n var t = s.scrollTop,\n t = r - t;\n 3 < Math.abs(t) ? (s.scrollTop += t / 3, i.animateCallback = n, i.animateTimeout = setTimeout(e, 50)) : (n && n(!0), s.scrollTop = r, delete i.animateTimeout, delete i.animateCallback);\n }()) : n && n(!1);\n }, t._createFrame = function () {\n var e = this,\n t = (this.frame = document.createElement(\"div\"), this.frame.className = \"jsoneditor jsoneditor-mode-\" + this.options.mode, this.container.appendChild(this.frame), this.contentOuter = document.createElement(\"div\"), this.contentOuter.className = \"jsoneditor-outer\", this);\n function n(e) {\n t._onEvent && t._onEvent(e);\n }\n var i,\n o,\n r,\n s = {\n target: this.frame,\n onFocus: this.options.onFocus || null,\n onBlur: this.options.onBlur || null\n };\n this.frameFocusTracker = new a.R(s), this.frame.onclick = function (e) {\n var t = e.target;\n n(e), \"BUTTON\" === t.nodeName && e.preventDefault();\n }, this.frame.oninput = n, this.frame.onchange = n, this.frame.onkeydown = n, this.frame.onkeyup = n, this.frame.oncut = n, this.frame.onpaste = n, this.frame.onmousedown = n, this.frame.onmouseup = n, this.frame.onmouseover = n, this.frame.onmouseout = n, (0, k.addEventListener)(this.frame, \"focus\", n, !0), (0, k.addEventListener)(this.frame, \"blur\", n, !0), this.frame.onfocusin = n, this.frame.onfocusout = n, this.options.mainMenuBar && ((0, k.addClassName)(this.contentOuter, \"has-main-menu-bar\"), this.menu = document.createElement(\"div\"), this.menu.className = \"jsoneditor-menu\", this.frame.appendChild(this.menu), (s = document.createElement(\"button\")).type = \"button\", s.className = \"jsoneditor-expand-all\", s.title = (0, l.Iu)(\"expandAll\"), s.onclick = function () {\n t.expandAll(), \"function\" == typeof e.options.onExpand && e.options.onExpand({\n path: [],\n isExpand: !0,\n recursive: !0\n });\n }, this.menu.appendChild(s), (s = document.createElement(\"button\")).type = \"button\", s.title = (0, l.Iu)(\"collapseAll\"), s.className = \"jsoneditor-collapse-all\", s.onclick = function () {\n t.collapseAll(), \"function\" == typeof e.options.onExpand && e.options.onExpand({\n path: [],\n isExpand: !1,\n recursive: !0\n });\n }, this.menu.appendChild(s), this.options.enableSort && ((s = document.createElement(\"button\")).type = \"button\", s.className = \"jsoneditor-sort\", s.title = (0, l.Iu)(\"sortTitleShort\"), s.onclick = function () {\n t.node.showSortModal();\n }, this.menu.appendChild(s)), this.options.enableTransform && ((s = document.createElement(\"button\")).type = \"button\", s.title = (0, l.Iu)(\"transformTitleShort\"), s.className = \"jsoneditor-transform\", s.onclick = function () {\n t.node.showTransformModal();\n }, this.menu.appendChild(s)), this.history && ((i = document.createElement(\"button\")).type = \"button\", i.className = \"jsoneditor-undo jsoneditor-separator\", i.title = (0, l.Iu)(\"undo\"), i.onclick = function () {\n t._onUndo();\n }, this.menu.appendChild(i), this.dom.undo = i, (o = document.createElement(\"button\")).type = \"button\", o.className = \"jsoneditor-redo\", o.title = (0, l.Iu)(\"redo\"), o.onclick = function () {\n t._onRedo();\n }, this.menu.appendChild(o), this.dom.redo = o, this.history.onChange = function () {\n i.disabled = !t.history.canUndo(), o.disabled = !t.history.canRedo();\n }, this.history.onChange()), this.options && this.options.modes && this.options.modes.length && ((r = this).modeSwitcher = new c.x(this.menu, this.options.modes, this.options.mode, function (e) {\n try {\n r.setMode(e), r.modeSwitcher.focus();\n } catch (e) {\n r._onError(e);\n }\n })), this.options.search) && (this.searchBox = new O(this, this.menu)), this.options.navigationBar && (this.navBar = document.createElement(\"div\"), this.navBar.className = \"jsoneditor-navigation-bar nav-bar-empty\", this.frame.appendChild(this.navBar), this.treePath = new Z(this.navBar, this.getPopupAnchor()), this.treePath.onSectionSelected(this._onTreePathSectionSelected.bind(this)), this.treePath.onContextMenuItemSelected(this._onTreePathMenuItemSelected.bind(this)));\n }, t._onUndo = function () {\n this.history && (this.history.undo(), this._onChange());\n }, t._onRedo = function () {\n this.history && (this.history.redo(), this._onChange());\n }, t._onEvent = function (e) {\n if (!T.targetIsColorPicker(e.target)) {\n var t,\n n = T.getNodeFromTarget(e.target);\n if (\"keydown\" === e.type && this._onKeyDown(e), n && \"focus\" === e.type && (this.focusTarget = e.target, this.options.autocomplete) && \"focus\" === this.options.autocomplete.trigger && this._showAutoComplete(e.target), \"mousedown\" === e.type && this._startDragDistance(e), \"mousemove\" !== e.type && \"mouseup\" !== e.type && \"click\" !== e.type || this._updateDragDistance(e), n && this.options && this.options.navigationBar && n && (\"keydown\" === e.type || \"mousedown\" === e.type) && (t = this, setTimeout(function () {\n t._updateTreePath(n.getNodePath());\n })), n && n.selected) {\n if (\"click\" === e.type) {\n if (e.target === n.dom.menu) return void this.showContextMenu(e.target);\n e.hasMoved || this.deselect();\n }\n \"mousedown\" === e.type && T.onDragStart(this.multiselection.nodes, e);\n } else \"mousedown\" === e.type && (0, k.hasParentNode)(e.target, this.content) && (this.deselect(), n && e.target === n.dom.drag ? T.onDragStart(n, e) : n && (e.target === n.dom.field || e.target === n.dom.value || e.target === n.dom.select) || this._onMultiSelectStart(e));\n n && n.onEvent(e);\n }\n }, t._updateTreePath = function (e) {\n var n;\n function i(e) {\n return e.parent ? \"array\" === e.parent.type ? e.index : e.field : e.field || e.type;\n }\n e && e.length ? ((0, k.removeClassName)(this.navBar, \"nav-bar-empty\"), n = [], e.forEach(function (e) {\n var t = {\n name: i(e),\n node: e,\n children: []\n };\n e.childs && e.childs.length && e.childs.forEach(function (e) {\n t.children.push({\n name: i(e),\n node: e\n });\n }), n.push(t);\n }), this.treePath.setPath(n)) : (0, k.addClassName)(this.navBar, \"nav-bar-empty\");\n }, t._onTreePathSectionSelected = function (e) {\n e && e.node && (e.node.expandTo(), e.node.focus());\n }, t._onTreePathMenuItemSelected = function (e, t) {\n e && e.children.length && (e = e.children.find(function (e) {\n return e.name === t;\n })) && e.node && (this._updateTreePath(e.node.getNodePath()), e.node.expandTo(), e.node.focus());\n }, t._startDragDistance = function (e) {\n this.dragDistanceEvent = {\n initialTarget: e.target,\n initialPageX: e.pageX,\n initialPageY: e.pageY,\n dragDistance: 0,\n hasMoved: !1\n };\n }, t._updateDragDistance = function (e) {\n this.dragDistanceEvent || this._startDragDistance(e);\n var t = e.pageX - this.dragDistanceEvent.initialPageX,\n n = e.pageY - this.dragDistanceEvent.initialPageY;\n return this.dragDistanceEvent.dragDistance = Math.sqrt(t * t + n * n), this.dragDistanceEvent.hasMoved = this.dragDistanceEvent.hasMoved || 10 < this.dragDistanceEvent.dragDistance, e.dragDistance = this.dragDistanceEvent.dragDistance, e.hasMoved = this.dragDistanceEvent.hasMoved, e.dragDistance;\n }, t._onMultiSelectStart = function (e) {\n var t,\n n = T.getNodeFromTarget(e.target);\n \"tree\" === this.options.mode && void 0 === this.options.onEditable && (this.multiselection = {\n start: n || null,\n end: null,\n nodes: []\n }, this._startDragDistance(e), (t = this).mousemove || (this.mousemove = (0, k.addEventListener)(e.view, \"mousemove\", function (e) {\n t._onMultiSelect(e);\n })), this.mouseup || (this.mouseup = (0, k.addEventListener)(e.view, \"mouseup\", function (e) {\n t._onMultiSelectEnd(e);\n })), e.preventDefault());\n }, t._onMultiSelect = function (e) {\n var t;\n e.preventDefault(), this._updateDragDistance(e), e.hasMoved && ((e = T.getNodeFromTarget(e.target)) && (null == this.multiselection.start && (this.multiselection.start = e), this.multiselection.end = e), this.deselect(), e = this.multiselection.start, t = this.multiselection.end || this.multiselection.start, e) && t && (this.multiselection.nodes = this._findTopLevelNodes(e, t), this.multiselection.nodes && this.multiselection.nodes.length && (e = this.multiselection.nodes[0], this.multiselection.start === e || this.multiselection.start.isDescendantOf(e) ? this.multiselection.direction = \"down\" : this.multiselection.direction = \"up\"), this.select(this.multiselection.nodes));\n }, t._onMultiSelectEnd = function (e) {\n var t = this.multiselection.nodes[0];\n t && t.dom.menu && t.dom.menu.focus(), this.multiselection.start = null, this.multiselection.end = null, this.mousemove && ((0, k.removeEventListener)(e.view, \"mousemove\", this.mousemove), delete this.mousemove), this.mouseup && ((0, k.removeEventListener)(e.view, \"mouseup\", this.mouseup), delete this.mouseup);\n }, t.deselect = function (e) {\n var t = !!this.multiselection.nodes.length;\n this.multiselection.nodes.forEach(function (e) {\n e.setSelected(!1);\n }), this.multiselection.nodes = [], e && (this.multiselection.start = null, this.multiselection.end = null), t && this._selectionChangedHandler && this._selectionChangedHandler();\n }, t.select = function (e) {\n if (!Array.isArray(e)) return this.select([e]);\n var t;\n e && (this.deselect(), this.multiselection.nodes = e.slice(0), t = e[0], e.forEach(function (e) {\n e.expandPathToNode(), e.setSelected(!0, e === t);\n }), this._selectionChangedHandler) && (e = this.getSelection(), this._selectionChangedHandler(e.start, e.end));\n }, t._findTopLevelNodes = function (e, t) {\n for (var n = e.getNodePath(), i = t.getNodePath(), o = 0; o < n.length && n[o] === i[o];) o++;\n var r,\n e = n[o - 1],\n t = n[o],\n s = i[o];\n return t && s || (e.parent ? e = (s = t = e).parent : (t = e.childs[0], s = e.childs[e.childs.length - 1])), e && t && s ? (t = e.childs.indexOf(t), s = e.childs.indexOf(s), r = Math.min(t, s), t = Math.max(t, s), e.childs.slice(r, t + 1)) : [];\n }, t._showAutoComplete = function (t) {\n var n,\n i = T.getNodeFromTarget(t),\n o = \"\";\n 0 <= t.className.indexOf(\"jsoneditor-value\") && (o = \"value\"), \"\" !== (o = 0 <= t.className.indexOf(\"jsoneditor-field\") ? \"field\" : o) && (n = this, setTimeout(function () {\n var e;\n !i || !(\"focus\" === n.options.autocomplete.trigger || 0 < t.innerText.length) || null === (e = n.options.autocomplete.getOptions(t.innerText, i.getPath(), o, i.editor)) ? n.autocomplete.hideDropDown() : \"function\" == typeof e.then ? e.then(function (e) {\n null === e ? n.autocomplete.hideDropDown() : e.options ? n.autocomplete.show(t, e.startFrom, e.options) : n.autocomplete.show(t, 0, e);\n }).catch(function (e) {\n console.error(e);\n }) : e.options ? n.autocomplete.show(t, e.startFrom, e.options) : n.autocomplete.show(t, 0, e);\n }, 50));\n }, t._onKeyDown = function (e) {\n var t,\n n = e.which || e.keyCode,\n i = e.altKey,\n o = e.ctrlKey,\n r = e.metaKey,\n s = e.shiftKey,\n a = !1,\n l = this.focusTarget;\n 9 === n && (t = this, setTimeout(function () {\n t.focusTarget !== l && (0, k.selectContentEditable)(t.focusTarget);\n }, 0)), this.searchBox && (o && 70 === n ? (this.searchBox.dom.search.focus(), this.searchBox.dom.search.select(), a = !0) : (114 === n || o && 71 === n) && (s ? this.searchBox.previous(!0) : this.searchBox.next(!0), a = !0)), this.history && (o && !s && 90 === n ? (this._onUndo(), a = !0) : o && s && 90 === n && (this._onRedo(), a = !0)), !this.options.autocomplete || a || o || i || r || 1 !== e.key.length && 8 !== n && 46 !== n || (a = !1, this._showAutoComplete(e.target)), a && (e.preventDefault(), e.stopPropagation());\n }, t._createTable = function () {\n var e;\n this.options.navigationBar && (0, k.addClassName)(this.contentOuter, \"has-nav-bar\"), this.scrollableContent = document.createElement(\"div\"), this.scrollableContent.className = \"jsoneditor-tree\", this.contentOuter.appendChild(this.scrollableContent), this.content = document.createElement(\"div\"), this.content.className = \"jsoneditor-tree-inner\", this.scrollableContent.appendChild(this.content), this.table = document.createElement(\"table\"), this.table.className = \"jsoneditor-tree\", this.content.appendChild(this.table), this.colgroupContent = document.createElement(\"colgroup\"), \"tree\" === this.options.mode && ((e = document.createElement(\"col\")).width = \"24px\", this.colgroupContent.appendChild(e)), (e = document.createElement(\"col\")).width = \"24px\", this.colgroupContent.appendChild(e), e = document.createElement(\"col\"), this.colgroupContent.appendChild(e), this.table.appendChild(this.colgroupContent), this.tbody = document.createElement(\"tbody\"), this.table.appendChild(this.tbody), this.frame.appendChild(this.contentOuter);\n }, t.showContextMenu = function (e, t) {\n var n,\n i = [],\n o = this.multiselection.nodes.slice();\n i.push({\n text: (0, l.Iu)(\"duplicateText\"),\n title: (0, l.Iu)(\"duplicateTitle\"),\n className: \"jsoneditor-duplicate\",\n click: function () {\n T.onDuplicate(o);\n }\n }), i.push({\n text: (0, l.Iu)(\"remove\"),\n title: (0, l.Iu)(\"removeTitle\"),\n className: \"jsoneditor-remove\",\n click: function () {\n T.onRemove(o);\n }\n }), this.options.onCreateMenu && (n = o.map(function (e) {\n return e.getPath();\n }), i = this.options.onCreateMenu(i, {\n type: \"multiple\",\n path: n[0],\n paths: n\n })), new s.x(i, {\n close: t\n }).show(e, this.getPopupAnchor());\n }, t.getPopupAnchor = function () {\n return this.options.popupAnchor || this.frame;\n }, t.getSelection = function () {\n var e,\n t,\n n = {\n start: null,\n end: null\n };\n return this.multiselection.nodes && this.multiselection.nodes.length && this.multiselection.nodes.length && (e = this.multiselection.nodes[0], t = this.multiselection.nodes[this.multiselection.nodes.length - 1], \"down\" === this.multiselection.direction ? (n.start = e.serialize(), n.end = t.serialize()) : (n.start = t.serialize(), n.end = e.serialize())), n;\n }, t.onSelectionChange = function (e) {\n \"function\" == typeof e && (this._selectionChangedHandler = (0, k.debounce)(e, this.DEBOUNCE_INTERVAL));\n }, t.setSelection = function (e, t) {\n e && e.dom && e.range && (console.warn(\"setSelection/getSelection usage for text selection is deprecated and should not be used, see documentation for supported selection options\"), this.setDomSelection(e));\n e = this._getNodeInstancesByRange(e, t);\n e.forEach(function (e) {\n e.expandTo();\n }), this.select(e);\n }, t._getNodeInstancesByRange = function (e, t) {\n e && e.path && (n = this.node.findNodeByPath(e.path), t) && t.path && (i = this.node.findNodeByPath(t.path));\n var n,\n i,\n o = [];\n if (n instanceof T) if (i instanceof T && i !== n) {\n if (n.parent === i.parent) {\n t = n.getIndex() < i.getIndex() ? (e = n, i) : (e = i, n);\n var r = e;\n for (o.push(r); r = r.nextSibling(), o.push(r), r && r !== t;);\n } else o = this._findTopLevelNodes(n, i);\n } else o.push(n);\n return o;\n }, t.getNodesByRange = function (e, t) {\n var e = this._getNodeInstancesByRange(e, t),\n n = [];\n return e.forEach(function (e) {\n n.push(e.serialize());\n }), n;\n }, [{\n mode: \"tree\",\n mixin: t,\n data: \"json\"\n }, {\n mode: \"view\",\n mixin: t,\n data: \"json\"\n }, {\n mode: \"form\",\n mixin: t,\n data: \"json\"\n }]);\n },\n 2744: function (e, t, n) {\n t.tryRequireAjv = function () {\n try {\n return n(8903);\n } catch (e) {}\n };\n },\n 9125: function (e, t, n) {\n t.O = function () {\n try {\n n(4864);\n } catch (e) {\n console.error(e);\n }\n };\n },\n 9791: function (W, e, t) {\n \"use strict\";\n\n t.r(e), t.d(e, {\n addClassName: function () {\n return G;\n },\n addEventListener: function () {\n return X;\n },\n asyncExec: function () {\n return Ie;\n },\n clear: function () {\n return C;\n },\n compileJSONPointer: function () {\n return $;\n },\n contains: function () {\n return Ce;\n },\n debounce: function () {\n return ne;\n },\n escapeUnicodeChars: function () {\n return p;\n },\n extend: function () {\n return f;\n },\n findUniqueName: function () {\n return ce;\n },\n formatSize: function () {\n return me;\n },\n get: function () {\n return N;\n },\n getAbsoluteLeft: function () {\n return H;\n },\n getAbsoluteTop: function () {\n return P;\n },\n getChildPaths: function () {\n return he;\n },\n getColorCSS: function () {\n return L;\n },\n getIndexForPosition: function () {\n return re;\n },\n getInnerText: function () {\n return k;\n },\n getInputSelection: function () {\n return oe;\n },\n getInternetExplorerVersion: function () {\n return z;\n },\n getPositionForPath: function () {\n return se;\n },\n getSelection: function () {\n return S;\n },\n getSelectionOffset: function () {\n return D;\n },\n getType: function () {\n return y;\n },\n getWindow: function () {\n return A;\n },\n hasParentNode: function () {\n return j;\n },\n improveSchemaError: function () {\n return Q;\n },\n insideRect: function () {\n return te;\n },\n isArray: function () {\n return b;\n },\n isChildOf: function () {\n return J;\n },\n isFirefox: function () {\n return R;\n },\n isObject: function () {\n return B;\n },\n isPromise: function () {\n return q;\n },\n isTimestamp: function () {\n return pe;\n },\n isUrl: function () {\n return I;\n },\n isValidColor: function () {\n return ae;\n },\n isValidValidationError: function () {\n return ee;\n },\n isValidationErrorChanged: function () {\n return ye;\n },\n limitCharacters: function () {\n return fe;\n },\n makeFieldTooltip: function () {\n return le;\n },\n parse: function () {\n return u;\n },\n parsePath: function () {\n return _;\n },\n parseString: function () {\n return ge;\n },\n removeAllClassNames: function () {\n return F;\n },\n removeClassName: function () {\n return V;\n },\n removeEventListener: function () {\n return Y;\n },\n removeReturnsAndSurroundingWhitespace: function () {\n return E;\n },\n selectContentEditable: function () {\n return Z;\n },\n setEndOfContentEditable: function () {\n return O;\n },\n setSelection: function () {\n return x;\n },\n setSelectionOffset: function () {\n return K;\n },\n sort: function () {\n return de;\n },\n sortObjectKeys: function () {\n return ue;\n },\n stringifyPath: function () {\n return U;\n },\n stripFormatting: function () {\n return w;\n },\n textDiff: function () {\n return ie;\n },\n tryJsonRepair: function () {\n return g;\n },\n uniqueMergeArrays: function () {\n return ve;\n },\n validate: function () {\n return m;\n }\n });\n t(4987);\n var e = t(233),\n o = t.n(e),\n n = t(1262),\n i = t(6589),\n r = t(7026),\n s = t(7907);\n function a(e) {\n return function (e) {\n if (Array.isArray(e)) return l(e);\n }(e) || function (e) {\n if (\"undefined\" != typeof Symbol && null != e[Symbol.iterator] || null != e[\"@@iterator\"]) return Array.from(e);\n }(e) || function (e, t) {\n var n;\n if (e) return \"string\" == typeof e ? l(e, t) : \"Map\" === (n = \"Object\" === (n = Object.prototype.toString.call(e).slice(8, -1)) && e.constructor ? e.constructor.name : n) || \"Set\" === n ? Array.from(e) : \"Arguments\" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? l(e, t) : void 0;\n }(e) || function () {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }();\n }\n function l(e, t) {\n (null == t || t > e.length) && (t = e.length);\n for (var n = 0, i = new Array(t); n < t; n++) i[n] = e[n];\n return i;\n }\n function c(e) {\n return (c = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (e) {\n return typeof e;\n } : function (e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n })(e);\n }\n var h = 1e4,\n d = 9466848e5;\n function u(t) {\n try {\n return JSON.parse(t);\n } catch (e) {\n throw m(t), e;\n }\n }\n function g(t) {\n try {\n return (0, n.K)(t);\n } catch (e) {\n return t;\n }\n }\n function p(e) {\n return e.replace(/[\\u007F-\\uFFFF]/g, function (e) {\n return \"\\\\u\" + (\"0000\" + e.charCodeAt(0).toString(16)).slice(-4);\n });\n }\n function m(e) {\n (void 0 !== i ? i : JSON).parse(e);\n }\n function f(e, t) {\n for (var n in t) M(t, n) && (e[n] = t[n]);\n return e;\n }\n function C(e) {\n for (var t in e) M(e, t) && delete e[t];\n return e;\n }\n function y(e) {\n return null === e ? \"null\" : void 0 === e ? \"undefined\" : e instanceof Number || \"number\" == typeof e ? \"number\" : e instanceof String || \"string\" == typeof e ? \"string\" : e instanceof Boolean || \"boolean\" == typeof e ? \"boolean\" : e instanceof RegExp ? \"regexp\" : b(e) ? \"array\" : \"object\";\n }\n var v = /^https?:\\/\\/\\S+$/;\n function I(e) {\n return (\"string\" == typeof e || e instanceof String) && v.test(e);\n }\n function b(e) {\n return \"[object Array]\" === Object.prototype.toString.call(e);\n }\n function A(e) {\n return e.ownerDocument.defaultView;\n }\n function H(e) {\n return e.getBoundingClientRect().left + window.pageXOffset || document.scrollLeft || 0;\n }\n function P(e) {\n return e.getBoundingClientRect().top + window.pageYOffset || document.scrollTop || 0;\n }\n function G(e, t) {\n var n = e.className.split(\" \");\n -1 === n.indexOf(t) && (n.push(t), e.className = n.join(\" \"));\n }\n function F(e) {\n e.className = \"\";\n }\n function V(e, t) {\n var n = e.className.split(\" \"),\n t = n.indexOf(t);\n -1 !== t && (n.splice(t, 1), e.className = n.join(\" \"));\n }\n function w(e) {\n for (var t = e.childNodes, n = 0, i = t.length; n < i; n++) {\n var o = t[n],\n r = (o.style && o.removeAttribute(\"style\"), o.attributes);\n if (r) for (var s = r.length - 1; 0 <= s; s--) {\n var a = r[s];\n !0 === a.specified && o.removeAttribute(a.name);\n }\n w(o);\n }\n }\n function O(e) {\n var t;\n document.createRange && ((t = document.createRange()).selectNodeContents(e), t.collapse(!1), (e = window.getSelection()).removeAllRanges(), e.addRange(t));\n }\n function Z(e) {\n var t;\n e && \"DIV\" === e.nodeName && window.getSelection && document.createRange && ((t = document.createRange()).selectNodeContents(e), (e = window.getSelection()).removeAllRanges(), e.addRange(t));\n }\n function S() {\n if (window.getSelection) {\n var e = window.getSelection();\n if (e.getRangeAt && e.rangeCount) return e.getRangeAt(0);\n }\n return null;\n }\n function x(e) {\n var t;\n e && window.getSelection && ((t = window.getSelection()).removeAllRanges(), t.addRange(e));\n }\n function D() {\n var e = S();\n return e && \"startOffset\" in e && \"endOffset\" in e && e.startContainer && e.startContainer === e.endContainer ? {\n startOffset: e.startOffset,\n endOffset: e.endOffset,\n container: e.startContainer.parentNode\n } : null;\n }\n function K(e) {\n var t;\n document.createRange && window.getSelection && window.getSelection() && (t = document.createRange(), e.container.firstChild || e.container.appendChild(document.createTextNode(\"\")), t.setStart(e.container.firstChild, e.startOffset), t.setEnd(e.container.firstChild, e.endOffset), x(t));\n }\n function k(e, t) {\n var n;\n if (void 0 === t && (t = {\n _text: \"\",\n flush: function () {\n var e = this._text;\n return this._text = \"\", e;\n },\n set: function (e) {\n this._text = e;\n }\n }), e.nodeValue) return \"\" !== (n = E(e.nodeValue)) ? t.flush() + n : \"\";\n if (e.hasChildNodes()) {\n for (var i = e.childNodes, o = \"\", r = 0, s = i.length; r < s; r++) {\n var a,\n l = i[r];\n \"DIV\" === l.nodeName || \"P\" === l.nodeName ? ((a = (a = i[r - 1]) ? a.nodeName : void 0) && \"DIV\" !== a && \"P\" !== a && \"BR\" !== a && (\"\" !== o && (o += \"\\n\"), t.flush()), o += k(l, t), t.set(\"\\n\")) : \"BR\" === l.nodeName ? (o += t.flush(), t.set(\"\\n\")) : o += k(l, t);\n }\n return o;\n }\n return \"\";\n }\n function E(e) {\n return e.replace(/(\\b|^)\\s*(\\b|$)/g, function (e) {\n return /\\n/.exec(e) ? \"\" : e;\n });\n }\n function j(e, t) {\n for (var n = e ? e.parentNode : void 0; n;) {\n if (n === t) return !0;\n n = n.parentNode;\n }\n return !1;\n }\n function z() {\n var e;\n return -1 === T && (e = -1, \"undefined\" != typeof navigator && \"Microsoft Internet Explorer\" === navigator.appName && null != /MSIE ([0-9]+[.0-9]+)/.exec(navigator.userAgent) && (e = parseFloat(RegExp.$1)), T = e), T;\n }\n var T = -1;\n function R() {\n return \"undefined\" != typeof navigator && -1 !== navigator.userAgent.indexOf(\"Firefox\");\n }\n function X(e, t, n, i) {\n return e.addEventListener ? (void 0 === i && (i = !1), \"mousewheel\" === t && R() && (t = \"DOMMouseScroll\"), e.addEventListener(t, n, i), n) : e.attachEvent ? (e.attachEvent(\"on\" + t, i = function () {\n return n.call(e, window.event);\n }), i) : void 0;\n }\n function Y(e, t, n, i) {\n e.removeEventListener ? (void 0 === i && (i = !1), \"mousewheel\" === t && R() && (t = \"DOMMouseScroll\"), e.removeEventListener(t, n, i)) : e.detachEvent && e.detachEvent(\"on\" + t, n);\n }\n function J(e, t) {\n for (var n = e.parentNode; n;) {\n if (n === t) return !0;\n n = n.parentNode;\n }\n return !1;\n }\n function _(n) {\n var e = [],\n i = 0;\n function t(e) {\n for (var t = \"\"; void 0 !== n[i] && n[i] !== e;) t += n[i], i++;\n if (n[i] !== e) throw new Error(\"Invalid JSON path: unexpected end, character \" + e + \" expected\");\n return t;\n }\n for (; void 0 !== n[i];) if (\".\" === n[i]) i++, e.push(function () {\n for (var e = \"\"; void 0 !== n[i] && /[\\w$]/.test(n[i]);) e += n[i], i++;\n if (\"\" === e) throw new Error(\"Invalid JSON path: property name expected at index \" + i);\n return e;\n }());else {\n if (\"[\" !== n[i]) throw new Error('Invalid JSON path: unexpected character \"' + n[i] + '\" at index ' + i);\n if (\"'\" === n[++i] || '\"' === n[i]) {\n var o = n[i];\n if (i++, e.push(t(o)), n[i] !== o) throw new Error(\"Invalid JSON path: closing quote ' expected at index \" + i);\n i++;\n } else {\n o = t(\"]\").trim();\n if (0 === o.length) throw new Error(\"Invalid JSON path: array value expected at index \" + i);\n o = \"*\" === o ? o : JSON.parse(o), e.push(o);\n }\n if (\"]\" !== n[i]) throw new Error(\"Invalid JSON path: closing bracket ] expected at index \" + i);\n i++;\n }\n return e;\n }\n function U(e) {\n return e.map(function (e) {\n return \"number\" == typeof e ? \"[\" + e + \"]\" : \"string\" == typeof e && e.match(/^[A-Za-z0-9_$]+$/) ? \".\" + e : '[\"' + e + '\"]';\n }).join(\"\");\n }\n function Q(e) {\n var t, n;\n return \"enum\" === e.keyword && Array.isArray(e.schema) && (n = e.schema) && (5 < (n = n.map(function (e) {\n return JSON.stringify(e);\n })).length && (t = [\"(\" + (n.length - 5) + \" more...)\"], (n = n.slice(0, 5)).push(t)), e.message = \"should be equal to one of: \" + n.join(\", \")), \"additionalProperties\" === e.keyword && (e.message = \"should NOT have additional property: \" + e.params.additionalProperty), e;\n }\n function q(e) {\n return e && \"function\" == typeof e.then && \"function\" == typeof e.catch;\n }\n function ee(e) {\n return \"object\" === c(e) && Array.isArray(e.path) && \"string\" == typeof e.message;\n }\n function te(e, t, n) {\n n = void 0 !== n ? n : 0;\n return t.left - n >= e.left && t.right + n <= e.right && t.top - n >= e.top && t.bottom + n <= e.bottom;\n }\n function ne(i, o, r) {\n var s;\n return function () {\n var e = this,\n t = arguments,\n n = r && !s;\n clearTimeout(s), s = setTimeout(function () {\n s = null, r || i.apply(e, t);\n }, o), n && i.apply(e, t);\n };\n }\n function ie(e, t) {\n for (var n = t.length, i = 0, o = e.length, r = t.length; t.charAt(i) === e.charAt(i) && i < n;) i++;\n for (; t.charAt(r - 1) === e.charAt(o - 1) && i < r && 0 < o;) r--, o--;\n return {\n start: i,\n end: r\n };\n }\n function oe(t) {\n var e,\n n,\n i,\n o,\n r = 0,\n s = 0;\n return \"number\" == typeof t.selectionStart && \"number\" == typeof t.selectionEnd ? (r = t.selectionStart, s = t.selectionEnd) : (o = document.selection.createRange()) && o.parentElement() === t && (i = t.value.length, e = t.value.replace(/\\r\\n/g, \"\\n\"), (n = t.createTextRange()).moveToBookmark(o.getBookmark()), (o = t.createTextRange()).collapse(!1), -1 < n.compareEndPoints(\"StartToEnd\", o) ? r = s = i : (r = -n.moveStart(\"character\", -i), r += e.slice(0, r).split(\"\\n\").length - 1, -1 < n.compareEndPoints(\"EndToEnd\", o) ? s = i : (s = -n.moveEnd(\"character\", -i), s += e.slice(0, s).split(\"\\n\").length - 1))), {\n startIndex: r,\n endIndex: s,\n start: a(r),\n end: a(s)\n };\n function a(e) {\n e = t.value.substring(0, e);\n return {\n row: (e.match(/\\n/g) || []).length + 1,\n column: e.length - e.lastIndexOf(\"\\n\")\n };\n }\n }\n function re(e, t, n) {\n var e = e.value || \"\";\n return 0 < t && 0 < n ? (e = e.split(\"\\n\", t), t = Math.min(e.length, t), n = Math.min(e[t - 1].length, n - 1), n = 1 === t ? n : n + 1, e.slice(0, t - 1).join(\"\\n\").length + n) : -1;\n }\n function se(e, t) {\n var n,\n i = [];\n if (t && t.length) {\n try {\n n = r.parse(e);\n } catch (e) {\n return i;\n }\n t.forEach(function (e) {\n var t = $(_(e)),\n t = n.pointers[t];\n t && i.push({\n path: e,\n line: t.key ? t.key.line : t.value ? t.value.line : 0,\n column: t.key ? t.key.column : t.value ? t.value.column : 0\n });\n });\n }\n return i;\n }\n function $(e) {\n return e.map(function (e) {\n return \"/\" + String(e).replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n }).join(\"\");\n }\n function L(e) {\n var t = document.createElement(\"div\");\n return t.style.color = e, t.style.color.split(/\\s+/).join(\"\").toLowerCase() || null;\n }\n function ae(e) {\n return !!L(e);\n }\n function le(n, e) {\n var i;\n return n ? (i = \"\", n.title && (i += n.title), n.description && (0 < i.length && (i += \"\\n\"), i += n.description), n.default && (0 < i.length && (i += \"\\n\\n\"), i = (i += (0, s.Iu)(\"default\", void 0, e) + \"\\n\") + JSON.stringify(n.default, null, 2)), Array.isArray(n.examples) && 0 < n.examples.length && (0 < i.length && (i += \"\\n\\n\"), i += (0, s.Iu)(\"examples\", void 0, e) + \"\\n\", n.examples.forEach(function (e, t) {\n i += JSON.stringify(e, null, 2), t !== n.examples.length - 1 && (i += \"\\n\");\n })), i) : \"\";\n }\n function N(e, t) {\n for (var n = e, i = 0; i < t.length && null != n; i++) n = n[t[i]];\n return n;\n }\n function ce(e, t) {\n for (var n = e.replace(/ \\(copy( \\d+)?\\)$/, \"\"), i = n, o = 1; -1 !== t.indexOf(i);) {\n i = n + \" (\" + (\"copy\" + (1 < o ? \" \" + o : \"\")) + \")\";\n o++;\n }\n return i;\n }\n function he(e, t) {\n var n = {};\n if (Array.isArray(e)) for (var i = Math.min(e.length, h), o = 0; o < i; o++) !function t(n, i, o, r) {\n (Array.isArray(n) || B(n)) && !r || (i[o || \"\"] = !0), B(n) && Object.keys(n).forEach(function (e) {\n t(n[e], i, o + \".\" + e, r);\n });\n }(e[o], n, \"\", t);else n[\"\"] = !0;\n return Object.keys(n).sort();\n }\n function de(e, t, n) {\n var i = t && \".\" !== t ? _(t) : [],\n o = \"desc\" === n ? -1 : 1,\n t = e.slice();\n return t.sort(function (e, t) {\n e = N(e, i), t = N(t, i);\n return o * (t < e ? 1 : e < t ? -1 : 0);\n }), t;\n }\n function ue(t, e) {\n var n = \"desc\" === e ? -1 : 1,\n e = Object.keys(t).sort(function (e, t) {\n return n * o()(e, t);\n }),\n i = {};\n return e.forEach(function (e) {\n i[e] = t[e];\n }), i;\n }\n function ge(e) {\n var t, n;\n return \"\" === e ? \"\" : \"null\" === (t = e.toLowerCase()) ? null : \"true\" === t || \"false\" !== t && (/^0\\d+$/.test(e) || (t = Number(e), n = parseFloat(e), isNaN(t)) || isNaN(n) ? e : t);\n }\n function pe(e, t) {\n return \"number\" == typeof t && d < t && isFinite(t) && Math.floor(t) === t && !isNaN(new Date(t).valueOf());\n }\n function me(e) {\n return e < 900 ? e.toFixed() + \" B\" : (e = e / 1e3) < 900 ? e.toFixed(1) + \" KB\" : (e = e / 1e3) < 900 ? e.toFixed(1) + \" MB\" : (e = e / 1e3) < 900 ? e.toFixed(1) + \" GB\" : (e / 1e3).toFixed(1) + \" TB\";\n }\n function fe(e, t) {\n return e.length <= t ? e : e.slice(0, t) + \"...\";\n }\n function B(e) {\n return \"object\" === c(e) && null !== e && !Array.isArray(e);\n }\n function Ce(e, t) {\n return -1 !== e.indexOf(t);\n }\n function ye(n, i) {\n if (i || n) {\n if (i && !n || !i && n) return !0;\n if (i.length !== n.length) return !0;\n for (var e, t = 0; t < n.length; ++t) if (e = function (t) {\n var e = \"error\" === n[t].type ? i.find(function (e) {\n return e.line === n[t].line;\n }) : i.find(function (e) {\n return e.dataPath === n[t].dataPath && e.schemaPath === n[t].schemaPath;\n });\n if (!e) return {\n v: !0\n };\n }(t)) return e.v;\n }\n return !1;\n }\n function ve(e, t) {\n e = null != e && e.length ? e : [], t = null != t && t.length ? t : [];\n return a(new Set(e.concat(t)));\n }\n function Ie(e) {\n setTimeout(e);\n }\n function M(e, t) {\n return Object.prototype.hasOwnProperty.call(e, t);\n }\n },\n 8037: function (e, t, n) {\n var i;\n if (window.Picker) i = window.Picker;else try {\n i = n(4049);\n } catch (e) {}\n e.exports = i;\n },\n 6225: function (i, e, C) {\n function l(e, n) {\n var t, i;\n return n = a(e, n), (e = r.modules[n]) || (\"function\" == typeof (e = r.payloads[n]) && (t = {\n id: n,\n uri: \"\",\n exports: i = {},\n packaged: !0\n }, i = e(function (e, t) {\n return s(n, e, t);\n }, i, t) || t.exports, r.modules[n] = i, delete r.payloads[n]), e = r.modules[n] = i || e), e;\n }\n var t, n, o, r, s, c, a;\n i = C.nmd(i), (o = function () {\n return this;\n }()) || \"undefined\" == typeof window || (o = window), (r = function (e, t, n) {\n \"string\" != typeof e ? r.original ? r.original.apply(this, arguments) : (console.error(\"dropping module because define wasn't a string.\"), console.trace()) : (2 == arguments.length && (n = t), r.modules[e] || (r.payloads[e] = n, r.modules[e] = null));\n }).modules = {}, r.payloads = {}, s = function (e, t, n) {\n if (\"string\" == typeof t) {\n var i = l(e, t);\n if (null != i) return n && n(), i;\n } else if (\"[object Array]\" === Object.prototype.toString.call(t)) {\n for (var o = [], r = 0, s = t.length; r < s; ++r) {\n var a = l(e, t[r]);\n if (null == a && c.original) return;\n o.push(a);\n }\n return n && n.apply(null, o) || !0;\n }\n }, c = function (e, t) {\n var n = s(\"\", e, t);\n return null == n && c.original ? c.original.apply(this, arguments) : n;\n }, a = function (e, t) {\n var n;\n if (-1 !== t.indexOf(\"!\")) return n = t.split(\"!\"), a(e, n[0]) + \"!\" + a(e, n[1]);\n if (\".\" == t.charAt(0)) for (t = e.split(\"/\").slice(0, -1).join(\"/\") + \"/\" + t; -1 !== t.indexOf(\".\") && i != t;) {\n var i = t;\n t = t.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n }\n return t;\n }, n = o, (t = \"ace\") && (o[t] || (o[t] = {}), n = o[t]), n.define && n.define.packaged || (r.original = n.define, n.define = r, n.define.packaged = !0), n.require && n.require.packaged || (c.original = n.require, n.require = c, n.require.packaged = !0), ace.define(\"ace/lib/es6-shim\", [\"require\", \"exports\", \"module\"], function (e, t, n) {\n function i(e, t, n) {\n Object.defineProperty(e, t, {\n value: n,\n enumerable: !1,\n writable: !0,\n configurable: !0\n });\n }\n String.prototype.startsWith || i(String.prototype, \"startsWith\", function (e, t) {\n return this.lastIndexOf(e, t = t || 0) === t;\n }), String.prototype.endsWith || i(String.prototype, \"endsWith\", function (e, t) {\n (void 0 === t || t > this.length) && (t = this.length), t -= e.length;\n e = this.indexOf(e, t);\n return -1 !== e && e === t;\n }), String.prototype.repeat || i(String.prototype, \"repeat\", function (e) {\n for (var t = \"\", n = this; 0 < e;) 1 & e && (t += n), (e >>= 1) && (n += n);\n return t;\n }), String.prototype.includes || i(String.prototype, \"includes\", function (e, t) {\n return -1 != this.indexOf(e, t);\n }), Object.assign || (Object.assign = function (e) {\n if (null == e) throw new TypeError(\"Cannot convert undefined or null to object\");\n for (var t = Object(e), n = 1; n < arguments.length; n++) {\n var i = arguments[n];\n null != i && Object.keys(i).forEach(function (e) {\n t[e] = i[e];\n });\n }\n return t;\n }), Object.values || (Object.values = function (t) {\n return Object.keys(t).map(function (e) {\n return t[e];\n });\n }), Array.prototype.find || i(Array.prototype, \"find\", function (e) {\n for (var t = this.length, n = arguments[1], i = 0; i < t; i++) {\n var o = this[i];\n if (e.call(n, o, i, this)) return o;\n }\n }), Array.prototype.findIndex || i(Array.prototype, \"findIndex\", function (e) {\n for (var t = this.length, n = arguments[1], i = 0; i < t; i++) {\n var o = this[i];\n if (e.call(n, o, i, this)) return i;\n }\n }), Array.prototype.includes || i(Array.prototype, \"includes\", function (e, t) {\n return -1 != this.indexOf(e, t);\n }), Array.prototype.fill || i(Array.prototype, \"fill\", function (e) {\n for (var t = this.length >>> 0, n = arguments[1] >> 0, i = n < 0 ? Math.max(t + n, 0) : Math.min(n, t), n = arguments[2], n = void 0 === n ? t : n >> 0, o = n < 0 ? Math.max(t + n, 0) : Math.min(n, t); i < o;) this[i] = e, i++;\n return this;\n }), Array.of || i(Array, \"of\", function () {\n return Array.prototype.slice.call(arguments);\n });\n }), ace.define(\"ace/lib/fixoldbrowsers\", [\"require\", \"exports\", \"module\", \"ace/lib/es6-shim\"], function (e, t, n) {\n \"use strict\";\n\n e(\"./es6-shim\");\n }), ace.define(\"ace/lib/deep_copy\", [\"require\", \"exports\", \"module\"], function (e, t, n) {\n t.deepCopy = function e(t) {\n if (\"object\" != typeof t || !t) return t;\n if (Array.isArray(t)) for (var n = [], i = 0; i < t.length; i++) n[i] = e(t[i]);else {\n if (\"[object Object]\" !== Object.prototype.toString.call(t)) return t;\n for (var i in n = {}, t) n[i] = e(t[i]);\n }\n return n;\n };\n }), ace.define(\"ace/lib/lang\", [\"require\", \"exports\", \"module\", \"ace/lib/deep_copy\"], function (e, t, n) {\n \"use strict\";\n\n t.last = function (e) {\n return e[e.length - 1];\n }, t.stringReverse = function (e) {\n return e.split(\"\").reverse().join(\"\");\n }, t.stringRepeat = function (e, t) {\n for (var n = \"\"; 0 < t;) 1 & t && (n += e), (t >>= 1) && (e += e);\n return n;\n };\n var i = /^\\s\\s*/,\n o = /\\s\\s*$/;\n t.stringTrimLeft = function (e) {\n return e.replace(i, \"\");\n }, t.stringTrimRight = function (e) {\n return e.replace(o, \"\");\n }, t.copyObject = function (e) {\n var t,\n n = {};\n for (t in e) n[t] = e[t];\n return n;\n }, t.copyArray = function (e) {\n for (var t = [], n = 0, i = e.length; n < i; n++) e[n] && \"object\" == typeof e[n] ? t[n] = this.copyObject(e[n]) : t[n] = e[n];\n return t;\n }, t.deepCopy = e(\"./deep_copy\").deepCopy, t.arrayToMap = function (e) {\n for (var t = {}, n = 0; n < e.length; n++) t[e[n]] = 1;\n return t;\n }, t.createMap = function (e) {\n var t,\n n = Object.create(null);\n for (t in e) n[t] = e[t];\n return n;\n }, t.arrayRemove = function (e, t) {\n for (var n = 0; n <= e.length; n++) t === e[n] && e.splice(n, 1);\n }, t.escapeRegExp = function (e) {\n return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, \"\\\\$1\");\n }, t.escapeHTML = function (e) {\n return (\"\" + e).replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/'/g, \"'\").replace(/ [\" + this.end.row + \"/\" + this.end.column + \"]\";\n }, r.prototype.contains = function (e, t) {\n return 0 == this.compare(e, t);\n }, r.prototype.compareRange = function (e) {\n var t = e.end,\n e = e.start,\n t = this.compare(t.row, t.column);\n return 1 == t ? 1 == (t = this.compare(e.row, e.column)) ? 2 : 0 == t ? 1 : 0 : -1 == t ? -2 : -1 == (t = this.compare(e.row, e.column)) ? -1 : 1 == t ? 42 : 0;\n }, r.prototype.comparePoint = function (e) {\n return this.compare(e.row, e.column);\n }, r.prototype.containsRange = function (e) {\n return 0 == this.comparePoint(e.start) && 0 == this.comparePoint(e.end);\n }, r.prototype.intersects = function (e) {\n e = this.compareRange(e);\n return -1 == e || 0 == e || 1 == e;\n }, r.prototype.isEnd = function (e, t) {\n return this.end.row == e && this.end.column == t;\n }, r.prototype.isStart = function (e, t) {\n return this.start.row == e && this.start.column == t;\n }, r.prototype.setStart = function (e, t) {\n \"object\" == typeof e ? (this.start.column = e.column, this.start.row = e.row) : (this.start.row = e, this.start.column = t);\n }, r.prototype.setEnd = function (e, t) {\n \"object\" == typeof e ? (this.end.column = e.column, this.end.row = e.row) : (this.end.row = e, this.end.column = t);\n }, r.prototype.inside = function (e, t) {\n return 0 == this.compare(e, t) && !this.isEnd(e, t) && !this.isStart(e, t);\n }, r.prototype.insideStart = function (e, t) {\n return 0 == this.compare(e, t) && !this.isEnd(e, t);\n }, r.prototype.insideEnd = function (e, t) {\n return 0 == this.compare(e, t) && !this.isStart(e, t);\n }, r.prototype.compare = function (e, t) {\n return this.isMultiLine() || e !== this.start.row ? e < this.start.row ? -1 : e > this.end.row ? 1 : this.start.row === e ? t >= this.start.column ? 0 : -1 : this.end.row !== e || t <= this.end.column ? 0 : 1 : t < this.start.column ? -1 : t > this.end.column ? 1 : 0;\n }, r.prototype.compareStart = function (e, t) {\n return this.start.row == e && this.start.column == t ? -1 : this.compare(e, t);\n }, r.prototype.compareEnd = function (e, t) {\n return this.end.row == e && this.end.column == t ? 1 : this.compare(e, t);\n }, r.prototype.compareInside = function (e, t) {\n return this.end.row == e && this.end.column == t ? 1 : this.start.row == e && this.start.column == t ? -1 : this.compare(e, t);\n }, r.prototype.clipRows = function (e, t) {\n var n, i;\n return this.end.row > t ? n = {\n row: t + 1,\n column: 0\n } : this.end.row < e && (n = {\n row: e,\n column: 0\n }), this.start.row > t ? i = {\n row: t + 1,\n column: 0\n } : this.start.row < e && (i = {\n row: e,\n column: 0\n }), r.fromPoints(i || this.start, n || this.end);\n }, r.prototype.extend = function (e, t) {\n var n,\n i,\n o = this.compare(e, t);\n return 0 == o ? this : (-1 == o ? n = {\n row: e,\n column: t\n } : i = {\n row: e,\n column: t\n }, r.fromPoints(n || this.start, i || this.end));\n }, r.prototype.isEmpty = function () {\n return this.start.row === this.end.row && this.start.column === this.end.column;\n }, r.prototype.isMultiLine = function () {\n return this.start.row !== this.end.row;\n }, r.prototype.clone = function () {\n return r.fromPoints(this.start, this.end);\n }, r.prototype.collapseRows = function () {\n return 0 == this.end.column ? new r(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0) : new r(this.start.row, 0, this.end.row, 0);\n }, r.prototype.toScreenRange = function (e) {\n var t = e.documentToScreenPosition(this.start),\n e = e.documentToScreenPosition(this.end);\n return new r(t.row, t.column, e.row, e.column);\n }, r.prototype.moveBy = function (e, t) {\n this.start.row += e, this.start.column += t, this.end.row += e, this.end.column += t;\n };\n var i = r;\n function r(e, t, n, i) {\n this.start = {\n row: e,\n column: t\n }, this.end = {\n row: n,\n column: i\n };\n }\n i.fromPoints = function (e, t) {\n return new i(e.row, e.column, t.row, t.column);\n }, i.comparePoints = function (e, t) {\n return e.row - t.row || e.column - t.column;\n }, i.comparePoints = function (e, t) {\n return e.row - t.row || e.column - t.column;\n }, t.Range = i;\n }), ace.define(\"ace/lib/keys\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\"], function (e, t, n) {\n /*! @license\n ==========================================================================\n SproutCore -- JavaScript Application Framework\n copyright 2006-2009, Sprout Systems Inc., Apple Inc. and contributors.\n \n Permission is hereby granted, free of charge, to any person obtaining a\n copy of this software and associated documentation files (the \"Software\"),\n to deal in the Software without restriction, including without limitation\n the rights to use, copy, modify, merge, publish, distribute, sublicense,\n and/or sell copies of the Software, and to permit persons to whom the\n Software is furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n DEALINGS IN THE SOFTWARE.\n \n SproutCore and the SproutCore logo are trademarks of Sprout Systems, Inc.\n \n For more information about SproutCore, visit http://www.sproutcore.com\n \n \n ==========================================================================\n @license */\n \"use strict\";\n\n var r = e(\"./oop\"),\n i = function () {\n var e,\n t,\n n = {\n MODIFIER_KEYS: {\n 16: \"Shift\",\n 17: \"Ctrl\",\n 18: \"Alt\",\n 224: \"Meta\",\n 91: \"MetaLeft\",\n 92: \"MetaRight\",\n 93: \"ContextMenu\"\n },\n KEY_MODS: {\n ctrl: 1,\n alt: 2,\n option: 2,\n shift: 4,\n super: 8,\n meta: 8,\n command: 8,\n cmd: 8,\n control: 1\n },\n FUNCTION_KEYS: {\n 8: \"Backspace\",\n 9: \"Tab\",\n 13: \"Return\",\n 19: \"Pause\",\n 27: \"Esc\",\n 32: \"Space\",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"Left\",\n 38: \"Up\",\n 39: \"Right\",\n 40: \"Down\",\n 44: \"Print\",\n 45: \"Insert\",\n 46: \"Delete\",\n 96: \"Numpad0\",\n 97: \"Numpad1\",\n 98: \"Numpad2\",\n 99: \"Numpad3\",\n 100: \"Numpad4\",\n 101: \"Numpad5\",\n 102: \"Numpad6\",\n 103: \"Numpad7\",\n 104: \"Numpad8\",\n 105: \"Numpad9\",\n \"-13\": \"NumpadEnter\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n PRINTABLE_KEYS: {\n 32: \" \",\n 48: \"0\",\n 49: \"1\",\n 50: \"2\",\n 51: \"3\",\n 52: \"4\",\n 53: \"5\",\n 54: \"6\",\n 55: \"7\",\n 56: \"8\",\n 57: \"9\",\n 59: \";\",\n 61: \"=\",\n 65: \"a\",\n 66: \"b\",\n 67: \"c\",\n 68: \"d\",\n 69: \"e\",\n 70: \"f\",\n 71: \"g\",\n 72: \"h\",\n 73: \"i\",\n 74: \"j\",\n 75: \"k\",\n 76: \"l\",\n 77: \"m\",\n 78: \"n\",\n 79: \"o\",\n 80: \"p\",\n 81: \"q\",\n 82: \"r\",\n 83: \"s\",\n 84: \"t\",\n 85: \"u\",\n 86: \"v\",\n 87: \"w\",\n 88: \"x\",\n 89: \"y\",\n 90: \"z\",\n 107: \"+\",\n 109: \"-\",\n 110: \".\",\n 186: \";\",\n 187: \"=\",\n 188: \",\",\n 189: \"-\",\n 190: \".\",\n 191: \"/\",\n 192: \"`\",\n 219: \"[\",\n 220: \"\\\\\",\n 221: \"]\",\n 222: \"'\",\n 111: \"/\",\n 106: \"*\"\n }\n };\n for (t in n.PRINTABLE_KEYS[173] = \"-\", n.FUNCTION_KEYS) e = n.FUNCTION_KEYS[t].toLowerCase(), n[e] = parseInt(t, 10);\n for (t in n.PRINTABLE_KEYS) e = n.PRINTABLE_KEYS[t].toLowerCase(), n[e] = parseInt(t, 10);\n r.mixin(n, n.MODIFIER_KEYS), r.mixin(n, n.PRINTABLE_KEYS), r.mixin(n, n.FUNCTION_KEYS), n.enter = n.return, n.escape = n.esc, n.del = n.delete;\n for (var i = [\"cmd\", \"ctrl\", \"alt\", \"shift\"], o = Math.pow(2, i.length); o--;) n.KEY_MODS[o] = i.filter(function (e) {\n return o & n.KEY_MODS[e];\n }).join(\"-\") + \"-\";\n return n.KEY_MODS[0] = \"\", n.KEY_MODS[-1] = \"input-\", n;\n }();\n r.mixin(t, i), (t.default = t).keyCodeToString = function (e) {\n var t = i[e];\n return (t = \"string\" != typeof t ? String.fromCharCode(e) : t).toLowerCase();\n };\n }), ace.define(\"ace/lib/event\", [\"require\", \"exports\", \"module\", \"ace/lib/keys\", \"ace/lib/useragent\"], function (e, d, t) {\n \"use strict\";\n\n var n,\n r = e(\"./keys\"),\n u = e(\"./useragent\"),\n s = null,\n a = 0;\n function o() {\n if (null == n) {\n n = !1;\n try {\n document.createComment(\"\").addEventListener(\"test\", function () {}, {\n get passive() {\n n = {\n passive: !1\n };\n }\n });\n } catch (e) {}\n }\n return n;\n }\n function l(e, t, n) {\n this.elem = e, this.type = t, this.callback = n;\n }\n l.prototype.destroy = function () {\n p(this.elem, this.type, this.callback), this.elem = this.type = this.callback = void 0;\n };\n function c(e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n }\n var h,\n g = d.addListener = function (e, t, n, i) {\n e.addEventListener(t, n, o()), i && i.$toDestroy.push(new l(e, t, n));\n },\n p = d.removeListener = function (e, t, n) {\n e.removeEventListener(t, n, o());\n };\n d.stopEvent = function (e) {\n return d.stopPropagation(e), d.preventDefault(e), !1;\n }, d.stopPropagation = function (e) {\n e.stopPropagation && e.stopPropagation();\n }, d.preventDefault = function (e) {\n e.preventDefault && e.preventDefault();\n }, d.getButton = function (e) {\n return \"dblclick\" == e.type ? 0 : \"contextmenu\" == e.type || u.isMac && e.ctrlKey && !e.altKey && !e.shiftKey ? 2 : e.button;\n }, d.capture = function (e, t, n) {\n var i = e && e.ownerDocument || document;\n function o(e) {\n t && t(e), n && n(e), p(i, \"mousemove\", t), p(i, \"mouseup\", o), p(i, \"dragstart\", o);\n }\n return g(i, \"mousemove\", t), g(i, \"mouseup\", o), g(i, \"dragstart\", o), o;\n }, d.addMouseWheelListener = function (e, i, t) {\n g(e, \"wheel\", function (e) {\n var t = e.deltaX || 0,\n n = e.deltaY || 0;\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = .15 * t, e.wheelY = .15 * n;\n break;\n case e.DOM_DELTA_LINE:\n e.wheelX = 15 * t, e.wheelY = 15 * n;\n break;\n case e.DOM_DELTA_PAGE:\n e.wheelX = 150 * t, e.wheelY = 150 * n;\n }\n i(e);\n }, t);\n }, d.addMultiMouseDownListener = function (e, n, i, o, t) {\n var r,\n s,\n a,\n l = 0,\n c = {\n 2: \"dblclick\",\n 3: \"tripleclick\",\n 4: \"quadclick\"\n };\n function h(e) {\n var t;\n if (0 !== d.getButton(e) ? l = 0 : 1 < e.detail && !(4 < ++l) || (l = 1), u.isIE && (t = 5 < Math.abs(e.clientX - r) || 5 < Math.abs(e.clientY - s), a && !t || (l = 1), a && clearTimeout(a), a = setTimeout(function () {\n a = null;\n }, n[l - 1] || 600), 1 == l) && (r = e.clientX, s = e.clientY), e._clicks = l, i[o](\"mousedown\", e), 4 < l) l = 0;else if (1 < l) return i[o](c[l], e);\n }\n (e = Array.isArray(e) ? e : [e]).forEach(function (e) {\n g(e, \"mousedown\", h, t);\n });\n };\n function m(e, t, n) {\n var i = c(t);\n if (!u.isMac && s) {\n if (t.getModifierState && (t.getModifierState(\"OS\") || t.getModifierState(\"Win\")) && (i |= 8), s.altGr) {\n if (3 == (3 & i)) return;\n s.altGr = 0;\n }\n 18 !== n && 17 !== n || (o = \"location\" in t ? t.location : t.keyLocation, 17 === n && 1 === o ? 1 == s[n] && (a = t.timeStamp) : 18 === n && 3 === i && 2 === o && t.timeStamp - a < 50 && (s.altGr = !0));\n }\n if (n in r.MODIFIER_KEYS && (n = -1), !i && 13 === n) {\n var o = \"location\" in t ? t.location : t.keyLocation;\n if (3 === o && (e(t, i, -n), t.defaultPrevented)) return;\n }\n if (u.isChromeOS && 8 & i) {\n if (e(t, i, n), t.defaultPrevented) return;\n i &= -9;\n }\n return !!(i || n in r.FUNCTION_KEYS || n in r.PRINTABLE_KEYS) && e(t, i, n);\n }\n function f() {\n s = Object.create(null);\n }\n d.getModifierString = function (e) {\n return r.KEY_MODS[c(e)];\n }, d.addCommandKeyListener = function (e, n, t) {\n var i, o;\n u.isOldGecko || u.isOpera && !(\"KeyboardEvent\" in window) ? (i = null, g(e, \"keydown\", function (e) {\n i = e.keyCode;\n }, t), g(e, \"keypress\", function (e) {\n return m(n, e, i);\n }, t)) : (o = null, g(e, \"keydown\", function (e) {\n s[e.keyCode] = (s[e.keyCode] || 0) + 1;\n var t = m(n, e, e.keyCode);\n return o = e.defaultPrevented, t;\n }, t), g(e, \"keypress\", function (e) {\n o && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && (d.stopEvent(e), o = null);\n }, t), g(e, \"keyup\", function (e) {\n s[e.keyCode] = null;\n }, t), s || (f(), g(window, \"focus\", f)));\n }, \"object\" == typeof window && window.postMessage && !u.isOldIE && (h = 1, d.nextTick = function (t, n) {\n n = n || window;\n function i(e) {\n e.data == o && (d.stopPropagation(e), p(n, \"message\", i), t());\n }\n var o = \"zero-timeout-message-\" + h++;\n g(n, \"message\", i), n.postMessage(o, \"*\");\n }), d.$idleBlocked = !1, d.onIdle = function (t, e) {\n return setTimeout(function e() {\n d.$idleBlocked ? setTimeout(e, 100) : t();\n }, e);\n }, d.$idleBlockId = null, d.blockIdle = function (e) {\n d.$idleBlockId && clearTimeout(d.$idleBlockId), d.$idleBlocked = !0, d.$idleBlockId = setTimeout(function () {\n d.$idleBlocked = !1;\n }, e || 100);\n }, d.nextFrame = \"object\" == typeof window && (window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || window.oRequestAnimationFrame), d.nextFrame ? d.nextFrame = d.nextFrame.bind(window) : d.nextFrame = function (e) {\n setTimeout(e, 17);\n };\n }), ace.define(\"ace/clipboard\", [\"require\", \"exports\", \"module\"], function (e, t, n) {\n \"use strict\";\n\n var i;\n n.exports = {\n lineMode: !1,\n pasteCancelled: function () {\n return !!(i && i > Date.now() - 50) || (i = !1);\n },\n cancel: function () {\n i = Date.now();\n }\n };\n }), ace.define(\"ace/keyboard/textinput\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/config\", \"ace/lib/useragent\", \"ace/lib/dom\", \"ace/lib/lang\", \"ace/clipboard\", \"ace/lib/keys\"], function (e, t, n) {\n \"use strict\";\n\n var O = e(\"../lib/event\"),\n Z = e(\"../config\").nls,\n D = e(\"../lib/useragent\"),\n K = e(\"../lib/dom\"),\n j = e(\"../lib/lang\"),\n z = e(\"../clipboard\"),\n X = D.isChrome < 18,\n Y = D.isIE,\n J = 63 < D.isChrome,\n U = e(\"../lib/keys\"),\n Q = U.KEY_MODS,\n q = D.isIOS,\n ee = q ? /\\s/ : /\\n/,\n te = D.isMobile;\n t.TextInput = function (e, d) {\n var u = K.createElement(\"textarea\"),\n r = (u.className = \"ace_text-input\", u.setAttribute(\"wrap\", \"off\"), u.setAttribute(\"autocorrect\", \"off\"), u.setAttribute(\"autocapitalize\", \"off\"), u.setAttribute(\"spellcheck\", !1), u.style.opacity = \"0\", e.insertBefore(u, e.firstChild), !1),\n g = !1,\n l = !1,\n p = !1,\n a = \"\",\n m = (te || (u.style.fontSize = \"1px\"), !1),\n t = !1,\n f = \"\",\n C = 0,\n y = 0,\n v = 0,\n c = Number.MAX_SAFE_INTEGER,\n h = Number.MIN_SAFE_INTEGER,\n I = 0;\n try {\n var b = document.activeElement === u;\n } catch (e) {}\n this.setNumberOfExtraLines = function (e) {\n c = Number.MAX_SAFE_INTEGER, h = Number.MIN_SAFE_INTEGER, I = e < 0 ? 0 : e;\n }, this.setAriaOptions = function (e) {\n e.activeDescendant ? (u.setAttribute(\"aria-haspopup\", \"true\"), u.setAttribute(\"aria-autocomplete\", e.inline ? \"both\" : \"list\"), u.setAttribute(\"aria-activedescendant\", e.activeDescendant)) : (u.setAttribute(\"aria-haspopup\", \"false\"), u.setAttribute(\"aria-autocomplete\", \"both\"), u.removeAttribute(\"aria-activedescendant\")), e.role && u.setAttribute(\"role\", e.role), e.setLabel && (u.setAttribute(\"aria-roledescription\", Z(\"editor\")), d.session) && (e = d.session.selection.cursor.row, u.setAttribute(\"aria-label\", Z(\"Cursor at row $0\", [e + 1])));\n }, this.setAriaOptions({\n role: \"textbox\"\n }), O.addListener(u, \"blur\", function (e) {\n t || (d.onBlur(e), b = !1);\n }, d), O.addListener(u, \"focus\", function (e) {\n if (!t) {\n if (b = !0, D.isEdge) try {\n if (!document.hasFocus()) return;\n } catch (e) {}\n d.onFocus(e), D.isEdge ? setTimeout(w) : w();\n }\n }, d), this.$focusScroll = !1, this.focus = function () {\n if (this.setAriaOptions({\n setLabel: d.renderer.enableKeyboardAccessibility\n }), a || J || \"browser\" == this.$focusScroll) return u.focus({\n preventScroll: !0\n });\n var e = u.style.top;\n u.style.position = \"fixed\", u.style.top = \"0px\";\n try {\n var t = 0 != u.getBoundingClientRect().top;\n } catch (e) {\n return;\n }\n var n = [];\n if (t) for (var i = u.parentElement; i && 1 == i.nodeType;) n.push(i), i.setAttribute(\"ace_nocontext\", !0), i = !i.parentElement && i.getRootNode ? i.getRootNode().host : i.parentElement;\n u.focus({\n preventScroll: !0\n }), t && n.forEach(function (e) {\n e.removeAttribute(\"ace_nocontext\");\n }), setTimeout(function () {\n u.style.position = \"\", \"0px\" == u.style.top && (u.style.top = e);\n }, 0);\n }, this.blur = function () {\n u.blur();\n }, this.isFocused = function () {\n return b;\n }, d.on(\"beforeEndOperation\", function () {\n var e = d.curOp,\n t = e && e.command && e.command.name;\n \"insertstring\" != t && (t = t && (e.docChanged || e.selectionChanged), l && t && (f = u.value = \"\", G()), w());\n });\n function A(e, t) {\n for (var n = t, i = 1; i <= e - c && i < 2 * I + 1; i++) n += d.session.getLine(e - i).length + 1;\n return n;\n }\n function n(e) {\n P(e, !0);\n }\n function i(e) {\n P(e, !1);\n }\n function o(e) {\n var t = k(e);\n z.pasteCancelled() || (\"string\" == typeof t ? (t && d.onPaste(t, e), D.isIE && setTimeout(w), O.preventDefault(e)) : (u.value = \"\", g = !0));\n }\n var w = q ? function (e) {\n var t;\n !b || r && !e || p || ((t = \"\\n ab\" + (e = e || \"\") + \"cde fg\\n\") != u.value && (u.value = f = t), t = 4 + (e.length || (d.selection.isEmpty() ? 0 : 1)), 4 == C && y == t || u.setSelectionRange(4, t), C = 4, y = t);\n } : function () {\n if (!l && !p && (b || S)) {\n l = !0;\n var e = 0,\n t = 0,\n n = \"\";\n if (d.session) {\n for (var i, o = d.selection, r = o.getRange(), o = o.cursor.row, s = (o === h + 1 ? h = (c = h + 1) + 2 * I : o === c - 1 ? c = (h = c - 1) - 2 * I : (o < c - 1 || h + 1 < o) && (c = I < o ? o - I : 0, h = I < o ? o + I : 2 * I), []), a = c; a <= h; a++) s.push(d.session.getLine(a));\n n = s.join(\"\\n\"), e = A(r.start.row, r.start.column), t = A(r.end.row, r.end.column), r.start.row < c ? (i = d.session.getLine(c - 1), e = r.start.row < c - 1 ? 0 : e, t += i.length + 1, n = i + \"\\n\" + n) : r.end.row > h ? (i = d.session.getLine(h + 1), t = r.end.row > h + 1 ? i.length : r.end.column, t += n.length + 1, n = n + \"\\n\" + i) : te && 0 < o && (n = \"\\n\" + n, t += 1, e += 1), 400 < n.length && (e < 400 && t < 400 ? n = n.slice(0, 400) : (n = \"\\n\", e == t ? e = t = 0 : (e = 0, t = 1)));\n r = n + \"\\n\\n\";\n r != f && (u.value = f = r, C = y = r.length);\n }\n if (S && (C = u.selectionStart, y = u.selectionEnd), y != t || C != e || u.selectionEnd != y) try {\n u.setSelectionRange(e, t), C = e, y = t;\n } catch (e) {}\n l = !1;\n }\n },\n W = (this.resetSelection = w, b && d.onFocus(), function (e) {\n return 0 === e.selectionStart && e.selectionEnd >= f.length && e.value === f && f && e.selectionEnd !== y;\n }),\n s = null,\n S = (this.setInputHandler = function (e) {\n s = e;\n }, !(this.getInputHandler = function () {\n return s;\n })),\n x = function (e, t) {\n if (S = S && !1, g) return w(), e && d.onPaste(e), g = !1, \"\";\n for (var n = u.selectionStart, i = u.selectionEnd, o = C, r = f.length - y, s = e, a = e.length - n, l = e.length - i, c = 0; 0 < o && f[c] == e[c];) c++, o--;\n for (s = s.slice(c), c = 1; 0 < r && f.length - c > C - 1 && f[f.length - c] == e[e.length - c];) c++, r--;\n a -= c - 1, l -= c - 1;\n var h = s.length - c + 1;\n return h < 0 && (o = -h, h = 0), s = s.slice(0, h), t || s || a || o || r || l ? (h = !(p = !0), D.isAndroid && \". \" == s && (s = \" \", h = !0), s && !o && !r && !a && !l || m ? d.onTextInput(s) : d.onTextInput(s, {\n extendLeft: o,\n extendRight: r,\n restoreStart: a,\n restoreEnd: l\n }), p = !1, f = e, C = n, y = i, v = l, h ? \"\\n\" : s) : \"\";\n },\n H = function (e) {\n if (l) return E();\n if (e && e.inputType) {\n if (\"historyUndo\" == e.inputType) return d.execCommand(\"undo\");\n if (\"historyRedo\" == e.inputType) return d.execCommand(\"redo\");\n }\n var e = u.value,\n t = x(e, !0);\n (500 < e.length || ee.test(t) || te && C < 1 && C == y) && w();\n },\n k = function (e, t, n) {\n var i = e.clipboardData || window.clipboardData;\n if (i && !X) {\n var o = Y || n ? \"Text\" : \"text/plain\";\n try {\n return t ? !1 !== i.setData(o, t) : i.getData(o);\n } catch (e) {\n if (!n) return k(e, t, !0);\n }\n }\n },\n P = function (e, t) {\n var n = d.getCopyText();\n if (!n) return O.preventDefault(e);\n k(e, n) ? (q && (w(n), r = n, setTimeout(function () {\n r = !1;\n }, 10)), t ? d.onCut() : d.onCopy(), O.preventDefault(e)) : (r = !0, u.value = n, u.select(), setTimeout(function () {\n r = !1, w(), t ? d.onCut() : d.onCopy();\n }));\n },\n E = (O.addCommandKeyListener(u, d.onCommandKey.bind(d), d), O.addListener(u, \"select\", function (e) {\n l || (r ? r = !1 : W(u) ? (d.selectAll(), w()) : te && u.selectionStart != C && w());\n }, d), O.addListener(u, \"input\", H, d), O.addListener(u, \"cut\", n, d), O.addListener(u, \"copy\", i, d), O.addListener(u, \"paste\", o, d), \"oncut\" in u && \"oncopy\" in u && \"onpaste\" in u || O.addListener(e, \"keydown\", function (e) {\n if ((!D.isMac || e.metaKey) && e.ctrlKey) switch (e.keyCode) {\n case 67:\n i(e);\n break;\n case 86:\n o(e);\n break;\n case 88:\n n(e);\n }\n }, d), function () {\n var e;\n if (l && d.onCompositionUpdate && !d.$readOnly) return m ? T() : void (l.useTextareaForIME ? d.onCompositionUpdate(u.value) : (e = u.value, x(e), l.markerRange && (l.context && (l.markerRange.start.column = l.selectionStart = l.context.compositionStartOffset), l.markerRange.end.column = l.markerRange.start.column + y - l.selectionStart + v)));\n }),\n G = function (e) {\n d.onCompositionEnd && !d.$readOnly && (l = !1, d.onCompositionEnd(), d.off(\"mousedown\", T), e) && H();\n };\n function T() {\n t = !0, u.blur(), u.focus(), t = !1;\n }\n var R,\n F = j.delayedCall(E, 50).schedule.bind(null, null);\n function _() {\n clearTimeout(R), R = setTimeout(function () {\n a && (u.style.cssText = a, a = \"\"), d.renderer.$isMousePressed = !1, d.renderer.$keepTextAreaAtCursor && d.renderer.$moveTextAreaToCursor();\n }, 0);\n }\n O.addListener(u, \"compositionstart\", function (e) {\n l || !d.onCompositionStart || d.$readOnly || (l = {}, m) || (e.data && (l.useTextareaForIME = !1), setTimeout(E, 0), d._signal(\"compositionStart\"), d.on(\"mousedown\", T), (e = d.getSelectionRange()).end.row = e.start.row, e.end.column = e.start.column, l.markerRange = e, l.selectionStart = C, d.onCompositionStart(l), l.useTextareaForIME ? (f = u.value = \"\", y = C = 0) : (u.msGetInputContext && (l.context = u.msGetInputContext()), u.getInputContext && (l.context = u.getInputContext())));\n }, d), O.addListener(u, \"compositionupdate\", E, d), O.addListener(u, \"keyup\", function (e) {\n 27 == e.keyCode && u.value.length < u.selectionStart && (l || (f = u.value), C = y = -1, w()), F();\n }, d), O.addListener(u, \"keydown\", F, d), O.addListener(u, \"compositionend\", G, d), this.getElement = function () {\n return u;\n }, this.setCommandMode = function (e) {\n m = e, u.readOnly = !1;\n }, this.setReadOnly = function (e) {\n m || (u.readOnly = e);\n }, this.setCopyWithEmptySelection = function (e) {}, this.onContextMenu = function (e) {\n S = !0, w(), d._emit(\"nativecontextmenu\", {\n target: d,\n domEvent: e\n }), this.moveToMouse(e, !0);\n }, this.moveToMouse = function (e, t) {\n a = a || u.style.cssText, u.style.cssText = (t ? \"z-index:100000;\" : \"\") + (D.isIE ? \"opacity:0.1;\" : \"\") + \"text-indent: -\" + (C + y) * d.renderer.characterWidth * .5 + \"px;\";\n function n(e) {\n K.translate(u, e.clientX - r - 2, Math.min(e.clientY - o - 2, s));\n }\n var t = d.container.getBoundingClientRect(),\n i = K.computedStyle(d.container),\n o = t.top + (parseInt(i.borderTopWidth) || 0),\n r = t.left + (parseInt(t.borderLeftWidth) || 0),\n s = t.bottom - o - u.clientHeight - 2;\n n(e), \"mousedown\" == e.type && (d.renderer.$isMousePressed = !0, clearTimeout(R), D.isWin) && O.capture(d.container, n, _);\n }, this.onContextMenuClose = _;\n function $(e) {\n d.textInput.onContextMenu(e), _();\n }\n if (O.addListener(u, \"mouseup\", $, d), O.addListener(u, \"mousedown\", function (e) {\n e.preventDefault(), _();\n }, d), O.addListener(d.renderer.scroller, \"contextmenu\", $, d), O.addListener(u, \"contextmenu\", $, d), q) {\n var L = d,\n N = u;\n function V(e) {\n var t, n, i, o;\n document.activeElement !== N || M || l || L.$mouseHandler.isMousePressed || r || (t = N.selectionStart, n = N.selectionEnd, i = null, (o = 0) == t ? i = U.up : 1 == t ? i = U.home : y < n && \"\\n\" == f[n] ? i = U.end : t < C && \" \" == f[t - 1] ? (i = U.left, o = Q.option) : t < C || t == C && y != C && t == n ? i = U.left : y < n && 2 < f.slice(0, n).split(\"\\n\").length ? i = U.down : y < n && \" \" == f[n - 1] ? (i = U.right, o = Q.option) : (y < n || n == y && y != C && t == n) && (i = U.right), t !== n && (o |= Q.shift), i && (!L.onCommandKey({}, o, i) && L.commands && (i = U.keyCodeToString(i), o = L.commands.findKeyCommand(o, i)) && L.execCommand(o), C = t, y = n, w(\"\")));\n }\n var B = null,\n M = !1;\n N.addEventListener(\"keydown\", function (e) {\n B && clearTimeout(B), M = !0;\n }, !0), N.addEventListener(\"keyup\", function (e) {\n B = setTimeout(function () {\n M = !1;\n }, 100);\n }, !0), document.addEventListener(\"selectionchange\", V), L.on(\"destroy\", function () {\n document.removeEventListener(\"selectionchange\", V);\n });\n }\n this.destroy = function () {\n u.parentElement && u.parentElement.removeChild(u);\n };\n }, t.$setUserAgentForTests = function (e, t) {\n te = e, q = t;\n };\n }), ace.define(\"ace/mouse/default_handlers\", [\"require\", \"exports\", \"module\", \"ace/lib/useragent\"], function (e, t, n) {\n \"use strict\";\n\n var r = e(\"../lib/useragent\"),\n e = (i.prototype.onMouseDown = function (e) {\n var t = e.inSelection(),\n n = e.getDocumentPosition(),\n i = (this.mousedownEvent = e, this.editor),\n o = e.getButton();\n if (0 !== o) !i.getSelectionRange().isEmpty() && 1 != o || i.selection.moveToPosition(n), 2 == o && (i.textInput.onContextMenu(e.domEvent), r.isMozilla || e.preventDefault());else {\n if (this.mousedownEvent.time = Date.now(), !t || i.isFocused() || (i.focus(), !this.$focusTimeout) || this.$clickSelection || i.inMultiSelectMode) return this.captureMouse(e), this.startSelect(n, 1 < e.domEvent._clicks), e.preventDefault();\n this.setState(\"focusWait\"), this.captureMouse(e);\n }\n }, i.prototype.startSelect = function (e, t) {\n e = e || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var n = this.editor;\n this.mousedownEvent && (this.mousedownEvent.getShiftKey() ? n.selection.selectToPosition(e) : t || n.selection.moveToPosition(e), t || this.select(), n.setStyle(\"ace_selecting\"), this.setState(\"select\"));\n }, i.prototype.select = function () {\n var e,\n t = this.editor,\n n = t.renderer.screenToTextCoordinates(this.x, this.y);\n this.$clickSelection && (e = -1 == (e = this.$clickSelection.comparePoint(n)) ? this.$clickSelection.end : 1 == e ? this.$clickSelection.start : (n = (e = s(this.$clickSelection, n)).cursor, e.anchor), t.selection.setSelectionAnchor(e.row, e.column)), t.selection.selectToPosition(n), t.renderer.scrollCursorIntoView();\n }, i.prototype.extendSelectionBy = function (e) {\n var t,\n n,\n i,\n o = this.editor,\n r = o.renderer.screenToTextCoordinates(this.x, this.y),\n e = o.selection[e](r.row, r.column);\n this.$clickSelection && (n = this.$clickSelection.comparePoint(e.start), t = this.$clickSelection.comparePoint(e.end), -1 == n && t <= 0 ? (i = this.$clickSelection.end, e.end.row == r.row && e.end.column == r.column || (r = e.start)) : 1 == t && 0 <= n ? (i = this.$clickSelection.start, e.start.row == r.row && e.start.column == r.column || (r = e.end)) : i = -1 == n && 1 == t ? (r = e.end, e.start) : (r = (n = s(this.$clickSelection, r)).cursor, n.anchor), o.selection.setSelectionAnchor(i.row, i.column)), o.selection.selectToPosition(r), o.renderer.scrollCursorIntoView();\n }, i.prototype.selectByLinesEnd = function () {\n this.$clickSelection = null, this.editor.unsetStyle(\"ace_selecting\");\n }, i.prototype.focusWait = function () {\n i = this.mousedownEvent.x, e = this.mousedownEvent.y, n = this.x, t = this.y;\n var e,\n t,\n n = Math.sqrt(Math.pow(n - i, 2) + Math.pow(t - e, 2)),\n i = Date.now();\n (0 < n || i - this.mousedownEvent.time > this.$focusTimeout) && this.startSelect(this.mousedownEvent.getDocumentPosition());\n }, i.prototype.onDoubleClick = function (e) {\n var e = e.getDocumentPosition(),\n t = this.editor,\n n = t.session.getBracketRange(e);\n n ? (n.isEmpty() && (n.start.column--, n.end.column++), this.setState(\"select\")) : (n = t.selection.getWordRange(e.row, e.column), this.setState(\"selectByWords\")), this.$clickSelection = n, this.select();\n }, i.prototype.onTripleClick = function (e) {\n var e = e.getDocumentPosition(),\n t = this.editor,\n n = (this.setState(\"selectByLines\"), t.getSelectionRange());\n n.isMultiLine() && n.contains(e.row, e.column) ? (this.$clickSelection = t.selection.getLineRange(n.start.row), this.$clickSelection.end = t.selection.getLineRange(n.end.row).end) : this.$clickSelection = t.selection.getLineRange(e.row), this.select();\n }, i.prototype.onQuadClick = function (e) {\n var t = this.editor;\n t.selectAll(), this.$clickSelection = t.getSelectionRange(), this.setState(\"selectAll\");\n }, i.prototype.onMouseWheel = function (e) {\n var t, n, i, o, r, s, a;\n if (!e.getAccelKey()) return e.getShiftKey() && e.wheelY && !e.wheelX && (e.wheelX = e.wheelY, e.wheelY = 0), t = this.editor, this.$lastScroll || (this.$lastScroll = {\n t: 0,\n vx: 0,\n vy: 0,\n allowed: 0\n }), n = this.$lastScroll, o = (a = (i = e.domEvent.timeStamp) - n.t) ? e.wheelX / a : n.vx, r = a ? e.wheelY / a : n.vy, a < 550 && (o = (o + n.vx) / 2, r = (r + n.vy) / 2), a = !1, 1 <= (s = Math.abs(o / r)) && t.renderer.isScrollableBy(e.wheelX * e.speed, 0) && (a = !0), (a = s <= 1 && t.renderer.isScrollableBy(0, e.wheelY * e.speed) ? !0 : a) ? n.allowed = i : i - n.allowed < 550 && (Math.abs(o) <= 1.5 * Math.abs(n.vx) && Math.abs(r) <= 1.5 * Math.abs(n.vy) ? (a = !0, n.allowed = i) : n.allowed = 0), n.t = i, n.vx = o, n.vy = r, a ? (t.renderer.scrollBy(e.wheelX * e.speed, e.wheelY * e.speed), e.stop()) : void 0;\n }, i);\n function i(t) {\n t.$clickSelection = null;\n var e = t.editor;\n e.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(t)), e.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(t)), e.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(t)), e.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(t)), e.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(t));\n [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\", \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"].forEach(function (e) {\n t[e] = this[e];\n }, this), t.selectByLines = this.extendSelectionBy.bind(t, \"getLineRange\"), t.selectByWords = this.extendSelectionBy.bind(t, \"getWordRange\");\n }\n function s(e, t) {\n return (e.start.row == e.end.row ? 2 * t.column - e.start.column - e.end.column : e.start.row != e.end.row - 1 || e.start.column || e.end.column ? 2 * t.row - e.start.row - e.end.row : t.column - 4) < 0 ? {\n cursor: e.start,\n anchor: e.end\n } : {\n cursor: e.end,\n anchor: e.start\n };\n }\n e.prototype.selectEnd = e.prototype.selectByLinesEnd, e.prototype.selectAllEnd = e.prototype.selectByLinesEnd, e.prototype.selectByWordsEnd = e.prototype.selectByLinesEnd, t.DefaultHandlers = e;\n }), ace.define(\"ace/tooltip\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/range\"], function (e, t, n) {\n \"use strict\";\n\n var i,\n o = this && this.__extends || (i = function (e, t) {\n return (i = Object.setPrototypeOf || ({\n __proto__: []\n } instanceof Array ? function (e, t) {\n e.__proto__ = t;\n } : function (e, t) {\n for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);\n }))(e, t);\n }, function (e, t) {\n if (\"function\" != typeof t && null !== t) throw new TypeError(\"Class extends value \" + String(t) + \" is not a constructor or null\");\n function n() {\n this.constructor = e;\n }\n i(e, t), e.prototype = null === t ? Object.create(t) : (n.prototype = t.prototype, new n());\n }),\n u = this && this.__values || function (e) {\n var t = \"function\" == typeof Symbol && Symbol.iterator,\n n = t && e[t],\n i = 0;\n if (n) return n.call(e);\n if (e && \"number\" == typeof e.length) return {\n next: function () {\n return {\n value: (e = e && i >= e.length ? void 0 : e) && e[i++],\n done: !e\n };\n }\n };\n throw new TypeError(t ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n },\n r = e(\"./lib/dom\"),\n s = e(\"./range\").Range,\n a = \"ace_tooltip\",\n e = (l.prototype.$init = function () {\n return this.$element = r.createElement(\"div\"), this.$element.className = a, this.$element.style.display = \"none\", this.$parentNode.appendChild(this.$element), this.$element;\n }, l.prototype.getElement = function () {\n return this.$element || this.$init();\n }, l.prototype.setText = function (e) {\n this.getElement().textContent = e;\n }, l.prototype.setHtml = function (e) {\n this.getElement().innerHTML = e;\n }, l.prototype.setPosition = function (e, t) {\n this.getElement().style.left = e + \"px\", this.getElement().style.top = t + \"px\";\n }, l.prototype.setClassName = function (e) {\n r.addCssClass(this.getElement(), e);\n }, l.prototype.setTheme = function (e) {\n this.$element.className = a + \" \" + (e.isDark ? \"ace_dark \" : \"\") + (e.cssClass || \"\");\n }, l.prototype.show = function (e, t, n) {\n null != e && this.setText(e), null != t && null != n && this.setPosition(t, n), this.isOpen || (this.getElement().style.display = \"block\", this.isOpen = !0);\n }, l.prototype.hide = function () {\n this.isOpen && (this.getElement().style.display = \"none\", this.getElement().className = a, this.isOpen = !1);\n }, l.prototype.getHeight = function () {\n return this.getElement().offsetHeight;\n }, l.prototype.getWidth = function () {\n return this.getElement().offsetWidth;\n }, l.prototype.destroy = function () {\n this.isOpen = !1, this.$element && this.$element.parentNode && this.$element.parentNode.removeChild(this.$element);\n }, l);\n function l(e) {\n this.isOpen = !1, this.$element = null, this.$parentNode = e;\n }\n function c() {\n this.popups = [];\n }\n c.prototype.addPopup = function (e) {\n this.popups.push(e), this.updatePopups();\n }, c.prototype.removePopup = function (e) {\n e = this.popups.indexOf(e);\n -1 !== e && (this.popups.splice(e, 1), this.updatePopups());\n }, c.prototype.updatePopups = function () {\n this.popups.sort(function (e, t) {\n return t.priority - e.priority;\n });\n var t,\n e,\n n,\n i,\n o = [];\n try {\n for (var r = u(this.popups), s = r.next(); !s.done; s = r.next()) {\n var a = s.value,\n l = !0;\n try {\n n = void 0;\n for (var c = u(o), h = c.next(); !h.done; h = c.next()) {\n var d = h.value;\n if (this.doPopupsOverlap(d, a)) {\n l = !1;\n break;\n }\n }\n } catch (e) {\n n = {\n error: e\n };\n } finally {\n try {\n h && !h.done && (i = c.return) && i.call(c);\n } finally {\n if (n) throw n.error;\n }\n }\n l ? o.push(a) : a.hide();\n }\n } catch (e) {\n t = {\n error: e\n };\n } finally {\n try {\n s && !s.done && (e = r.return) && e.call(r);\n } finally {\n if (t) throw t.error;\n }\n }\n }, c.prototype.doPopupsOverlap = function (e, t) {\n e = e.getElement().getBoundingClientRect(), t = t.getElement().getBoundingClientRect();\n return e.left < t.right && e.right > t.left && e.top < t.bottom && e.bottom > t.top;\n };\n var h,\n d = new c(),\n o = (t.popupManager = d, t.Tooltip = e, o(g, h = e), g.prototype.addToEditor = function (e) {\n e.on(\"mousemove\", this.onMouseMove), e.on(\"mousedown\", this.hide), e.renderer.getMouseEventTarget().addEventListener(\"mouseout\", this.onMouseOut, !0);\n }, g.prototype.removeFromEditor = function (e) {\n e.off(\"mousemove\", this.onMouseMove), e.off(\"mousedown\", this.hide), e.renderer.getMouseEventTarget().removeEventListener(\"mouseout\", this.onMouseOut, !0), this.timeout && (clearTimeout(this.timeout), this.timeout = null);\n }, g.prototype.onMouseMove = function (e, t) {\n this.lastEvent = e, this.lastT = Date.now();\n var n,\n t = t.$mouseHandler.isMousePressed;\n this.isOpen && (n = this.lastEvent && this.lastEvent.getDocumentPosition(), this.range && this.range.contains(n.row, n.column) && !t && !this.isOutsideOfText(this.lastEvent) || this.hide()), this.timeout || t || (this.lastEvent = e, this.timeout = setTimeout(this.waitForHover, this.idleTime));\n }, g.prototype.waitForHover = function () {\n this.timeout && clearTimeout(this.timeout);\n var e = Date.now() - this.lastT;\n 10 < this.idleTime - e ? this.timeout = setTimeout(this.waitForHover, this.idleTime - e) : (this.timeout = null, this.lastEvent && !this.isOutsideOfText(this.lastEvent) && this.$gatherData(this.lastEvent, this.lastEvent.editor));\n }, g.prototype.isOutsideOfText = function (e) {\n var t = e.editor,\n n = e.getDocumentPosition(),\n i = t.session.getLine(n.row);\n if (n.column == i.length) {\n i = t.renderer.pixelToScreenCoordinates(e.clientX, e.clientY), e = t.session.documentToScreenPosition(n.row, n.column);\n if (e.column != i.column || e.row != i.row) return !0;\n }\n return !1;\n }, g.prototype.setDataProvider = function (e) {\n this.$gatherData = e;\n }, g.prototype.showForRange = function (e, t, n, i) {\n var o, r;\n i && i != this.lastEvent || this.isOpen && document.activeElement == this.getElement() || (i = e.renderer, this.isOpen || (d.addPopup(this), this.$registerCloseEvents(), this.setTheme(i.theme)), this.isOpen = !0, this.addMarker(t, e.session), this.range = s.fromPoints(t.start, t.end), (e = this.getElement()).innerHTML = \"\", e.appendChild(n), e.style.display = \"block\", n = i.textToScreenCoordinates(t.start.row, t.start.column), t = e.clientHeight, o = i.scroller.getBoundingClientRect(), r = !0, (r = n.pageY - t < 0 ? !1 : r) ? n.pageY -= t : n.pageY += i.lineHeight, e.style.maxWidth = o.width - (n.pageX - o.left) + \"px\", this.setPosition(n.pageX, n.pageY));\n }, g.prototype.addMarker = function (e, t) {\n this.marker && this.$markerSession.removeMarker(this.marker), this.$markerSession = t, this.marker = t && t.addMarker(e, \"ace_highlight-marker\", \"text\");\n }, g.prototype.hide = function (e) {\n !e && document.activeElement == this.getElement() || e && e.target && (\"keydown\" != e.type || e.ctrlKey || e.metaKey) && this.$element.contains(e.target) || (this.lastEvent = null, this.timeout && clearTimeout(this.timeout), this.timeout = null, this.addMarker(null), this.isOpen && (this.$removeCloseEvents(), this.getElement().style.display = \"none\", this.isOpen = !1, d.removePopup(this)));\n }, g.prototype.$registerCloseEvents = function () {\n window.addEventListener(\"keydown\", this.hide, !0), window.addEventListener(\"mousewheel\", this.hide, !0), window.addEventListener(\"mousedown\", this.hide, !0);\n }, g.prototype.$removeCloseEvents = function () {\n window.removeEventListener(\"keydown\", this.hide, !0), window.removeEventListener(\"mousewheel\", this.hide, !0), window.removeEventListener(\"mousedown\", this.hide, !0);\n }, g.prototype.onMouseOut = function (e) {\n this.timeout && (clearTimeout(this.timeout), this.timeout = null), this.lastEvent = null, !this.isOpen || !e.relatedTarget || e.relatedTarget == this.getElement() || e && e.currentTarget.contains(e.relatedTarget) || e.relatedTarget.classList.contains(\"ace_content\") || this.hide();\n }, g);\n function g(e) {\n void 0 === e && (e = document.body);\n var e = h.call(this, e) || this,\n t = (e.timeout = void 0, e.lastT = 0, e.idleTime = 350, e.lastEvent = void 0, e.onMouseOut = e.onMouseOut.bind(e), e.onMouseMove = e.onMouseMove.bind(e), e.waitForHover = e.waitForHover.bind(e), e.hide = e.hide.bind(e), e.getElement());\n return t.style.whiteSpace = \"pre-wrap\", t.style.pointerEvents = \"auto\", t.addEventListener(\"mouseout\", e.onMouseOut), t.tabIndex = -1, t.addEventListener(\"blur\", function () {\n t.contains(document.activeElement) || this.hide();\n }.bind(e)), e;\n }\n t.HoverTooltip = o;\n }), ace.define(\"ace/mouse/default_gutter_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/event\", \"ace/tooltip\", \"ace/config\"], function (e, t, n) {\n \"use strict\";\n\n var i,\n o = this && this.__extends || (i = function (e, t) {\n return (i = Object.setPrototypeOf || ({\n __proto__: []\n } instanceof Array ? function (e, t) {\n e.__proto__ = t;\n } : function (e, t) {\n for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);\n }))(e, t);\n }, function (e, t) {\n if (\"function\" != typeof t && null !== t) throw new TypeError(\"Class extends value \" + String(t) + \" is not a constructor or null\");\n function n() {\n this.constructor = e;\n }\n i(e, t), e.prototype = null === t ? Object.create(t) : (n.prototype = t.prototype, new n());\n }),\n l = this && this.__values || function (e) {\n var t = \"function\" == typeof Symbol && Symbol.iterator,\n n = t && e[t],\n i = 0;\n if (n) return n.call(e);\n if (e && \"number\" == typeof e.length) return {\n next: function () {\n return {\n value: (e = e && i >= e.length ? void 0 : e) && e[i++],\n done: !e\n };\n }\n };\n throw new TypeError(t ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n },\n d = e(\"../lib/dom\"),\n u = e(\"../lib/event\"),\n s = e(\"../tooltip\").Tooltip,\n r = e(\"../config\").nls;\n t.GutterHandler = function (i) {\n var o,\n r,\n s = i.editor,\n a = s.renderer.$gutterLayer,\n l = new g(s);\n function c() {\n o = o && clearTimeout(o), l.isOpen && (l.hideTooltip(), s.off(\"mousewheel\", c));\n }\n function h(e) {\n l.setPosition(e.x, e.y);\n }\n i.editor.setDefaultHandler(\"guttermousedown\", function (e) {\n if (s.isFocused() && 0 == e.getButton()) {\n var t = a.getRegion(e);\n if (\"foldWidgets\" != t) {\n var t = e.getDocumentPosition().row,\n n = s.session.selection;\n if (e.getShiftKey()) n.selectTo(t, 0);else {\n if (2 == e.domEvent.detail) return s.selectAll(), e.preventDefault();\n i.$clickSelection = s.selection.getLineRange(t);\n }\n return i.setState(\"selectByLines\"), i.captureMouse(e), e.preventDefault();\n }\n }\n }), i.editor.setDefaultHandler(\"guttermousemove\", function (e) {\n var t = e.domEvent.target || e.domEvent.srcElement;\n if (d.hasCssClass(t, \"ace_fold-widget\")) return c();\n l.isOpen && i.$tooltipFollowsMouse && h(e), r = e, o = o || setTimeout(function () {\n if (o = null, r && !i.isMousePressed) {\n var e = r.getDocumentPosition().row;\n if (e == s.session.getLength()) {\n var t = s.renderer.pixelToScreenCoordinates(0, r.y).row,\n n = r.$pos;\n if (t > s.session.documentToScreenRow(n.row, n.column)) return void c();\n }\n l.showTooltip(e), l.isOpen && (s.on(\"mousewheel\", c), !i.$tooltipFollowsMouse && (t = r.getGutterRow(), n = a.$lines.get(t)) ? (e = n.element.querySelector(\".ace_gutter_annotation\").getBoundingClientRect(), (t = l.getElement().style).left = e.right + \"px\", t.top = e.bottom + \"px\") : h(r));\n } else c();\n }, 50);\n }), u.addListener(s.renderer.$gutter, \"mouseout\", function (e) {\n r = null, l.isOpen && (o = o || setTimeout(function () {\n o = null, c();\n }, 50));\n }, s), s.on(\"changeSession\", c), s.on(\"input\", c);\n };\n o(p, a = s), p.prototype.setPosition = function (e, t) {\n var n = window.innerWidth || document.documentElement.clientWidth,\n i = window.innerHeight || document.documentElement.clientHeight,\n o = this.getWidth(),\n r = this.getHeight();\n n < (e += 15) + o && (e -= e + o - n), i < (t += 15) + r && (t -= 20 + r), s.prototype.setPosition.call(this, e, t);\n }, Object.defineProperty(p, \"annotationLabels\", {\n get: function () {\n return {\n error: {\n singular: r(\"error\"),\n plural: r(\"errors\")\n },\n warning: {\n singular: r(\"warning\"),\n plural: r(\"warnings\")\n },\n info: {\n singular: r(\"information message\"),\n plural: r(\"information messages\")\n }\n };\n },\n enumerable: !1,\n configurable: !0\n }), p.prototype.showTooltip = function (e) {\n var t = this.editor.renderer.$gutterLayer,\n n = t.$annotations[e],\n i = n ? {\n text: Array.from(n.text),\n type: Array.from(n.type)\n } : {\n text: [],\n type: []\n },\n o = t.session.getFoldLine(e);\n if (o && t.$showFoldedAnnotations) {\n for (var r, s = {\n error: [],\n warning: [],\n info: []\n }, a = e + 1; a <= o.end.row; a++) if (t.$annotations[a]) for (var l = 0; l < t.$annotations[a].text.length; l++) {\n var c = t.$annotations[a].type[l];\n s[c].push(t.$annotations[a].text[l]), \"error\" === c ? r = \"error_fold\" : \"warning\" === c && (r = \"warning_fold\");\n }\n \"error_fold\" !== r && \"warning_fold\" !== r || (n = \"\".concat(p.annotationsToSummaryString(s), \" in folded code.\"), i.text.push(n), i.type.push(r));\n }\n if (0 === i.text.length) return this.hide();\n for (var h = {\n error: [],\n warning: [],\n info: []\n }, d = t.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\", a = 0; a < i.text.length; a++) {\n var u = \" \").concat(i.text[a]);\n h[i.type[a].replace(\"_fold\", \"\")].push(u);\n }\n e = [].concat(h.error, h.warning, h.info).join(\" \");\n this.setHtml(e), this.$element.setAttribute(\"aria-live\", \"polite\"), this.isOpen || (this.setTheme(this.editor.renderer.theme), this.setClassName(\"ace_gutter-tooltip\")), this.show(), this.editor._signal(\"showGutterTooltip\", this);\n }, p.prototype.hideTooltip = function () {\n this.$element.removeAttribute(\"aria-live\"), this.hide(), this.editor._signal(\"hideGutterTooltip\", this);\n }, p.annotationsToSummaryString = function (e) {\n var t,\n n,\n i = [];\n try {\n for (var o = l([\"error\", \"warning\", \"info\"]), r = o.next(); !r.done; r = o.next()) {\n var s,\n a = r.value;\n e[a].length && (s = 1 === e[a].length ? p.annotationLabels[a].singular : p.annotationLabels[a].plural, i.push(\"\".concat(e[a].length, \" \").concat(s)));\n }\n } catch (e) {\n t = {\n error: e\n };\n } finally {\n try {\n r && !r.done && (n = o.return) && n.call(o);\n } finally {\n if (t) throw t.error;\n }\n }\n return i.join(\", \");\n };\n var a,\n g = p;\n function p(e) {\n var t = a.call(this, e.container) || this;\n return t.editor = e, t;\n }\n t.GutterTooltip = g;\n }), ace.define(\"ace/mouse/mouse_event\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/lib/useragent\"], function (e, t, n) {\n \"use strict\";\n\n var i = e(\"../lib/event\"),\n o = e(\"../lib/useragent\");\n function r(e, t) {\n this.domEvent = e, this.editor = t, this.x = this.clientX = e.clientX, this.y = this.clientY = e.clientY, this.$pos = null, this.$inSelection = null, this.propagationStopped = !1, this.defaultPrevented = !1;\n }\n r.prototype.stopPropagation = function () {\n i.stopPropagation(this.domEvent), this.propagationStopped = !0;\n }, r.prototype.preventDefault = function () {\n i.preventDefault(this.domEvent), this.defaultPrevented = !0;\n }, r.prototype.stop = function () {\n this.stopPropagation(), this.preventDefault();\n }, r.prototype.getDocumentPosition = function () {\n return this.$pos || (this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY)), this.$pos;\n }, r.prototype.getGutterRow = function () {\n var e = this.getDocumentPosition().row;\n return this.editor.session.documentToScreenRow(e, 0) - this.editor.session.documentToScreenRow(this.editor.renderer.$gutterLayer.$lines.get(0).row, 0);\n }, r.prototype.inSelection = function () {\n var e, t;\n return null === this.$inSelection && ((e = this.editor.getSelectionRange()).isEmpty() ? this.$inSelection = !1 : (t = this.getDocumentPosition(), this.$inSelection = e.contains(t.row, t.column))), this.$inSelection;\n }, r.prototype.getButton = function () {\n return i.getButton(this.domEvent);\n }, r.prototype.getShiftKey = function () {\n return this.domEvent.shiftKey;\n }, r.prototype.getAccelKey = function () {\n return o.isMac ? this.domEvent.metaKey : this.domEvent.ctrlKey;\n }, t.MouseEvent = r;\n }), ace.define(\"ace/mouse/dragdrop_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/event\", \"ace/lib/useragent\"], function (e, t, n) {\n \"use strict\";\n\n var w = e(\"../lib/dom\"),\n S = e(\"../lib/event\"),\n x = e(\"../lib/useragent\");\n function i(t) {\n var n,\n c,\n h,\n e,\n i,\n d,\n o,\n r,\n u,\n g,\n p,\n m = t.editor,\n s = w.createElement(\"div\"),\n a = (s.style.cssText = \"top:-100px;position:absolute;z-index:2147483647;opacity:0.5\", s.textContent = \" \", [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"].forEach(function (e) {\n t[e] = this[e];\n }, this), m.on(\"mousedown\", this.onMouseDown.bind(t)), m.container),\n l = 0;\n function f() {\n var e,\n t,\n n,\n i,\n o,\n r,\n s,\n a,\n l = d;\n d = m.renderer.screenToTextCoordinates(c, h), n = d, t = l, i = Date.now(), e = !t || n.row != t.row, t = !t || n.column != t.column, !g || e || t ? (m.moveCursorToPosition(n), g = i, p = {\n x: c,\n y: h\n }) : 5 < k(p.x, p.y, c, h) ? g = null : 200 <= i - g && (m.renderer.scrollCursorIntoView(), g = null), e = d, t = l, n = Date.now(), i = m.renderer.layerConfig.lineHeight, l = m.renderer.layerConfig.characterWidth, o = m.renderer.scroller.getBoundingClientRect(), o = {\n x: {\n left: c - o.left,\n right: o.right - c\n },\n y: {\n top: h - o.top,\n bottom: o.bottom - h\n }\n }, r = Math.min(o.x.left, o.x.right), s = Math.min(o.y.top, o.y.bottom), a = {\n row: e.row,\n column: e.column\n }, r / l <= 2 && (a.column += o.x.left < o.x.right ? -3 : 2), s / i <= 1 && (a.row += o.y.top < o.y.bottom ? -1 : 1), r = e.row != a.row, l = e.column != a.column, s = !t || e.row != t.row, r || l && !s ? u ? 200 <= n - u && m.renderer.scrollCursorIntoView(a) : u = n : u = null;\n }\n function C() {\n i = m.selection.toOrientedRange(), n = m.session.addMarker(i, \"ace_selection\", m.getSelectionStyle()), m.clearSelection(), m.isFocused() && m.renderer.$cursorLayer.setBlinking(!1), clearInterval(e), f(), e = setInterval(f, 20), l = 0, S.addListener(document, \"mousemove\", I);\n }\n function y() {\n clearInterval(e), m.session.removeMarker(n), n = null, m.selection.fromOrientedRange(i), m.isFocused() && !r && m.$resetCursorStyle(), l = 0, g = u = d = i = null, S.removeListener(document, \"mousemove\", I);\n }\n this.onDragStart = function (e) {\n var t;\n if (this.cancelDrag || !a.draggable) return t = this, setTimeout(function () {\n t.startSelect(), t.captureMouse(e);\n }, 0), e.preventDefault();\n i = m.getSelectionRange();\n var n = e.dataTransfer;\n n.effectAllowed = m.getReadOnly() ? \"copy\" : \"copyMove\", m.container.appendChild(s), n.setDragImage && n.setDragImage(s, 0, 0), setTimeout(function () {\n m.container.removeChild(s);\n }), n.clearData(), n.setData(\"Text\", m.session.getTextRange()), r = !0, this.setState(\"drag\");\n }, this.onDragEnd = function (e) {\n a.draggable = !1, r = !1, this.setState(null), m.getReadOnly() || (e = e.dataTransfer.dropEffect, o || \"move\" != e || m.session.remove(m.getSelectionRange()), m.$resetCursorStyle()), this.editor.unsetStyle(\"ace_dragging\"), this.editor.renderer.setCursorStyle(\"\");\n }, this.onDragEnter = function (e) {\n if (!m.getReadOnly() && b(e.dataTransfer)) return c = e.clientX, h = e.clientY, n || C(), l++, e.dataTransfer.dropEffect = o = A(e), S.preventDefault(e);\n }, this.onDragOver = function (e) {\n if (!m.getReadOnly() && b(e.dataTransfer)) return c = e.clientX, h = e.clientY, n || (C(), l++), null !== v && (v = null), e.dataTransfer.dropEffect = o = A(e), S.preventDefault(e);\n }, this.onDragLeave = function (e) {\n if (--l <= 0 && n) return y(), o = null, S.preventDefault(e);\n }, this.onDrop = function (e) {\n if (d) {\n var t = e.dataTransfer;\n if (r) switch (o) {\n case \"move\":\n i = i.contains(d.row, d.column) ? {\n start: d,\n end: d\n } : m.moveText(i, d);\n break;\n case \"copy\":\n i = m.moveText(i, d, !0);\n } else {\n t = t.getData(\"Text\");\n i = {\n start: d,\n end: m.session.insert(d, t)\n }, m.focus(), o = null;\n }\n return y(), S.preventDefault(e);\n }\n }, S.addListener(a, \"dragstart\", this.onDragStart.bind(t), m), S.addListener(a, \"dragend\", this.onDragEnd.bind(t), m), S.addListener(a, \"dragenter\", this.onDragEnter.bind(t), m), S.addListener(a, \"dragover\", this.onDragOver.bind(t), m), S.addListener(a, \"dragleave\", this.onDragLeave.bind(t), m), S.addListener(a, \"drop\", this.onDrop.bind(t), m);\n var v = null;\n function I() {\n null == v && (v = setTimeout(function () {\n null != v && n && y();\n }, 20));\n }\n function b(e) {\n e = e.types;\n return !e || Array.prototype.some.call(e, function (e) {\n return \"text/plain\" == e || \"Text\" == e;\n });\n }\n function A(e) {\n var t = [\"copy\", \"copymove\", \"all\", \"uninitialized\"],\n n = x.isMac ? e.altKey : e.ctrlKey,\n i = \"uninitialized\";\n try {\n i = e.dataTransfer.effectAllowed.toLowerCase();\n } catch (e) {}\n var o = \"none\";\n return n && 0 <= t.indexOf(i) ? o = \"copy\" : 0 <= [\"move\", \"copymove\", \"linkmove\", \"all\", \"uninitialized\"].indexOf(i) ? o = \"move\" : 0 <= t.indexOf(i) && (o = \"copy\"), o;\n }\n }\n function k(e, t, n, i) {\n return Math.sqrt(Math.pow(n - e, 2) + Math.pow(i - t, 2));\n }\n !function () {\n this.dragWait = function () {\n Date.now() - this.mousedownEvent.time > this.editor.getDragDelay() && this.startDrag();\n }, this.dragWaitEnd = function () {\n this.editor.container.draggable = !1, this.startSelect(this.mousedownEvent.getDocumentPosition()), this.selectEnd();\n }, this.dragReadyEnd = function (e) {\n this.editor.$resetCursorStyle(), this.editor.unsetStyle(\"ace_dragging\"), this.editor.renderer.setCursorStyle(\"\"), this.dragWaitEnd();\n }, this.startDrag = function () {\n this.cancelDrag = !1;\n var e = this.editor,\n t = (e.container.draggable = !0, e.renderer.$cursorLayer.setBlinking(!1), e.setStyle(\"ace_dragging\"), x.isWin ? \"default\" : \"move\");\n e.renderer.setCursorStyle(t), this.setState(\"dragReady\");\n }, this.onMouseDrag = function (e) {\n var t = this.editor.container;\n x.isIE && \"dragReady\" == this.state && 3 < k(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y) && t.dragDrop(), \"dragWait\" === this.state && 0 < k(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y) && (t.draggable = !1, this.startSelect(this.mousedownEvent.getDocumentPosition()));\n }, this.onMouseDown = function (e) {\n var t, n, i;\n this.$dragEnabled && (this.mousedownEvent = e, t = this.editor, n = e.inSelection(), i = e.getButton(), 1 !== (e.domEvent.detail || 1) || 0 !== i || !n || e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()) || (this.mousedownEvent.time = Date.now(), \"unselectable\" in (i = e.domEvent.target || e.domEvent.srcElement) && (i.unselectable = \"on\"), t.getDragDelay() ? (x.isWebKit && (this.cancelDrag = !0, t.container.draggable = !0), this.setState(\"dragWait\")) : this.startDrag(), this.captureMouse(e, this.onMouseDrag.bind(this)), e.defaultPrevented = !0));\n };\n }.call(i.prototype), t.DragdropHandler = i;\n }), ace.define(\"ace/mouse/touch_handler\", [\"require\", \"exports\", \"module\", \"ace/mouse/mouse_event\", \"ace/lib/event\", \"ace/lib/dom\"], function (e, t, n) {\n \"use strict\";\n\n var S = e(\"./mouse_event\").MouseEvent,\n i = e(\"../lib/event\"),\n a = e(\"../lib/dom\");\n t.addTouchListeners = function (e, h) {\n var d,\n u,\n g,\n p,\n m,\n t,\n f,\n C,\n r,\n y = \"scroll\",\n v = 0,\n I = 0,\n b = 0,\n A = 0;\n function o() {\n function t(e) {\n var t,\n n = e.target.getAttribute(\"action\");\n \"more\" != n && o ? (\"paste\" == n ? i.readText().then(function (e) {\n h.execCommand(n, e);\n }) : n && (\"cut\" != n && \"copy\" != n || (i ? i.writeText(h.getCopyText()) : document.execCommand(\"copy\")), h.execCommand(n)), r.firstChild.style.display = \"none\", o = !1, \"openCommandPalette\" != n && h.focus()) : (o = !o, e = h.getCopyText(), t = h.session.getUndoManager().hasUndo(), r.replaceChild(a.buildDom(o ? [\"span\", !e && [\"span\", {\n class: \"ace_mobile-button\",\n action: \"selectall\"\n }, \"Select All\"], e && [\"span\", {\n class: \"ace_mobile-button\",\n action: \"copy\"\n }, \"Copy\"], e && [\"span\", {\n class: \"ace_mobile-button\",\n action: \"cut\"\n }, \"Cut\"], i && [\"span\", {\n class: \"ace_mobile-button\",\n action: \"paste\"\n }, \"Paste\"], t && [\"span\", {\n class: \"ace_mobile-button\",\n action: \"undo\"\n }, \"Undo\"], [\"span\", {\n class: \"ace_mobile-button\",\n action: \"find\"\n }, \"Find\"], [\"span\", {\n class: \"ace_mobile-button\",\n action: \"openCommandPalette\"\n }, \"Palette\"]] : [\"span\"]), r.firstChild));\n }\n var i = window.navigator && window.navigator.clipboard,\n o = !1;\n r = a.buildDom([\"div\", {\n class: \"ace_mobile-menu\",\n ontouchstart: function (e) {\n y = \"menu\", e.stopPropagation(), e.preventDefault(), h.textInput.focus();\n },\n ontouchend: function (e) {\n e.stopPropagation(), e.preventDefault(), t(e);\n },\n onclick: t\n }, [\"span\"], [\"span\", {\n class: \"ace_mobile-button\",\n action: \"more\"\n }, \"...\"]], h.container);\n }\n function n() {\n r || o();\n var e = h.selection.cursor,\n e = h.renderer.textToScreenCoordinates(e.row, e.column),\n t = h.renderer.textToScreenCoordinates(0, 0).pageX,\n n = h.renderer.scrollLeft,\n i = h.container.getBoundingClientRect();\n r.style.top = e.pageY - i.top - 3 + \"px\", e.pageX - i.left < i.width - 70 ? (r.style.left = \"\", r.style.right = \"10px\") : (r.style.right = \"\", r.style.left = t + n - i.left + \"px\"), r.style.display = \"\", r.firstChild.style.display = \"none\", h.on(\"input\", s);\n }\n function s(e) {\n r && (r.style.display = \"none\"), h.off(\"input\", s);\n }\n function w() {\n m = null, clearTimeout(m);\n var e = h.selection.getRange(),\n t = e.contains(f.row, f.column);\n !e.isEmpty() && t || (h.selection.moveToPosition(f), h.selection.selectWord()), y = \"wait\", n();\n }\n i.addListener(e, \"contextmenu\", function (e) {\n C && h.textInput.getElement().focus();\n }, h), i.addListener(e, \"touchstart\", function (e) {\n var t = e.touches;\n if (m || 1 < t.length) clearTimeout(m), m = null, g = -1, y = \"zoom\";else {\n C = h.$mouseHandler.isMousePressed = !0;\n var n = h.renderer.layerConfig.lineHeight,\n i = h.renderer.layerConfig.lineHeight,\n o = e.timeStamp,\n r = (p = o, t[0]),\n s = r.clientX,\n r = r.clientY,\n s = (Math.abs(d - s) + Math.abs(u - r) > n && (g = -1), d = e.clientX = s, u = e.clientY = r, b = A = 0, new S(e, h));\n if (f = s.getDocumentPosition(), o - g < 500 && 1 == t.length && !v) I++, e.preventDefault(), e.button = 0, m = null, clearTimeout(m), h.selection.moveToPosition(f), (r = 2 <= I ? h.selection.getLineRange(f.row) : h.session.getBracketRange(f)) && !r.isEmpty() ? h.selection.setRange(r) : h.selection.selectWord(), y = \"wait\";else {\n I = 0;\n var s = h.selection.cursor,\n t = h.selection.isEmpty() ? s : h.selection.anchor,\n r = h.renderer.$cursorLayer.getPixelPosition(s, !0),\n s = h.renderer.$cursorLayer.getPixelPosition(t, !0),\n t = h.renderer.scroller.getBoundingClientRect(),\n a = h.renderer.layerConfig.offset,\n l = h.renderer.scrollLeft,\n c = function (e, t) {\n return (e /= i) * e + (t = t / n - .75) * t;\n };\n if (e.clientX < t.left) return void (y = \"zoom\");\n r = c(e.clientX - t.left - r.left + l, e.clientY - t.top - r.top + a), c = c(e.clientX - t.left - s.left + l, e.clientY - t.top - s.top + a);\n r < 3.5 && c < 3.5 && (y = c < r ? \"cursor\" : \"anchor\"), y = c < 3.5 ? \"anchor\" : r < 3.5 ? \"cursor\" : \"scroll\", m = setTimeout(w, 450);\n }\n g = o;\n }\n }, h), i.addListener(e, \"touchend\", function (e) {\n C = h.$mouseHandler.isMousePressed = !1, t && clearInterval(t), \"zoom\" == y ? (y = \"\", v = 0) : (m ? (h.selection.moveToPosition(f), v = 0, n) : \"scroll\" == y ? (v += 60, t = setInterval(function () {\n v-- <= 0 && (clearInterval(t), t = null), Math.abs(b) < .01 && (b = 0), Math.abs(A) < .01 && (A = 0), v < 20 && (b *= .9), v < 20 && (A *= .9);\n var e = h.session.getScrollTop();\n h.renderer.scrollBy(10 * b, 10 * A), e == h.session.getScrollTop() && (v = 0);\n }, 10), s) : n)(), clearTimeout(m), m = null;\n }, h), i.addListener(e, \"touchmove\", function (e) {\n m && (clearTimeout(m), m = null);\n var t = e.touches;\n if (!(1 < t.length || \"zoom\" == y)) {\n var t = t[0],\n n = d - t.clientX,\n i = u - t.clientY;\n if (\"wait\" == y) {\n if (!(4 < n * n + i * i)) return e.preventDefault();\n y = \"cursor\";\n }\n d = t.clientX, u = t.clientY, e.clientX = t.clientX, e.clientY = t.clientY;\n var t = e.timeStamp,\n o = t - p;\n p = t, \"scroll\" == y ? ((t = new S(e, h)).speed = 1, t.wheelX = n, t.wheelY = i, 10 * Math.abs(n) < Math.abs(i) && (n = 0), 10 * Math.abs(i) < Math.abs(n) && (i = 0), 0 != o && (b = n / o, A = i / o), h._emit(\"mousewheel\", t), t.propagationStopped || (b = A = 0)) : (n = new S(e, h).getDocumentPosition(), \"cursor\" == y ? h.selection.moveCursorToPosition(n) : \"anchor\" == y && h.selection.setSelectionAnchor(n.row, n.column), h.renderer.scrollCursorIntoView(n), e.preventDefault());\n }\n }, h);\n };\n }), ace.define(\"ace/mouse/mouse_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/lib/useragent\", \"ace/mouse/default_handlers\", \"ace/mouse/default_gutter_handler\", \"ace/mouse/mouse_event\", \"ace/mouse/dragdrop_handler\", \"ace/mouse/touch_handler\", \"ace/config\"], function (e, t, n) {\n \"use strict\";\n\n var h = e(\"../lib/event\"),\n d = e(\"../lib/useragent\"),\n r = e(\"./default_handlers\").DefaultHandlers,\n s = e(\"./default_gutter_handler\").GutterHandler,\n u = e(\"./mouse_event\").MouseEvent,\n a = e(\"./dragdrop_handler\").DragdropHandler,\n l = e(\"./touch_handler\").addTouchListeners,\n e = e(\"../config\"),\n i = (o.prototype.onMouseEvent = function (e, t) {\n this.editor.session && this.editor._emit(e, new u(t, this.editor));\n }, o.prototype.onMouseMove = function (e, t) {\n var n = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n n && n.length && this.editor._emit(e, new u(t, this.editor));\n }, o.prototype.onMouseWheel = function (e, t) {\n var n = new u(t, this.editor);\n n.speed = 2 * this.$scrollSpeed, n.wheelX = t.wheelX, n.wheelY = t.wheelY, this.editor._emit(e, n);\n }, o.prototype.setState = function (e) {\n this.state = e;\n }, o.prototype.captureMouse = function (e, t) {\n this.x = e.x, this.y = e.y, this.isMousePressed = !0;\n function n(e) {\n if (e) {\n if (d.isWebKit && !e.which && a.releaseMouse) return a.releaseMouse();\n a.x = e.clientX, a.y = e.clientY, t && t(e), a.mouseEvent = new u(e, a.editor), a.$mouseMoved = !0;\n }\n }\n function i(e) {\n r.off(\"beforeEndOperation\", l), clearInterval(c), r.session && o(), a[a.state + \"End\"] && a[a.state + \"End\"](e), a.state = \"\", a.isMousePressed = s.$isMousePressed = !1, s.$keepTextAreaAtCursor && s.$moveTextAreaToCursor(), a.$onCaptureMouseMove = a.releaseMouse = null, e && a.onMouseEvent(\"mouseup\", e), r.endOperation();\n }\n function o() {\n a[a.state] && a[a.state](), a.$mouseMoved = !1;\n }\n var r = this.editor,\n s = this.editor.renderer,\n a = (s.$isMousePressed = !0, this);\n if (d.isOldIE && \"dblclick\" == e.domEvent.type) return setTimeout(function () {\n i(e);\n });\n var l = function (e) {\n a.releaseMouse && r.curOp.command.name && r.curOp.selectionChanged && (a[a.state + \"End\"] && a[a.state + \"End\"](), a.state = \"\", a.releaseMouse());\n },\n c = (r.on(\"beforeEndOperation\", l), r.startOperation({\n command: {\n name: \"mouse\"\n }\n }), a.$onCaptureMouseMove = n, a.releaseMouse = h.capture(this.editor.container, n, i), setInterval(o, 20));\n }, o.prototype.cancelContextMenu = function () {\n var t = function (e) {\n e && e.domEvent && \"contextmenu\" != e.domEvent.type || (this.editor.off(\"nativecontextmenu\", t), e && e.domEvent && h.stopEvent(e.domEvent));\n }.bind(this);\n setTimeout(t, 10), this.editor.on(\"nativecontextmenu\", t);\n }, o.prototype.destroy = function () {\n this.releaseMouse && this.releaseMouse();\n }, o);\n function o(i) {\n function e(e) {\n document.hasFocus && document.hasFocus() && (i.isFocused() || document.activeElement != (i.textInput && i.textInput.getElement())) || window.focus(), i.focus(), setTimeout(function () {\n i.isFocused() || i.focus();\n });\n }\n var o = this,\n t = (this.editor = i, new r(this), new s(this), new a(this), i.renderer.getMouseEventTarget()),\n n = (h.addListener(t, \"click\", this.onMouseEvent.bind(this, \"click\"), i), h.addListener(t, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"), i), h.addMultiMouseDownListener([t, i.renderer.scrollBarV && i.renderer.scrollBarV.inner, i.renderer.scrollBarH && i.renderer.scrollBarH.inner, i.textInput && i.textInput.getElement()].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\", i), h.addMouseWheelListener(i.container, this.onMouseWheel.bind(this, \"mousewheel\"), i), l(i.container, i), i.renderer.$gutter);\n h.addListener(n, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"), i), h.addListener(n, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"), i), h.addListener(n, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"), i), h.addListener(n, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"), i), h.addListener(t, \"mousedown\", e, i), h.addListener(n, \"mousedown\", e, i), d.isIE && i.renderer.scrollBarV && (h.addListener(i.renderer.scrollBarV.element, \"mousedown\", e, i), h.addListener(i.renderer.scrollBarH.element, \"mousedown\", e, i)), i.on(\"mousemove\", function (e) {\n var t, n;\n o.state || o.$dragDelay || !o.$dragEnabled || (e = i.renderer.screenToTextCoordinates(e.x, e.y), t = i.session.selection.getRange(), n = i.renderer, !t.isEmpty() && t.insideStart(e.row, e.column) ? n.setCursorStyle(\"default\") : n.setCursorStyle(\"\"));\n }, i);\n }\n i.prototype.releaseMouse = null, e.defineOptions(i.prototype, \"mouseHandler\", {\n scrollSpeed: {\n initialValue: 2\n },\n dragDelay: {\n initialValue: d.isMac ? 150 : 0\n },\n dragEnabled: {\n initialValue: !0\n },\n focusTimeout: {\n initialValue: 0\n },\n tooltipFollowsMouse: {\n initialValue: !0\n }\n }), t.MouseHandler = i;\n }), ace.define(\"ace/mouse/fold_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (e, t, n) {\n \"use strict\";\n\n var i = e(\"../lib/dom\");\n t.FoldHandler = function (o) {\n o.on(\"click\", function (e) {\n var t = e.getDocumentPosition(),\n n = o.session,\n t = n.getFoldAt(t.row, t.column, 1),\n t = (t && (e.getAccelKey() ? n.removeFold(t) : n.expandFold(t), e.stop()), e.domEvent && e.domEvent.target);\n t && i.hasCssClass(t, \"ace_inline_button\") && i.hasCssClass(t, \"ace_toggle_wrap\") && (n.setOption(\"wrap\", !n.getUseWrapMode()), o.renderer.scrollCursorIntoView());\n }), o.on(\"gutterclick\", function (e) {\n var t, n;\n \"foldWidgets\" == o.renderer.$gutterLayer.getRegion(e) && (t = e.getDocumentPosition().row, (n = o.session).foldWidgets && n.foldWidgets[t] && o.session.onFoldWidgetClick(t, e), o.isFocused() || o.focus(), e.stop());\n }), o.on(\"gutterdblclick\", function (e) {\n var t, n, i;\n \"foldWidgets\" == o.renderer.$gutterLayer.getRegion(e) && (i = e.getDocumentPosition().row, (n = (n = (t = o.session).getParentFoldRangeData(i, !0)).range || n.firstRange) && (i = n.start.row, (i = t.getFoldAt(i, t.getLine(i).length, 1)) ? t.removeFold(i) : (t.addFold(\"...\", n), o.renderer.scrollCursorIntoView({\n row: n.start.row,\n column: 0\n }))), e.stop());\n });\n };\n }), ace.define(\"ace/keyboard/keybinding\", [\"require\", \"exports\", \"module\", \"ace/lib/keys\", \"ace/lib/event\"], function (e, t, n) {\n \"use strict\";\n\n var o = e(\"../lib/keys\"),\n l = e(\"../lib/event\");\n function i(e) {\n this.$editor = e, this.$data = {\n editor: e\n }, this.$handlers = [], this.setDefaultHandler(e.commands);\n }\n i.prototype.setDefaultHandler = function (e) {\n this.removeKeyboardHandler(this.$defaultHandler), this.$defaultHandler = e, this.addKeyboardHandler(e, 0);\n }, i.prototype.setKeyboardHandler = function (e) {\n var t = this.$handlers;\n if (t[t.length - 1] != e) {\n for (; t[t.length - 1] && t[t.length - 1] != this.$defaultHandler;) this.removeKeyboardHandler(t[t.length - 1]);\n this.addKeyboardHandler(e, 1);\n }\n }, i.prototype.addKeyboardHandler = function (e, t) {\n var n;\n e && (\"function\" != typeof e || e.handleKeyboard || (e.handleKeyboard = e), -1 != (n = this.$handlers.indexOf(e)) && this.$handlers.splice(n, 1), null == t ? this.$handlers.push(e) : this.$handlers.splice(t, 0, e), -1 == n) && e.attach && e.attach(this.$editor);\n }, i.prototype.removeKeyboardHandler = function (e) {\n var t = this.$handlers.indexOf(e);\n return -1 != t && (this.$handlers.splice(t, 1), e.detach && e.detach(this.$editor), !0);\n }, i.prototype.getKeyboardHandler = function () {\n return this.$handlers[this.$handlers.length - 1];\n }, i.prototype.getStatusText = function () {\n var t = this.$data,\n n = t.editor;\n return this.$handlers.map(function (e) {\n return e.getStatusText && e.getStatusText(n, t) || \"\";\n }).filter(Boolean).join(\" \");\n }, i.prototype.$callKeyboardHandlers = function (e, t, n, i) {\n for (var o, r = !1, s = this.$editor.commands, a = this.$handlers.length; a-- && !((o = this.$handlers[a].handleKeyboard(this.$data, e, t, n, i)) && o.command && ((r = \"null\" == o.command || s.exec(o.command, this.$editor, o.args, i)) && i && -1 != e && 1 != o.passEvent && 1 != o.command.passEvent && l.stopEvent(i), r)););\n return r || -1 != e || (o = {\n command: \"insertstring\"\n }, r = s.exec(\"insertstring\", this.$editor, t)), r && this.$editor._signal && this.$editor._signal(\"keyboardActivity\", o), r;\n }, i.prototype.onCommandKey = function (e, t, n) {\n var i = o.keyCodeToString(n);\n return this.$callKeyboardHandlers(t, i, n, e);\n }, i.prototype.onTextInput = function (e) {\n return this.$callKeyboardHandlers(-1, e);\n }, t.KeyBinding = i;\n }), ace.define(\"ace/lib/bidiutil\", [\"require\", \"exports\", \"module\"], function (e, l, t) {\n \"use strict\";\n\n var p = 0,\n m = 0,\n f = !1,\n C = !1,\n y = !1,\n v = [[0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 17, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 21, 21, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0]],\n I = [[2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 33, 3, 1, 1]],\n b = 0,\n A = 1,\n w = 2,\n S = 3,\n x = 4,\n k = 5,\n E = 6,\n T = 7,\n R = 8,\n _ = 9,\n $ = 10,\n L = 11,\n N = 12,\n B = 13,\n M = 14,\n W = 15,\n H = 16,\n P = 17,\n G = 18,\n i = [G, G, G, G, G, G, G, G, G, E, k, E, R, k, G, G, G, G, G, G, G, G, G, G, G, G, G, G, k, k, k, E, R, x, x, L, L, L, x, x, x, x, x, $, _, $, _, _, w, w, w, w, w, w, w, w, w, w, _, x, x, x, x, x, x, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, x, x, x, x, x, x, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, x, x, x, x, G, G, G, G, G, G, k, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, _, x, L, L, L, L, x, x, x, x, b, x, x, G, x, x, L, L, w, w, x, b, x, x, x, w, b, x, x, x, x, x],\n o = [R, R, R, R, R, R, R, R, R, R, R, G, G, G, b, A, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, R, k, B, M, W, H, P, _, L, L, L, L, L, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, _, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, R];\n function c(e, t, n, i) {\n var o,\n r,\n s,\n a = p ? I : v,\n l = 0,\n c = -1,\n h = null,\n d = null,\n u = [];\n if (!i) for (h = 0, i = []; h < n; h++) i[h] = F(e[h]);\n for (m = p, y = C = f = !1, d = 0; d < n; d++) {\n if (s = l, u[d] = o = function (e, t, n, i) {\n var o,\n r,\n s,\n a = t[i];\n switch (a) {\n case b:\n case A:\n f = !1;\n case x:\n case S:\n return a;\n case w:\n return f ? S : w;\n case T:\n return f = !0, A;\n case R:\n return x;\n case _:\n return i < 1 || i + 1 >= t.length || (o = n[i - 1]) != w && o != S || (l = t[i + 1]) != w && l != S ? x : (l = f ? S : l) == o ? l : x;\n case $:\n return (o = 0 < i ? n[i - 1] : k) == w && i + 1 < t.length && t[i + 1] == w ? w : x;\n case L:\n if (0 < i && n[i - 1] == w) return w;\n if (f) return x;\n for (s = i + 1, r = t.length; s < r && t[s] == L;) s++;\n return s < r && t[s] == w ? w : x;\n case N:\n for (r = t.length, s = i + 1; s < r && t[s] == N;) s++;\n if (s < r) {\n var l = e[i],\n l = 1425 <= l && l <= 2303 || 64286 == l;\n if (o = t[s], l && (o == A || o == T)) return A;\n }\n return i < 1 || (o = t[i - 1]) == k ? x : n[i - 1];\n case k:\n return C = !(f = !1), p;\n case E:\n return y = !0, x;\n case B:\n case M:\n case H:\n case P:\n case W:\n f = !1;\n case G:\n return x;\n }\n }(e, i, u, d), s = 240 & (l = a[s][o]), l &= 15, t[d] = r = a[l][5], 0 < s) {\n if (16 == s) for (h = c; h < d; h++) t[h] = 1;\n c = -1;\n }\n if (a[l][6]) -1 == c && (c = d);else if (-1 < c) {\n for (h = c; h < d; h++) t[h] = r;\n c = -1;\n }\n i[d] == k && (t[d] = 0), m |= r;\n }\n if (y) for (h = 0; h < n; h++) if (i[h] == E) {\n t[h] = p;\n for (var g = h - 1; 0 <= g && i[g] == R; g--) t[g] = p;\n }\n }\n function h(e, t, n) {\n if (!(m < e)) if (1 != e || 1 != p || C) for (var i, o, r, s, a = n.length, l = 0; l < a;) {\n if (t[l] >= e) {\n for (i = l + 1; i < a && t[i] >= e;) i++;\n for (o = l, r = i - 1; o < r; o++, r--) s = n[o], n[o] = n[r], n[r] = s;\n l = i;\n }\n l++;\n } else n.reverse();\n }\n function F(e) {\n var t = e.charCodeAt(0),\n n = t >> 8;\n return 0 == n ? 191 < t ? b : i[t] : 5 == n ? /[\\u0591-\\u05f4]/.test(e) ? A : b : 6 == n ? /[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(e) ? N : /[\\u0660-\\u0669\\u066b-\\u066c]/.test(e) ? S : 1642 == t ? L : /[\\u06f0-\\u06f9]/.test(e) ? w : T : 32 == n && t <= 8287 ? o[255 & t] : 254 == n && 65136 <= t ? T : x;\n }\n l.L = b, l.R = A, l.EN = w, l.ON_R = 3, l.AN = 4, l.R_H = 5, l.B = 6, l.RLE = 7, l.DOT = \"·\", l.doBidiReorder = function (e, t, n) {\n if (e.length < 2) return {};\n var i = e.split(\"\"),\n o = new Array(i.length),\n r = new Array(i.length),\n s = [];\n p = n ? 1 : 0, c(i, s, i.length, t);\n for (var a = 0; a < o.length; o[a] = a, a++);\n h(2, s, o), h(1, s, o);\n for (a = 0; a < o.length - 1; a++) t[a] === S ? s[a] = l.AN : s[a] === A && (t[a] > T && t[a] < B || t[a] === x || t[a] === G) ? s[a] = l.ON_R : 0 < a && \"ل\" === i[a - 1] && /\\u0622|\\u0623|\\u0625|\\u0627/.test(i[a]) && (s[a - 1] = s[a] = l.R_H, a++);\n i[i.length - 1] === l.DOT && (s[i.length - 1] = l.B), \"\" === i[0] && (s[0] = l.RLE);\n for (a = 0; a < o.length; a++) r[a] = s[o[a]];\n return {\n logicalFromVisual: o,\n bidiLevels: r\n };\n }, l.hasBidiCharacters = function (e, t) {\n for (var n = !1, i = 0; i < e.length; i++) t[i] = F(e.charAt(i)), n || t[i] != A && t[i] != T && t[i] != S || (n = !0);\n return n;\n }, l.getVisualFromLogicalIdx = function (e, t) {\n for (var n = 0; n < t.logicalFromVisual.length; n++) if (t.logicalFromVisual[n] == e) return n;\n return 0;\n };\n }), ace.define(\"ace/bidihandler\", [\"require\", \"exports\", \"module\", \"ace/lib/bidiutil\", \"ace/lib/lang\"], function (e, t, n) {\n \"use strict\";\n\n var a = e(\"./lib/bidiutil\"),\n s = e(\"./lib/lang\"),\n i = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\n function o(e) {\n this.session = e, this.bidiMap = {}, this.currentRow = null, this.bidiUtil = a, this.charWidths = [], this.EOL = \"¬\", this.showInvisibles = !0, this.isRtlDir = !1, this.$isRtl = !1, this.line = \"\", this.wrapIndent = 0, this.EOF = \"¶\", this.RLE = \"\", this.contentWidth = 0, this.fontMetrics = null, this.rtlLineOffset = 0, this.wrapOffset = 0, this.isMoveLeftOperation = !1, this.seenBidi = i.test(e.getValue());\n }\n o.prototype.isBidiRow = function (e, t, n) {\n return !!this.seenBidi && (e !== this.currentRow && (this.currentRow = e, this.updateRowLine(t, n), this.updateBidiMap()), this.bidiMap.bidiLevels);\n }, o.prototype.onChange = function (e) {\n this.seenBidi ? this.currentRow = null : \"insert\" == e.action && i.test(e.lines.join(\"\\n\")) && (this.seenBidi = !0, this.currentRow = null);\n }, o.prototype.getDocumentRow = function () {\n var e = 0,\n t = this.session.$screenRowCache;\n return e = t.length && 0 <= (t = this.session.$getRowCacheIndex(t, this.currentRow)) ? this.session.$docRowCache[t] : e;\n }, o.prototype.getSplitIndex = function () {\n var e = 0,\n t = this.session.$screenRowCache;\n if (t.length) for (var n, i = this.session.$getRowCacheIndex(t, this.currentRow); 0 < this.currentRow - e && (n = this.session.$getRowCacheIndex(t, this.currentRow - e - 1)) === i;) i = n, e++;else e = this.currentRow;\n return e;\n }, o.prototype.updateRowLine = function (e, t) {\n var n,\n i = (e = void 0 === e ? this.getDocumentRow() : e) === this.session.getLength() - 1 ? this.EOF : this.EOL,\n o = (this.wrapIndent = 0, this.line = this.session.getLine(e), this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE, (!this.session.$useWrapMode || (e = this.session.$wrapData[e]) && (0 < (t = void 0 === t ? this.getSplitIndex() : t) && e.length ? (this.wrapIndent = e.indent, this.wrapOffset = this.wrapIndent * this.charWidths[a.L], this.line = t < e.length ? this.line.substring(e[t - 1], e[t]) : this.line.substring(e[e.length - 1])) : this.line = this.line.substring(0, e[t]), t == e.length)) && (this.line += this.showInvisibles ? i : a.DOT), this.session),\n r = 0;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function (e, t) {\n return \"\\t\" === e || o.isFullWidth(e.charCodeAt(0)) ? (n = \"\\t\" === e ? o.getScreenTabSize(t + r) : 2, r += n - 1, s.stringRepeat(a.DOT, n)) : e;\n }), this.isRtlDir && (this.fontMetrics.$main.textContent = this.line.charAt(this.line.length - 1) == a.DOT ? this.line.substr(0, this.line.length - 1) : this.line, this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width);\n }, o.prototype.updateBidiMap = function () {\n var e = [];\n a.hasBidiCharacters(this.line, e) || this.isRtlDir ? this.bidiMap = a.doBidiReorder(this.line, e, this.isRtlDir) : this.bidiMap = {};\n }, o.prototype.markAsDirty = function () {\n this.currentRow = null;\n }, o.prototype.updateCharacterWidths = function (e) {\n var t;\n this.characterWidth !== e.$characterSize.width && (this.fontMetrics = e, t = this.characterWidth = e.$characterSize.width, e = e.$measureCharWidth(\"ה\"), this.charWidths[a.L] = this.charWidths[a.EN] = this.charWidths[a.ON_R] = t, this.charWidths[a.R] = this.charWidths[a.AN] = e, this.charWidths[a.R_H] = .45 * e, this.charWidths[a.B] = this.charWidths[a.RLE] = 0, this.currentRow = null);\n }, o.prototype.setShowInvisibles = function (e) {\n this.showInvisibles = e, this.currentRow = null;\n }, o.prototype.setEolChar = function (e) {\n this.EOL = e;\n }, o.prototype.setContentWidth = function (e) {\n this.contentWidth = e;\n }, o.prototype.isRtlLine = function (e) {\n return !!this.$isRtl || (null != e ? this.session.getLine(e).charAt(0) == this.RLE : this.isRtlDir);\n }, o.prototype.setRtlDirection = function (e, t) {\n for (var n = e.getCursorPosition(), i = e.selection.getSelectionAnchor().row; i <= n.row; i++) t || e.session.getLine(i).charAt(0) !== e.session.$bidiHandler.RLE ? t && e.session.getLine(i).charAt(0) !== e.session.$bidiHandler.RLE && e.session.doc.insert({\n column: 0,\n row: i\n }, e.session.$bidiHandler.RLE) : e.session.doc.removeInLine(i, 0, 1);\n }, o.prototype.getPosLeft = function (e) {\n e -= this.wrapIndent;\n var t = this.line.charAt(0) === this.RLE ? 1 : 0,\n n = t < e ? this.session.getOverwrite() ? e : e - 1 : t,\n i = a.getVisualFromLogicalIdx(n, this.bidiMap),\n o = this.bidiMap.bidiLevels,\n r = 0;\n !this.session.getOverwrite() && e <= t && o[i] % 2 != 0 && i++;\n for (var s = 0; s < i; s++) r += this.charWidths[o[s]];\n return !this.session.getOverwrite() && t < e && o[i] % 2 == 0 && (r += this.charWidths[o[i]]), this.wrapIndent && (r += this.isRtlDir ? -1 * this.wrapOffset : this.wrapOffset), this.isRtlDir && (r += this.rtlLineOffset), r;\n }, o.prototype.getSelections = function (e, t) {\n var n,\n i = this.bidiMap,\n o = i.bidiLevels,\n r = [],\n s = 0,\n a = Math.min(e, t) - this.wrapIndent,\n l = Math.max(e, t) - this.wrapIndent,\n c = !1,\n h = !1,\n d = 0;\n this.wrapIndent && (s += this.isRtlDir ? -1 * this.wrapOffset : this.wrapOffset);\n for (var u, g = 0; g < o.length; g++) u = i.logicalFromVisual[g], n = o[g], (c = a <= u && u < l) && !h ? d = s : !c && h && r.push({\n left: d,\n width: s - d\n }), s += this.charWidths[n], h = c;\n if (c && g === o.length && r.push({\n left: d,\n width: s - d\n }), this.isRtlDir) for (var p = 0; p < r.length; p++) r[p].left += this.rtlLineOffset;\n return r;\n }, o.prototype.offsetToCol = function (e) {\n this.isRtlDir && (e -= this.rtlLineOffset);\n var t = 0,\n e = Math.max(e, 0),\n n = 0,\n i = 0,\n o = this.bidiMap.bidiLevels,\n r = this.charWidths[o[i]];\n for (this.wrapIndent && (e -= this.isRtlDir ? -1 * this.wrapOffset : this.wrapOffset); n + r / 2 < e;) {\n if (n += r, i === o.length - 1) {\n r = 0;\n break;\n }\n r = this.charWidths[o[++i]];\n }\n return 0 === (t = 0 < i && o[i - 1] % 2 != 0 && o[i] % 2 == 0 ? (e < n && i--, this.bidiMap.logicalFromVisual[i]) : 0 < i && o[i - 1] % 2 == 0 && o[i] % 2 != 0 ? 1 + (n < e ? this.bidiMap.logicalFromVisual[i] : this.bidiMap.logicalFromVisual[i - 1]) : this.isRtlDir && i === o.length - 1 && 0 === r && o[i - 1] % 2 == 0 || !this.isRtlDir && 0 === i && o[i] % 2 != 0 ? 1 + this.bidiMap.logicalFromVisual[i] : (0 < i && o[i - 1] % 2 != 0 && 0 !== r && i--, this.bidiMap.logicalFromVisual[i])) && this.isRtlDir && t++, t + this.wrapIndent;\n }, t.BidiHandler = o;\n }), ace.define(\"ace/selection\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/lang\", \"ace/lib/event_emitter\", \"ace/range\"], function (e, t, n) {\n \"use strict\";\n\n var i = e(\"./lib/oop\"),\n o = e(\"./lib/lang\"),\n r = e(\"./lib/event_emitter\").EventEmitter,\n s = e(\"./range\").Range,\n e = (a.prototype.isEmpty = function () {\n return this.$isEmpty || this.anchor.row == this.lead.row && this.anchor.column == this.lead.column;\n }, a.prototype.isMultiLine = function () {\n return !this.$isEmpty && this.anchor.row != this.cursor.row;\n }, a.prototype.getCursor = function () {\n return this.lead.getPosition();\n }, a.prototype.setAnchor = function (e, t) {\n this.$isEmpty = !1, this.anchor.setPosition(e, t);\n }, a.prototype.getAnchor = function () {\n return this.$isEmpty ? this.getSelectionLead() : this.anchor.getPosition();\n }, a.prototype.getSelectionLead = function () {\n return this.lead.getPosition();\n }, a.prototype.isBackwards = function () {\n var e = this.anchor,\n t = this.lead;\n return e.row > t.row || e.row == t.row && e.column > t.column;\n }, a.prototype.getRange = function () {\n var e = this.anchor,\n t = this.lead;\n return this.$isEmpty ? s.fromPoints(t, t) : this.isBackwards() ? s.fromPoints(t, e) : s.fromPoints(e, t);\n }, a.prototype.clearSelection = function () {\n this.$isEmpty || (this.$isEmpty = !0, this._emit(\"changeSelection\"));\n }, a.prototype.selectAll = function () {\n this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n }, a.prototype.setRange = function (e, t) {\n var n = t ? e.end : e.start,\n t = t ? e.start : e.end;\n this.$setSelection(n.row, n.column, t.row, t.column);\n }, a.prototype.$setSelection = function (e, t, n, i) {\n var o, r;\n !this.$silent && (o = this.$isEmpty, r = this.inMultiSelectMode, this.$silent = !0, this.$cursorChanged = this.$anchorChanged = !1, this.anchor.setPosition(e, t), this.cursor.setPosition(n, i), this.$isEmpty = !s.comparePoints(this.anchor, this.cursor), this.$silent = !1, this.$cursorChanged && this._emit(\"changeCursor\"), this.$cursorChanged || this.$anchorChanged || o != this.$isEmpty || r) && this._emit(\"changeSelection\");\n }, a.prototype.$moveSelection = function (e) {\n var t = this.lead;\n this.$isEmpty && this.setSelectionAnchor(t.row, t.column), e.call(this);\n }, a.prototype.selectTo = function (e, t) {\n this.$moveSelection(function () {\n this.moveCursorTo(e, t);\n });\n }, a.prototype.selectToPosition = function (e) {\n this.$moveSelection(function () {\n this.moveCursorToPosition(e);\n });\n }, a.prototype.moveTo = function (e, t) {\n this.clearSelection(), this.moveCursorTo(e, t);\n }, a.prototype.moveToPosition = function (e) {\n this.clearSelection(), this.moveCursorToPosition(e);\n }, a.prototype.selectUp = function () {\n this.$moveSelection(this.moveCursorUp);\n }, a.prototype.selectDown = function () {\n this.$moveSelection(this.moveCursorDown);\n }, a.prototype.selectRight = function () {\n this.$moveSelection(this.moveCursorRight);\n }, a.prototype.selectLeft = function () {\n this.$moveSelection(this.moveCursorLeft);\n }, a.prototype.selectLineStart = function () {\n this.$moveSelection(this.moveCursorLineStart);\n }, a.prototype.selectLineEnd = function () {\n this.$moveSelection(this.moveCursorLineEnd);\n }, a.prototype.selectFileEnd = function () {\n this.$moveSelection(this.moveCursorFileEnd);\n }, a.prototype.selectFileStart = function () {\n this.$moveSelection(this.moveCursorFileStart);\n }, a.prototype.selectWordRight = function () {\n this.$moveSelection(this.moveCursorWordRight);\n }, a.prototype.selectWordLeft = function () {\n this.$moveSelection(this.moveCursorWordLeft);\n }, a.prototype.getWordRange = function (e, t) {\n var n;\n return void 0 === t && (e = (n = e || this.lead).row, t = n.column), this.session.getWordRange(e, t);\n }, a.prototype.selectWord = function () {\n this.setSelectionRange(this.getWordRange());\n }, a.prototype.selectAWord = function () {\n var e = this.getCursor(),\n e = this.session.getAWordRange(e.row, e.column);\n this.setSelectionRange(e);\n }, a.prototype.getLineRange = function (e, t) {\n var e = \"number\" == typeof e ? e : this.lead.row,\n n = this.session.getFoldLine(e),\n n = n ? (e = n.start.row, n.end.row) : e;\n return !0 === t ? new s(e, 0, n, this.session.getLine(n).length) : new s(e, 0, n + 1, 0);\n }, a.prototype.selectLine = function () {\n this.setSelectionRange(this.getLineRange());\n }, a.prototype.moveCursorUp = function () {\n this.moveCursorBy(-1, 0);\n }, a.prototype.moveCursorDown = function () {\n this.moveCursorBy(1, 0);\n }, a.prototype.wouldMoveIntoSoftTab = function (e, t, n) {\n var i = e.column,\n o = e.column + t;\n return n < 0 && (i = e.column - t, o = e.column), this.session.isTabStop(e) && this.doc.getLine(e.row).slice(i, o).split(\" \").length - 1 == t;\n }, a.prototype.moveCursorLeft = function () {\n var e,\n t = this.lead.getPosition();\n (e = this.session.getFoldAt(t.row, t.column, -1)) ? this.moveCursorTo(e.start.row, e.start.column) : 0 === t.column ? 0 < t.row && this.moveCursorTo(t.row - 1, this.doc.getLine(t.row - 1).length) : (e = this.session.getTabSize(), this.wouldMoveIntoSoftTab(t, e, -1) && !this.session.getNavigateWithinSoftTabs() ? this.moveCursorBy(0, -e) : this.moveCursorBy(0, -1));\n }, a.prototype.moveCursorRight = function () {\n var e,\n t = this.lead.getPosition();\n (e = this.session.getFoldAt(t.row, t.column, 1)) ? this.moveCursorTo(e.end.row, e.end.column) : this.lead.column == this.doc.getLine(this.lead.row).length ? this.lead.row < this.doc.getLength() - 1 && this.moveCursorTo(this.lead.row + 1, 0) : (e = this.session.getTabSize(), t = this.lead, this.wouldMoveIntoSoftTab(t, e, 1) && !this.session.getNavigateWithinSoftTabs() ? this.moveCursorBy(0, e) : this.moveCursorBy(0, 1));\n }, a.prototype.moveCursorLineStart = function () {\n var e = this.lead.row,\n t = this.lead.column,\n n = this.session.documentToScreenRow(e, t),\n n = this.session.screenToDocumentPosition(n, 0),\n e = this.session.getDisplayLine(e, null, n.row, n.column).match(/^\\s*/);\n e[0].length == t || this.session.$useEmacsStyleLineStart || (n.column += e[0].length), this.moveCursorToPosition(n);\n }, a.prototype.moveCursorLineEnd = function () {\n var e,\n t = this.lead,\n t = this.session.getDocumentLastRowColumnPosition(t.row, t.column);\n this.lead.column == t.column && (e = this.session.getLine(t.row), t.column == e.length) && 0 < (e = e.search(/\\s+$/)) && (t.column = e), this.moveCursorTo(t.row, t.column);\n }, a.prototype.moveCursorFileEnd = function () {\n var e = this.doc.getLength() - 1,\n t = this.doc.getLine(e).length;\n this.moveCursorTo(e, t);\n }, a.prototype.moveCursorFileStart = function () {\n this.moveCursorTo(0, 0);\n }, a.prototype.moveCursorLongWordRight = function () {\n var e = this.lead.row,\n t = this.lead.column,\n n = this.doc.getLine(e),\n i = n.substring(t),\n o = (this.session.nonTokenRe.lastIndex = 0, this.session.tokenRe.lastIndex = 0, this.session.getFoldAt(e, t, 1));\n o ? this.moveCursorTo(o.end.row, o.end.column) : (this.session.nonTokenRe.exec(i) && (t += this.session.nonTokenRe.lastIndex, this.session.nonTokenRe.lastIndex = 0, i = n.substring(t)), t >= n.length ? (this.moveCursorTo(e, n.length), this.moveCursorRight(), e < this.doc.getLength() - 1 && this.moveCursorWordRight()) : (this.session.tokenRe.exec(i) && (t += this.session.tokenRe.lastIndex, this.session.tokenRe.lastIndex = 0), this.moveCursorTo(e, t)));\n }, a.prototype.moveCursorLongWordLeft = function () {\n var e,\n t = this.lead.row,\n n = this.lead.column;\n (e = this.session.getFoldAt(t, n, -1)) ? this.moveCursorTo(e.start.row, e.start.column) : (null == (e = this.session.getFoldStringAt(t, n, -1)) && (e = this.doc.getLine(t).substring(0, n)), e = o.stringReverse(e), this.session.nonTokenRe.lastIndex = 0, this.session.tokenRe.lastIndex = 0, this.session.nonTokenRe.exec(e) && (n -= this.session.nonTokenRe.lastIndex, e = e.slice(this.session.nonTokenRe.lastIndex), this.session.nonTokenRe.lastIndex = 0), n <= 0 ? (this.moveCursorTo(t, 0), this.moveCursorLeft(), 0 < t && this.moveCursorWordLeft()) : (this.session.tokenRe.exec(e) && (n -= this.session.tokenRe.lastIndex, this.session.tokenRe.lastIndex = 0), this.moveCursorTo(t, n)));\n }, a.prototype.$shortWordEndIndex = function (e) {\n var t,\n n = 0,\n i = /\\s/,\n o = this.session.tokenRe;\n if (o.lastIndex = 0, this.session.tokenRe.exec(e)) n = this.session.tokenRe.lastIndex;else {\n for (; (t = e[n]) && i.test(t);) n++;\n if (n < 1) for (o.lastIndex = 0; (t = e[n]) && !o.test(t);) if (o.lastIndex = 0, n++, i.test(t)) {\n if (2 < n) {\n n--;\n break;\n }\n for (; (t = e[n]) && i.test(t);) n++;\n if (2 < n) break;\n }\n }\n return o.lastIndex = 0, n;\n }, a.prototype.moveCursorShortWordRight = function () {\n var e = this.lead.row,\n t = this.lead.column,\n n = this.doc.getLine(e),\n i = n.substring(t),\n o = this.session.getFoldAt(e, t, 1);\n if (o) return this.moveCursorTo(o.end.row, o.end.column);\n if (t == n.length) {\n for (var r = this.doc.getLength(); i = this.doc.getLine(++e), e < r && /^\\s*$/.test(i););\n /^\\s+/.test(i) || (i = \"\"), t = 0;\n }\n o = this.$shortWordEndIndex(i);\n this.moveCursorTo(e, t + o);\n }, a.prototype.moveCursorShortWordLeft = function () {\n var e = this.lead.row,\n t = this.lead.column;\n if (i = this.session.getFoldAt(e, t, -1)) return this.moveCursorTo(i.start.row, i.start.column);\n var n = this.session.getLine(e).substring(0, t);\n if (0 === t) {\n for (; n = this.doc.getLine(--e), 0 < e && /^\\s*$/.test(n););\n t = n.length, /\\s+$/.test(n) || (n = \"\");\n }\n var i = o.stringReverse(n),\n i = this.$shortWordEndIndex(i);\n return this.moveCursorTo(e, t - i);\n }, a.prototype.moveCursorWordRight = function () {\n this.session.$selectLongWords ? this.moveCursorLongWordRight() : this.moveCursorShortWordRight();\n }, a.prototype.moveCursorWordLeft = function () {\n this.session.$selectLongWords ? this.moveCursorLongWordLeft() : this.moveCursorShortWordLeft();\n }, a.prototype.moveCursorBy = function (e, t) {\n var n,\n i = this.session.documentToScreenPosition(this.lead.row, this.lead.column),\n o = (0 === t && (0 !== e && (this.session.$bidiHandler.isBidiRow(i.row, this.lead.row) ? (n = this.session.$bidiHandler.getPosLeft(i.column), i.column = Math.round(n / this.session.$bidiHandler.charWidths[0])) : n = i.column * this.session.$bidiHandler.charWidths[0]), this.$desiredColumn ? i.column = this.$desiredColumn : this.$desiredColumn = i.column), 0 != e && this.session.lineWidgets && this.session.lineWidgets[this.lead.row] && (o = this.session.lineWidgets[this.lead.row], e < 0 ? e -= o.rowsAbove || 0 : 0 < e && (e += o.rowCount - (o.rowsAbove || 0))), this.session.screenToDocumentPosition(i.row + e, i.column, n));\n 0 !== e && 0 === t && o.row === this.lead.row && (o.column, this.lead.column), this.moveCursorTo(o.row, o.column + t, 0 === t);\n }, a.prototype.moveCursorToPosition = function (e) {\n this.moveCursorTo(e.row, e.column);\n }, a.prototype.moveCursorTo = function (e, t, n) {\n var i = this.session.getFoldAt(e, t, 1),\n i = (i && (e = i.start.row, t = i.start.column), this.$keepDesiredColumnOnChange = !0, this.session.getLine(e));\n /[\\uDC00-\\uDFFF]/.test(i.charAt(t)) && i.charAt(t - 1) && (this.lead.row == e && this.lead.column == t + 1 ? t -= 1 : t += 1), this.lead.setPosition(e, t), this.$keepDesiredColumnOnChange = !1, n || (this.$desiredColumn = null);\n }, a.prototype.moveCursorToScreen = function (e, t, n) {\n e = this.session.screenToDocumentPosition(e, t);\n this.moveCursorTo(e.row, e.column, n);\n }, a.prototype.detach = function () {\n this.lead.detach(), this.anchor.detach();\n }, a.prototype.fromOrientedRange = function (e) {\n this.setSelectionRange(e, e.cursor == e.start), this.$desiredColumn = e.desiredColumn || this.$desiredColumn;\n }, a.prototype.toOrientedRange = function (e) {\n var t = this.getRange();\n return e ? (e.start.column = t.start.column, e.start.row = t.start.row, e.end.column = t.end.column, e.end.row = t.end.row) : e = t, e.cursor = this.isBackwards() ? e.start : e.end, e.desiredColumn = this.$desiredColumn, e;\n }, a.prototype.getRangeOfMovements = function (e) {\n var t = this.getCursor();\n try {\n e(this);\n var n = this.getCursor();\n return s.fromPoints(t, n);\n } catch (e) {\n return s.fromPoints(t, t);\n } finally {\n this.moveCursorToPosition(t);\n }\n }, a.prototype.toJSON = function () {\n var e;\n return this.rangeCount ? e = this.ranges.map(function (e) {\n var t = e.clone();\n return t.isBackwards = e.cursor == e.start, t;\n }) : (e = this.getRange()).isBackwards = this.isBackwards(), e;\n }, a.prototype.fromJSON = function (e) {\n if (null == e.start) {\n if (this.rangeList && 1 < e.length) {\n this.toSingleRange(e[0]);\n for (var t = e.length; t--;) {\n var n = s.fromPoints(e[t].start, e[t].end);\n e[t].isBackwards && (n.cursor = n.start), this.addRange(n, !0);\n }\n return;\n }\n e = e[0];\n }\n this.rangeList && this.toSingleRange(e), this.setSelectionRange(e, e.isBackwards);\n }, a.prototype.isEqual = function (e) {\n if ((e.length || this.rangeCount) && e.length != this.rangeCount) return !1;\n if (!e.length || !this.ranges) return this.getRange().isEqual(e);\n for (var t = this.ranges.length; t--;) if (!this.ranges[t].isEqual(e[t])) return !1;\n return !0;\n }, a);\n function a(e) {\n this.session = e, this.doc = e.getDocument(), this.clearSelection(), this.cursor = this.lead = this.doc.createAnchor(0, 0), this.anchor = this.doc.createAnchor(0, 0), this.$silent = !1;\n var t = this;\n this.cursor.on(\"change\", function (e) {\n t.$cursorChanged = !0, t.$silent || t._emit(\"changeCursor\"), t.$isEmpty || t.$silent || t._emit(\"changeSelection\"), t.$keepDesiredColumnOnChange || e.old.column == e.value.column || (t.$desiredColumn = null);\n }), this.anchor.on(\"change\", function () {\n t.$anchorChanged = !0, t.$isEmpty || t.$silent || t._emit(\"changeSelection\");\n });\n }\n e.prototype.setSelectionAnchor = e.prototype.setAnchor, e.prototype.getSelectionAnchor = e.prototype.getAnchor, e.prototype.setSelectionRange = e.prototype.setRange, i.implement(e.prototype, r), t.Selection = e;\n }), ace.define(\"ace/tokenizer\", [\"require\", \"exports\", \"module\", \"ace/lib/report_error\"], function (e, t, n) {\n \"use strict\";\n\n var e = e(\"./lib/report_error\").reportError,\n y = 2e3,\n i = (o.prototype.$setMaxTokenCount = function (e) {\n y = 0 | e;\n }, o.prototype.$applyToken = function (e) {\n var t = this.splitRegex.exec(e).slice(1),\n n = this.token.apply(this, t);\n if (\"string\" == typeof n) return [{\n type: n,\n value: e\n }];\n for (var i = [], o = 0, r = n.length; o < r; o++) t[o] && (i[i.length] = {\n type: n[o],\n value: t[o]\n });\n return i;\n }, o.prototype.$arrayTokens = function (e) {\n if (!e) return [];\n var t = this.splitRegex.exec(e);\n if (!t) return \"text\";\n for (var n = [], i = this.tokenArray, o = 0, r = i.length; o < r; o++) t[o + 1] && (n[n.length] = {\n type: i[o],\n value: t[o + 1]\n });\n return n;\n }, o.prototype.removeCapturingGroups = function (e) {\n return e.replace(/\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!<]|(\\()/g, function (e, t) {\n return t ? \"(?:\" : e;\n });\n }, o.prototype.createSplitterRegexp = function (e, t) {\n var s, a, l;\n return \"$\" != (e = \"^\" != (e = -1 != e.indexOf(\"(?=\") && (s = 0, a = !1, l = {}, e.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function (e, t, n, i, o, r) {\n return a ? a = \"]\" != o : o ? a = !0 : i ? (s == l.stack && (l.end = r + 1, l.stack = -1), s--) : n && (s++, 1 != n.length) && (l.stack = s, l.start = r), e;\n }), null != l.end) && /^\\)*$/.test(e.substr(l.end)) ? e.substring(0, l.start) + e.substr(l.end) : e).charAt(0) ? \"^\" + e : e).charAt(e.length - 1) && (e += \"$\"), new RegExp(e, (t || \"\").replace(\"g\", \"\"));\n }, o.prototype.getLineTokens = function (e, t) {\n t && \"string\" != typeof t ? \"#tmp\" === (t = (n = t.slice(0))[0]) && (n.shift(), t = n.shift()) : n = [];\n for (var n, i, o = t || \"start\", r = (r = this.states[o]) || this.states[o = \"start\"], s = this.matchMappings[o], a = this.regExps[o], l = [], c = a.lastIndex = 0, h = 0, d = {\n type: null,\n value: \"\"\n }; i = a.exec(e);) {\n var u,\n g = s.defaultToken,\n p = null,\n m = i[0],\n f = a.lastIndex;\n f - m.length > c && (u = e.substring(c, f - m.length), d.type == g ? d.value += u : (d.type && l.push(d), d = {\n type: g,\n value: u\n }));\n for (var C = 0; C < i.length - 2; C++) if (void 0 !== i[C + 1]) {\n g = (p = r[s[C]]).onMatch ? p.onMatch(m, o, n, e) : p.token, p.next && (o = \"string\" == typeof p.next ? p.next : p.next(o, n), (r = this.states[o]) || (this.reportError(\"state doesn't exist\", o), r = this.states[o = \"start\"]), s = this.matchMappings[o], (a = this.regExps[o]).lastIndex = c = f), p.consumeLineEnd && (c = f);\n break;\n }\n if (m) if (\"string\" == typeof g) p && !1 === p.merge || d.type !== g ? (d.type && l.push(d), d = {\n type: g,\n value: m\n }) : d.value += m;else if (g) {\n d.type && l.push(d);\n for (d = {\n type: null,\n value: \"\"\n }, C = 0; C < g.length; C++) l.push(g[C]);\n }\n if (c == e.length) break;\n if (c = f, h++ > y) {\n for (h > 2 * e.length && this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: t,\n line: e\n }); c < e.length;) d.type && l.push(d), d = {\n value: e.substring(c, c += 500),\n type: \"overflow\"\n };\n o = \"start\", n = [];\n break;\n }\n }\n return d.type && l.push(d), 1 < n.length && n[0] !== o && n.unshift(\"#tmp\", o), {\n tokens: l,\n state: n.length ? n : o\n };\n }, o);\n function o(e) {\n for (var t in this.states = e, this.regExps = {}, this.matchMappings = {}, this.states) {\n for (var n = this.states[t], i = [], o = 0, r = this.matchMappings[t] = {\n defaultToken: \"text\"\n }, s = \"g\", a = [], l = 0; l < n.length; l++) {\n var c,\n h,\n d = n[l];\n d.defaultToken && (r.defaultToken = d.defaultToken), d.caseInsensitive && -1 === s.indexOf(\"i\") && (s += \"i\"), d.unicode && -1 === s.indexOf(\"u\") && (s += \"u\"), null == d.regex || (d.regex instanceof RegExp && (d.regex = d.regex.toString().slice(1, -1)), c = d.regex, h = new RegExp(\"(?:(\" + c + \")|(.))\").exec(\"a\").length - 2, Array.isArray(d.token) ? 1 == d.token.length || 1 == h ? d.token = d.token[0] : h - 1 != d.token.length ? (this.reportError(\"number of classes and regexp groups doesn't match\", {\n rule: d,\n groupCount: h - 1\n }), d.token = d.token[0]) : (d.tokenArray = d.token, d.token = null, d.onMatch = this.$arrayTokens) : \"function\" != typeof d.token || d.onMatch || (d.onMatch = 1 < h ? this.$applyToken : d.token), 1 < h && (c = /\\\\\\d/.test(d.regex) ? d.regex.replace(/\\\\([0-9]+)/g, function (e, t) {\n return \"\\\\\" + (parseInt(t, 10) + o + 1);\n }) : (h = 1, this.removeCapturingGroups(d.regex)), d.splitRegex || \"string\" == typeof d.token || a.push(d)), r[o] = l, o += h, i.push(c), d.onMatch) || (d.onMatch = null);\n }\n i.length || (r[0] = 0, i.push(\"$\")), a.forEach(function (e) {\n e.splitRegex = this.createSplitterRegexp(e.regex, s);\n }, this), this.regExps[t] = new RegExp(\"(\" + i.join(\")|(\") + \")|($)\", s);\n }\n }\n i.prototype.reportError = e, t.Tokenizer = i;\n }), ace.define(\"ace/mode/text_highlight_rules\", [\"require\", \"exports\", \"module\", \"ace/lib/deep_copy\"], function (e, t, n) {\n \"use strict\";\n\n function i() {\n this.$rules = {\n start: [{\n token: \"empty_line\",\n regex: \"^$\"\n }, {\n defaultToken: \"text\"\n }]\n };\n }\n var l = e(\"../lib/deep_copy\").deepCopy;\n !function () {\n this.addRules = function (e, t) {\n if (t) for (var n in e) {\n for (var i = e[n], o = 0; o < i.length; o++) {\n var r = i[o];\n (r.next || r.onMatch) && (\"string\" == typeof r.next && 0 !== r.next.indexOf(t) && (r.next = t + r.next), r.nextState) && 0 !== r.nextState.indexOf(t) && (r.nextState = t + r.nextState);\n }\n this.$rules[t + n] = i;\n } else for (var n in e) this.$rules[n] = e[n];\n }, this.getRules = function () {\n return this.$rules;\n }, this.embedRules = function (e, t, n, i, o) {\n e = \"function\" == typeof e ? new e().getRules() : e;\n if (i) for (var r = 0; r < i.length; r++) i[r] = t + i[r];else for (var s in i = [], e) i.push(t + s);\n if (this.addRules(e, t), n) for (var a = Array.prototype[o ? \"push\" : \"unshift\"], r = 0; r < i.length; r++) a.apply(this.$rules[i[r]], l(n));\n this.$embeds || (this.$embeds = []), this.$embeds.push(t);\n }, this.getEmbeds = function () {\n return this.$embeds;\n };\n function d(e, t) {\n return \"start\" == e && !t.length || t.unshift(this.nextState, e), this.nextState;\n }\n function u(e, t) {\n return t.shift(), t.shift() || \"start\";\n }\n this.normalizeRules = function () {\n var c = 0,\n h = this.$rules;\n Object.keys(h).forEach(function e(t) {\n var n = h[t];\n n.processed = !0;\n for (var i = 0; i < n.length; i++) {\n var o = n[i],\n r = null,\n s = (Array.isArray(o) && (r = o, o = {}), !o.regex && o.start && (o.regex = o.start, o.next || (o.next = []), o.next.push({\n defaultToken: o.token\n }, {\n token: o.token + \".end\",\n regex: o.end || o.start,\n next: \"pop\"\n }), o.token = o.token + \".start\", o.push = !0), o.next || o.push);\n if (s && Array.isArray(s) ? ((l = o.stateName) || (\"string\" != typeof (l = o.token) && (l = l[0] || \"\"), h[l] && (l += c++)), h[l] = s, e(o.next = l)) : \"pop\" == s && (o.next = u), o.push && (o.nextState = o.next || o.push, o.next = d, delete o.push), o.rules) for (var a in o.rules) h[a] ? h[a].push && h[a].push.apply(h[a], o.rules[a]) : h[a] = o.rules[a];\n var l = \"string\" == typeof o ? o : o.include;\n l && (\"$self\" === l && (l = \"start\"), r = Array.isArray(l) ? l.map(function (e) {\n return h[e];\n }) : h[l]), r && (s = [i, 1].concat(r), o.noEscape && (s = s.filter(function (e) {\n return !e.next;\n })), n.splice.apply(n, s), i--), o.keywordMap && (o.token = this.createKeywordMapper(o.keywordMap, o.defaultToken || \"text\", o.caseInsensitive), delete o.defaultToken);\n }\n }, this);\n }, this.createKeywordMapper = function (o, t, r, s) {\n var a = Object.create(null);\n return this.$keywordList = [], Object.keys(o).forEach(function (e) {\n for (var t = o[e].split(s || \"|\"), n = t.length; n--;) {\n var i = t[n];\n this.$keywordList.push(i), r && (i = i.toLowerCase()), a[i] = e;\n }\n }, this), o = null, r ? function (e) {\n return a[e.toLowerCase()] || t;\n } : function (e) {\n return a[e] || t;\n };\n }, this.getKeywords = function () {\n return this.$keywords;\n };\n }.call(i.prototype), t.TextHighlightRules = i;\n }), ace.define(\"ace/mode/behaviour\", [\"require\", \"exports\", \"module\"], function (e, t, n) {\n \"use strict\";\n\n function i() {\n this.$behaviours = {};\n }\n !function () {\n this.add = function (e, t, n) {\n switch (void 0) {\n case this.$behaviours:\n this.$behaviours = {};\n case this.$behaviours[e]:\n this.$behaviours[e] = {};\n }\n this.$behaviours[e][t] = n;\n }, this.addBehaviours = function (e) {\n for (var t in e) for (var n in e[t]) this.add(t, n, e[t][n]);\n }, this.remove = function (e) {\n this.$behaviours && this.$behaviours[e] && delete this.$behaviours[e];\n }, this.inherit = function (e, t) {\n e = (\"function\" == typeof e ? new e() : e).getBehaviours(t), this.addBehaviours(e);\n }, this.getBehaviours = function (e) {\n if (e) {\n for (var t = {}, n = 0; n < e.length; n++) this.$behaviours[e[n]] && (t[e[n]] = this.$behaviours[e[n]]);\n return t;\n }\n return this.$behaviours;\n };\n }.call(i.prototype), t.Behaviour = i;\n }), ace.define(\"ace/token_iterator\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (e, t, n) {\n \"use strict\";\n\n var i = e(\"./range\").Range;\n function o(e, t, n) {\n this.$session = e, this.$row = t, this.$rowTokens = e.getTokens(t);\n e = e.getTokenAt(t, n);\n this.$tokenIndex = e ? e.index : -1;\n }\n o.prototype.stepBackward = function () {\n for (--this.$tokenIndex; this.$tokenIndex < 0;) {\n if (--this.$row, this.$row < 0) return this.$row = 0, null;\n this.$rowTokens = this.$session.getTokens(this.$row), this.$tokenIndex = this.$rowTokens.length - 1;\n }\n return this.$rowTokens[this.$tokenIndex];\n }, o.prototype.stepForward = function () {\n var e;\n for (this.$tokenIndex += 1; this.$tokenIndex >= this.$rowTokens.length;) {\n if (this.$row += 1, e = e || this.$session.getLength(), this.$row >= e) return this.$row = e - 1, null;\n this.$rowTokens = this.$session.getTokens(this.$row), this.$tokenIndex = 0;\n }\n return this.$rowTokens[this.$tokenIndex];\n }, o.prototype.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n }, o.prototype.getCurrentTokenRow = function () {\n return this.$row;\n }, o.prototype.getCurrentTokenColumn = function () {\n var e = this.$rowTokens,\n t = this.$tokenIndex,\n n = e[t].start;\n if (void 0 === n) for (n = 0; 0 < t;) n += e[--t].value.length;\n return n;\n }, o.prototype.getCurrentTokenPosition = function () {\n return {\n row: this.$row,\n column: this.getCurrentTokenColumn()\n };\n }, o.prototype.getCurrentTokenRange = function () {\n var e = this.$rowTokens[this.$tokenIndex],\n t = this.getCurrentTokenColumn();\n return new i(this.$row, t, this.$row, t + e.value.length);\n }, t.TokenIterator = o;\n }), ace.define(\"ace/mode/behaviour/cstyle\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/mode/behaviour\", \"ace/token_iterator\", \"ace/lib/lang\"], function (e, t, n) {\n \"use strict\";\n\n function u(e) {\n var t = -1;\n if ((l = e.multiSelect && (t = e.selection.index, l.rangeCount != e.multiSelect.rangeCount) ? {\n rangeCount: e.multiSelect.rangeCount\n } : l)[t]) return m = l[t];\n m = l[t] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n }\n function g(e, t, n, i) {\n var o = e.end.row - e.start.row;\n return {\n text: n + t + i,\n selection: [0, e.start.column + 1, o, e.end.column + (o ? 0 : 1)]\n };\n }\n function p(d) {\n d = d || {}, this.add(\"braces\", \"insertion\", function (e, t, n, i, o) {\n var r = n.getCursorPosition(),\n s = i.doc.getLine(r.row);\n if (\"{\" == o) return u(n), l = n.getSelectionRange(), \"\" !== (c = i.doc.getTextRange(l)) && \"{\" !== c && n.getWrapBehavioursEnabled() ? g(l, c, \"{\", \"}\") : p.isSaneInsertion(n, i) ? /[\\]\\}\\)]/.test(s[r.column]) || n.inMultiSelectMode || d.braces ? (p.recordAutoInsert(n, i, \"}\"), {\n text: \"{}\",\n selection: [1, 1]\n }) : (p.recordMaybeInsert(n, i, \"{\"), {\n text: \"{\",\n selection: [1, 1]\n }) : void 0;\n if (\"}\" == o) {\n u(n);\n var a = s.substring(r.column, r.column + 1);\n if (\"}\" == a) if (null !== i.$findOpeningBracket(\"}\", {\n column: r.column + 1,\n row: r.row\n }) && p.isAutoInsertedClosing(r, s, o)) return p.popAutoInsertedClosing(), {\n text: \"\",\n selection: [1, 1]\n };\n } else {\n if (\"\\n\" == o || \"\\r\\n\" == o) {\n u(n);\n var l = \"\";\n if (p.isMaybeInsertedClosing(r, s) && (l = f.stringRepeat(\"}\", m.maybeInsertedBrackets), p.clearMaybeInsertedClosing()), \"}\" === (a = s.substring(r.column, r.column + 1))) {\n var c = i.findMatchingBracket({\n row: r.row,\n column: r.column + 1\n }, \"}\");\n if (!c) return null;\n var h = this.$getIndent(i.getLine(c.row));\n } else {\n if (!l) return void p.clearMaybeInsertedClosing();\n h = this.$getIndent(s);\n }\n o = h + i.getTabString();\n return {\n text: \"\\n\" + o + \"\\n\" + h + l,\n selection: [1, o.length, 1, o.length]\n };\n }\n p.clearMaybeInsertedClosing();\n }\n }), this.add(\"braces\", \"deletion\", function (e, t, n, i, o) {\n var r = i.doc.getTextRange(o);\n if (!o.isMultiLine() && \"{\" == r) {\n if (u(n), \"}\" == i.doc.getLine(o.start.row).substring(o.end.column, o.end.column + 1)) return o.end.column++, o;\n m.maybeInsertedBrackets--;\n }\n }), this.add(\"parens\", \"insertion\", function (e, t, n, i, o) {\n if (\"(\" == o) return u(n), r = n.getSelectionRange(), \"\" !== (s = i.doc.getTextRange(r)) && n.getWrapBehavioursEnabled() ? g(r, s, \"(\", \")\") : p.isSaneInsertion(n, i) ? (p.recordAutoInsert(n, i, \")\"), {\n text: \"()\",\n selection: [1, 1]\n }) : void 0;\n if (\")\" == o) {\n u(n);\n var r = n.getCursorPosition(),\n s = i.doc.getLine(r.row),\n n = s.substring(r.column, r.column + 1);\n if (\")\" == n) if (null !== i.$findOpeningBracket(\")\", {\n column: r.column + 1,\n row: r.row\n }) && p.isAutoInsertedClosing(r, s, o)) return p.popAutoInsertedClosing(), {\n text: \"\",\n selection: [1, 1]\n };\n }\n }), this.add(\"parens\", \"deletion\", function (e, t, n, i, o) {\n var r = i.doc.getTextRange(o);\n if (!o.isMultiLine() && \"(\" == r && (u(n), \")\" == i.doc.getLine(o.start.row).substring(o.start.column + 1, o.start.column + 2))) return o.end.column++, o;\n }), this.add(\"brackets\", \"insertion\", function (e, t, n, i, o) {\n if (\"[\" == o) return u(n), r = n.getSelectionRange(), \"\" !== (s = i.doc.getTextRange(r)) && n.getWrapBehavioursEnabled() ? g(r, s, \"[\", \"]\") : p.isSaneInsertion(n, i) ? (p.recordAutoInsert(n, i, \"]\"), {\n text: \"[]\",\n selection: [1, 1]\n }) : void 0;\n if (\"]\" == o) {\n u(n);\n var r = n.getCursorPosition(),\n s = i.doc.getLine(r.row),\n n = s.substring(r.column, r.column + 1);\n if (\"]\" == n) if (null !== i.$findOpeningBracket(\"]\", {\n column: r.column + 1,\n row: r.row\n }) && p.isAutoInsertedClosing(r, s, o)) return p.popAutoInsertedClosing(), {\n text: \"\",\n selection: [1, 1]\n };\n }\n }), this.add(\"brackets\", \"deletion\", function (e, t, n, i, o) {\n var r = i.doc.getTextRange(o);\n if (!o.isMultiLine() && \"[\" == r && (u(n), \"]\" == i.doc.getLine(o.start.row).substring(o.start.column + 1, o.start.column + 2))) return o.end.column++, o;\n }), this.add(\"string_dquotes\", \"insertion\", function (e, t, n, i, o) {\n var r = i.$mode.$quotes || C;\n if (1 == o.length && r[o] && (!this.lineCommentStart || -1 == this.lineCommentStart.indexOf(o))) {\n u(n);\n var s = n.getSelectionRange(),\n a = i.doc.getTextRange(s);\n if (!(\"\" === a || 1 == a.length && r[a]) && n.getWrapBehavioursEnabled()) return g(s, a, o, o);\n if (!a) {\n var r = n.getCursorPosition(),\n s = i.doc.getLine(r.row),\n a = s.substring(r.column - 1, r.column),\n n = s.substring(r.column, r.column + 1),\n l = i.getTokenAt(r.row, r.column),\n c = i.getTokenAt(r.row, r.column + 1);\n if (\"\\\\\" == a && l && /escape/.test(l.type)) return null;\n var h,\n l = l && /string|escape/.test(l.type),\n d = !c || /string|escape/.test(c.type);\n if (n == o) (h = l !== d) && /string\\.end/.test(c.type) && (h = !1);else {\n if (l && !d) return null;\n if (l && d) return null;\n c = i.$mode.tokenRe, l = (c.lastIndex = 0, c.test(a)), d = (c.lastIndex = 0, c.test(n)), i = i.$mode.$pairQuotesAfter;\n if (!(i && i[o] && i[o].test(a)) && l || d) return null;\n if (n && !/[\\s;,.})\\]\\\\]/.test(n)) return null;\n i = s[r.column - 2];\n if (a == o && (i == o || c.test(i))) return null;\n h = !0;\n }\n return {\n text: h ? o + o : \"\",\n selection: [1, 1]\n };\n }\n }\n }), this.add(\"string_dquotes\", \"deletion\", function (e, t, n, i, o) {\n var r = i.$mode.$quotes || C,\n s = i.doc.getTextRange(o);\n if (!o.isMultiLine() && r.hasOwnProperty(s) && (u(n), i.doc.getLine(o.start.row).substring(o.start.column + 1, o.start.column + 2) == s)) return o.end.column++, o;\n }), !1 !== d.closeDocComment && this.add(\"doc comment end\", \"insertion\", function (e, t, n, i, o) {\n var r;\n if (\"doc-start\" === e && (\"\\n\" === o || \"\\r\\n\" === o) && n.selection.isEmpty()) return e = n.getCursorPosition(), n = i.doc.getLine(e.row), i = i.doc.getLine(e.row + 1), r = this.$getIndent(n), /\\s*\\*/.test(i) ? /^\\s*\\*/.test(n) ? {\n text: o + r + \"* \",\n selection: [1, 3 + r.length, 1, 3 + r.length]\n } : {\n text: o + r + \" * \",\n selection: [1, 3 + r.length, 1, 3 + r.length]\n } : /\\/\\*\\*/.test(n.substring(0, e.column)) ? {\n text: o + r + \" * \" + o + \" \" + r + \"*/\",\n selection: [1, 4 + r.length, 1, 4 + r.length]\n } : void 0;\n });\n }\n var m,\n i = e(\"../../lib/oop\"),\n o = e(\"../behaviour\").Behaviour,\n r = e(\"../../token_iterator\").TokenIterator,\n f = e(\"../../lib/lang\"),\n s = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\"],\n a = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\", \"comment\"],\n l = {},\n C = {\n '\"': '\"',\n \"'\": \"'\"\n };\n p.isSaneInsertion = function (e, t) {\n var n = e.getCursorPosition(),\n i = new r(t, n.row, n.column);\n if (!this.$matchTokenType(i.getCurrentToken() || \"text\", s)) {\n if (/[)}\\]]/.test(e.session.getLine(n.row)[n.column])) return !0;\n e = new r(t, n.row, n.column + 1);\n if (!this.$matchTokenType(e.getCurrentToken() || \"text\", s)) return !1;\n }\n return i.stepForward(), i.getCurrentTokenRow() !== n.row || this.$matchTokenType(i.getCurrentToken() || \"text\", a);\n }, p.$matchTokenType = function (e, t) {\n return -1 < t.indexOf(e.type || e);\n }, p.recordAutoInsert = function (e, t, n) {\n e = e.getCursorPosition(), t = t.doc.getLine(e.row);\n this.isAutoInsertedClosing(e, t, m.autoInsertedLineEnd[0]) || (m.autoInsertedBrackets = 0), m.autoInsertedRow = e.row, m.autoInsertedLineEnd = n + t.substr(e.column), m.autoInsertedBrackets++;\n }, p.recordMaybeInsert = function (e, t, n) {\n e = e.getCursorPosition(), t = t.doc.getLine(e.row);\n this.isMaybeInsertedClosing(e, t) || (m.maybeInsertedBrackets = 0), m.maybeInsertedRow = e.row, m.maybeInsertedLineStart = t.substr(0, e.column) + n, m.maybeInsertedLineEnd = t.substr(e.column), m.maybeInsertedBrackets++;\n }, p.isAutoInsertedClosing = function (e, t, n) {\n return 0 < m.autoInsertedBrackets && e.row === m.autoInsertedRow && n === m.autoInsertedLineEnd[0] && t.substr(e.column) === m.autoInsertedLineEnd;\n }, p.isMaybeInsertedClosing = function (e, t) {\n return 0 < m.maybeInsertedBrackets && e.row === m.maybeInsertedRow && t.substr(e.column) === m.maybeInsertedLineEnd && t.substr(0, e.column) == m.maybeInsertedLineStart;\n }, p.popAutoInsertedClosing = function () {\n m.autoInsertedLineEnd = m.autoInsertedLineEnd.substr(1), m.autoInsertedBrackets--;\n }, p.clearMaybeInsertedClosing = function () {\n m && (m.maybeInsertedBrackets = 0, m.maybeInsertedRow = -1);\n }, i.inherits(p, o), t.CstyleBehaviour = p;\n }), ace.define(\"ace/unicode\", [\"require\", \"exports\", \"module\"], function (e, t, n) {\n \"use strict\";\n\n for (var i = [48, 9, 8, 25, 5, 0, 2, 25, 48, 0, 11, 0, 5, 0, 6, 22, 2, 30, 2, 457, 5, 11, 15, 4, 8, 0, 2, 0, 18, 116, 2, 1, 3, 3, 9, 0, 2, 2, 2, 0, 2, 19, 2, 82, 2, 138, 2, 4, 3, 155, 12, 37, 3, 0, 8, 38, 10, 44, 2, 0, 2, 1, 2, 1, 2, 0, 9, 26, 6, 2, 30, 10, 7, 61, 2, 9, 5, 101, 2, 7, 3, 9, 2, 18, 3, 0, 17, 58, 3, 100, 15, 53, 5, 0, 6, 45, 211, 57, 3, 18, 2, 5, 3, 11, 3, 9, 2, 1, 7, 6, 2, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 0, 4, 3, 3, 8, 3, 1, 3, 3, 9, 0, 5, 1, 2, 4, 3, 11, 16, 2, 2, 5, 5, 1, 3, 21, 2, 6, 2, 1, 2, 1, 2, 1, 3, 0, 2, 4, 5, 1, 3, 2, 4, 0, 8, 3, 2, 0, 8, 15, 12, 2, 2, 8, 2, 2, 2, 21, 2, 6, 2, 1, 2, 4, 3, 9, 2, 2, 2, 2, 3, 0, 16, 3, 3, 9, 18, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 3, 8, 3, 1, 3, 2, 9, 1, 5, 1, 2, 4, 3, 9, 2, 0, 17, 1, 2, 5, 4, 2, 2, 3, 4, 1, 2, 0, 2, 1, 4, 1, 4, 2, 4, 11, 5, 4, 4, 2, 2, 3, 3, 0, 7, 0, 15, 9, 18, 2, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 4, 7, 2, 2, 2, 3, 8, 1, 2, 1, 7, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 3, 8, 2, 2, 2, 3, 8, 1, 8, 0, 2, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 15, 4, 7, 2, 2, 2, 3, 10, 0, 9, 3, 3, 9, 11, 5, 3, 1, 2, 17, 4, 23, 2, 8, 2, 0, 3, 6, 4, 0, 5, 5, 2, 0, 2, 7, 19, 1, 14, 57, 6, 14, 2, 9, 40, 1, 2, 0, 3, 1, 2, 0, 3, 0, 7, 3, 2, 6, 2, 2, 2, 0, 2, 0, 3, 1, 2, 12, 2, 2, 3, 4, 2, 0, 2, 5, 3, 9, 3, 1, 35, 0, 24, 1, 7, 9, 12, 0, 2, 0, 2, 0, 5, 9, 2, 35, 5, 19, 2, 5, 5, 7, 2, 35, 10, 0, 58, 73, 7, 77, 3, 37, 11, 42, 2, 0, 4, 328, 2, 3, 3, 6, 2, 0, 2, 3, 3, 40, 2, 3, 3, 32, 2, 3, 3, 6, 2, 0, 2, 3, 3, 14, 2, 56, 2, 3, 3, 66, 5, 0, 33, 15, 17, 84, 13, 619, 3, 16, 2, 25, 6, 74, 22, 12, 2, 6, 12, 20, 12, 19, 13, 12, 2, 2, 2, 1, 13, 51, 3, 29, 4, 0, 5, 1, 3, 9, 34, 2, 3, 9, 7, 87, 9, 42, 6, 69, 11, 28, 4, 11, 5, 11, 11, 39, 3, 4, 12, 43, 5, 25, 7, 10, 38, 27, 5, 62, 2, 28, 3, 10, 7, 9, 14, 0, 89, 75, 5, 9, 18, 8, 13, 42, 4, 11, 71, 55, 9, 9, 4, 48, 83, 2, 2, 30, 14, 230, 23, 280, 3, 5, 3, 37, 3, 5, 3, 7, 2, 0, 2, 0, 2, 0, 2, 30, 3, 52, 2, 6, 2, 0, 4, 2, 2, 6, 4, 3, 3, 5, 5, 12, 6, 2, 2, 6, 67, 1, 20, 0, 29, 0, 14, 0, 17, 4, 60, 12, 5, 0, 4, 11, 18, 0, 5, 0, 3, 9, 2, 0, 4, 4, 7, 0, 2, 0, 2, 0, 2, 3, 2, 10, 3, 3, 6, 4, 5, 0, 53, 1, 2684, 46, 2, 46, 2, 132, 7, 6, 15, 37, 11, 53, 10, 0, 17, 22, 10, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 31, 48, 0, 470, 1, 36, 5, 2, 4, 6, 1, 5, 85, 3, 1, 3, 2, 2, 89, 2, 3, 6, 40, 4, 93, 18, 23, 57, 15, 513, 6581, 75, 20939, 53, 1164, 68, 45, 3, 268, 4, 27, 21, 31, 3, 13, 13, 1, 2, 24, 9, 69, 11, 1, 38, 8, 3, 102, 3, 1, 111, 44, 25, 51, 13, 68, 12, 9, 7, 23, 4, 0, 5, 45, 3, 35, 13, 28, 4, 64, 15, 10, 39, 54, 10, 13, 3, 9, 7, 22, 4, 1, 5, 66, 25, 2, 227, 42, 2, 1, 3, 9, 7, 11171, 13, 22, 5, 48, 8453, 301, 3, 61, 3, 105, 39, 6, 13, 4, 6, 11, 2, 12, 2, 4, 2, 0, 2, 1, 2, 1, 2, 107, 34, 362, 19, 63, 3, 53, 41, 11, 5, 15, 17, 6, 13, 1, 25, 2, 33, 4, 2, 134, 20, 9, 8, 25, 5, 0, 2, 25, 12, 88, 4, 5, 3, 5, 3, 5, 3, 2], o = 0, r = [], s = 0; s < i.length; s += 2) r.push(o += i[s]), i[s + 1] && r.push(45, o += i[s + 1]);\n t.wordChars = String.fromCharCode.apply(null, r);\n }), ace.define(\"ace/mode/text\", [\"require\", \"exports\", \"module\", \"ace/config\", \"ace/tokenizer\", \"ace/mode/text_highlight_rules\", \"ace/mode/behaviour/cstyle\", \"ace/unicode\", \"ace/lib/lang\", \"ace/token_iterator\", \"ace/range\"], function (e, t, n) {\n \"use strict\";\n\n function i() {\n this.HighlightRules = r;\n }\n var s = e(\"../config\"),\n o = e(\"../tokenizer\").Tokenizer,\n r = e(\"./text_highlight_rules\").TextHighlightRules,\n a = e(\"./behaviour/cstyle\").CstyleBehaviour,\n l = e(\"../unicode\"),\n b = e(\"../lib/lang\"),\n m = e(\"../token_iterator\").TokenIterator,\n f = e(\"../range\").Range;\n !function () {\n this.$defaultBehaviour = new a(), this.tokenRe = new RegExp(\"^[\" + l.wordChars + \"\\\\$_]+\", \"g\"), this.nonTokenRe = new RegExp(\"^(?:[^\" + l.wordChars + \"\\\\$_]|\\\\s])+\", \"g\"), this.getTokenizer = function () {\n return this.$tokenizer || (this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig), this.$tokenizer = new o(this.$highlightRules.getRules())), this.$tokenizer;\n }, this.lineCommentStart = \"\", this.blockComment = \"\", this.toggleCommentLines = function (e, o, n, i) {\n var r = o.doc,\n s = !0,\n a = !0,\n l = 1 / 0,\n c = o.getTabSize(),\n t = !1;\n if (this.lineCommentStart) {\n m = Array.isArray(this.lineCommentStart) ? (C = this.lineCommentStart.map(b.escapeRegExp).join(\"|\"), this.lineCommentStart[0]) : (C = b.escapeRegExp(this.lineCommentStart), this.lineCommentStart), C = new RegExp(\"^(\\\\s*)(?:\" + C + \") ?\"), t = o.getUseSoftTabs();\n var h = function (e, t) {\n var n,\n i,\n o = e.match(C);\n o && (n = o[1].length, i = o[0].length, p(e, n, i) || \" \" != o[0][i - 1] || i--, r.removeInLine(t, n, i));\n },\n d = m + \" \",\n u = function (e, t) {\n s && !/\\S/.test(e) || (p(e, l, l) ? r.insertInLine({\n row: t,\n column: l\n }, d) : r.insertInLine({\n row: t,\n column: l\n }, m));\n },\n g = function (e, t) {\n return C.test(e);\n },\n p = function (e, t, n) {\n for (var i = 0; t-- && \" \" == e.charAt(t);) i++;\n if (i % c != 0) return !1;\n for (i = 0; \" \" == e.charAt(n++);) i++;\n return 2 < c ? i % c != c - 1 : i % c == 0;\n };\n } else {\n if (!this.blockComment) return !1;\n var m = this.blockComment.start,\n f = this.blockComment.end,\n C = new RegExp(\"^(\\\\s*)(?:\" + b.escapeRegExp(m) + \")\"),\n y = new RegExp(\"(?:\" + b.escapeRegExp(f) + \")\\\\s*$\"),\n u = function (e, t) {\n g(e, t) || s && !/\\S/.test(e) || (r.insertInLine({\n row: t,\n column: e.length\n }, f), r.insertInLine({\n row: t,\n column: l\n }, m));\n },\n h = function (e, t) {\n var n;\n (n = e.match(y)) && r.removeInLine(t, e.length - n[0].length, e.length), (n = e.match(C)) && r.removeInLine(t, n[1].length, n[0].length);\n },\n g = function (e, t) {\n if (C.test(e)) return !0;\n for (var n = o.getTokens(t), i = 0; i < n.length; i++) if (\"comment\" === n[i].type) return !0;\n };\n }\n function v(e) {\n for (var t = n; t <= i; t++) e(r.getLine(t), t);\n }\n var I = 1 / 0;\n v(function (e, t) {\n var n = e.search(/\\S/);\n -1 !== n ? (n < l && (l = n), a && !g(e, t) && (a = !1)) : I > e.length && (I = e.length);\n }), l == 1 / 0 && (l = I, a = s = !1), t && l % c != 0 && (l = Math.floor(l / c) * c), v(a ? h : u);\n }, this.toggleBlockComment = function (e, t, n, i) {\n var o = this.blockComment;\n if (o) {\n !o.start && o[0] && (o = o[0]);\n var r,\n s,\n a = (u = new m(t, i.row, i.column)).getCurrentToken(),\n l = (t.selection, t.selection.toOrientedRange());\n if (a && /comment/.test(a.type)) {\n for (; a && /comment/.test(a.type);) {\n if (-1 != (g = a.value.indexOf(o.start))) {\n var c = u.getCurrentTokenRow(),\n h = u.getCurrentTokenColumn() + g,\n d = new f(c, h, c, h + o.start.length);\n break;\n }\n a = u.stepBackward();\n }\n for (var u, g, a = (u = new m(t, i.row, i.column)).getCurrentToken(); a && /comment/.test(a.type);) {\n if (-1 != (g = a.value.indexOf(o.end))) {\n var c = u.getCurrentTokenRow(),\n h = u.getCurrentTokenColumn() + g,\n p = new f(c, h, c, h + o.end.length);\n break;\n }\n a = u.stepForward();\n }\n p && t.remove(p), d && (t.remove(d), r = d.start.row, s = -o.start.length);\n } else s = o.start.length, r = n.start.row, t.insert(n.end, o.end), t.insert(n.start, o.start);\n l.start.row == r && (l.start.column += s), l.end.row == r && (l.end.column += s), t.selection.fromOrientedRange(l);\n }\n }, this.getNextLineIndent = function (e, t, n) {\n return this.$getIndent(t);\n }, this.checkOutdent = function (e, t, n) {\n return !1;\n }, this.autoOutdent = function (e, t, n) {}, this.$getIndent = function (e) {\n return e.match(/^\\s*/)[0];\n }, this.createWorker = function (e) {\n return null;\n }, this.createModeDelegates = function (e) {\n for (var i in this.$embeds = [], this.$modes = {}, e) {\n var t, n, o;\n e[i] && (n = (t = e[i]).prototype.$id, (o = s.$modes[n]) || (s.$modes[n] = o = new t()), s.$modes[i] || (s.$modes[i] = o), this.$embeds.push(i), this.$modes[i] = o);\n }\n for (var r = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"], i = 0; i < r.length; i++) !function (e) {\n var t = r[i],\n n = e[t];\n e[r[i]] = function () {\n return this.$delegator(t, arguments, n);\n };\n }(this);\n }, this.$delegator = function (e, t, n) {\n var i = t[0] || \"start\";\n if (\"string\" != typeof i) {\n if (Array.isArray(i[2])) {\n var o = i[2][i[2].length - 1];\n if (s = this.$modes[o]) return s[e].apply(s, [i[1]].concat([].slice.call(t, 1)));\n }\n i = i[0] || \"start\";\n }\n for (var r = 0; r < this.$embeds.length; r++) if (this.$modes[this.$embeds[r]]) {\n var s,\n a = i.split(this.$embeds[r]);\n if (!a[0] && a[1]) return t[0] = a[1], (s = this.$modes[this.$embeds[r]])[e].apply(s, t);\n }\n o = n.apply(this, t);\n return n ? o : void 0;\n }, this.transformAction = function (e, t, n, i, o) {\n if (this.$behaviour) {\n var r,\n s = this.$behaviour.getBehaviours();\n for (r in s) if (s[r][t]) {\n var a = s[r][t].apply(this, arguments);\n if (a) return a;\n }\n }\n }, this.getKeywords = function (e) {\n if (!this.completionKeywords) {\n var t = this.$tokenizer.rules,\n n = [];\n for (s in t) for (var i = t[s], o = 0, r = i.length; o < r; o++) if (\"string\" == typeof i[o].token) /keyword|support|storage/.test(i[o].token) && n.push(i[o].regex);else if (\"object\" == typeof i[o].token) for (var s, a = 0, l = i[o].token.length; a < l; a++) /keyword|support|storage/.test(i[o].token[a]) && (s = i[o].regex.match(/\\(.+?\\)/g)[a], n.push(s.substr(1, s.length - 2)));\n this.completionKeywords = n;\n }\n return e ? n.concat(this.$keywordList || []) : this.$keywordList;\n }, this.$createKeywordList = function () {\n return this.$highlightRules || this.getTokenizer(), this.$keywordList = this.$highlightRules.$keywordList || [];\n }, this.getCompletions = function (e, t, n, i) {\n return (this.$keywordList || this.$createKeywordList()).map(function (e) {\n return {\n name: e,\n value: e,\n score: 0,\n meta: \"keyword\"\n };\n });\n }, this.$id = \"ace/mode/text\";\n }.call(i.prototype), t.Mode = i;\n }), ace.define(\"ace/apply_delta\", [\"require\", \"exports\", \"module\"], function (e, t, n) {\n \"use strict\";\n\n t.applyDelta = function (e, t, n) {\n var i = t.start.row,\n o = t.start.column,\n r = e[i] || \"\";\n switch (t.action) {\n case \"insert\":\n 1 === t.lines.length ? e[i] = r.substring(0, o) + t.lines[0] + r.substring(o) : (s = [i, 1].concat(t.lines), e.splice.apply(e, s), e[i] = r.substring(0, o) + e[i], e[i + t.lines.length - 1] += r.substring(o));\n break;\n case \"remove\":\n var s = t.end.column,\n a = t.end.row;\n i === a ? e[i] = r.substring(0, o) + r.substring(s) : e.splice(i, a - i + 1, r.substring(0, o) + e[a].substring(s));\n }\n };\n }), ace.define(\"ace/anchor\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/event_emitter\"], function (e, t, n) {\n \"use strict\";\n\n var i = e(\"./lib/oop\"),\n e = e(\"./lib/event_emitter\").EventEmitter,\n o = (r.prototype.getPosition = function () {\n return this.$clipPositionToDocument(this.row, this.column);\n }, r.prototype.getDocument = function () {\n return this.document;\n }, r.prototype.onChange = function (e) {\n e.start.row == e.end.row && e.start.row != this.row || e.start.row > this.row || (e = function (e, t, n) {\n var i = \"insert\" == e.action,\n o = (i ? 1 : -1) * (e.end.row - e.start.row),\n r = (i ? 1 : -1) * (e.end.column - e.start.column),\n s = e.start,\n i = i ? s : e.end;\n if (a(t, s, n)) return {\n row: t.row,\n column: t.column\n };\n if (a(i, t, !n)) return {\n row: t.row + o,\n column: t.column + (t.row == i.row ? r : 0)\n };\n return {\n row: s.row,\n column: s.column\n };\n }(e, {\n row: this.row,\n column: this.column\n }, this.$insertRight), this.setPosition(e.row, e.column, !0));\n }, r.prototype.setPosition = function (e, t, n) {\n n = n ? {\n row: e,\n column: t\n } : this.$clipPositionToDocument(e, t);\n this.row == n.row && this.column == n.column || (e = {\n row: this.row,\n column: this.column\n }, this.row = n.row, this.column = n.column, this._signal(\"change\", {\n old: e,\n value: n\n }));\n }, r.prototype.detach = function () {\n this.document.off(\"change\", this.$onChange);\n }, r.prototype.attach = function (e) {\n this.document = e || this.document, this.document.on(\"change\", this.$onChange);\n }, r.prototype.$clipPositionToDocument = function (e, t) {\n var n = {};\n return e >= this.document.getLength() ? (n.row = Math.max(0, this.document.getLength() - 1), n.column = this.document.getLine(n.row).length) : e < 0 ? (n.row = 0, n.column = 0) : (n.row = e, n.column = Math.min(this.document.getLine(n.row).length, Math.max(0, t))), t < 0 && (n.column = 0), n;\n }, r);\n function r(e, t, n) {\n this.$onChange = this.onChange.bind(this), this.attach(e), void 0 === n ? this.setPosition(t.row, t.column) : this.setPosition(t, n);\n }\n function a(e, t, n) {\n n = n ? e.column <= t.column : e.column < t.column;\n return e.row < t.row || e.row == t.row && n;\n }\n o.prototype.$insertRight = !1, i.implement(o.prototype, e), t.Anchor = o;\n }), ace.define(\"ace/document\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/apply_delta\", \"ace/lib/event_emitter\", \"ace/range\", \"ace/anchor\"], function (e, t, n) {\n \"use strict\";\n\n var i = e(\"./lib/oop\"),\n o = e(\"./apply_delta\").applyDelta,\n r = e(\"./lib/event_emitter\").EventEmitter,\n s = e(\"./range\").Range,\n a = e(\"./anchor\").Anchor,\n e = (l.prototype.setValue = function (e) {\n var t = this.getLength() - 1;\n this.remove(new s(0, 0, t, this.getLine(t).length)), this.insert({\n row: 0,\n column: 0\n }, e || \"\");\n }, l.prototype.getValue = function () {\n return this.getAllLines().join(this.getNewLineCharacter());\n }, l.prototype.createAnchor = function (e, t) {\n return new a(this, e, t);\n }, l.prototype.$detectNewLine = function (e) {\n e = e.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = e ? e[1] : \"\\n\", this._signal(\"changeNewLineMode\");\n }, l.prototype.getNewLineCharacter = function () {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n case \"unix\":\n return \"\\n\";\n default:\n return this.$autoNewLine || \"\\n\";\n }\n }, l.prototype.setNewLineMode = function (e) {\n this.$newLineMode !== e && (this.$newLineMode = e, this._signal(\"changeNewLineMode\"));\n }, l.prototype.getNewLineMode = function () {\n return this.$newLineMode;\n }, l.prototype.isNewLine = function (e) {\n return \"\\r\\n\" == e || \"\\r\" == e || \"\\n\" == e;\n }, l.prototype.getLine = function (e) {\n return this.$lines[e] || \"\";\n }, l.prototype.getLines = function (e, t) {\n return this.$lines.slice(e, t + 1);\n }, l.prototype.getAllLines = function () {\n return this.getLines(0, this.getLength());\n }, l.prototype.getLength = function () {\n return this.$lines.length;\n }, l.prototype.getTextRange = function (e) {\n return this.getLinesForRange(e).join(this.getNewLineCharacter());\n }, l.prototype.getLinesForRange = function (e) {\n var t, n;\n return e.start.row === e.end.row ? t = [this.getLine(e.start.row).substring(e.start.column, e.end.column)] : ((t = this.getLines(e.start.row, e.end.row))[0] = (t[0] || \"\").substring(e.start.column), n = t.length - 1, e.end.row - e.start.row == n && (t[n] = t[n].substring(0, e.end.column))), t;\n }, l.prototype.insertLines = function (e, t) {\n return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"), this.insertFullLines(e, t);\n }, l.prototype.removeLines = function (e, t) {\n return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"), this.removeFullLines(e, t);\n }, l.prototype.insertNewLine = function (e) {\n return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"), this.insertMergedLines(e, [\"\", \"\"]);\n }, l.prototype.insert = function (e, t) {\n return this.getLength() <= 1 && this.$detectNewLine(t), this.insertMergedLines(e, this.$split(t));\n }, l.prototype.insertInLine = function (e, t) {\n var n = this.clippedPos(e.row, e.column),\n e = this.pos(e.row, e.column + t.length);\n return this.applyDelta({\n start: n,\n end: e,\n action: \"insert\",\n lines: [t]\n }, !0), this.clonePos(e);\n }, l.prototype.clippedPos = function (e, t) {\n var n = this.getLength(),\n n = (void 0 === e ? e = n : e < 0 ? e = 0 : n <= e && (e = n - 1, t = void 0), this.getLine(e));\n return null == t && (t = n.length), {\n row: e,\n column: t = Math.min(Math.max(t, 0), n.length)\n };\n }, l.prototype.clonePos = function (e) {\n return {\n row: e.row,\n column: e.column\n };\n }, l.prototype.pos = function (e, t) {\n return {\n row: e,\n column: t\n };\n }, l.prototype.$clipPosition = function (e) {\n var t = this.getLength();\n return e.row >= t ? (e.row = Math.max(0, t - 1), e.column = this.getLine(t - 1).length) : (e.row = Math.max(0, e.row), e.column = Math.min(Math.max(e.column, 0), this.getLine(e.row).length)), e;\n }, l.prototype.insertFullLines = function (e, t) {\n var n = 0,\n n = (e = Math.min(Math.max(e, 0), this.getLength())) < this.getLength() ? (t = t.concat([\"\"]), 0) : (t = [\"\"].concat(t), this.$lines[--e].length);\n this.insertMergedLines({\n row: e,\n column: n\n }, t);\n }, l.prototype.insertMergedLines = function (e, t) {\n var e = this.clippedPos(e.row, e.column),\n n = {\n row: e.row + t.length - 1,\n column: (1 == t.length ? e.column : 0) + t[t.length - 1].length\n };\n return this.applyDelta({\n start: e,\n end: n,\n action: \"insert\",\n lines: t\n }), this.clonePos(n);\n }, l.prototype.remove = function (e) {\n var t = this.clippedPos(e.start.row, e.start.column),\n e = this.clippedPos(e.end.row, e.end.column);\n return this.applyDelta({\n start: t,\n end: e,\n action: \"remove\",\n lines: this.getLinesForRange({\n start: t,\n end: e\n })\n }), this.clonePos(t);\n }, l.prototype.removeInLine = function (e, t, n) {\n t = this.clippedPos(e, t), e = this.clippedPos(e, n);\n return this.applyDelta({\n start: t,\n end: e,\n action: \"remove\",\n lines: this.getLinesForRange({\n start: t,\n end: e\n })\n }, !0), this.clonePos(t);\n }, l.prototype.removeFullLines = function (e, t) {\n e = Math.min(Math.max(0, e), this.getLength() - 1);\n var n = (t = Math.min(Math.max(0, t), this.getLength() - 1)) == this.getLength() - 1 && 0 < e,\n i = t < this.getLength() - 1,\n o = n ? e - 1 : e,\n n = n ? this.getLine(o).length : 0,\n r = i ? t + 1 : t,\n i = i ? 0 : this.getLine(r).length,\n o = new s(o, n, r, i),\n n = this.$lines.slice(e, t + 1);\n return this.applyDelta({\n start: o.start,\n end: o.end,\n action: \"remove\",\n lines: this.getLinesForRange(o)\n }), n;\n }, l.prototype.removeNewLine = function (e) {\n e < this.getLength() - 1 && 0 <= e && this.applyDelta({\n start: this.pos(e, this.getLine(e).length),\n end: this.pos(e + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }, l.prototype.replace = function (e, t) {\n return e instanceof s || (e = s.fromPoints(e.start, e.end)), 0 === t.length && e.isEmpty() ? e.start : t == this.getTextRange(e) ? e.end : (this.remove(e), t ? this.insert(e.start, t) : e.start);\n }, l.prototype.applyDeltas = function (e) {\n for (var t = 0; t < e.length; t++) this.applyDelta(e[t]);\n }, l.prototype.revertDeltas = function (e) {\n for (var t = e.length - 1; 0 <= t; t--) this.revertDelta(e[t]);\n }, l.prototype.applyDelta = function (e, t) {\n var n = \"insert\" == e.action;\n (n ? e.lines.length <= 1 && !e.lines[0] : !s.comparePoints(e.start, e.end)) || (n && 2e4 < e.lines.length ? this.$splitAndapplyLargeDelta(e, 2e4) : (o(this.$lines, e, t), this._signal(\"change\", e)));\n }, l.prototype.$safeApplyDelta = function (e) {\n var t = this.$lines.length;\n (\"remove\" == e.action && e.start.row < t && e.end.row < t || \"insert\" == e.action && e.start.row <= t) && this.applyDelta(e);\n }, l.prototype.$splitAndapplyLargeDelta = function (e, t) {\n for (var n = e.lines, i = n.length - t + 1, o = e.start.row, r = e.start.column, s = 0, a = 0; s < i; s = a) {\n a += t - 1;\n var l = n.slice(s, a);\n l.push(\"\"), this.applyDelta({\n start: this.pos(o + s, r),\n end: this.pos(o + a, r = 0),\n action: e.action,\n lines: l\n }, !0);\n }\n e.lines = n.slice(s), e.start.row = o + s, e.start.column = r, this.applyDelta(e, !0);\n }, l.prototype.revertDelta = function (e) {\n this.$safeApplyDelta({\n start: this.clonePos(e.start),\n end: this.clonePos(e.end),\n action: \"insert\" == e.action ? \"remove\" : \"insert\",\n lines: e.lines.slice()\n });\n }, l.prototype.indexToPosition = function (e, t) {\n for (var n = this.$lines || this.getAllLines(), i = this.getNewLineCharacter().length, o = t || 0, r = n.length; o < r; o++) if ((e -= n[o].length + i) < 0) return {\n row: o,\n column: e + n[o].length + i\n };\n return {\n row: r - 1,\n column: e + n[r - 1].length + i\n };\n }, l.prototype.positionToIndex = function (e, t) {\n for (var n = this.$lines || this.getAllLines(), i = this.getNewLineCharacter().length, o = 0, r = Math.min(e.row, n.length), s = t || 0; s < r; ++s) o += n[s].length + i;\n return o + e.column;\n }, l.prototype.$split = function (e) {\n return e.split(/\\r\\n|\\r|\\n/);\n }, l);\n function l(e) {\n this.$lines = [\"\"], 0 === e.length ? this.$lines = [\"\"] : Array.isArray(e) ? this.insertMergedLines({\n row: 0,\n column: 0\n }, e) : this.insert({\n row: 0,\n column: 0\n }, e);\n }\n e.prototype.$autoNewLine = \"\", e.prototype.$newLineMode = \"auto\", i.implement(e.prototype, r), t.Document = e;\n }), ace.define(\"ace/background_tokenizer\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/event_emitter\"], function (e, t, n) {\n \"use strict\";\n\n var i = e(\"./lib/oop\"),\n e = e(\"./lib/event_emitter\").EventEmitter,\n o = (r.prototype.setTokenizer = function (e) {\n this.tokenizer = e, this.lines = [], this.states = [], this.start(0);\n }, r.prototype.setDocument = function (e) {\n this.doc = e, this.lines = [], this.states = [], this.stop();\n }, r.prototype.fireUpdateEvent = function (e, t) {\n this._signal(\"update\", {\n data: {\n first: e,\n last: t\n }\n });\n }, r.prototype.start = function (e) {\n this.currentLine = Math.min(e || 0, this.currentLine, this.doc.getLength()), this.lines.splice(this.currentLine, this.lines.length), this.states.splice(this.currentLine, this.states.length), this.stop(), this.running = setTimeout(this.$worker, 700);\n }, r.prototype.scheduleStart = function () {\n this.running || (this.running = setTimeout(this.$worker, 700));\n }, r.prototype.$updateOnChange = function (e) {\n var t = e.start.row,\n n = e.end.row - t;\n 0 == n ? this.lines[t] = null : \"remove\" == e.action ? (this.lines.splice(t, 1 + n, null), this.states.splice(t, 1 + n, null)) : ((e = Array(1 + n)).unshift(t, 1), this.lines.splice.apply(this.lines, e), this.states.splice.apply(this.states, e)), this.currentLine = Math.min(t, this.currentLine, this.doc.getLength()), this.stop();\n }, r.prototype.stop = function () {\n this.running && clearTimeout(this.running), this.running = !1;\n }, r.prototype.getTokens = function (e) {\n return this.lines[e] || this.$tokenizeRow(e);\n }, r.prototype.getState = function (e) {\n return this.currentLine == e && this.$tokenizeRow(e), this.states[e] || \"start\";\n }, r.prototype.$tokenizeRow = function (e) {\n var t = this.doc.getLine(e),\n n = this.states[e - 1],\n t = this.tokenizer.getLineTokens(t, n, e);\n return this.states[e] + \"\" != t.state + \"\" ? (this.states[e] = t.state, this.lines[e + 1] = null, this.currentLine > e + 1 && (this.currentLine = e + 1)) : this.currentLine == e && (this.currentLine = e + 1), this.lines[e] = t.tokens;\n }, r.prototype.cleanup = function () {\n this.running = !1, this.lines = [], this.states = [], this.currentLine = 0, this.removeAllListeners();\n }, r);\n function r(e, t) {\n this.running = !1, this.lines = [], this.states = [], this.currentLine = 0, this.tokenizer = e;\n var a = this;\n this.$worker = function () {\n if (a.running) {\n for (var e = new Date(), t = a.currentLine, n = -1, i = a.doc, o = t; a.lines[t];) t++;\n var r = i.getLength(),\n s = 0;\n for (a.running = !1; t < r;) {\n for (a.$tokenizeRow(t), n = t; t++, a.lines[t];);\n if (++s % 5 == 0 && 20 < new Date() - e) {\n a.running = setTimeout(a.$worker, 20);\n break;\n }\n }\n a.currentLine = t, o <= (n = -1 == n ? t : n) && a.fireUpdateEvent(o, n);\n }\n };\n }\n i.implement(o.prototype, e), t.BackgroundTokenizer = o;\n }), ace.define(\"ace/search_highlight\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\", \"ace/range\"], function (e, t, n) {\n \"use strict\";\n\n var u = e(\"./lib/lang\"),\n g = e(\"./range\").Range,\n e = (i.prototype.setRegexp = function (e) {\n this.regExp + \"\" != e + \"\" && (this.regExp = e, this.cache = []);\n }, i.prototype.update = function (e, t, n, i) {\n if (this.regExp) for (var o = i.firstRow, r = i.lastRow, s = {}, a = o; a <= r; a++) {\n var l = this.cache[a];\n null == l && (l = (l = (l = u.getMatchOffsets(n.getLine(a), this.regExp)).length > this.MAX_RANGES ? l.slice(0, this.MAX_RANGES) : l).map(function (e) {\n return new g(a, e.offset, a, e.offset + e.length);\n }), this.cache[a] = l.length ? l : \"\");\n for (var c = l.length; c--;) {\n var h = l[c].toScreenRange(n),\n d = h.toString();\n s[d] || (s[d] = !0, t.drawSingleLineMarker(e, h, this.clazz, i));\n }\n }\n }, i);\n function i(e, t, n) {\n void 0 === n && (n = \"text\"), this.setRegexp(e), this.clazz = t, this.type = n;\n }\n e.prototype.MAX_RANGES = 500, t.SearchHighlight = e;\n }), ace.define(\"ace/undomanager\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (e, t, n) {\n \"use strict\";\n\n o.prototype.addSession = function (e) {\n this.$session = e;\n }, o.prototype.add = function (e, t, n) {\n this.$fromUndo || e != this.$lastDelta && (this.$keepRedoStack || (this.$redoStack.length = 0), !1 !== t && this.lastDeltas || (this.lastDeltas = [], (t = this.$undoStack.length) > this.$undoDepth - 1 && this.$undoStack.splice(0, t - this.$undoDepth + 1), this.$undoStack.push(this.lastDeltas), e.id = this.$rev = ++this.$maxRev), \"remove\" != e.action && \"insert\" != e.action || (this.$lastDelta = e), this.lastDeltas.push(e));\n }, o.prototype.addSelection = function (e, t) {\n this.selections.push({\n value: e,\n rev: t || this.$rev\n });\n }, o.prototype.startNewGroup = function () {\n return this.lastDeltas = null, this.$rev;\n }, o.prototype.markIgnored = function (e, t) {\n null == t && (t = this.$rev + 1);\n for (var n = this.$undoStack, i = n.length; i--;) {\n var o = n[i][0];\n if (o.id <= e) break;\n o.id < t && (o.ignore = !0);\n }\n this.lastDeltas = null;\n }, o.prototype.getSelection = function (e, t) {\n for (var n = this.selections, i = n.length; i--;) {\n var o = n[i];\n if (o.rev < e) return o = t ? n[i + 1] : o;\n }\n }, o.prototype.getRevision = function () {\n return this.$rev;\n }, o.prototype.getDeltas = function (e, t) {\n null == t && (t = this.$rev + 1);\n for (var n = this.$undoStack, i = null, o = 0, r = n.length; r--;) {\n var s = n[r][0];\n if (s.id < t && !i && (i = r + 1), s.id <= e) {\n o = r + 1;\n break;\n }\n }\n return n.slice(o, i);\n }, o.prototype.getChangedRanges = function (e, t) {\n null == t && this.$rev;\n }, o.prototype.getChangedLines = function (e, t) {\n null == t && this.$rev;\n }, o.prototype.undo = function (e, t) {\n this.lastDeltas = null;\n var n,\n i = this.$undoStack;\n if (function (e, t) {\n for (var n = t; n--;) {\n var i = e[n];\n if (i && !i[0].ignore) {\n for (; n < t - 1;) {\n var o = function (e, t) {\n for (var n = e.length; n--;) for (var i = 0; i < t.length; i++) if (!a(e[n], t[i])) {\n for (; n < e.length;) {\n for (; i--;) a(t[i], e[n]);\n i = t.length, n++;\n }\n return [e, t];\n }\n return e.selectionBefore = t.selectionBefore = e.selectionAfter = t.selectionAfter = null, [t, e];\n }(e[n], e[n + 1]);\n e[n] = o[0], e[n + 1] = o[1], n++;\n }\n return 1;\n }\n }\n }(i, i.length)) return e = e || this.$session, this.$redoStackBaseRev !== this.$rev && this.$redoStack.length && (this.$redoStack = []), this.$fromUndo = !0, n = null, (i = i.pop()) && (n = e.undoChanges(i, t), this.$redoStack.push(i), this.$syncRev()), this.$fromUndo = !1, n;\n }, o.prototype.redo = function (e, t) {\n if (this.lastDeltas = null, e = e || this.$session, this.$fromUndo = !0, this.$redoStackBaseRev != this.$rev) {\n for (var n = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1), i = this.$redoStack, o = n, r = 0; r < o.length; r++) for (var s = o[r], a = 0; a < s.length; a++) {\n l = void 0;\n c = void 0;\n h = void 0;\n d = void 0;\n u = void 0;\n g = void 0;\n var l = i;\n var c = s[a];\n c = function (e) {\n return {\n start: C(e.start),\n end: C(e.end),\n action: e.action,\n lines: e.lines.slice()\n };\n }(c);\n for (var h = l.length; h--;) {\n for (var d = l[h], u = 0; u < d.length; u++) {\n var g = function (e, t) {\n var n,\n i,\n o = \"insert\" == e.action,\n r = \"insert\" == t.action;\n if (o && r) f(e.start, t.start) < 0 ? y(t, e, 1) : y(e, t, 1);else if (o && !r) 0 <= f(e.start, t.end) ? y(e, t, -1) : (f(e.start, t.start) <= 0 || y(e, m.fromPoints(t.start, e.start), -1), y(t, e, 1));else if (!o && r) 0 <= f(t.start, e.end) ? y(t, e, -1) : (f(t.start, e.start) <= 0 || y(t, m.fromPoints(e.start, t.start), -1), y(e, t, 1));else if (!o && !r) if (0 <= f(t.start, e.end)) y(t, e, -1);else {\n if (!(f(t.end, e.start) <= 0)) return f(e.start, t.start) < 0 && (e = I(n = e, t.start)), 0 < f(e.end, t.end) && (i = I(e, t.end)), v(t.end, e.start, e.end, -1), i && !n && (e.lines = i.lines, e.start = i.start, e.end = i.end, i = e), [t, n, i].filter(Boolean);\n y(e, t, -1);\n }\n return [t, e];\n }(d[u], c);\n c = g[0], 2 != g.length && (g[2] ? (d.splice(u + 1, 1, g[1], g[2]), u++) : g[1] || (d.splice(u, 1), u--));\n }\n d.length || l.splice(h, 1);\n }\n }\n this.$redoStackBaseRev = this.$rev, this.$redoStack.forEach(function (e) {\n e[0].id = ++this.$maxRev;\n }, this);\n }\n var n = this.$redoStack.pop(),\n p = null;\n return n && (p = e.redoChanges(n, t), this.$undoStack.push(n), this.$syncRev()), this.$fromUndo = !1, p;\n }, o.prototype.$syncRev = function () {\n var e = this.$undoStack,\n e = e[e.length - 1],\n e = e && e[0].id || 0;\n this.$redoStackBaseRev = e, this.$rev = e;\n }, o.prototype.reset = function () {\n this.lastDeltas = null, this.$lastDelta = null, this.$undoStack = [], this.$redoStack = [], this.$rev = 0, this.mark = 0, this.$redoStackBaseRev = this.$rev, this.selections = [];\n }, o.prototype.canUndo = function () {\n return 0 < this.$undoStack.length;\n }, o.prototype.canRedo = function () {\n return 0 < this.$redoStack.length;\n }, o.prototype.bookmark = function (e) {\n null == e && (e = this.$rev), this.mark = e;\n }, o.prototype.isAtBookmark = function () {\n return this.$rev === this.mark;\n }, o.prototype.toJSON = function () {\n return {\n $redoStack: this.$redoStack,\n $undoStack: this.$undoStack\n };\n }, o.prototype.fromJSON = function (e) {\n this.reset(), this.$undoStack = e.$undoStack, this.$redoStack = e.$redoStack;\n }, o.prototype.$prettyPrint = function (e) {\n return e ? r(e) : r(this.$undoStack) + \"\\n---\\n\" + r(this.$redoStack);\n };\n var i = o;\n function o() {\n this.$maxRev = 0, this.$fromUndo = !1, this.$undoDepth = 1 / 0, this.reset();\n }\n i.prototype.hasUndo = i.prototype.canUndo, i.prototype.hasRedo = i.prototype.canRedo, i.prototype.isClean = i.prototype.isAtBookmark, i.prototype.markClean = i.prototype.bookmark;\n var m = e(\"./range\").Range,\n f = m.comparePoints;\n m.comparePoints;\n function C(e) {\n return {\n row: e.row,\n column: e.column\n };\n }\n function r(e) {\n var t;\n return e = e || this, Array.isArray(e) ? e.map(r).join(\"\\n\") : (t = \"\", e.action ? (t = \"insert\" == e.action ? \"+\" : \"-\", t += \"[\" + e.lines + \"]\") : e.value && (t = Array.isArray(e.value) ? e.value.map(s).join(\"\\n\") : s(e.value)), e.start && (t += s(e)), (e.id || e.rev) && (t += \"\\t(\" + (e.id || e.rev) + \")\"), t);\n }\n function s(e) {\n return e.start.row + \":\" + e.start.column + \"=>\" + e.end.row + \":\" + e.end.column;\n }\n function a(e, t) {\n var n = \"insert\" == e.action,\n i = \"insert\" == t.action;\n if (n && i) {\n if (0 <= f(t.start, e.end)) y(t, e, -1);else {\n if (!(f(t.start, e.start) <= 0)) return;\n y(e, t, 1);\n }\n } else if (n && !i) {\n if (0 <= f(t.start, e.end)) y(t, e, -1);else {\n if (!(f(t.end, e.start) <= 0)) return;\n y(e, t, -1);\n }\n } else if (!n && i) {\n if (0 <= f(t.start, e.start)) y(t, e, 1);else {\n if (!(f(t.start, e.start) <= 0)) return;\n y(e, t, 1);\n }\n } else if (!n && !i) if (0 <= f(t.start, e.start)) y(t, e, 1);else {\n if (!(f(t.end, e.start) <= 0)) return;\n y(e, t, -1);\n }\n return 1;\n }\n function y(e, t, n) {\n v(e.start, t.start, t.end, n), v(e.end, t.start, t.end, n);\n }\n function v(e, t, n, i) {\n e.row == (1 == i ? t : n).row && (e.column += i * (n.column - t.column)), e.row += i * (n.row - t.row);\n }\n function I(e, t) {\n var n = e.lines,\n i = e.end,\n o = (e.end = C(t), e.end.row - e.start.row),\n r = n.splice(o, n.length),\n o = o ? t.column : t.column - e.start.column;\n return n.push(r[0].substring(0, o)), r[0] = r[0].substr(o), {\n start: C(t),\n end: i,\n lines: r,\n action: e.action\n };\n }\n t.UndoManager = i;\n }), ace.define(\"ace/edit_session/fold_line\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (e, t, n) {\n \"use strict\";\n\n var i = e(\"../range\").Range;\n function o(e, t) {\n this.foldData = e, Array.isArray(t) ? this.folds = t : t = this.folds = [t];\n e = t[t.length - 1];\n this.range = new i(t[0].start.row, t[0].start.column, e.end.row, e.end.column), this.start = this.range.start, this.end = this.range.end, this.folds.forEach(function (e) {\n e.setFoldLine(this);\n }, this);\n }\n o.prototype.shiftRow = function (t) {\n this.start.row += t, this.end.row += t, this.folds.forEach(function (e) {\n e.start.row += t, e.end.row += t;\n });\n }, o.prototype.addFold = function (e) {\n if (e.sameRow) {\n if (e.start.row < this.startRow || e.endRow > this.endRow) throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n this.folds.push(e), this.folds.sort(function (e, t) {\n return -e.range.compareEnd(t.start.row, t.start.column);\n }), 0 < this.range.compareEnd(e.start.row, e.start.column) ? (this.end.row = e.end.row, this.end.column = e.end.column) : this.range.compareStart(e.end.row, e.end.column) < 0 && (this.start.row = e.start.row, this.start.column = e.start.column);\n } else if (e.start.row == this.end.row) this.folds.push(e), this.end.row = e.end.row, this.end.column = e.end.column;else {\n if (e.end.row != this.start.row) throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n this.folds.unshift(e), this.start.row = e.start.row, this.start.column = e.start.column;\n }\n e.foldLine = this;\n }, o.prototype.containsRow = function (e) {\n return e >= this.start.row && e <= this.end.row;\n }, o.prototype.walk = function (e, t, n) {\n var i,\n o,\n r = 0,\n s = this.folds,\n a = !0;\n null == t && (t = this.end.row, n = this.end.column);\n for (var l = 0; l < s.length; l++) {\n if (-1 == (o = (i = s[l]).range.compareStart(t, n))) return void e(null, t, n, r, a);\n if (!e(null, i.start.row, i.start.column, r, a) && e(i.placeholder, i.start.row, i.start.column, r) || 0 === o) return;\n a = !i.sameRow, r = i.end.column;\n }\n e(null, t, n, r, a);\n }, o.prototype.getNextFoldTo = function (e, t) {\n for (var n, i, o = 0; o < this.folds.length; o++) {\n if (-1 == (i = (n = this.folds[o]).range.compareEnd(e, t))) return {\n fold: n,\n kind: \"after\"\n };\n if (0 === i) return {\n fold: n,\n kind: \"inside\"\n };\n }\n return null;\n }, o.prototype.addRemoveChars = function (e, t, n) {\n var i,\n o = this.getNextFoldTo(e, t);\n if (o) if (i = o.fold, \"inside\" == o.kind && i.start.column != t && i.start.row != e) window.console && window.console.log(e, t, i);else if (i.start.row == e) {\n var r,\n s = (r = this.folds).indexOf(i);\n for (0 === s && (this.start.column += n); s < r.length; s++) {\n if ((i = r[s]).start.column += n, !i.sameRow) return;\n i.end.column += n;\n }\n this.end.column += n;\n }\n }, o.prototype.split = function (e, t) {\n var n,\n i,\n e = this.getNextFoldTo(e, t);\n return e && \"inside\" != e.kind ? (t = e.fold, e = this.folds, n = this.foldData, t = e.indexOf(t), i = e[t - 1], this.end.row = i.end.row, this.end.column = i.end.column, i = new o(n, e = e.splice(t, e.length - t)), n.splice(n.indexOf(this) + 1, 0, i), i) : null;\n }, o.prototype.merge = function (e) {\n for (var t = e.folds, n = 0; n < t.length; n++) this.addFold(t[n]);\n var i = this.foldData;\n i.splice(i.indexOf(e), 1);\n }, o.prototype.toString = function () {\n var t = [this.range.toString() + \": [\"];\n return this.folds.forEach(function (e) {\n t.push(\" \" + e.toString());\n }), t.push(\"]\"), t.join(\"\\n\");\n }, o.prototype.idxToPosition = function (e) {\n for (var t = 0, n = 0; n < this.folds.length; n++) {\n var i = this.folds[n];\n if ((e -= i.start.column - t) < 0) return {\n row: i.start.row,\n column: i.start.column + e\n };\n if ((e -= i.placeholder.length) < 0) return i.start;\n t = i.end.column;\n }\n return {\n row: this.end.row,\n column: this.end.column + e\n };\n }, t.FoldLine = o;\n }), ace.define(\"ace/range_list\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (e, t, n) {\n \"use strict\";\n\n var a = e(\"./range\").Range.comparePoints,\n e = (i.prototype.pointIndex = function (e, t, n) {\n for (var i = this.ranges, o = n || 0; o < i.length; o++) {\n var r = i[o],\n s = a(e, r.end);\n if (!(0 < s)) return r = a(e, r.start), 0 === s ? t && 0 !== r ? -o - 2 : o : 0 < r || 0 === r && !t ? o : -o - 1;\n }\n return -o - 1;\n }, i.prototype.add = function (e) {\n var t = !e.isEmpty(),\n n = this.pointIndex(e.start, t),\n t = this.pointIndex(e.end, t, n = n < 0 ? -n - 1 : n);\n return t < 0 ? t = -t - 1 : t++, this.ranges.splice(n, t - n, e);\n }, i.prototype.addList = function (e) {\n for (var t = [], n = e.length; n--;) t.push.apply(t, this.add(e[n]));\n return t;\n }, i.prototype.substractPoint = function (e) {\n e = this.pointIndex(e);\n if (0 <= e) return this.ranges.splice(e, 1);\n }, i.prototype.merge = function () {\n for (var e = [], t = this.ranges, n = (t = t.sort(function (e, t) {\n return a(e.start, t.start);\n }))[0], i = 1; i < t.length; i++) {\n var o = n,\n n = t[i],\n r = a(o.end, n.start);\n r < 0 || (0 != r || o.isEmpty() || n.isEmpty()) && (a(o.end, n.end) < 0 && (o.end.row = n.end.row, o.end.column = n.end.column), t.splice(i, 1), e.push(n), n = o, i--);\n }\n return this.ranges = t, e;\n }, i.prototype.contains = function (e, t) {\n return 0 <= this.pointIndex({\n row: e,\n column: t\n });\n }, i.prototype.containsPoint = function (e) {\n return 0 <= this.pointIndex(e);\n }, i.prototype.rangeAtPoint = function (e) {\n e = this.pointIndex(e);\n if (0 <= e) return this.ranges[e];\n }, i.prototype.clipRows = function (e, t) {\n var n = this.ranges;\n if (n[0].start.row > t || n[n.length - 1].start.row < e) return [];\n for (var e = this.pointIndex({\n row: e,\n column: 0\n }), i = this.pointIndex({\n row: t,\n column: 0\n }, e = e < 0 ? -e - 1 : e), o = (i < 0 && (i = -i - 1), []), r = e; r < i; r++) o.push(n[r]);\n return o;\n }, i.prototype.removeAll = function () {\n return this.ranges.splice(0, this.ranges.length);\n }, i.prototype.attach = function (e) {\n this.session && this.detach(), this.session = e, this.onChange = this.$onChange.bind(this), this.session.on(\"change\", this.onChange);\n }, i.prototype.detach = function () {\n this.session && (this.session.removeListener(\"change\", this.onChange), this.session = null);\n }, i.prototype.$onChange = function (e) {\n for (var t = e.start, n = e.end, i = t.row, o = n.row, r = this.ranges, s = 0, a = r.length; s < a && !((h = r[s]).end.row >= i); s++);\n if (\"insert\" == e.action) for (var l = o - i, c = -t.column + n.column; s < a; s++) {\n if ((h = r[s]).start.row > i) break;\n h.start.row == i && h.start.column >= t.column && (h.start.column == t.column && this.$bias <= 0 || (h.start.column += c, h.start.row += l)), h.end.row == i && h.end.column >= t.column && (h.end.column == t.column && this.$bias < 0 || (h.end.column == t.column && 0 < c && s < a - 1 && h.end.column > h.start.column && h.end.column == r[s + 1].start.column && (h.end.column -= c), h.end.column += c, h.end.row += l));\n } else for (var h, l = i - o, c = t.column - n.column; s < a; s++) {\n if ((h = r[s]).start.row > o) break;\n h.end.row < o && (i < h.end.row || i == h.end.row && t.column < h.end.column) ? (h.end.row = i, h.end.column = t.column) : h.end.row == o ? h.end.column <= n.column ? (l || h.end.column > t.column) && (h.end.column = t.column, h.end.row = t.row) : (h.end.column += c, h.end.row += l) : h.end.row > o && (h.end.row += l), h.start.row < o && (i < h.start.row || i == h.start.row && t.column < h.start.column) ? (h.start.row = i, h.start.column = t.column) : h.start.row == o ? h.start.column <= n.column ? (l || h.start.column > t.column) && (h.start.column = t.column, h.start.row = t.row) : (h.start.column += c, h.start.row += l) : h.start.row > o && (h.start.row += l);\n }\n if (0 != l && s < a) for (; s < a; s++) (h = r[s]).start.row += l, h.end.row += l;\n }, i);\n function i() {\n this.ranges = [], this.$bias = 1;\n }\n e.prototype.comparePoints = a, t.RangeList = e;\n }), ace.define(\"ace/edit_session/fold\", [\"require\", \"exports\", \"module\", \"ace/range_list\"], function (e, t, n) {\n \"use strict\";\n\n var i,\n o,\n r = this && this.__extends || (i = function (e, t) {\n return (i = Object.setPrototypeOf || ({\n __proto__: []\n } instanceof Array ? function (e, t) {\n e.__proto__ = t;\n } : function (e, t) {\n for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);\n }))(e, t);\n }, function (e, t) {\n if (\"function\" != typeof t && null !== t) throw new TypeError(\"Class extends value \" + String(t) + \" is not a constructor or null\");\n function n() {\n this.constructor = e;\n }\n i(e, t), e.prototype = null === t ? Object.create(t) : (n.prototype = t.prototype, new n());\n }),\n e = e(\"../range_list\").RangeList,\n r = (r(s, o = e), s.prototype.toString = function () {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n }, s.prototype.setFoldLine = function (t) {\n this.foldLine = t, this.subFolds.forEach(function (e) {\n e.setFoldLine(t);\n });\n }, s.prototype.clone = function () {\n var t = new s(this.range.clone(), this.placeholder);\n return this.subFolds.forEach(function (e) {\n t.subFolds.push(e.clone());\n }), t.collapseChildren = this.collapseChildren, t;\n }, s.prototype.addSubFold = function (e) {\n if (!this.range.isEqual(e)) {\n r = e, s = this.start, d(r.start, s), d(r.end, s);\n for (var t = e.start.row, n = e.start.column, i = 0, o = -1; i < this.subFolds.length && 1 == (o = this.subFolds[i].range.compare(t, n)); i++);\n var r = this.subFolds[i],\n s = 0;\n if (0 == o) {\n if (r.range.containsRange(e)) return r.addSubFold(e);\n s = 1;\n }\n for (var t = e.range.end.row, n = e.range.end.column, a = i, o = -1; a < this.subFolds.length && 1 == (o = this.subFolds[a].range.compare(t, n)); a++);\n 0 == o && a++;\n for (var l = this.subFolds.splice(i, a - i, e), c = 0 == o ? l.length - 1 : l.length, h = s; h < c; h++) e.addSubFold(l[h]);\n return e.setFoldLine(this.foldLine), e;\n }\n }, s.prototype.restoreRange = function (e) {\n return e = e, t = this.start, a(e.start, t), void a(e.end, t);\n var t;\n }, s);\n function s(e, t) {\n var n = o.call(this) || this;\n return n.foldLine = null, n.placeholder = t, n.range = e, n.start = e.start, n.end = e.end, n.sameRow = e.start.row == e.end.row, n.subFolds = n.ranges = [], n;\n }\n function d(e, t) {\n e.row -= t.row, 0 == e.row && (e.column -= t.column);\n }\n function a(e, t) {\n 0 == e.row && (e.column += t.column), e.row += t.row;\n }\n t.Fold = r;\n }), ace.define(\"ace/edit_session/folding\", [\"require\", \"exports\", \"module\", \"ace/range\", \"ace/edit_session/fold_line\", \"ace/edit_session/fold\", \"ace/token_iterator\", \"ace/mouse/mouse_event\"], function (e, t, n) {\n \"use strict\";\n\n var c = e(\"../range\").Range,\n u = e(\"./fold_line\").FoldLine,\n g = e(\"./fold\").Fold,\n h = e(\"../token_iterator\").TokenIterator,\n i = e(\"../mouse/mouse_event\").MouseEvent;\n t.Folding = function () {\n this.getFoldAt = function (e, t, n) {\n var i = this.getFoldLine(e);\n if (!i) return null;\n for (var o = i.folds, r = 0; r < o.length; r++) {\n var s = o[r].range;\n if (s.contains(e, t) && (1 != n || !s.isEnd(e, t) || s.isEmpty()) && (-1 != n || !s.isStart(e, t) || s.isEmpty())) return o[r];\n }\n }, this.getFoldsInRange = function (e) {\n var t = e.start,\n n = e.end,\n i = this.$foldData,\n o = [];\n t.column += 1, --n.column;\n for (var r = 0; r < i.length; r++) {\n var s = i[r].range.compareRange(e);\n if (2 != s) {\n if (-2 == s) break;\n for (var a = i[r].folds, l = 0; l < a.length; l++) {\n var c = a[l];\n if (-2 == (s = c.range.compareRange(e))) break;\n if (2 != s) {\n if (42 == s) break;\n o.push(c);\n }\n }\n }\n }\n return --t.column, n.column += 1, o;\n }, this.getFoldsInRangeList = function (e) {\n var t;\n return Array.isArray(e) ? (t = [], e.forEach(function (e) {\n t = t.concat(this.getFoldsInRange(e));\n }, this)) : t = this.getFoldsInRange(e), t;\n }, this.getAllFolds = function () {\n for (var e = [], t = this.$foldData, n = 0; n < t.length; n++) for (var i = 0; i < t[n].folds.length; i++) e.push(t[n].folds[i]);\n return e;\n }, this.getFoldStringAt = function (e, t, n, i) {\n if (!(i = i || this.getFoldLine(e))) return null;\n for (var o, r = {\n end: {\n column: 0\n }\n }, s = 0; s < i.folds.length; s++) {\n var a,\n l = (a = i.folds[s]).range.compareEnd(e, t);\n if (-1 == l) {\n o = this.getLine(a.start.row).substring(r.end.column, a.start.column);\n break;\n }\n if (0 === l) return null;\n r = a;\n }\n return o = o || this.getLine(a.start.row).substring(r.end.column), -1 == n ? o.substring(0, t - r.end.column) : 1 == n ? o.substring(t - r.end.column) : o;\n }, this.getFoldLine = function (e, t) {\n var n = this.$foldData,\n i = 0;\n for (-1 == (i = t ? n.indexOf(t) : i) && (i = 0); i < n.length; i++) {\n var o = n[i];\n if (o.start.row <= e && o.end.row >= e) return o;\n if (o.end.row > e) return null;\n }\n return null;\n }, this.getNextFoldLine = function (e, t) {\n var n = this.$foldData,\n i = 0;\n for (-1 == (i = t ? n.indexOf(t) : i) && (i = 0); i < n.length; i++) {\n var o = n[i];\n if (o.end.row >= e) return o;\n }\n return null;\n }, this.getFoldedRowCount = function (e, t) {\n for (var n = this.$foldData, i = t - e + 1, o = 0; o < n.length; o++) {\n var r = n[o],\n s = r.end.row,\n r = r.start.row;\n if (t <= s) {\n r < t && (e <= r ? i -= t - r : i = 0);\n break;\n }\n e <= s && (i -= e <= r ? s - r : s - e + 1);\n }\n return i;\n }, this.$addFoldLine = function (e) {\n return this.$foldData.push(e), this.$foldData.sort(function (e, t) {\n return e.start.row - t.start.row;\n }), e;\n }, this.addFold = function (e, t) {\n var n,\n i = this.$foldData,\n o = !1,\n r = (e instanceof g ? n = e : (n = new g(t, e)).collapseChildren = t.collapseChildren, this.$clipRangeToDocument(n.range), n.start.row),\n e = n.start.column,\n s = n.end.row,\n t = n.end.column,\n a = this.getFoldAt(r, e, 1),\n l = this.getFoldAt(s, t, -1);\n if (a && l == a) return a.addSubFold(n);\n a && !a.range.isStart(r, e) && this.removeFold(a), l && !l.range.isEnd(s, t) && this.removeFold(l);\n e = this.getFoldsInRange(n.range);\n 0 < e.length && (this.removeFolds(e), n.collapseChildren || e.forEach(function (e) {\n n.addSubFold(e);\n }));\n for (var c = 0; c < i.length; c++) {\n var h = i[c];\n if (s == h.start.row) {\n h.addFold(n), o = !0;\n break;\n }\n if (r == h.end.row) {\n if (h.addFold(n), o = !0, !n.sameRow) {\n var d = i[c + 1];\n if (d && d.start.row == s) {\n h.merge(d);\n break;\n }\n }\n break;\n }\n if (s <= h.start.row) break;\n }\n return o || (h = this.$addFoldLine(new u(this.$foldData, n))), this.$useWrapMode ? this.$updateWrapData(h.start.row, h.start.row) : this.$updateRowLengthCache(h.start.row, h.start.row), this.$modified = !0, this._signal(\"changeFold\", {\n data: n,\n action: \"add\"\n }), n;\n }, this.addFolds = function (e) {\n e.forEach(function (e) {\n this.addFold(e);\n }, this);\n }, this.removeFold = function (e) {\n var t = e.foldLine,\n n = t.start.row,\n i = t.end.row,\n o = this.$foldData,\n r = t.folds;\n 1 == r.length ? o.splice(o.indexOf(t), 1) : t.range.isEnd(e.end.row, e.end.column) ? (r.pop(), t.end.row = r[r.length - 1].end.row, t.end.column = r[r.length - 1].end.column) : t.range.isStart(e.start.row, e.start.column) ? (r.shift(), t.start.row = r[0].start.row, t.start.column = r[0].start.column) : e.sameRow ? r.splice(r.indexOf(e), 1) : ((r = (o = t.split(e.start.row, e.start.column)).folds).shift(), o.start.row = r[0].start.row, o.start.column = r[0].start.column), this.$updating || (this.$useWrapMode ? this.$updateWrapData(n, i) : this.$updateRowLengthCache(n, i)), this.$modified = !0, this._signal(\"changeFold\", {\n data: e,\n action: \"remove\"\n });\n }, this.removeFolds = function (e) {\n for (var t = [], n = 0; n < e.length; n++) t.push(e[n]);\n t.forEach(function (e) {\n this.removeFold(e);\n }, this), this.$modified = !0;\n }, this.expandFold = function (t) {\n this.removeFold(t), t.subFolds.forEach(function (e) {\n t.restoreRange(e), this.addFold(e);\n }, this), 0 < t.collapseChildren && this.foldAll(t.start.row + 1, t.end.row, t.collapseChildren - 1), t.subFolds = [];\n }, this.expandFolds = function (e) {\n e.forEach(function (e) {\n this.expandFold(e);\n }, this);\n }, this.unfold = function (e, t) {\n var n;\n if (null == e) n = new c(0, 0, this.getLength(), 0), null == t && (t = !0);else if (\"number\" == typeof e) n = new c(e, 0, e, this.getLine(e).length);else if (\"row\" in e) n = c.fromPoints(e, e);else {\n if (Array.isArray(e)) return i = [], e.forEach(function (e) {\n i = i.concat(this.unfold(e));\n }, this), i;\n n = e;\n }\n for (var i, e = i = this.getFoldsInRangeList(n); 1 == i.length && c.comparePoints(i[0].start, n.start) < 0 && 0 < c.comparePoints(i[0].end, n.end);) this.expandFolds(i), i = this.getFoldsInRangeList(n);\n if (0 != t ? this.removeFolds(i) : this.expandFolds(i), e.length) return e;\n }, this.isRowFolded = function (e, t) {\n return !!this.getFoldLine(e, t);\n }, this.getRowFoldEnd = function (e, t) {\n t = this.getFoldLine(e, t);\n return t ? t.end.row : e;\n }, this.getRowFoldStart = function (e, t) {\n t = this.getFoldLine(e, t);\n return t ? t.start.row : e;\n }, this.getFoldDisplayLine = function (e, t, n, o, r) {\n null == o && (o = e.start.row), null == r && (r = 0), null == t && (t = e.end.row), null == n && (n = this.getLine(t).length);\n var s = this.doc,\n a = \"\";\n return e.walk(function (e, t, n, i) {\n if (!(t < o)) {\n if (t == o) {\n if (n < r) return;\n i = Math.max(r, i);\n }\n a += null != e ? e : s.getLine(t).substring(i, n);\n }\n }, t, n), a;\n }, this.getDisplayLine = function (e, t, n, i) {\n var o = this.getFoldLine(e);\n return o ? this.getFoldDisplayLine(o, e, t, n, i) : (o = this.doc.getLine(e)).substring(i || 0, t || o.length);\n }, this.$cloneFoldData = function () {\n var t = [];\n return t = this.$foldData.map(function (e) {\n e = e.folds.map(function (e) {\n return e.clone();\n });\n return new u(t, e);\n });\n }, this.toggleFold = function (e) {\n var t = this.selection.getRange();\n if (t.isEmpty()) {\n var n,\n i = t.start;\n if (n = this.getFoldAt(i.row, i.column)) return void this.expandFold(n);\n (o = this.findMatchingBracket(i)) ? 1 == t.comparePoint(o) ? t.end = o : (t.start = o, t.start.column++, t.end.column--) : (o = this.findMatchingBracket({\n row: i.row,\n column: i.column + 1\n })) ? (1 == t.comparePoint(o) ? t.end = o : t.start = o, t.start.column++) : t = this.getCommentFoldRange(i.row, i.column) || t;\n } else {\n var o = this.getFoldsInRange(t);\n if (e && o.length) return void this.expandFolds(o);\n 1 == o.length && (n = o[0]);\n }\n if ((n = n || this.getFoldAt(t.start.row, t.start.column)) && n.range.toString() == t.toString()) this.expandFold(n);else {\n i = \"...\";\n if (!t.isMultiLine()) {\n if ((i = this.getTextRange(t)).length < 4) return;\n i = i.trim().substring(0, 2) + \"..\";\n }\n this.addFold(i, t);\n }\n }, this.getCommentFoldRange = function (e, t, n) {\n var i = new h(this, e, t),\n o = i.getCurrentToken(),\n r = o && o.type;\n if (o && /^comment|string/.test(r)) {\n \"comment\" == (r = r.match(/comment|string/)[0]) && (r += \"|doc-start|\\\\.doc\");\n var s = new RegExp(r),\n r = new c();\n if (1 != n) {\n for (; (o = i.stepBackward()) && s.test(o.type) && !/^comment.end/.test(o.type););\n o = i.stepForward();\n }\n if (r.start.row = i.getCurrentTokenRow(), r.start.column = i.getCurrentTokenColumn() + (/^comment.start/.test(o.type) ? o.value.length : 2), i = new h(this, e, t), -1 != n) {\n var a = -1;\n do {\n if (o = i.stepForward(), -1 == a) {\n var l = this.getState(i.$row);\n s.test(l) || (a = i.$row);\n } else if (i.$row > a) break;\n } while (o && s.test(o.type) && !/^comment.start/.test(o.type));\n o = i.stepBackward();\n } else o = i.getCurrentToken();\n return r.end.row = i.getCurrentTokenRow(), r.end.column = i.getCurrentTokenColumn(), /^comment.end/.test(o.type) || (r.end.column += o.value.length - 2), r;\n }\n }, this.foldAll = function (e, t, n, i) {\n null == n && (n = 1e5);\n var o = this.foldWidgets;\n if (o) {\n t = t || this.getLength();\n for (var r, s = e = e || 0; s < t; s++) null == o[s] && (o[s] = this.getFoldWidget(s)), \"start\" != o[s] || i && !i(s) || (r = this.getFoldWidgetRange(s)) && r.isMultiLine() && r.end.row <= t && r.start.row >= e && (s = r.end.row, r.collapseChildren = n, this.addFold(\"...\", r));\n }\n }, this.foldToLevel = function (e) {\n for (this.foldAll(); 0 < e--;) this.unfold(null, !1);\n }, this.foldAllComments = function () {\n var o = this;\n this.foldAll(null, null, null, function (e) {\n for (var t = o.getTokens(e), n = 0; n < t.length; n++) {\n var i = t[n];\n if (\"text\" != i.type || !/^\\s+$/.test(i.value)) return !!/comment/.test(i.type);\n }\n });\n }, this.$foldStyles = {\n manual: 1,\n markbegin: 1,\n markbeginend: 1\n }, this.$foldStyle = \"markbegin\", this.setFoldStyle = function (e) {\n if (!this.$foldStyles[e]) throw new Error(\"invalid fold style: \" + e + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n this.$foldStyle != e && (\"manual\" == (this.$foldStyle = e) && this.unfold(), e = this.$foldMode, this.$setFolding(null), this.$setFolding(e));\n }, this.$setFolding = function (e) {\n this.$foldMode != e && (this.$foldMode = e, this.off(\"change\", this.$updateFoldWidgets), this.off(\"tokenizerUpdate\", this.$tokenizerUpdateFoldWidgets), this._signal(\"changeAnnotation\"), e && \"manual\" != this.$foldStyle ? (this.foldWidgets = [], this.getFoldWidget = e.getFoldWidget.bind(e, this, this.$foldStyle), this.getFoldWidgetRange = e.getFoldWidgetRange.bind(e, this, this.$foldStyle), this.$updateFoldWidgets = this.updateFoldWidgets.bind(this), this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this), this.on(\"change\", this.$updateFoldWidgets), this.on(\"tokenizerUpdate\", this.$tokenizerUpdateFoldWidgets)) : this.foldWidgets = null);\n }, this.getParentFoldRangeData = function (e, t) {\n var n = this.foldWidgets;\n if (!n || t && n[e]) return {};\n for (var i = e - 1; 0 <= i;) {\n var o = n[i];\n if (\"start\" == (o = null == o ? n[i] = this.getFoldWidget(i) : o)) {\n var r = this.getFoldWidgetRange(i),\n s = s || r;\n if (r && r.end.row >= e) break;\n }\n i--;\n }\n return {\n range: -1 !== i && r,\n firstRange: s\n };\n }, this.onFoldWidgetClick = function (e, t) {\n var n = {\n children: (t = t instanceof i ? t.domEvent : t).shiftKey,\n all: t.ctrlKey || t.metaKey,\n siblings: t.altKey\n };\n this.$toggleFoldWidget(e, n) || (e = t.target || t.srcElement) && /ace_fold-widget/.test(e.className) && (e.className += \" ace_invalid\");\n }, this.$toggleFoldWidget = function (e, t) {\n var n, i, o, r;\n if (this.getFoldWidget) return n = this.getFoldWidget(e), i = this.getLine(e), (i = this.getFoldAt(e, -1 == (n = \"end\" === n ? -1 : 1) ? 0 : i.length, n)) ? (t.children || t.all ? this.removeFold(i) : this.expandFold(i), i) : (n = this.getFoldWidgetRange(e, !0)) && !n.isMultiLine() && (i = this.getFoldAt(n.start.row, n.start.column, 1)) && n.isEqual(i.range) ? (this.removeFold(i), i) : (t.siblings ? ((i = this.getParentFoldRangeData(e)).range && (o = i.range.start.row + 1, r = i.range.end.row), this.foldAll(o, r, t.all ? 1e4 : 0)) : t.children ? (r = n ? n.end.row : this.getLength(), this.foldAll(e + 1, r, t.all ? 1e4 : 0)) : n && (t.all && (n.collapseChildren = 1e4), this.addFold(\"...\", n)), n);\n }, this.toggleFoldWidget = function (e) {\n var t,\n n = this.selection.getCursor().row;\n n = this.getRowFoldStart(n), !this.$toggleFoldWidget(n, {}) && (t = (t = this.getParentFoldRangeData(n, !0)).range || t.firstRange) && (n = t.start.row, (n = this.getFoldAt(n, this.getLine(n).length, 1)) ? this.removeFold(n) : this.addFold(\"...\", t));\n }, this.updateFoldWidgets = function (e) {\n var t = e.start.row,\n n = e.end.row - t;\n 0 == n ? this.foldWidgets[t] = null : \"remove\" == e.action ? this.foldWidgets.splice(t, 1 + n, null) : ((e = Array(1 + n)).unshift(t, 1), this.foldWidgets.splice.apply(this.foldWidgets, e));\n }, this.tokenizerUpdateFoldWidgets = function (e) {\n e = e.data;\n e.first != e.last && this.foldWidgets.length > e.first && this.foldWidgets.splice(e.first, this.foldWidgets.length);\n };\n };\n }), ace.define(\"ace/edit_session/bracket_match\", [\"require\", \"exports\", \"module\", \"ace/token_iterator\", \"ace/range\"], function (e, t, n) {\n \"use strict\";\n\n var d = e(\"../token_iterator\").TokenIterator,\n C = e(\"../range\").Range;\n t.BracketMatch = function () {\n this.findMatchingBracket = function (e, t) {\n return 0 != e.column && \"\" != (t = t || this.getLine(e.row).charAt(e.column - 1)) && (t = t.match(/([\\(\\[\\{])|([\\)\\]\\}])/)) ? t[1] ? this.$findClosingBracket(t[1], e) : this.$findOpeningBracket(t[2], e) : null;\n }, this.getBracketRange = function (e) {\n var t,\n n,\n i = this.getLine(e.row),\n o = !0,\n r = i.charAt(e.column - 1),\n s = r && r.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (s || (r = i.charAt(e.column), e = {\n row: e.row,\n column: e.column + 1\n }, s = r && r.match(/([\\(\\[\\{])|([\\)\\]\\}])/), o = !1), !s) return null;\n if (s[1]) {\n if (!(n = this.$findClosingBracket(s[1], e))) return null;\n t = C.fromPoints(e, n), o || (t.end.column++, t.start.column--), t.cursor = t.end;\n } else {\n if (!(n = this.$findOpeningBracket(s[2], e))) return null;\n t = C.fromPoints(n, e), o || (t.start.column++, t.end.column--), t.cursor = t.start;\n }\n return t;\n }, this.getMatchingBracketRanges = function (e, t) {\n var n = this.getLine(e.row),\n i = /([\\(\\[\\{])|([\\)\\]\\}])/,\n o = !t && n.charAt(e.column - 1),\n r = o && o.match(i);\n return r || (o = (void 0 === t || t) && n.charAt(e.column), e = {\n row: e.row,\n column: e.column + 1\n }, r = o && o.match(i)), r ? (t = new C(e.row, e.column - 1, e.row, e.column), (n = r[1] ? this.$findClosingBracket(r[1], e) : this.$findOpeningBracket(r[2], e)) ? [t, new C(n.row, n.column, n.row, n.column + 1)] : [t]) : null;\n }, this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\",\n \"<\": \">\",\n \">\": \"<\"\n }, this.$findOpeningBracket = function (e, t, n) {\n var i = this.$brackets[e],\n o = 1,\n r = new d(this, t.row, t.column),\n s = r.getCurrentToken();\n if (s = s || r.stepForward()) {\n n = n || new RegExp(\"(\\\\.?\" + s.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\").replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\").replace(/-close\\b/, \"-(close|open)\") + \")+\");\n for (var a = t.column - r.getCurrentTokenColumn() - 2, l = s.value;;) {\n for (; 0 <= a;) {\n var c = l.charAt(a);\n if (c == i) {\n if (0 == --o) return {\n row: r.getCurrentTokenRow(),\n column: a + r.getCurrentTokenColumn()\n };\n } else c == e && (o += 1);\n --a;\n }\n for (; (s = r.stepBackward()) && !n.test(s.type););\n if (null == s) break;\n a = (l = s.value).length - 1;\n }\n return null;\n }\n }, this.$findClosingBracket = function (e, t, n) {\n var i = this.$brackets[e],\n o = 1,\n r = new d(this, t.row, t.column),\n s = r.getCurrentToken();\n if (s = s || r.stepForward()) {\n n = n || new RegExp(\"(\\\\.?\" + s.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\").replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\").replace(/-open\\b/, \"-(close|open)\") + \")+\");\n for (var a = t.column - r.getCurrentTokenColumn();;) {\n for (var l = s.value, c = l.length; a < c;) {\n var h = l.charAt(a);\n if (h == i) {\n if (0 == --o) return {\n row: r.getCurrentTokenRow(),\n column: a + r.getCurrentTokenColumn()\n };\n } else h == e && (o += 1);\n a += 1;\n }\n for (; (s = r.stepForward()) && !n.test(s.type););\n if (null == s) break;\n a = 0;\n }\n return null;\n }\n }, this.getMatchingTags = function (e) {\n var e = new d(this, e.row, e.column),\n t = this.$findTagName(e);\n if (t) return \"<\" === e.stepBackward().value ? this.$findClosingTag(e, t) : this.$findOpeningTag(e, t);\n }, this.$findTagName = function (e) {\n var t = e.getCurrentToken(),\n n = !1,\n i = !1;\n if (t && -1 === t.type.indexOf(\"tag-name\")) for (; (t = i ? e.stepBackward() : e.stepForward()) && (\"/>\" === t.value ? i = !0 : -1 !== t.type.indexOf(\"tag-name\") && (n = !0)), t && !n;);\n return t;\n }, this.$findClosingTag = function (e, t) {\n var n = t.value,\n i = t.value,\n o = 0,\n r = new C(e.getCurrentTokenRow(), e.getCurrentTokenColumn(), e.getCurrentTokenRow(), e.getCurrentTokenColumn() + 1),\n s = (t = e.stepForward(), new C(e.getCurrentTokenRow(), e.getCurrentTokenColumn(), e.getCurrentTokenRow(), e.getCurrentTokenColumn() + t.value.length)),\n a = !1;\n do {\n var l,\n c = t;\n if (t = e.stepForward()) if (\">\" !== t.value || a || (l = new C(e.getCurrentTokenRow(), e.getCurrentTokenColumn(), e.getCurrentTokenRow(), e.getCurrentTokenColumn() + 1), a = !0), -1 !== t.type.indexOf(\"tag-name\")) {\n if (i === (n = t.value)) if (\"<\" === c.value) o++;else if (\"\" === c.value && --o < 0) {\n e.stepBackward();\n var h = new C(e.getCurrentTokenRow(), e.getCurrentTokenColumn(), e.getCurrentTokenRow(), e.getCurrentTokenColumn() + 2),\n d = (t = e.stepForward(), new C(e.getCurrentTokenRow(), e.getCurrentTokenColumn(), e.getCurrentTokenRow(), e.getCurrentTokenColumn() + t.value.length));\n if (!(t = e.stepForward()) || \">\" !== t.value) return;\n var u = new C(e.getCurrentTokenRow(), e.getCurrentTokenColumn(), e.getCurrentTokenRow(), e.getCurrentTokenColumn() + 1);\n }\n } else i === n && \"/>\" === t.value && --o < 0 && (u = d = h = new C(e.getCurrentTokenRow(), e.getCurrentTokenColumn(), e.getCurrentTokenRow(), e.getCurrentTokenColumn() + 2), l = new C(s.end.row, s.end.column, s.end.row, s.end.column + 1));\n } while (t && 0 <= o);\n if (r && l && h && u && s && d) return {\n openTag: new C(r.start.row, r.start.column, l.end.row, l.end.column),\n closeTag: new C(h.start.row, h.start.column, u.end.row, u.end.column),\n openTagName: s,\n closeTagName: d\n };\n }, this.$findOpeningTag = function (e, t) {\n var n,\n i = e.getCurrentToken(),\n o = t.value,\n r = 0,\n s = e.getCurrentTokenRow(),\n a = e.getCurrentTokenColumn(),\n l = new C(s, a, s, a + 2),\n c = (e.stepForward(), new C(e.getCurrentTokenRow(), e.getCurrentTokenColumn(), e.getCurrentTokenRow(), e.getCurrentTokenColumn() + t.value.length));\n if ((t = e.stepForward()) && \">\" === t.value) {\n var h = new C(e.getCurrentTokenRow(), e.getCurrentTokenColumn(), e.getCurrentTokenRow(), e.getCurrentTokenColumn() + 1);\n e.stepBackward(), e.stepBackward();\n do {\n if (t = i, s = e.getCurrentTokenRow(), n = (a = e.getCurrentTokenColumn()) + t.value.length, i = e.stepBackward(), t) if (-1 !== t.type.indexOf(\"tag-name\")) {\n if (o === t.value) if (\"<\" === i.value) {\n if (0 < ++r) {\n for (var d = new C(s, a, s, n), u = new C(e.getCurrentTokenRow(), e.getCurrentTokenColumn(), e.getCurrentTokenRow(), e.getCurrentTokenColumn() + 1); (t = e.stepForward()) && \">\" !== t.value;);\n var g = new C(e.getCurrentTokenRow(), e.getCurrentTokenColumn(), e.getCurrentTokenRow(), e.getCurrentTokenColumn() + 1);\n }\n } else \"\" === i.value && r--;\n } else if (\"/>\" === t.value) {\n for (var p = 0, m = i; m;) {\n if (-1 !== m.type.indexOf(\"tag-name\") && m.value === o) {\n r--;\n break;\n }\n if (\"<\" === m.value) break;\n m = e.stepBackward(), p++;\n }\n for (var f = 0; f < p; f++) e.stepForward();\n }\n } while (i && r <= 0);\n return u && g && l && h && d && c ? {\n openTag: new C(u.start.row, u.start.column, g.end.row, g.end.column),\n closeTag: new C(l.start.row, l.start.column, h.end.row, h.end.column),\n openTagName: d,\n closeTagName: c\n } : void 0;\n }\n };\n };\n }), ace.define(\"ace/edit_session\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/lang\", \"ace/bidihandler\", \"ace/config\", \"ace/lib/event_emitter\", \"ace/selection\", \"ace/mode/text\", \"ace/range\", \"ace/document\", \"ace/background_tokenizer\", \"ace/search_highlight\", \"ace/undomanager\", \"ace/edit_session/folding\", \"ace/edit_session/bracket_match\"], function (e, t, n) {\n \"use strict\";\n\n var i = e(\"./lib/oop\"),\n o = e(\"./lib/lang\"),\n r = e(\"./bidihandler\").BidiHandler,\n s = e(\"./config\"),\n a = e(\"./lib/event_emitter\").EventEmitter,\n l = e(\"./selection\").Selection,\n c = e(\"./mode/text\").Mode,\n h = e(\"./range\").Range,\n d = e(\"./document\").Document,\n u = e(\"./background_tokenizer\").BackgroundTokenizer,\n g = e(\"./search_highlight\").SearchHighlight,\n p = e(\"./undomanager\").UndoManager,\n m = (f.prototype.setDocument = function (e) {\n this.doc && this.doc.off(\"change\", this.$onChange), (this.doc = e).on(\"change\", this.$onChange, !0), this.bgTokenizer.setDocument(this.getDocument()), this.resetCaches();\n }, f.prototype.getDocument = function () {\n return this.doc;\n }, f.prototype.$resetRowCache = function (e) {\n var t;\n e ? (t = this.$docRowCache.length, (e = this.$getRowCacheIndex(this.$docRowCache, e) + 1) < t && (this.$docRowCache.splice(e, t), this.$screenRowCache.splice(e, t))) : (this.$docRowCache = [], this.$screenRowCache = []);\n }, f.prototype.$getRowCacheIndex = function (e, t) {\n for (var n = 0, i = e.length - 1; n <= i;) {\n var o = n + i >> 1,\n r = e[o];\n if (r < t) n = 1 + o;else {\n if (!(t < r)) return o;\n i = o - 1;\n }\n }\n return n - 1;\n }, f.prototype.resetCaches = function () {\n this.$modified = !0, this.$wrapData = [], this.$rowLengthCache = [], this.$resetRowCache(0), this.destroyed || this.bgTokenizer.start(0);\n }, f.prototype.onChangeFold = function (e) {\n e = e.data;\n this.$resetRowCache(e.start.row);\n }, f.prototype.onChange = function (e) {\n this.$modified = !0, this.$bidiHandler.onChange(e), this.$resetRowCache(e.start.row);\n var t = this.$updateInternalDataOnChange(e);\n !this.$fromUndo && this.$undoManager && (t && t.length && (this.$undoManager.add({\n action: \"removeFolds\",\n folds: t\n }, this.mergeUndoDeltas), this.mergeUndoDeltas = !0), this.$undoManager.add(e, this.mergeUndoDeltas), this.mergeUndoDeltas = !0, this.$informUndoManager.schedule()), this.bgTokenizer.$updateOnChange(e), this._signal(\"change\", e);\n }, f.prototype.setValue = function (e) {\n this.doc.setValue(e), this.selection.moveTo(0, 0), this.$resetRowCache(0), this.setUndoManager(this.$undoManager), this.getUndoManager().reset();\n }, f.fromJSON = function (e) {\n e = JSON.parse(e);\n var t = new p(),\n n = (t.$undoStack = e.history.undo, t.$redoStack = e.history.redo, t.mark = e.history.mark, t.$rev = e.history.rev, new f(e.value));\n return e.folds.forEach(function (e) {\n n.addFold(\"...\", h.fromPoints(e.start, e.end));\n }), n.setAnnotations(e.annotations), n.setBreakpoints(e.breakpoints), n.setMode(e.mode), n.setScrollLeft(e.scrollLeft), n.setScrollTop(e.scrollTop), n.setUndoManager(t), n.selection.fromJSON(e.selection), n;\n }, f.prototype.toJSON = function () {\n return {\n annotations: this.$annotations,\n breakpoints: this.$breakpoints,\n folds: this.getAllFolds().map(function (e) {\n return e.range;\n }),\n history: this.getUndoManager(),\n mode: this.$mode.$id,\n scrollLeft: this.$scrollLeft,\n scrollTop: this.$scrollTop,\n selection: this.selection.toJSON(),\n value: this.doc.getValue()\n };\n }, f.prototype.toString = function () {\n return this.doc.getValue();\n }, f.prototype.getSelection = function () {\n return this.selection;\n }, f.prototype.getState = function (e) {\n return this.bgTokenizer.getState(e);\n }, f.prototype.getTokens = function (e) {\n return this.bgTokenizer.getTokens(e);\n }, f.prototype.getTokenAt = function (e, t) {\n var n = this.bgTokenizer.getTokens(e),\n i = 0;\n if (null == t) var o = n.length - 1,\n i = this.getLine(e).length;else for (o = 0; o < n.length && !(t <= (i += n[o].value.length)); o++);\n return (e = n[o]) ? (e.index = o, e.start = i - e.value.length, e) : null;\n }, f.prototype.setUndoManager = function (e) {\n var t;\n this.$undoManager = e, this.$informUndoManager && this.$informUndoManager.cancel(), e ? (e.addSession(t = this), this.$syncInformUndoManager = function () {\n t.$informUndoManager.cancel(), t.mergeUndoDeltas = !1;\n }, this.$informUndoManager = o.delayedCall(this.$syncInformUndoManager)) : this.$syncInformUndoManager = function () {};\n }, f.prototype.markUndoGroup = function () {\n this.$syncInformUndoManager && this.$syncInformUndoManager();\n }, f.prototype.getUndoManager = function () {\n return this.$undoManager || this.$defaultUndoManager;\n }, f.prototype.getTabString = function () {\n return this.getUseSoftTabs() ? o.stringRepeat(\" \", this.getTabSize()) : \"\\t\";\n }, f.prototype.setUseSoftTabs = function (e) {\n this.setOption(\"useSoftTabs\", e);\n }, f.prototype.getUseSoftTabs = function () {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n }, f.prototype.setTabSize = function (e) {\n this.setOption(\"tabSize\", e);\n }, f.prototype.getTabSize = function () {\n return this.$tabSize;\n }, f.prototype.isTabStop = function (e) {\n return this.$useSoftTabs && e.column % this.$tabSize == 0;\n }, f.prototype.setNavigateWithinSoftTabs = function (e) {\n this.setOption(\"navigateWithinSoftTabs\", e);\n }, f.prototype.getNavigateWithinSoftTabs = function () {\n return this.$navigateWithinSoftTabs;\n }, f.prototype.setOverwrite = function (e) {\n this.setOption(\"overwrite\", e);\n }, f.prototype.getOverwrite = function () {\n return this.$overwrite;\n }, f.prototype.toggleOverwrite = function () {\n this.setOverwrite(!this.$overwrite);\n }, f.prototype.addGutterDecoration = function (e, t) {\n this.$decorations[e] || (this.$decorations[e] = \"\"), this.$decorations[e] += \" \" + t, this._signal(\"changeBreakpoint\", {});\n }, f.prototype.removeGutterDecoration = function (e, t) {\n this.$decorations[e] = (this.$decorations[e] || \"\").replace(\" \" + t, \"\"), this._signal(\"changeBreakpoint\", {});\n }, f.prototype.getBreakpoints = function () {\n return this.$breakpoints;\n }, f.prototype.setBreakpoints = function (e) {\n this.$breakpoints = [];\n for (var t = 0; t < e.length; t++) this.$breakpoints[e[t]] = \"ace_breakpoint\";\n this._signal(\"changeBreakpoint\", {});\n }, f.prototype.clearBreakpoints = function () {\n this.$breakpoints = [], this._signal(\"changeBreakpoint\", {});\n }, f.prototype.setBreakpoint = function (e, t) {\n (t = void 0 === t ? \"ace_breakpoint\" : t) ? this.$breakpoints[e] = t : delete this.$breakpoints[e], this._signal(\"changeBreakpoint\", {});\n }, f.prototype.clearBreakpoint = function (e) {\n delete this.$breakpoints[e], this._signal(\"changeBreakpoint\", {});\n }, f.prototype.addMarker = function (e, t, n, i) {\n var o = this.$markerId++,\n e = {\n range: e,\n type: n || \"line\",\n renderer: \"function\" == typeof n ? n : null,\n clazz: t,\n inFront: !!i,\n id: o\n };\n return i ? (this.$frontMarkers[o] = e, this._signal(\"changeFrontMarker\")) : (this.$backMarkers[o] = e, this._signal(\"changeBackMarker\")), o;\n }, f.prototype.addDynamicMarker = function (e, t) {\n var n;\n if (e.update) return n = this.$markerId++, e.id = n, e.inFront = !!t, t ? (this.$frontMarkers[n] = e, this._signal(\"changeFrontMarker\")) : (this.$backMarkers[n] = e, this._signal(\"changeBackMarker\")), e;\n }, f.prototype.removeMarker = function (e) {\n var t = this.$frontMarkers[e] || this.$backMarkers[e];\n t && (delete (t.inFront ? this.$frontMarkers : this.$backMarkers)[e], this._signal(t.inFront ? \"changeFrontMarker\" : \"changeBackMarker\"));\n }, f.prototype.getMarkers = function (e) {\n return e ? this.$frontMarkers : this.$backMarkers;\n }, f.prototype.highlight = function (e) {\n var t;\n this.$searchHighlight || (t = new g(null, \"ace_selected-word\", \"text\"), this.$searchHighlight = this.addDynamicMarker(t)), this.$searchHighlight.setRegexp(e);\n }, f.prototype.highlightLines = function (e, t, n, i) {\n \"number\" != typeof t && (n = t, t = e), n = n || \"ace_step\";\n e = new h(e, 0, t, 1 / 0);\n return e.id = this.addMarker(e, n, \"fullLine\", i), e;\n }, f.prototype.setAnnotations = function (e) {\n this.$annotations = e, this._signal(\"changeAnnotation\", {});\n }, f.prototype.getAnnotations = function () {\n return this.$annotations || [];\n }, f.prototype.clearAnnotations = function () {\n this.setAnnotations([]);\n }, f.prototype.$detectNewLine = function (e) {\n e = e.match(/^.*?(\\r?\\n)/m);\n this.$autoNewLine = e ? e[1] : \"\\n\";\n }, f.prototype.getWordRange = function (e, t) {\n var n,\n i = this.getLine(e),\n o = !1,\n r = (n = (o = (o = 0 < t ? !!i.charAt(t - 1).match(this.tokenRe) : o) || !!i.charAt(t).match(this.tokenRe)) ? this.tokenRe : /^\\s+$/.test(i.slice(t - 1, t + 1)) ? /\\s/ : this.nonTokenRe, t);\n if (0 < r) {\n for (; 0 <= --r && i.charAt(r).match(n););\n r++;\n }\n for (var s = t; s < i.length && i.charAt(s).match(n);) s++;\n return new h(e, r, e, s);\n }, f.prototype.getAWordRange = function (e, t) {\n for (var n = this.getWordRange(e, t), i = this.getLine(n.end.row); i.charAt(n.end.column).match(/[ \\t]/);) n.end.column += 1;\n return n;\n }, f.prototype.setNewLineMode = function (e) {\n this.doc.setNewLineMode(e);\n }, f.prototype.getNewLineMode = function () {\n return this.doc.getNewLineMode();\n }, f.prototype.setUseWorker = function (e) {\n this.setOption(\"useWorker\", e);\n }, f.prototype.getUseWorker = function () {\n return this.$useWorker;\n }, f.prototype.onReloadTokenizer = function (e) {\n var t = e.data;\n this.bgTokenizer.start(t.first), this._signal(\"tokenizerUpdate\", e);\n }, f.prototype.setMode = function (e, t) {\n if (e && \"object\" == typeof e) {\n if (e.getTokenizer) return this.$onChangeMode(e);\n var n = e,\n i = n.path;\n } else i = e || \"ace/mode/text\";\n this.$modes[\"ace/mode/text\"] || (this.$modes[\"ace/mode/text\"] = new c()), this.$modes[i] && !n ? (this.$onChangeMode(this.$modes[i]), t && t()) : (this.$modeId = i, s.loadModule([\"mode\", i], function (e) {\n if (this.$modeId !== i) return t && t();\n this.$modes[i] && !n ? this.$onChangeMode(this.$modes[i]) : e && e.Mode && (e = new e.Mode(n), n || ((this.$modes[i] = e).$id = i), this.$onChangeMode(e)), t && t();\n }.bind(this)), this.$mode || this.$onChangeMode(this.$modes[\"ace/mode/text\"], !0));\n }, f.prototype.$onChangeMode = function (e, t) {\n var n, i, o;\n t || (this.$modeId = e.$id), this.$mode === e || (n = this.$mode, this.$mode = e, this.$stopWorker(), this.$useWorker && this.$startWorker(), void 0 !== (i = e.getTokenizer()).on && (o = this.onReloadTokenizer.bind(this), i.on(\"update\", o)), this.bgTokenizer.setTokenizer(i), this.bgTokenizer.setDocument(this.getDocument()), this.tokenRe = e.tokenRe, this.nonTokenRe = e.nonTokenRe, t) || (e.attachToSession && e.attachToSession(this), this.$options.wrapMethod.set.call(this, this.$wrapMethod), this.$setFolding(e.foldingRules), this.bgTokenizer.start(0), this._emit(\"changeMode\", {\n oldMode: n,\n mode: e\n }));\n }, f.prototype.$stopWorker = function () {\n this.$worker && (this.$worker.terminate(), this.$worker = null);\n }, f.prototype.$startWorker = function () {\n try {\n this.$worker = this.$mode.createWorker(this);\n } catch (e) {\n s.warn(\"Could not load worker\", e), this.$worker = null;\n }\n }, f.prototype.getMode = function () {\n return this.$mode;\n }, f.prototype.setScrollTop = function (e) {\n this.$scrollTop === e || isNaN(e) || (this.$scrollTop = e, this._signal(\"changeScrollTop\", e));\n }, f.prototype.getScrollTop = function () {\n return this.$scrollTop;\n }, f.prototype.setScrollLeft = function (e) {\n this.$scrollLeft === e || isNaN(e) || (this.$scrollLeft = e, this._signal(\"changeScrollLeft\", e));\n }, f.prototype.getScrollLeft = function () {\n return this.$scrollLeft;\n }, f.prototype.getScreenWidth = function () {\n return this.$computeWidth(), this.lineWidgets ? Math.max(this.getLineWidgetMaxWidth(), this.screenWidth) : this.screenWidth;\n }, f.prototype.getLineWidgetMaxWidth = function () {\n var t;\n return null != this.lineWidgetsWidth ? this.lineWidgetsWidth : (t = 0, this.lineWidgets.forEach(function (e) {\n e && e.screenWidth > t && (t = e.screenWidth);\n }), this.lineWidgetWidth = t);\n }, f.prototype.$computeWidth = function (e) {\n if (this.$modified || e) {\n if (this.$modified = !1, this.$useWrapMode) return this.screenWidth = this.$wrapLimit;\n for (var t = this.doc.getAllLines(), n = this.$rowLengthCache, i = 0, o = 0, r = this.$foldData[o], s = r ? r.start.row : 1 / 0, a = t.length, l = 0; l < a; l++) {\n if (s < l) {\n if (a <= (l = r.end.row + 1)) break;\n s = (r = this.$foldData[o++]) ? r.start.row : 1 / 0;\n }\n null == n[l] && (n[l] = this.$getStringScreenWidth(t[l])[0]), n[l] > i && (i = n[l]);\n }\n this.screenWidth = i;\n }\n }, f.prototype.getLine = function (e) {\n return this.doc.getLine(e);\n }, f.prototype.getLines = function (e, t) {\n return this.doc.getLines(e, t);\n }, f.prototype.getLength = function () {\n return this.doc.getLength();\n }, f.prototype.getTextRange = function (e) {\n return this.doc.getTextRange(e || this.selection.getRange());\n }, f.prototype.insert = function (e, t) {\n return this.doc.insert(e, t);\n }, f.prototype.remove = function (e) {\n return this.doc.remove(e);\n }, f.prototype.removeFullLines = function (e, t) {\n return this.doc.removeFullLines(e, t);\n }, f.prototype.undoChanges = function (e, t) {\n if (e.length) {\n this.$fromUndo = !0;\n for (var n = e.length - 1; -1 != n; n--) {\n var i = e[n];\n \"insert\" == i.action || \"remove\" == i.action ? this.doc.revertDelta(i) : i.folds && this.addFolds(i.folds);\n }\n !t && this.$undoSelect && (e.selectionBefore ? this.selection.fromJSON(e.selectionBefore) : this.selection.setRange(this.$getUndoSelection(e, !0))), this.$fromUndo = !1;\n }\n }, f.prototype.redoChanges = function (e, t) {\n if (e.length) {\n this.$fromUndo = !0;\n for (var n = 0; n < e.length; n++) {\n var i = e[n];\n \"insert\" != i.action && \"remove\" != i.action || this.doc.$safeApplyDelta(i);\n }\n !t && this.$undoSelect && (e.selectionAfter ? this.selection.fromJSON(e.selectionAfter) : this.selection.setRange(this.$getUndoSelection(e, !1))), this.$fromUndo = !1;\n }\n }, f.prototype.setUndoSelect = function (e) {\n this.$undoSelect = e;\n }, f.prototype.$getUndoSelection = function (e, t) {\n function n(e) {\n return t ? \"insert\" !== e.action : \"insert\" === e.action;\n }\n for (var i, o, r = 0; r < e.length; r++) {\n var s = e[r];\n s.start && (i ? n(s) ? (o = s.start, -1 == i.compare(o.row, o.column) && i.setStart(o), o = s.end, 1 == i.compare(o.row, o.column) && i.setEnd(o)) : (o = s.start, -1 == i.compare(o.row, o.column) && (i = h.fromPoints(s.start, s.start))) : i = n(s) ? h.fromPoints(s.start, s.end) : h.fromPoints(s.start, s.start));\n }\n return i;\n }, f.prototype.replace = function (e, t) {\n return this.doc.replace(e, t);\n }, f.prototype.moveText = function (e, t, n) {\n var i,\n o,\n r,\n s = this.getTextRange(e),\n a = this.getFoldsInRange(e),\n t = h.fromPoints(t, t);\n return n || (this.remove(e), o = e.start.row - e.end.row, (r = o ? -e.end.column : e.start.column - e.end.column) && (t.start.row == e.end.row && t.start.column > e.end.column && (t.start.column += r), t.end.row == e.end.row) && t.end.column > e.end.column && (t.end.column += r), o && t.start.row >= e.end.row && (t.start.row += o, t.end.row += o)), t.end = this.insert(t.start, s), a.length && (i = e.start, n = t.start, o = n.row - i.row, r = n.column - i.column, this.addFolds(a.map(function (e) {\n return (e = e.clone()).start.row == i.row && (e.start.column += r), e.end.row == i.row && (e.end.column += r), e.start.row += o, e.end.row += o, e;\n }))), t;\n }, f.prototype.indentRows = function (e, t, n) {\n n = n.replace(/\\t/g, this.getTabString());\n for (var i = e; i <= t; i++) this.doc.insertInLine({\n row: i,\n column: 0\n }, n);\n }, f.prototype.outdentRows = function (e) {\n for (var t = e.collapseRows(), n = new h(0, 0, 0, 0), i = this.getTabSize(), o = t.start.row; o <= t.end.row; ++o) {\n var r = this.getLine(o);\n n.start.row = o, n.end.row = o;\n for (var s = 0; s < i && \" \" == r.charAt(s); ++s);\n s < i && \"\\t\" == r.charAt(s) ? (n.start.column = s, n.end.column = s + 1) : (n.start.column = 0, n.end.column = s), this.remove(n);\n }\n }, f.prototype.$moveLines = function (e, t, n) {\n if (e = this.getRowFoldStart(e), t = this.getRowFoldEnd(t), n < 0) {\n if ((o = this.getRowFoldStart(e + n)) < 0) return 0;\n var i = o - e;\n } else if (0 < n) {\n if ((o = this.getRowFoldEnd(t + n)) > this.doc.getLength() - 1) return 0;\n i = o - t;\n } else {\n e = this.$clipRowToDocument(e);\n i = (t = this.$clipRowToDocument(t)) - e + 1;\n }\n var o = new h(e, 0, t, Number.MAX_VALUE),\n o = this.getFoldsInRange(o).map(function (e) {\n return (e = e.clone()).start.row += i, e.end.row += i, e;\n }),\n n = 0 == n ? this.doc.getLines(e, t) : this.doc.removeFullLines(e, t);\n return this.doc.insertFullLines(e + i, n), o.length && this.addFolds(o), i;\n }, f.prototype.moveLinesUp = function (e, t) {\n return this.$moveLines(e, t, -1);\n }, f.prototype.moveLinesDown = function (e, t) {\n return this.$moveLines(e, t, 1);\n }, f.prototype.duplicateLines = function (e, t) {\n return this.$moveLines(e, t, 0);\n }, f.prototype.$clipRowToDocument = function (e) {\n return Math.max(0, Math.min(e, this.doc.getLength() - 1));\n }, f.prototype.$clipColumnToRow = function (e, t) {\n return t < 0 ? 0 : Math.min(this.doc.getLine(e).length, t);\n }, f.prototype.$clipPositionToDocument = function (e, t) {\n var n;\n return t = Math.max(0, t), t = e < 0 ? e = 0 : (n = this.doc.getLength()) <= e ? this.doc.getLine(e = n - 1).length : Math.min(this.doc.getLine(e).length, t), {\n row: e,\n column: t\n };\n }, f.prototype.$clipRangeToDocument = function (e) {\n e.start.row < 0 ? (e.start.row = 0, e.start.column = 0) : e.start.column = this.$clipColumnToRow(e.start.row, e.start.column);\n var t = this.doc.getLength() - 1;\n return e.end.row > t ? (e.end.row = t, e.end.column = this.doc.getLine(t).length) : e.end.column = this.$clipColumnToRow(e.end.row, e.end.column), e;\n }, f.prototype.setUseWrapMode = function (e) {\n e != this.$useWrapMode && (this.$useWrapMode = e, this.$modified = !0, this.$resetRowCache(0), e && (e = this.getLength(), this.$wrapData = Array(e), this.$updateWrapData(0, e - 1)), this._signal(\"changeWrapMode\"));\n }, f.prototype.getUseWrapMode = function () {\n return this.$useWrapMode;\n }, f.prototype.setWrapLimitRange = function (e, t) {\n this.$wrapLimitRange.min === e && this.$wrapLimitRange.max === t || (this.$wrapLimitRange = {\n min: e,\n max: t\n }, this.$modified = !0, this.$bidiHandler.markAsDirty(), this.$useWrapMode && this._signal(\"changeWrapMode\"));\n }, f.prototype.adjustWrapLimit = function (e, t) {\n var n = this.$wrapLimitRange,\n t = (n.max < 0 && (n = {\n min: t,\n max: t\n }), this.$constrainWrapLimit(e, n.min, n.max));\n return t != this.$wrapLimit && 1 < t && (this.$wrapLimit = t, this.$modified = !0, this.$useWrapMode && (this.$updateWrapData(0, this.getLength() - 1), this.$resetRowCache(0), this._signal(\"changeWrapLimit\")), !0);\n }, f.prototype.$constrainWrapLimit = function (e, t, n) {\n return t && (e = Math.max(t, e)), e = n ? Math.min(n, e) : e;\n }, f.prototype.getWrapLimit = function () {\n return this.$wrapLimit;\n }, f.prototype.setWrapLimit = function (e) {\n this.setWrapLimitRange(e, e);\n }, f.prototype.getWrapLimitRange = function () {\n return {\n min: this.$wrapLimitRange.min,\n max: this.$wrapLimitRange.max\n };\n }, f.prototype.$updateInternalDataOnChange = function (e) {\n var t = this.$useWrapMode,\n n = e.action,\n i = e.start,\n o = e.end,\n r = i.row,\n s = o.row,\n a = s - r,\n l = null;\n if (this.$updating = !0, 0 != a) {\n if (\"remove\" === n) {\n this[t ? \"$wrapData\" : \"$rowLengthCache\"].splice(r, a);\n var c = this.$foldData,\n l = this.getFoldsInRange(e);\n this.removeFolds(l);\n var h = 0;\n for ((g = this.getFoldLine(o.row)) && (g.addRemoveChars(o.row, o.column, i.column - o.column), g.shiftRow(-a), (d = this.getFoldLine(r)) && d !== g && (d.merge(g), g = d), h = c.indexOf(g) + 1); h < c.length; h++) (g = c[h]).start.row >= o.row && g.shiftRow(-a);\n s = r;\n } else {\n var d = Array(a),\n u = (d.unshift(r, 0), t ? this.$wrapData : this.$rowLengthCache),\n c = (u.splice.apply(u, d), this.$foldData),\n h = 0;\n for ((g = this.getFoldLine(r)) && (0 == (u = g.range.compareInside(i.row, i.column)) ? (g = g.split(i.row, i.column)) && (g.shiftRow(a), g.addRemoveChars(s, 0, o.column - i.column)) : -1 == u && (g.addRemoveChars(r, 0, o.column - i.column), g.shiftRow(a)), h = c.indexOf(g) + 1); h < c.length; h++) (g = c[h]).start.row >= r && g.shiftRow(a);\n }\n } else {\n var g,\n a = Math.abs(e.start.column - e.end.column);\n \"remove\" === n && (l = this.getFoldsInRange(e), this.removeFolds(l), a = -a), (g = this.getFoldLine(r)) && g.addRemoveChars(r, i.column, a);\n }\n return t && this.$wrapData.length != this.doc.getLength() && console.error(\"doc.getLength() and $wrapData.length have to be the same!\"), this.$updating = !1, t ? this.$updateWrapData(r, s) : this.$updateRowLengthCache(r, s), l;\n }, f.prototype.$updateRowLengthCache = function (e, t, n) {\n this.$rowLengthCache[e] = null, this.$rowLengthCache[t] = null;\n }, f.prototype.$updateWrapData = function (e, t) {\n var s,\n n,\n a = this.doc.getAllLines(),\n i = this.getTabSize(),\n o = this.$wrapData,\n r = this.$wrapLimit,\n l = e;\n for (t = Math.min(t, a.length - 1); l <= t;) (n = this.getFoldLine(l, n)) ? (s = [], n.walk(function (e, t, n, i) {\n var o;\n if (null != e) {\n (o = this.$getDisplayTokens(e, s.length))[0] = v;\n for (var r = 1; r < o.length; r++) o[r] = I;\n } else o = this.$getDisplayTokens(a[t].substring(i, n), s.length);\n s = s.concat(o);\n }.bind(this), n.end.row, a[n.end.row].length + 1), o[n.start.row] = this.$computeWrapSplits(s, r, i), l = n.end.row + 1) : (s = this.$getDisplayTokens(a[l]), o[l] = this.$computeWrapSplits(s, r, i), l++);\n }, f.prototype.$computeWrapSplits = function (o, e, r) {\n if (0 == o.length) return [];\n var s = [],\n t = o.length,\n a = 0,\n l = 0,\n c = this.$wrapAsCode,\n h = this.$indentedSoftWrap,\n d = e <= Math.max(2 * r, 8) || !1 === h ? 0 : Math.floor(e / 2);\n function n(e) {\n for (var t = e - a, n = a; n < e; n++) {\n var i = o[n];\n 12 !== i && 2 !== i || --t;\n }\n s.length || (u = function () {\n var e = 0;\n if (0 === d) return e;\n if (h) for (var t = 0; t < o.length; t++) {\n var n = o[t];\n if (n == A) e += 1;else if (n == w) e += r;else if (n != S) break;\n }\n return c && !1 !== h && (e += r), Math.min(e, d);\n }(), s.indent = u), l += t, s.push(l), a = e;\n }\n for (var u = 0; e - u < t - a;) {\n var i = a + e - u;\n if (o[i - 1] >= A && o[i] >= A) n(i);else if (o[i] == v || o[i] == I) {\n for (; i != a - 1 && o[i] != v; i--);\n if (a < i) ;else {\n for (i = a + e; i < o.length && o[i] == I; i++);\n if (i == o.length) break;\n }\n n(i);\n } else {\n for (var g = Math.max(i - (e - (e >> 2)), a - 1); g < i && o[i] < v;) i--;\n if (c) {\n for (; g < i && o[i] < v;) i--;\n for (; g < i && o[i] == b;) i--;\n } else for (; g < i && o[i] < A;) i--;\n g < i ? n(++i) : (o[i = a + e] == y && i--, n(i - u));\n }\n }\n return s;\n }, f.prototype.$getDisplayTokens = function (e, t) {\n var n,\n i = [];\n t = t || 0;\n for (var o = 0; o < e.length; o++) {\n var r = e.charCodeAt(o);\n if (9 == r) {\n n = this.getScreenTabSize(i.length + t), i.push(w);\n for (var s = 1; s < n; s++) i.push(S);\n } else 32 == r ? i.push(A) : 39 < r && r < 48 || 57 < r && r < 64 ? i.push(b) : 4352 <= r && x(r) ? i.push(C, y) : i.push(C);\n }\n return i;\n }, f.prototype.$getStringScreenWidth = function (e, t, n) {\n if (0 == t) return [0, 0];\n var i, o;\n for (null == t && (t = 1 / 0), n = n || 0, o = 0; o < e.length && (9 == (i = e.charCodeAt(o)) ? n += this.getScreenTabSize(n) : 4352 <= i && x(i) ? n += 2 : n += 1, !(t < n)); o++);\n return [n, o];\n }, f.prototype.getRowLength = function (e) {\n var t = 1;\n return this.lineWidgets && (t += this.lineWidgets[e] && this.lineWidgets[e].rowCount || 0), this.$useWrapMode && this.$wrapData[e] ? this.$wrapData[e].length + t : t;\n }, f.prototype.getRowLineCount = function (e) {\n return this.$useWrapMode && this.$wrapData[e] ? this.$wrapData[e].length + 1 : 1;\n }, f.prototype.getRowWrapIndent = function (e) {\n var t;\n return this.$useWrapMode && (e = this.screenToDocumentPosition(e, Number.MAX_VALUE), (t = this.$wrapData[e.row]).length) && t[0] < e.column ? t.indent : 0;\n }, f.prototype.getScreenLastRowColumn = function (e) {\n e = this.screenToDocumentPosition(e, Number.MAX_VALUE);\n return this.documentToScreenColumn(e.row, e.column);\n }, f.prototype.getDocumentLastRowColumn = function (e, t) {\n e = this.documentToScreenRow(e, t);\n return this.getScreenLastRowColumn(e);\n }, f.prototype.getDocumentLastRowColumnPosition = function (e, t) {\n e = this.documentToScreenRow(e, t);\n return this.screenToDocumentPosition(e, Number.MAX_VALUE / 10);\n }, f.prototype.getRowSplitData = function (e) {\n if (this.$useWrapMode) return this.$wrapData[e];\n }, f.prototype.getScreenTabSize = function (e) {\n return this.$tabSize - (e % this.$tabSize | 0);\n }, f.prototype.screenToDocumentRow = function (e, t) {\n return this.screenToDocumentPosition(e, t).row;\n }, f.prototype.screenToDocumentColumn = function (e, t) {\n return this.screenToDocumentPosition(e, t).column;\n }, f.prototype.screenToDocumentPosition = function (e, t, n) {\n if (e < 0) return {\n row: 0,\n column: 0\n };\n for (var i, o, r, s = 0, a = 0, l = 0, c = 0, h = this.$screenRowCache, d = this.$getRowCacheIndex(h, e), u = h.length, g = (r = u && 0 <= d ? (l = h[d], s = this.$docRowCache[d], e > h[u - 1]) : !u, this.getLength() - 1), p = this.getNextFoldLine(s), m = p ? p.start.row : 1 / 0; l <= e && !(e < l + (c = this.getRowLength(s)) || g <= s);) l += c, m < ++s && (s = p.end.row + 1, m = (p = this.getNextFoldLine(s, p)) ? p.start.row : 1 / 0), r && (this.$docRowCache.push(s), this.$screenRowCache.push(l));\n if (p && p.start.row <= s) i = this.getFoldDisplayLine(p), s = p.start.row;else {\n if (l + c <= e || g < s) return {\n row: g,\n column: this.getLine(g).length\n };\n i = this.getLine(s), p = null;\n }\n d = 0, h = Math.floor(e - l);\n return this.$useWrapMode && (u = this.$wrapData[s]) && (o = u[h], 0 < h) && u.length && (d = u.indent, a = u[h - 1] || u[u.length - 1], i = i.substring(a)), void 0 !== n && this.$bidiHandler.isBidiRow(l + h, s, h) && (t = this.$bidiHandler.offsetToCol(n)), a += this.$getStringScreenWidth(i, t - d)[1], this.$useWrapMode && o <= a && (a = o - 1), p ? p.idxToPosition(a) : {\n row: s,\n column: a\n };\n }, f.prototype.documentToScreenPosition = function (e, t) {\n var n = void 0 === t ? this.$clipPositionToDocument(e.row, e.column) : this.$clipPositionToDocument(e, t),\n i = (e = n.row, t = n.column, 0),\n n = null;\n (a = this.getFoldAt(e, t, 1)) && (e = a.start.row, t = a.start.column);\n for (var o, r, s = 0, a = this.$docRowCache, l = this.$getRowCacheIndex(a, e), c = a.length, h = (r = c && 0 <= l ? (s = a[l], i = this.$screenRowCache[l], e > a[c - 1]) : !c, this.getNextFoldLine(s)), d = h ? h.start.row : 1 / 0; s < e;) {\n if (d <= s) {\n if (e < (o = h.end.row + 1)) break;\n d = (h = this.getNextFoldLine(o, h)) ? h.start.row : 1 / 0;\n } else o = s + 1;\n i += this.getRowLength(s), s = o, r && (this.$docRowCache.push(s), this.$screenRowCache.push(i));\n }\n var u = \"\",\n n = h && d <= s ? (u = this.getFoldDisplayLine(h, e, t), h.start.row) : (u = this.getLine(e).substring(0, t), e),\n l = 0;\n if (this.$useWrapMode) {\n var g = this.$wrapData[n];\n if (g) {\n for (var p = 0; u.length >= g[p];) i++, p++;\n u = u.substring(g[p - 1] || 0, u.length), l = 0 < p ? g.indent : 0;\n }\n }\n return this.lineWidgets && this.lineWidgets[s] && this.lineWidgets[s].rowsAbove && (i += this.lineWidgets[s].rowsAbove), {\n row: i,\n column: l + this.$getStringScreenWidth(u)[0]\n };\n }, f.prototype.documentToScreenColumn = function (e, t) {\n return this.documentToScreenPosition(e, t).column;\n }, f.prototype.documentToScreenRow = function (e, t) {\n return this.documentToScreenPosition(e, t).row;\n }, f.prototype.getScreenLength = function () {\n var e = 0,\n t = null;\n if (this.$useWrapMode) for (var n = this.$wrapData.length, i = 0, o = 0, r = (t = this.$foldData[o++]) ? t.start.row : 1 / 0; i < n;) {\n var s = this.$wrapData[i];\n e += s ? s.length + 1 : 1, r < ++i && (i = t.end.row + 1, r = (t = this.$foldData[o++]) ? t.start.row : 1 / 0);\n } else for (var e = this.getLength(), a = this.$foldData, o = 0; o < a.length; o++) e -= (t = a[o]).end.row - t.start.row;\n return this.lineWidgets && (e += this.$getWidgetScreenLength()), e;\n }, f.prototype.$setFontMetrics = function (r) {\n this.$enableVarChar && (this.$getStringScreenWidth = function (e, t, n) {\n if (0 === t) return [0, 0];\n var i, o;\n for (t = t || 1 / 0, n = n || 0, o = 0; o < e.length && !(t < (n += \"\\t\" === (i = e.charAt(o)) ? this.getScreenTabSize(n) : r.getCharacterWidth(i))); o++);\n return [n, o];\n });\n }, f.prototype.destroy = function () {\n this.destroyed || (this.bgTokenizer.setDocument(null), this.bgTokenizer.cleanup(), this.destroyed = !0), this.$stopWorker(), this.removeAllListeners(), this.doc && this.doc.off(\"change\", this.$onChange), this.selection.detach();\n }, f);\n function f(e, t) {\n this.$breakpoints = [], this.$decorations = [], this.$frontMarkers = {}, this.$backMarkers = {}, this.$markerId = 1, this.$undoSelect = !0, this.$foldData = [], this.id = \"session\" + ++f.$uid, this.$foldData.toString = function () {\n return this.join(\"\\n\");\n }, this.bgTokenizer = new u(new c().getTokenizer(), this);\n var n = this;\n this.bgTokenizer.on(\"update\", function (e) {\n n._signal(\"tokenizerUpdate\", e);\n }), this.on(\"changeFold\", this.onChangeFold.bind(this)), this.$onChange = this.onChange.bind(this), \"object\" == typeof e && e.getLine || (e = new d(e)), this.setDocument(e), this.selection = new l(this), this.$bidiHandler = new r(this), s.resetOptions(this), this.setMode(t), s._signal(\"session\", this), this.destroyed = !1;\n }\n m.$uid = 0, m.prototype.$modes = s.$modes, m.prototype.getValue = m.prototype.toString, m.prototype.$defaultUndoManager = {\n undo: function () {},\n redo: function () {},\n hasUndo: function () {},\n hasRedo: function () {},\n reset: function () {},\n add: function () {},\n addSelection: function () {},\n startNewGroup: function () {},\n addSession: function () {}\n }, m.prototype.$overwrite = !1, m.prototype.$mode = null, m.prototype.$modeId = null, m.prototype.$scrollTop = 0, m.prototype.$scrollLeft = 0, m.prototype.$wrapLimit = 80, m.prototype.$useWrapMode = !1, m.prototype.$wrapLimitRange = {\n min: null,\n max: null\n }, m.prototype.lineWidgets = null, m.prototype.isFullWidth = x, i.implement(m.prototype, a);\n var C = 1,\n y = 2,\n v = 3,\n I = 4,\n b = 9,\n A = 10,\n w = 11,\n S = 12;\n function x(e) {\n return !(e < 4352) && (4352 <= e && e <= 4447 || 4515 <= e && e <= 4519 || 4602 <= e && e <= 4607 || 9001 <= e && e <= 9002 || 11904 <= e && e <= 11929 || 11931 <= e && e <= 12019 || 12032 <= e && e <= 12245 || 12272 <= e && e <= 12283 || 12288 <= e && e <= 12350 || 12353 <= e && e <= 12438 || 12441 <= e && e <= 12543 || 12549 <= e && e <= 12589 || 12593 <= e && e <= 12686 || 12688 <= e && e <= 12730 || 12736 <= e && e <= 12771 || 12784 <= e && e <= 12830 || 12832 <= e && e <= 12871 || 12880 <= e && e <= 13054 || 13056 <= e && e <= 19903 || 19968 <= e && e <= 42124 || 42128 <= e && e <= 42182 || 43360 <= e && e <= 43388 || 44032 <= e && e <= 55203 || 55216 <= e && e <= 55238 || 55243 <= e && e <= 55291 || 63744 <= e && e <= 64255 || 65040 <= e && e <= 65049 || 65072 <= e && e <= 65106 || 65108 <= e && e <= 65126 || 65128 <= e && e <= 65131 || 65281 <= e && e <= 65376 || 65504 <= e && e <= 65510);\n }\n e(\"./edit_session/folding\").Folding.call(m.prototype), e(\"./edit_session/bracket_match\").BracketMatch.call(m.prototype), s.defineOptions(m.prototype, \"session\", {\n wrap: {\n set: function (e) {\n e && \"off\" != e ? \"free\" == e ? e = !0 : \"printMargin\" == e ? e = -1 : \"string\" == typeof e && (e = parseInt(e, 10) || !1) : e = !1, this.$wrap != e && ((this.$wrap = e) ? (this.setWrapLimitRange(e = \"number\" == typeof e ? e : null, e), this.setUseWrapMode(!0)) : this.setUseWrapMode(!1));\n },\n get: function () {\n return this.getUseWrapMode() ? -1 == this.$wrap ? \"printMargin\" : this.getWrapLimitRange().min ? this.$wrap : \"free\" : \"off\";\n },\n handlesSet: !0\n },\n wrapMethod: {\n set: function (e) {\n (e = \"auto\" == e ? \"text\" != this.$mode.type : \"text\" != e) != this.$wrapAsCode && (this.$wrapAsCode = e, this.$useWrapMode) && (this.$useWrapMode = !1, this.setUseWrapMode(!0));\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: {\n set: function () {\n this.$useWrapMode && (this.$useWrapMode = !1, this.setUseWrapMode(!0));\n },\n initialValue: !0\n },\n firstLineNumber: {\n set: function () {\n this._signal(\"changeBreakpoint\");\n },\n initialValue: 1\n },\n useWorker: {\n set: function (e) {\n this.$useWorker = e, this.$stopWorker(), e && this.$startWorker();\n },\n initialValue: !0\n },\n useSoftTabs: {\n initialValue: !0\n },\n tabSize: {\n set: function (e) {\n 0 < (e = parseInt(e)) && this.$tabSize !== e && (this.$modified = !0, this.$rowLengthCache = [], this.$tabSize = e, this._signal(\"changeTabSize\"));\n },\n initialValue: 4,\n handlesSet: !0\n },\n navigateWithinSoftTabs: {\n initialValue: !1\n },\n foldStyle: {\n set: function (e) {\n this.setFoldStyle(e);\n },\n handlesSet: !0\n },\n overwrite: {\n set: function (e) {\n this._signal(\"changeOverwrite\");\n },\n initialValue: !1\n },\n newLineMode: {\n set: function (e) {\n this.doc.setNewLineMode(e);\n },\n get: function () {\n return this.doc.getNewLineMode();\n },\n handlesSet: !0\n },\n mode: {\n set: function (e) {\n this.setMode(e);\n },\n get: function () {\n return this.$modeId;\n },\n handlesSet: !0\n }\n }), t.EditSession = m;\n }), ace.define(\"ace/search\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\", \"ace/lib/oop\", \"ace/range\"], function (e, t, n) {\n \"use strict\";\n\n var v = e(\"./lib/lang\"),\n i = e(\"./lib/oop\"),\n I = e(\"./range\").Range;\n function o() {\n this.$options = {};\n }\n o.prototype.set = function (e) {\n return i.mixin(this.$options, e), this;\n }, o.prototype.getOptions = function () {\n return v.copyObject(this.$options);\n }, o.prototype.setOptions = function (e) {\n this.$options = e;\n }, o.prototype.find = function (e) {\n var o,\n r = this.$options,\n e = this.$matchIterator(e, r);\n return !!e && (o = null, e.forEach(function (e, t, n, i) {\n return o = new I(e, t, n, i), !(t == i && r.start && r.start.start && 0 != r.skipCurrent && o.isEqual(r.start) && (o = null, 1));\n }), o);\n }, o.prototype.findAll = function (e) {\n var t = this.$options;\n if (!t.needle) return [];\n this.$assembleRegExp(t);\n var n = t.range,\n i = n ? e.getLines(n.start.row, n.end.row) : e.doc.getAllLines(),\n o = [],\n r = t.re;\n if (t.$isMultiLine) {\n var s,\n a = r.length,\n l = i.length - a;\n e: for (var c = r.offset || 0; c <= l; c++) {\n for (var h = 0; h < a; h++) if (-1 == i[c + h].search(r[h])) continue e;\n var d = i[c],\n u = i[c + a - 1],\n d = d.length - d.match(r[0])[0].length,\n u = u.match(r[a - 1])[0].length;\n s && s.end.row === c && s.end.column > d || (o.push(s = new I(c, d, c + a - 1, u)), 2 < a && (c = c + a - 2));\n }\n } else for (var g = 0; g < i.length; g++) for (var p = v.getMatchOffsets(i[g], r), h = 0; h < p.length; h++) {\n var m = p[h];\n o.push(new I(g, m.offset, g, m.offset + m.length));\n }\n if (n) {\n for (var f = n.start.column, C = n.end.column, g = 0, h = o.length - 1; g < h && o[g].start.column < f && 0 == o[g].start.row;) g++;\n for (var y = n.end.row - n.start.row; g < h && o[h].end.column > C && o[h].end.row == y;) h--;\n for (o = o.slice(g, h + 1), g = 0, h = o.length; g < h; g++) o[g].start.row += n.start.row, o[g].end.row += n.start.row;\n }\n return o;\n }, o.prototype.replace = function (e, t) {\n var n = this.$options,\n i = this.$assembleRegExp(n);\n if (n.$isMultiLine) return t;\n if (i) {\n var o = i.exec(e);\n if (!o || o[0].length != e.length) return null;\n if (t = e.replace(i, t), n.preserveCase) {\n t = t.split(\"\");\n for (var r = Math.min(e.length, e.length); r--;) {\n var s = e[r];\n s && s.toLowerCase() != s ? t[r] = t[r].toUpperCase() : t[r] = t[r].toLowerCase();\n }\n t = t.join(\"\");\n }\n return t;\n }\n }, o.prototype.$assembleRegExp = function (t, e) {\n if (t.needle instanceof RegExp) return t.re = t.needle;\n var n,\n i,\n o,\n r,\n s = t.needle;\n if (!t.needle) return t.re = !1;\n void 0 === t.$supportsUnicodeFlag && (t.$supportsUnicodeFlag = v.supportsUnicodeFlag());\n try {\n new RegExp(s, \"u\");\n } catch (e) {\n t.$supportsUnicodeFlag = !1;\n }\n function a(e, t) {\n return void 0 === t && (t = !0), (o && i.$supportsUnicodeFlag ? new RegExp(\"[\\\\p{L}\\\\p{N}_]\", \"u\") : new RegExp(\"\\\\w\")).test(e) || i.regExp ? o && i.$supportsUnicodeFlag ? t ? \"(?<=^|[^\\\\p{L}\\\\p{N}_])\" : \"(?=[^\\\\p{L}\\\\p{N}_]|$)\" : \"\\\\b\" : \"\";\n }\n t.regExp || (s = v.escapeRegExp(s)), t.wholeWord && (n = s, i = t, o = v.supportsLookbehind(), r = Array.from(n), l = r[0], r = r[r.length - 1], s = a(l) + n + a(r, !1));\n var l = t.caseSensitive ? \"gm\" : \"gmi\";\n if (t.$supportsUnicodeFlag && (l += \"u\"), t.$isMultiLine = !e && /[\\n\\r]/.test(s), t.$isMultiLine) return t.re = this.$assembleMultilineRegExp(s, l);\n try {\n var c = new RegExp(s, l);\n } catch (e) {\n c = !1;\n }\n return t.re = c;\n }, o.prototype.$assembleMultilineRegExp = function (e, t) {\n for (var n = e.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\"), i = [], o = 0; o < n.length; o++) try {\n i.push(new RegExp(n[o], t));\n } catch (e) {\n return !1;\n }\n return i;\n }, o.prototype.$matchIterator = function (h, n) {\n var a,\n e,\n t,\n i,\n o,\n r,\n l,\n s,\n d = this.$assembleRegExp(n);\n return !!d && (a = 1 == n.backwards, e = 0 != n.skipCurrent, t = n.range, (i = (i = n.start) || (t ? t[a ? \"end\" : \"start\"] : h.selection.getRange())).start && (i = i[e != a ? \"end\" : \"start\"]), o = t ? t.start.row : 0, r = t ? t.end.row : h.getLength() - 1, s = n.$isMultiLine ? (l = d.length, function (e, t, n) {\n var i = a ? e - l + 1 : e;\n if (!(i < 0 || i + l > h.getLength())) {\n var o = h.getLine(i),\n e = o.search(d[0]);\n if (!(!a && e < t || -1 === e)) {\n for (var r = 1; r < l; r++) if (-1 == (o = h.getLine(i + r)).search(d[r])) return;\n var s = o.match(d[l - 1])[0].length;\n if (!(a && t < s)) return !!n(i, e, i + l - 1, s) || void 0;\n }\n }\n }) : a ? function (e, t, n) {\n var i,\n o = h.getLine(e),\n r = [];\n for (d.lastIndex = 0; i = d.exec(o);) {\n var s = i[0].length,\n a = i.index;\n if (!s) {\n if (a >= o.length) break;\n d.lastIndex = a += 1;\n }\n if (i.index + s > t) break;\n r.push(i.index, s);\n }\n for (var l = r.length - 1; 0 <= l; l -= 2) {\n var c = r[l - 1];\n if (n(e, c, e, c + (s = r[l]))) return !0;\n }\n } : function (e, t, n) {\n var i = h.getLine(e);\n for (d.lastIndex = t; o = d.exec(i);) {\n var o,\n r = o[0].length;\n if (n(e, o = o.index, e, o + r)) return !0;\n if (!r && (d.lastIndex = o += 1, o >= i.length)) return !1;\n }\n }, {\n forEach: a ? function (e) {\n var t = i.row;\n if (!s(t, i.column, e)) {\n for (t--; o <= t; t--) if (s(t, Number.MAX_VALUE, e)) return;\n if (0 != n.wrap) for (t = r, o = i.row; o <= t; t--) if (s(t, Number.MAX_VALUE, e)) return;\n }\n } : function (e) {\n var t = i.row;\n if (!s(t, i.column, e)) {\n for (t += 1; t <= r; t++) if (s(t, 0, e)) return;\n if (0 != n.wrap) for (t = o, r = i.row; t <= r; t++) if (s(t, 0, e)) return;\n }\n }\n });\n }, t.Search = o;\n }), ace.define(\"ace/keyboard/hash_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/keys\", \"ace/lib/useragent\"], function (e, t, n) {\n \"use strict\";\n\n var i,\n o = this && this.__extends || (i = function (e, t) {\n return (i = Object.setPrototypeOf || ({\n __proto__: []\n } instanceof Array ? function (e, t) {\n e.__proto__ = t;\n } : function (e, t) {\n for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);\n }))(e, t);\n }, function (e, t) {\n if (\"function\" != typeof t && null !== t) throw new TypeError(\"Class extends value \" + String(t) + \" is not a constructor or null\");\n function n() {\n this.constructor = e;\n }\n i(e, t), e.prototype = null === t ? Object.create(t) : (n.prototype = t.prototype, new n());\n }),\n a = e(\"../lib/keys\"),\n r = e(\"../lib/useragent\"),\n s = a.KEY_MODS,\n l = (c.prototype.$init = function (e, t, n) {\n this.platform = t || (r.isMac ? \"mac\" : \"win\"), this.commands = {}, this.commandKeyBinding = {}, this.addCommands(e), this.$singleCommand = n;\n }, c.prototype.addCommand = function (e) {\n this.commands[e.name] && this.removeCommand(e), (this.commands[e.name] = e).bindKey && this._buildKeyHash(e);\n }, c.prototype.removeCommand = function (e, t) {\n var n,\n i = e && (\"string\" == typeof e ? e : e.name),\n o = (e = this.commands[i], t || delete this.commands[i], this.commandKeyBinding);\n for (n in o) {\n var r,\n s = o[n];\n s == e ? delete o[n] : Array.isArray(s) && -1 != (r = s.indexOf(e)) && (s.splice(r, 1), 1 == s.length) && (o[n] = s[0]);\n }\n }, c.prototype.bindKey = function (e, i, o) {\n if (\"object\" == typeof e && e && (null == o && (o = e.position), e = e[this.platform]), e) return \"function\" == typeof i ? this.addCommand({\n exec: i,\n bindKey: e,\n name: i.name || e\n }) : void e.split(\"|\").forEach(function (e) {\n var t = \"\",\n n = (-1 != e.indexOf(\" \") && (e = (n = e.split(/\\s+/)).pop(), n.forEach(function (e) {\n e = this.parseKeys(e), e = s[e.hashId] + e.key;\n t += (t ? \" \" : \"\") + e, this._addCommandToBinding(t, \"chainKeys\");\n }, this), t += \" \"), this.parseKeys(e)),\n e = s[n.hashId] + n.key;\n this._addCommandToBinding(t + e, i, o);\n }, this);\n }, c.prototype._addCommandToBinding = function (e, t, n) {\n var i = this.commandKeyBinding;\n if (t) {\n if (!i[e] || this.$singleCommand) i[e] = t;else {\n Array.isArray(i[e]) ? -1 != (r = i[e].indexOf(t)) && i[e].splice(r, 1) : i[e] = [i[e]], \"number\" != typeof n && (n = h(t));\n for (var o = i[e], r = 0; r < o.length; r++) if (n < h(o[r])) break;\n o.splice(r, 0, t);\n }\n } else delete i[e];\n }, c.prototype.addCommands = function (n) {\n n && Object.keys(n).forEach(function (e) {\n var t = n[e];\n if (t) {\n if (\"string\" == typeof t) return this.bindKey(t, e);\n \"object\" == typeof (t = \"function\" == typeof t ? {\n exec: t\n } : t) && (t.name || (t.name = e), this.addCommand(t));\n }\n }, this);\n }, c.prototype.removeCommands = function (t) {\n Object.keys(t).forEach(function (e) {\n this.removeCommand(t[e]);\n }, this);\n }, c.prototype.bindKeys = function (t) {\n Object.keys(t).forEach(function (e) {\n this.bindKey(e, t[e]);\n }, this);\n }, c.prototype._buildKeyHash = function (e) {\n this.bindKey(e.bindKey, e);\n }, c.prototype.parseKeys = function (e) {\n var t = e.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function (e) {\n return e;\n }),\n n = t.pop(),\n i = a[n];\n if (a.FUNCTION_KEYS[i]) n = a.FUNCTION_KEYS[i].toLowerCase();else {\n if (!t.length) return {\n key: n,\n hashId: -1\n };\n if (1 == t.length && \"shift\" == t[0]) return {\n key: n.toUpperCase(),\n hashId: -1\n };\n }\n for (var o = 0, r = t.length; r--;) {\n var s = a.KEY_MODS[t[r]];\n if (null == s) return \"undefined\" != typeof console && console.error(\"invalid modifier \" + t[r] + \" in \" + e), !1;\n o |= s;\n }\n return {\n key: n,\n hashId: o\n };\n }, c.prototype.findKeyCommand = function (e, t) {\n e = s[e] + t;\n return this.commandKeyBinding[e];\n }, c.prototype.handleKeyboard = function (e, t, n, i) {\n var o, r;\n if (!(i < 0)) return o = s[t] + n, r = this.commandKeyBinding[o], e.$keyChain && (e.$keyChain += \" \" + o, r = this.commandKeyBinding[e.$keyChain] || r), !r || \"chainKeys\" != r && \"chainKeys\" != r[r.length - 1] ? (e.$keyChain && (t && 4 != t || 1 != n.length ? (-1 == t || 0 < i) && (e.$keyChain = \"\") : e.$keyChain = e.$keyChain.slice(0, -o.length - 1)), {\n command: r\n }) : (e.$keyChain = e.$keyChain || o, {\n command: \"null\"\n });\n }, c.prototype.getStatusText = function (e, t) {\n return t.$keyChain || \"\";\n }, c);\n function c(e, t) {\n this.$init(e, t, !1);\n }\n function h(e) {\n return \"object\" == typeof e && e.bindKey && e.bindKey.position || (e.isDefault ? -100 : 0);\n }\n o(u, d = l);\n var d,\n e = u;\n function u(e, t) {\n e = d.call(this, e, t) || this;\n return e.$singleCommand = !0, e;\n }\n e.call = function (e, t, n) {\n l.prototype.$init.call(e, t, n, !0);\n }, l.call = function (e, t, n) {\n l.prototype.$init.call(e, t, n, !1);\n }, t.HashHandler = e, t.MultiHashHandler = l;\n }), ace.define(\"ace/commands/command_manager\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/keyboard/hash_handler\", \"ace/lib/event_emitter\"], function (e, t, n) {\n \"use strict\";\n\n var i,\n o,\n r = this && this.__extends || (i = function (e, t) {\n return (i = Object.setPrototypeOf || ({\n __proto__: []\n } instanceof Array ? function (e, t) {\n e.__proto__ = t;\n } : function (e, t) {\n for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);\n }))(e, t);\n }, function (e, t) {\n if (\"function\" != typeof t && null !== t) throw new TypeError(\"Class extends value \" + String(t) + \" is not a constructor or null\");\n function n() {\n this.constructor = e;\n }\n i(e, t), e.prototype = null === t ? Object.create(t) : (n.prototype = t.prototype, new n());\n }),\n s = e(\"../lib/oop\"),\n a = e(\"../keyboard/hash_handler\").MultiHashHandler,\n e = e(\"../lib/event_emitter\").EventEmitter,\n r = (r(l, o = a), l.prototype.exec = function (e, t, n) {\n if (Array.isArray(e)) {\n for (var i = e.length; i--;) if (this.exec(e[i], t, n)) return !0;\n return !1;\n }\n var o;\n return !!(e = \"string\" == typeof e ? this.commands[e] : e) && !(t && t.$readOnly && !e.readOnly || 0 != this.$checkCommandState && e.isAvailable && !e.isAvailable(t) || ((o = {\n editor: t,\n command: e,\n args: n\n }).returnValue = this._emit(\"exec\", o), this._signal(\"afterExec\", o), !1 === o.returnValue));\n }, l.prototype.toggleRecording = function (e) {\n if (!this.$inReplay) return e && e._emit(\"changeStatus\"), this.recording ? (this.macro.pop(), this.off(\"exec\", this.$addCommandToMacro), this.macro.length || (this.macro = this.oldMacro), this.recording = !1) : (this.$addCommandToMacro || (this.$addCommandToMacro = function (e) {\n this.macro.push([e.command, e.args]);\n }.bind(this)), this.oldMacro = this.macro, this.macro = [], this.on(\"exec\", this.$addCommandToMacro), this.recording = !0);\n }, l.prototype.replay = function (t) {\n if (!this.$inReplay && this.macro) {\n if (this.recording) return this.toggleRecording(t);\n try {\n this.$inReplay = !0, this.macro.forEach(function (e) {\n \"string\" == typeof e ? this.exec(e, t) : this.exec(e[0], t, e[1]);\n }, this);\n } finally {\n this.$inReplay = !1;\n }\n }\n }, l.prototype.trimMacro = function (e) {\n return e.map(function (e) {\n return \"string\" != typeof e[0] && (e[0] = e[0].name), e = e[1] ? e : e[0];\n });\n }, l);\n function l(e, t) {\n t = o.call(this, t, e) || this;\n return t.byName = t.commands, t.setDefaultHandler(\"exec\", function (e) {\n return e.args ? e.command.exec(e.editor, e.args, e.event, !1) : e.command.exec(e.editor, {}, e.event, !0);\n }), t;\n }\n s.implement(r.prototype, e), t.CommandManager = r;\n }), ace.define(\"ace/commands/default_commands\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\", \"ace/config\", \"ace/range\"], function (e, t, n) {\n \"use strict\";\n\n var l = e(\"../lib/lang\"),\n i = e(\"../config\"),\n c = e(\"../range\").Range;\n function o(e, t) {\n return {\n win: e,\n mac: t\n };\n }\n t.commands = [{\n name: \"showSettingsMenu\",\n description: \"Show settings menu\",\n bindKey: o(\"Ctrl-,\", \"Command-,\"),\n exec: function (t) {\n i.loadModule(\"ace/ext/settings_menu\", function (e) {\n e.init(t), t.showSettingsMenu();\n });\n },\n readOnly: !0\n }, {\n name: \"goToNextError\",\n description: \"Go to next error\",\n bindKey: o(\"Alt-E\", \"F4\"),\n exec: function (t) {\n i.loadModule(\"ace/ext/error_marker\", function (e) {\n e.showErrorMarker(t, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: !0\n }, {\n name: \"goToPreviousError\",\n description: \"Go to previous error\",\n bindKey: o(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function (t) {\n i.loadModule(\"ace/ext/error_marker\", function (e) {\n e.showErrorMarker(t, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: !0\n }, {\n name: \"selectall\",\n description: \"Select all\",\n bindKey: o(\"Ctrl-A\", \"Command-A\"),\n exec: function (e) {\n e.selectAll();\n },\n readOnly: !0\n }, {\n name: \"centerselection\",\n description: \"Center selection\",\n bindKey: o(null, \"Ctrl-L\"),\n exec: function (e) {\n e.centerSelection();\n },\n readOnly: !0\n }, {\n name: \"gotoline\",\n description: \"Go to line...\",\n bindKey: o(\"Ctrl-L\", \"Command-L\"),\n exec: function (e, t) {\n \"number\" != typeof t || isNaN(t) || e.gotoLine(t), e.prompt({\n $type: \"gotoLine\"\n });\n },\n readOnly: !0\n }, {\n name: \"fold\",\n bindKey: o(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function (e) {\n e.session.toggleFold(!1);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: !0\n }, {\n name: \"unfold\",\n bindKey: o(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function (e) {\n e.session.toggleFold(!0);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: !0\n }, {\n name: \"toggleFoldWidget\",\n description: \"Toggle fold widget\",\n bindKey: o(\"F2\", \"F2\"),\n exec: function (e) {\n e.session.toggleFoldWidget();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: !0\n }, {\n name: \"toggleParentFoldWidget\",\n description: \"Toggle parent fold widget\",\n bindKey: o(\"Alt-F2\", \"Alt-F2\"),\n exec: function (e) {\n e.session.toggleFoldWidget(!0);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: !0\n }, {\n name: \"foldall\",\n description: \"Fold all\",\n bindKey: o(null, \"Ctrl-Command-Option-0\"),\n exec: function (e) {\n e.session.foldAll();\n },\n scrollIntoView: \"center\",\n readOnly: !0\n }, {\n name: \"foldAllComments\",\n description: \"Fold all comments\",\n bindKey: o(null, \"Ctrl-Command-Option-0\"),\n exec: function (e) {\n e.session.foldAllComments();\n },\n scrollIntoView: \"center\",\n readOnly: !0\n }, {\n name: \"foldOther\",\n description: \"Fold other\",\n bindKey: o(\"Alt-0\", \"Command-Option-0\"),\n exec: function (e) {\n e.session.foldAll(), e.session.unfold(e.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: !0\n }, {\n name: \"unfoldall\",\n description: \"Unfold all\",\n bindKey: o(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function (e) {\n e.session.unfold();\n },\n scrollIntoView: \"center\",\n readOnly: !0\n }, {\n name: \"findnext\",\n description: \"Find next\",\n bindKey: o(\"Ctrl-K\", \"Command-G\"),\n exec: function (e) {\n e.findNext();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: !0\n }, {\n name: \"findprevious\",\n description: \"Find previous\",\n bindKey: o(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function (e) {\n e.findPrevious();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: !0\n }, {\n name: \"selectOrFindNext\",\n description: \"Select or find next\",\n bindKey: o(\"Alt-K\", \"Ctrl-G\"),\n exec: function (e) {\n e.selection.isEmpty() ? e.selection.selectWord() : e.findNext();\n },\n readOnly: !0\n }, {\n name: \"selectOrFindPrevious\",\n description: \"Select or find previous\",\n bindKey: o(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function (e) {\n e.selection.isEmpty() ? e.selection.selectWord() : e.findPrevious();\n },\n readOnly: !0\n }, {\n name: \"find\",\n description: \"Find\",\n bindKey: o(\"Ctrl-F\", \"Command-F\"),\n exec: function (t) {\n i.loadModule(\"ace/ext/searchbox\", function (e) {\n e.Search(t);\n });\n },\n readOnly: !0\n }, {\n name: \"overwrite\",\n description: \"Overwrite\",\n bindKey: \"Insert\",\n exec: function (e) {\n e.toggleOverwrite();\n },\n readOnly: !0\n }, {\n name: \"selecttostart\",\n description: \"Select to start\",\n bindKey: o(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function (e) {\n e.getSelection().selectFileStart();\n },\n multiSelectAction: \"forEach\",\n readOnly: !0,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotostart\",\n description: \"Go to start\",\n bindKey: o(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function (e) {\n e.navigateFileStart();\n },\n multiSelectAction: \"forEach\",\n readOnly: !0,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectup\",\n description: \"Select up\",\n bindKey: o(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function (e) {\n e.getSelection().selectUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"golineup\",\n description: \"Go line up\",\n bindKey: o(\"Up\", \"Up|Ctrl-P\"),\n exec: function (e, t) {\n e.navigateUp(t.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"selecttoend\",\n description: \"Select to end\",\n bindKey: o(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function (e) {\n e.getSelection().selectFileEnd();\n },\n multiSelectAction: \"forEach\",\n readOnly: !0,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotoend\",\n description: \"Go to end\",\n bindKey: o(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function (e) {\n e.navigateFileEnd();\n },\n multiSelectAction: \"forEach\",\n readOnly: !0,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectdown\",\n description: \"Select down\",\n bindKey: o(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function (e) {\n e.getSelection().selectDown();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"golinedown\",\n description: \"Go line down\",\n bindKey: o(\"Down\", \"Down|Ctrl-N\"),\n exec: function (e, t) {\n e.navigateDown(t.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"selectwordleft\",\n description: \"Select word left\",\n bindKey: o(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function (e) {\n e.getSelection().selectWordLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"gotowordleft\",\n description: \"Go to word left\",\n bindKey: o(\"Ctrl-Left\", \"Option-Left\"),\n exec: function (e) {\n e.navigateWordLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"selecttolinestart\",\n description: \"Select to line start\",\n bindKey: o(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function (e) {\n e.getSelection().selectLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"gotolinestart\",\n description: \"Go to line start\",\n bindKey: o(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function (e) {\n e.navigateLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"selectleft\",\n description: \"Select left\",\n bindKey: o(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function (e) {\n e.getSelection().selectLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"gotoleft\",\n description: \"Go to left\",\n bindKey: o(\"Left\", \"Left|Ctrl-B\"),\n exec: function (e, t) {\n e.navigateLeft(t.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"selectwordright\",\n description: \"Select word right\",\n bindKey: o(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function (e) {\n e.getSelection().selectWordRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"gotowordright\",\n description: \"Go to word right\",\n bindKey: o(\"Ctrl-Right\", \"Option-Right\"),\n exec: function (e) {\n e.navigateWordRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"selecttolineend\",\n description: \"Select to line end\",\n bindKey: o(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function (e) {\n e.getSelection().selectLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"gotolineend\",\n description: \"Go to line end\",\n bindKey: o(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function (e) {\n e.navigateLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"selectright\",\n description: \"Select right\",\n bindKey: o(\"Shift-Right\", \"Shift-Right\"),\n exec: function (e) {\n e.getSelection().selectRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"gotoright\",\n description: \"Go to right\",\n bindKey: o(\"Right\", \"Right|Ctrl-F\"),\n exec: function (e, t) {\n e.navigateRight(t.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"selectpagedown\",\n description: \"Select page down\",\n bindKey: \"Shift-PageDown\",\n exec: function (e) {\n e.selectPageDown();\n },\n readOnly: !0\n }, {\n name: \"pagedown\",\n description: \"Page down\",\n bindKey: o(null, \"Option-PageDown\"),\n exec: function (e) {\n e.scrollPageDown();\n },\n readOnly: !0\n }, {\n name: \"gotopagedown\",\n description: \"Go to page down\",\n bindKey: o(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function (e) {\n e.gotoPageDown();\n },\n readOnly: !0\n }, {\n name: \"selectpageup\",\n description: \"Select page up\",\n bindKey: \"Shift-PageUp\",\n exec: function (e) {\n e.selectPageUp();\n },\n readOnly: !0\n }, {\n name: \"pageup\",\n description: \"Page up\",\n bindKey: o(null, \"Option-PageUp\"),\n exec: function (e) {\n e.scrollPageUp();\n },\n readOnly: !0\n }, {\n name: \"gotopageup\",\n description: \"Go to page up\",\n bindKey: \"PageUp\",\n exec: function (e) {\n e.gotoPageUp();\n },\n readOnly: !0\n }, {\n name: \"scrollup\",\n description: \"Scroll up\",\n bindKey: o(\"Ctrl-Up\", null),\n exec: function (e) {\n e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight);\n },\n readOnly: !0\n }, {\n name: \"scrolldown\",\n description: \"Scroll down\",\n bindKey: o(\"Ctrl-Down\", null),\n exec: function (e) {\n e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight);\n },\n readOnly: !0\n }, {\n name: \"selectlinestart\",\n description: \"Select line start\",\n bindKey: \"Shift-Home\",\n exec: function (e) {\n e.getSelection().selectLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"selectlineend\",\n description: \"Select line end\",\n bindKey: \"Shift-End\",\n exec: function (e) {\n e.getSelection().selectLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"togglerecording\",\n description: \"Toggle recording\",\n bindKey: o(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function (e) {\n e.commands.toggleRecording(e);\n },\n readOnly: !0\n }, {\n name: \"replaymacro\",\n description: \"Replay macro\",\n bindKey: o(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function (e) {\n e.commands.replay(e);\n },\n readOnly: !0\n }, {\n name: \"jumptomatching\",\n description: \"Jump to matching\",\n bindKey: o(\"Ctrl-\\\\|Ctrl-P\", \"Command-\\\\\"),\n exec: function (e) {\n e.jumpToMatching();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: !0\n }, {\n name: \"selecttomatching\",\n description: \"Select to matching\",\n bindKey: o(\"Ctrl-Shift-\\\\|Ctrl-Shift-P\", \"Command-Shift-\\\\\"),\n exec: function (e) {\n e.jumpToMatching(!0);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: !0\n }, {\n name: \"expandToMatching\",\n description: \"Expand to matching\",\n bindKey: o(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function (e) {\n e.jumpToMatching(!0, !0);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: !0\n }, {\n name: \"passKeysToBrowser\",\n description: \"Pass keys to browser\",\n bindKey: o(null, null),\n exec: function () {},\n passEvent: !0,\n readOnly: !0\n }, {\n name: \"copy\",\n description: \"Copy\",\n exec: function (e) {},\n readOnly: !0\n }, {\n name: \"cut\",\n description: \"Cut\",\n exec: function (e) {\n var t = e.$copyWithEmptySelection && e.selection.isEmpty() ? e.selection.getLineRange() : e.selection.getRange();\n e._emit(\"cut\", t), t.isEmpty() || e.session.remove(t), e.clearSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"paste\",\n description: \"Paste\",\n exec: function (e, t) {\n e.$handlePaste(t);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"removeline\",\n description: \"Remove line\",\n bindKey: o(\"Ctrl-D\", \"Command-D\"),\n exec: function (e) {\n e.removeLines();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"duplicateSelection\",\n description: \"Duplicate selection\",\n bindKey: o(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function (e) {\n e.duplicateSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"sortlines\",\n description: \"Sort lines\",\n bindKey: o(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function (e) {\n e.sortLines();\n },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"togglecomment\",\n description: \"Toggle comment\",\n bindKey: o(\"Ctrl-/\", \"Command-/\"),\n exec: function (e) {\n e.toggleCommentLines();\n },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"toggleBlockComment\",\n description: \"Toggle block comment\",\n bindKey: o(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function (e) {\n e.toggleBlockComment();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"modifyNumberUp\",\n description: \"Modify number up\",\n bindKey: o(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function (e) {\n e.modifyNumber(1);\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"modifyNumberDown\",\n description: \"Modify number down\",\n bindKey: o(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function (e) {\n e.modifyNumber(-1);\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"replace\",\n description: \"Replace\",\n bindKey: o(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function (t) {\n i.loadModule(\"ace/ext/searchbox\", function (e) {\n e.Search(t, !0);\n });\n }\n }, {\n name: \"undo\",\n description: \"Undo\",\n bindKey: o(\"Ctrl-Z\", \"Command-Z\"),\n exec: function (e) {\n e.undo();\n }\n }, {\n name: \"redo\",\n description: \"Redo\",\n bindKey: o(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function (e) {\n e.redo();\n }\n }, {\n name: \"copylinesup\",\n description: \"Copy lines up\",\n bindKey: o(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function (e) {\n e.copyLinesUp();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesup\",\n description: \"Move lines up\",\n bindKey: o(\"Alt-Up\", \"Option-Up\"),\n exec: function (e) {\n e.moveLinesUp();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"copylinesdown\",\n description: \"Copy lines down\",\n bindKey: o(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function (e) {\n e.copyLinesDown();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesdown\",\n description: \"Move lines down\",\n bindKey: o(\"Alt-Down\", \"Option-Down\"),\n exec: function (e) {\n e.moveLinesDown();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"del\",\n description: \"Delete\",\n bindKey: o(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function (e) {\n e.remove(\"right\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"backspace\",\n description: \"Backspace\",\n bindKey: o(\"Shift-Backspace|Backspace\", \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),\n exec: function (e) {\n e.remove(\"left\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"cut_or_delete\",\n description: \"Cut or delete\",\n bindKey: o(\"Shift-Delete\", null),\n exec: function (e) {\n if (!e.selection.isEmpty()) return !1;\n e.remove(\"left\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestart\",\n description: \"Remove to line start\",\n bindKey: o(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function (e) {\n e.removeToLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineend\",\n description: \"Remove to line end\",\n bindKey: o(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function (e) {\n e.removeToLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestarthard\",\n description: \"Remove to line start hard\",\n bindKey: o(\"Ctrl-Shift-Backspace\", null),\n exec: function (e) {\n var t = e.selection.getRange();\n t.start.column = 0, e.session.remove(t);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineendhard\",\n description: \"Remove to line end hard\",\n bindKey: o(\"Ctrl-Shift-Delete\", null),\n exec: function (e) {\n var t = e.selection.getRange();\n t.end.column = Number.MAX_VALUE, e.session.remove(t);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordleft\",\n description: \"Remove word left\",\n bindKey: o(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function (e) {\n e.removeWordLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordright\",\n description: \"Remove word right\",\n bindKey: o(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function (e) {\n e.removeWordRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"outdent\",\n description: \"Outdent\",\n bindKey: o(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function (e) {\n e.blockOutdent();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"indent\",\n description: \"Indent\",\n bindKey: o(\"Tab\", \"Tab\"),\n exec: function (e) {\n e.indent();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockoutdent\",\n description: \"Block outdent\",\n bindKey: o(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function (e) {\n e.blockOutdent();\n },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockindent\",\n description: \"Block indent\",\n bindKey: o(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function (e) {\n e.blockIndent();\n },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"insertstring\",\n description: \"Insert string\",\n exec: function (e, t) {\n e.insert(t);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"inserttext\",\n description: \"Insert text\",\n exec: function (e, t) {\n e.insert(l.stringRepeat(t.text || \"\", t.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"splitline\",\n description: \"Split line\",\n bindKey: o(null, \"Ctrl-O\"),\n exec: function (e) {\n e.splitLine();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"transposeletters\",\n description: \"Transpose letters\",\n bindKey: o(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function (e) {\n e.transposeLetters();\n },\n multiSelectAction: function (e) {\n e.transposeSelections(1);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"touppercase\",\n description: \"To uppercase\",\n bindKey: o(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function (e) {\n e.toUpperCase();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"tolowercase\",\n description: \"To lowercase\",\n bindKey: o(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function (e) {\n e.toLowerCase();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"autoindent\",\n description: \"Auto Indent\",\n bindKey: o(null, null),\n exec: function (e) {\n e.autoIndent();\n },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"animate\"\n }, {\n name: \"expandtoline\",\n description: \"Expand to line\",\n bindKey: o(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function (e) {\n var t = e.selection.getRange();\n t.start.column = t.end.column = 0, t.end.row++, e.selection.setRange(t, !1);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"openlink\",\n bindKey: o(\"Ctrl+F3\", \"F3\"),\n exec: function (e) {\n e.openLink();\n }\n }, {\n name: \"joinlines\",\n description: \"Join lines\",\n bindKey: o(null, null),\n exec: function (e) {\n for (var t = e.selection.isBackwards(), n = t ? e.selection.getSelectionLead() : e.selection.getSelectionAnchor(), i = t ? e.selection.getSelectionAnchor() : e.selection.getSelectionLead(), t = e.session.doc.getLine(n.row).length, o = e.session.doc.getTextRange(e.selection.getRange()).replace(/\\n\\s*/, \" \").length, r = e.session.doc.getLine(n.row), s = n.row + 1; s <= i.row + 1; s++) {\n var a = l.stringTrimLeft(l.stringTrimRight(e.session.doc.getLine(s)));\n r += a = 0 !== a.length ? \" \" + a : a;\n }\n i.row + 1 < e.session.doc.getLength() - 1 && (r += e.session.doc.getNewLineCharacter()), e.clearSelection(), e.session.doc.replace(new c(n.row, 0, i.row + 2, 0), r), 0 < o ? (e.selection.moveCursorTo(n.row, n.column), e.selection.selectTo(n.row, n.column + o)) : (t = e.session.doc.getLine(n.row).length > t ? t + 1 : t, e.selection.moveCursorTo(n.row, t));\n },\n multiSelectAction: \"forEach\",\n readOnly: !0\n }, {\n name: \"invertSelection\",\n description: \"Invert selection\",\n bindKey: o(null, null),\n exec: function (e) {\n var t = e.session.doc.getLength() - 1,\n n = e.session.doc.getLine(t).length,\n i = e.selection.rangeList.ranges,\n o = [];\n i.length < 1 && (i = [e.selection.getRange()]);\n for (var r = 0; r < i.length; r++) r != i.length - 1 || i[r].end.row === t && i[r].end.column === n || o.push(new c(i[r].end.row, i[r].end.column, t, n)), 0 === r ? 0 === i[r].start.row && 0 === i[r].start.column || o.push(new c(0, 0, i[r].start.row, i[r].start.column)) : o.push(new c(i[r - 1].end.row, i[r - 1].end.column, i[r].start.row, i[r].start.column));\n e.exitMultiSelectMode(), e.clearSelection();\n for (r = 0; r < o.length; r++) e.selection.addRange(o[r], !1);\n },\n readOnly: !0,\n scrollIntoView: \"none\"\n }, {\n name: \"addLineAfter\",\n description: \"Add new line after the current line\",\n exec: function (e) {\n e.selection.clearSelection(), e.navigateLineEnd(), e.insert(\"\\n\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"addLineBefore\",\n description: \"Add new line before the current line\",\n exec: function (e) {\n e.selection.clearSelection();\n var t = e.getCursorPosition();\n e.selection.moveTo(t.row - 1, Number.MAX_VALUE), e.insert(\"\\n\"), 0 === t.row && e.navigateUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"openCommandPallete\",\n exec: function (e) {\n console.warn(\"This is an obsolete command. Please use `openCommandPalette` instead.\"), e.prompt({\n $type: \"commands\"\n });\n },\n readOnly: !0\n }, {\n name: \"openCommandPalette\",\n description: \"Open command palette\",\n bindKey: o(\"F1\", \"F1\"),\n exec: function (e) {\n e.prompt({\n $type: \"commands\"\n });\n },\n readOnly: !0\n }, {\n name: \"modeSelect\",\n description: \"Change language mode...\",\n bindKey: o(null, null),\n exec: function (e) {\n e.prompt({\n $type: \"modes\"\n });\n },\n readOnly: !0\n }];\n for (var r = 1; r < 9; r++) t.commands.push({\n name: \"foldToLevel\" + r,\n description: \"Fold To Level \" + r,\n level: r,\n exec: function (e) {\n e.session.foldToLevel(this.level);\n },\n scrollIntoView: \"center\",\n readOnly: !0\n });\n }), ace.define(\"ace/line_widgets\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (e, t, n) {\n \"use strict\";\n\n var o = e(\"./lib/dom\");\n function i(e) {\n this.session = e, (this.session.widgetManager = this).session.getRowLength = this.getRowLength, this.session.$getWidgetScreenLength = this.$getWidgetScreenLength, this.updateOnChange = this.updateOnChange.bind(this), this.renderWidgets = this.renderWidgets.bind(this), this.measureWidgets = this.measureWidgets.bind(this), this.session._changedWidgets = [], this.$onChangeEditor = this.$onChangeEditor.bind(this), this.session.on(\"change\", this.updateOnChange), this.session.on(\"changeFold\", this.updateOnFold), this.session.on(\"changeEditor\", this.$onChangeEditor);\n }\n i.prototype.getRowLength = function (e) {\n var t = this.lineWidgets && this.lineWidgets[e] && this.lineWidgets[e].rowCount || 0;\n return this.$useWrapMode && this.$wrapData[e] ? this.$wrapData[e].length + 1 + t : 1 + t;\n }, i.prototype.$getWidgetScreenLength = function () {\n var t = 0;\n return this.lineWidgets.forEach(function (e) {\n e && e.rowCount && !e.hidden && (t += e.rowCount);\n }), t;\n }, i.prototype.$onChangeEditor = function (e) {\n this.attach(e.editor);\n }, i.prototype.attach = function (e) {\n e && e.widgetManager && e.widgetManager != this && e.widgetManager.detach(), this.editor != e && (this.detach(), this.editor = e) && (e.widgetManager = this, e.renderer.on(\"beforeRender\", this.measureWidgets), e.renderer.on(\"afterRender\", this.renderWidgets));\n }, i.prototype.detach = function (e) {\n var t = this.editor;\n t && (this.editor = null, t.widgetManager = null, t.renderer.off(\"beforeRender\", this.measureWidgets), t.renderer.off(\"afterRender\", this.renderWidgets), t = this.session.lineWidgets) && t.forEach(function (e) {\n e && e.el && e.el.parentNode && (e._inDocument = !1, e.el.parentNode.removeChild(e.el));\n });\n }, i.prototype.updateOnFold = function (e, t) {\n var n = t.lineWidgets;\n if (n && e.action) {\n for (var t = e.data, i = t.start.row, o = t.end.row, r = \"add\" == e.action, s = i + 1; s < o; s++) n[s] && (n[s].hidden = r);\n n[o] && (r ? n[i] ? n[o].hidden = r : n[i] = n[o] : (n[i] == n[o] && (n[i] = void 0), n[o].hidden = r));\n }\n }, i.prototype.updateOnChange = function (e) {\n var t,\n n,\n i,\n o = this.session.lineWidgets;\n o && (t = e.start.row, 0 != (n = e.end.row - t)) && (\"remove\" == e.action ? (i = o.splice(t + 1, n), !o[t] && i[i.length - 1] && (o[t] = i.pop()), i.forEach(function (e) {\n e && this.removeLineWidget(e);\n }, this)) : (i = new Array(n), o[t] && null != o[t].column && e.start.column > o[t].column && t++, i.unshift(t, 0), o.splice.apply(o, i)), this.$updateRows());\n }, i.prototype.$updateRows = function () {\n var n,\n e = this.session.lineWidgets;\n e && (n = !0, e.forEach(function (e, t) {\n if (e) for (n = !1, e.row = t; e.$oldWidget;) e.$oldWidget.row = t, e = e.$oldWidget;\n }), n) && (this.session.lineWidgets = null);\n }, i.prototype.$registerLineWidget = function (e) {\n this.session.lineWidgets || (this.session.lineWidgets = new Array(this.session.getLength()));\n var t = this.session.lineWidgets[e.row];\n return t && (e.$oldWidget = t).el && t.el.parentNode && (t.el.parentNode.removeChild(t.el), t._inDocument = !1), this.session.lineWidgets[e.row] = e;\n }, i.prototype.addLineWidget = function (e) {\n var t, n, i;\n return this.$registerLineWidget(e), e.session = this.session, this.editor && (t = this.editor.renderer, e.html && !e.el && (e.el = o.createElement(\"div\"), e.el.innerHTML = e.html), e.text && !e.el && (e.el = o.createElement(\"div\"), e.el.textContent = e.text), e.el && (o.addCssClass(e.el, \"ace_lineWidgetContainer\"), e.className && o.addCssClass(e.el, e.className), e.el.style.position = \"absolute\", e.el.style.zIndex = 5, t.container.appendChild(e.el), e._inDocument = !0, e.coverGutter || (e.el.style.zIndex = 3), null == e.pixelHeight) && (e.pixelHeight = e.el.offsetHeight), null == e.rowCount && (e.rowCount = e.pixelHeight / t.layerConfig.lineHeight), n = this.session.getFoldAt(e.row, 0), (e.$fold = n) && (i = this.session.lineWidgets, e.row != n.end.row || i[n.start.row] ? e.hidden = !0 : i[n.start.row] = e), this.session._emit(\"changeFold\", {\n data: {\n start: {\n row: e.row\n }\n }\n }), this.$updateRows(), this.renderWidgets(null, t), this.onWidgetChanged(e)), e;\n }, i.prototype.removeLineWidget = function (e) {\n if (e._inDocument = !1, e.session = null, e.el && e.el.parentNode && e.el.parentNode.removeChild(e.el), e.editor && e.editor.destroy) try {\n e.editor.destroy();\n } catch (e) {}\n if (this.session.lineWidgets) {\n var t = this.session.lineWidgets[e.row];\n if (t == e) this.session.lineWidgets[e.row] = e.$oldWidget, e.$oldWidget && this.onWidgetChanged(e.$oldWidget);else for (; t;) {\n if (t.$oldWidget == e) {\n t.$oldWidget = e.$oldWidget;\n break;\n }\n t = t.$oldWidget;\n }\n }\n this.session._emit(\"changeFold\", {\n data: {\n start: {\n row: e.row\n }\n }\n }), this.$updateRows();\n }, i.prototype.getWidgetsAtRow = function (e) {\n for (var t = this.session.lineWidgets, n = t && t[e], i = []; n;) i.push(n), n = n.$oldWidget;\n return i;\n }, i.prototype.onWidgetChanged = function (e) {\n this.session._changedWidgets.push(e), this.editor && this.editor.renderer.updateFull();\n }, i.prototype.measureWidgets = function (e, t) {\n var n = this.session._changedWidgets,\n i = t.layerConfig;\n if (n && n.length) {\n for (var o = 1 / 0, r = 0; r < n.length; r++) {\n var s = n[r];\n if (s && s.el && s.session == this.session) {\n if (!s._inDocument) {\n if (this.session.lineWidgets[s.row] != s) continue;\n s._inDocument = !0, t.container.appendChild(s.el);\n }\n s.h = s.el.offsetHeight, s.fixedWidth || (s.w = s.el.offsetWidth, s.screenWidth = Math.ceil(s.w / i.characterWidth));\n var a = s.h / i.lineHeight;\n s.coverLine && (a -= this.session.getRowLineCount(s.row)) < 0 && (a = 0), s.rowCount != a && (s.rowCount = a, s.row < o) && (o = s.row);\n }\n }\n o != 1 / 0 && (this.session._emit(\"changeFold\", {\n data: {\n start: {\n row: o\n }\n }\n }), this.session.lineWidgetWidth = null), this.session._changedWidgets = [];\n }\n }, i.prototype.renderWidgets = function (e, t) {\n var n = t.layerConfig,\n i = this.session.lineWidgets;\n if (i) {\n for (var o = Math.min(this.firstRow, n.firstRow), r = Math.max(this.lastRow, n.lastRow, i.length); 0 < o && !i[o];) o--;\n this.firstRow = n.firstRow, this.lastRow = n.lastRow, t.$cursorLayer.config = n;\n for (var s = o; s <= r; s++) {\n var a,\n l = i[s];\n l && l.el && (l.hidden ? l.el.style.top = -100 - (l.pixelHeight || 0) + \"px\" : (l._inDocument || (l._inDocument = !0, t.container.appendChild(l.el)), a = t.$cursorLayer.getPixelPosition({\n row: s,\n column: 0\n }, !0).top, l.coverLine || (a += n.lineHeight * this.session.getRowLineCount(l.row)), l.el.style.top = a - n.offset + \"px\", a = l.coverGutter ? 0 : t.gutterWidth, l.fixedWidth || (a -= t.scrollLeft), l.el.style.left = a + \"px\", l.fullWidth && l.screenWidth && (l.el.style.minWidth = n.width + 2 * n.padding + \"px\"), l.fixedWidth ? l.el.style.right = t.scrollBar.getWidth() + \"px\" : l.el.style.right = \"\"));\n }\n }\n }, t.LineWidgets = i;\n }), ace.define(\"ace/keyboard/gutter_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/keys\", \"ace/mouse/default_gutter_handler\"], function (e, t, n) {\n \"use strict\";\n\n var o = e(\"../lib/keys\"),\n i = e(\"../mouse/default_gutter_handler\").GutterTooltip;\n function r(e) {\n this.editor = e, this.gutterLayer = e.renderer.$gutterLayer, this.element = e.renderer.$gutter, this.lines = e.renderer.$gutterLayer.$lines, this.activeRowIndex = null, this.activeLane = null, this.annotationTooltip = new i(this.editor);\n }\n r.prototype.addListener = function () {\n this.element.addEventListener(\"keydown\", this.$onGutterKeyDown.bind(this)), this.element.addEventListener(\"focusout\", this.$blurGutter.bind(this)), this.editor.on(\"mousewheel\", this.$blurGutter.bind(this));\n }, r.prototype.removeListener = function () {\n this.element.removeEventListener(\"keydown\", this.$onGutterKeyDown.bind(this)), this.element.removeEventListener(\"focusout\", this.$blurGutter.bind(this)), this.editor.off(\"mousewheel\", this.$blurGutter.bind(this));\n }, r.prototype.$onGutterKeyDown = function (e) {\n var t;\n this.annotationTooltip.isOpen ? (e.preventDefault(), e.keyCode === o.escape && this.annotationTooltip.hideTooltip()) : e.target === this.element ? e.keyCode == o.enter && (e.preventDefault(), t = this.editor.getCursorPosition().row, this.editor.isRowVisible(t) || this.editor.scrollToLine(t, !0, !0), setTimeout(function () {\n var e = this.$rowToRowIndex(this.gutterLayer.$cursorCell.row),\n t = this.$findNearestFoldWidget(e),\n n = this.$findNearestAnnotation(e);\n null === t && null === n || (null === t && null !== n || (null === t || null !== n) && Math.abs(n - e) < Math.abs(t - e) ? (this.activeRowIndex = n, this.activeLane = \"annotation\", this.$focusAnnotation(this.activeRowIndex)) : (this.activeRowIndex = t, this.activeLane = \"fold\", this.$focusFoldWidget(this.activeRowIndex)));\n }.bind(this), 10)) : (this.$handleGutterKeyboardInteraction(e), setTimeout(function () {\n this.editor._signal(\"gutterkeydown\", new s(e, this));\n }.bind(this), 10));\n }, r.prototype.$handleGutterKeyboardInteraction = function (e) {\n if (e.keyCode === o.tab) e.preventDefault();else if (e.keyCode === o.escape) e.preventDefault(), this.$blurGutter(), this.element.focus(), this.lane = null;else if (e.keyCode === o.up) switch (e.preventDefault(), this.activeLane) {\n case \"fold\":\n this.$moveFoldWidgetUp();\n break;\n case \"annotation\":\n this.$moveAnnotationUp();\n } else if (e.keyCode === o.down) switch (e.preventDefault(), this.activeLane) {\n case \"fold\":\n this.$moveFoldWidgetDown();\n break;\n case \"annotation\":\n this.$moveAnnotationDown();\n } else if (e.keyCode === o.left) e.preventDefault(), this.$switchLane(\"annotation\");else if (e.keyCode === o.right) e.preventDefault(), this.$switchLane(\"fold\");else if (e.keyCode === o.enter || e.keyCode === o.space) switch (e.preventDefault(), this.activeLane) {\n case \"fold\":\n if (\"start\" === this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)]) {\n var t = this.$rowIndexToRow(this.activeRowIndex);\n this.editor.session.onFoldWidgetClick(this.$rowIndexToRow(this.activeRowIndex), e), setTimeout(function () {\n this.$rowIndexToRow(this.activeRowIndex) !== t && (this.$blurFoldWidget(this.activeRowIndex), this.activeRowIndex = this.$rowToRowIndex(t), this.$focusFoldWidget(this.activeRowIndex));\n }.bind(this), 10);\n break;\n }\n if (\"end\" === this.gutterLayer.session.foldWidgets[this.$rowIndexToRow(this.activeRowIndex)]) break;\n return;\n case \"annotation\":\n var n = this.lines.cells[this.activeRowIndex].element.childNodes[2].getBoundingClientRect(),\n i = this.annotationTooltip.getElement().style;\n i.left = n.right + \"px\", i.top = n.bottom + \"px\", this.annotationTooltip.showTooltip(this.$rowIndexToRow(this.activeRowIndex));\n }\n }, r.prototype.$blurGutter = function () {\n if (null !== this.activeRowIndex) switch (this.activeLane) {\n case \"fold\":\n this.$blurFoldWidget(this.activeRowIndex);\n break;\n case \"annotation\":\n this.$blurAnnotation(this.activeRowIndex);\n }\n this.annotationTooltip.isOpen && this.annotationTooltip.hideTooltip();\n }, r.prototype.$isFoldWidgetVisible = function (e) {\n var t = this.editor.isRowFullyVisible(this.$rowIndexToRow(e)),\n e = \"none\" !== this.$getFoldWidget(e).style.display;\n return t && e;\n }, r.prototype.$isAnnotationVisible = function (e) {\n var t = this.editor.isRowFullyVisible(this.$rowIndexToRow(e)),\n e = \"none\" !== this.$getAnnotation(e).style.display;\n return t && e;\n }, r.prototype.$getFoldWidget = function (e) {\n return this.lines.get(e).element.childNodes[1];\n }, r.prototype.$getAnnotation = function (e) {\n return this.lines.get(e).element.childNodes[2];\n }, r.prototype.$findNearestFoldWidget = function (e) {\n if (this.$isFoldWidgetVisible(e)) return e;\n for (var t = 0; 0 < e - t || e + t < this.lines.getLength() - 1;) {\n if (0 <= e - ++t && this.$isFoldWidgetVisible(e - t)) return e - t;\n if (e + t <= this.lines.getLength() - 1 && this.$isFoldWidgetVisible(e + t)) return e + t;\n }\n return null;\n }, r.prototype.$findNearestAnnotation = function (e) {\n if (this.$isAnnotationVisible(e)) return e;\n for (var t = 0; 0 < e - t || e + t < this.lines.getLength() - 1;) {\n if (0 <= e - ++t && this.$isAnnotationVisible(e - t)) return e - t;\n if (e + t <= this.lines.getLength() - 1 && this.$isAnnotationVisible(e + t)) return e + t;\n }\n return null;\n }, r.prototype.$focusFoldWidget = function (e) {\n null != e && ((e = this.$getFoldWidget(e)).classList.add(this.editor.renderer.keyboardFocusClassName), e.focus());\n }, r.prototype.$focusAnnotation = function (e) {\n null != e && ((e = this.$getAnnotation(e)).classList.add(this.editor.renderer.keyboardFocusClassName), e.focus());\n }, r.prototype.$blurFoldWidget = function (e) {\n e = this.$getFoldWidget(e);\n e.classList.remove(this.editor.renderer.keyboardFocusClassName), e.blur();\n }, r.prototype.$blurAnnotation = function (e) {\n e = this.$getAnnotation(e);\n e.classList.remove(this.editor.renderer.keyboardFocusClassName), e.blur();\n }, r.prototype.$moveFoldWidgetUp = function () {\n for (var e = this.activeRowIndex; 0 < e;) if (this.$isFoldWidgetVisible(--e)) return this.$blurFoldWidget(this.activeRowIndex), this.activeRowIndex = e, void this.$focusFoldWidget(this.activeRowIndex);\n }, r.prototype.$moveFoldWidgetDown = function () {\n for (var e = this.activeRowIndex; e < this.lines.getLength() - 1;) if (this.$isFoldWidgetVisible(++e)) return this.$blurFoldWidget(this.activeRowIndex), this.activeRowIndex = e, void this.$focusFoldWidget(this.activeRowIndex);\n }, r.prototype.$moveAnnotationUp = function () {\n for (var e = this.activeRowIndex; 0 < e;) if (this.$isAnnotationVisible(--e)) return this.$blurAnnotation(this.activeRowIndex), this.activeRowIndex = e, void this.$focusAnnotation(this.activeRowIndex);\n }, r.prototype.$moveAnnotationDown = function () {\n for (var e = this.activeRowIndex; e < this.lines.getLength() - 1;) if (this.$isAnnotationVisible(++e)) return this.$blurAnnotation(this.activeRowIndex), this.activeRowIndex = e, void this.$focusAnnotation(this.activeRowIndex);\n }, r.prototype.$switchLane = function (e) {\n switch (e) {\n case \"annotation\":\n \"annotation\" !== this.activeLane && null != (t = this.$findNearestAnnotation(this.activeRowIndex)) && (this.activeLane = \"annotation\", this.$blurFoldWidget(this.activeRowIndex), this.activeRowIndex = t, this.$focusAnnotation(this.activeRowIndex));\n break;\n case \"fold\":\n var t;\n \"fold\" !== this.activeLane && null != (t = this.$findNearestFoldWidget(this.activeRowIndex)) && (this.activeLane = \"fold\", this.$blurAnnotation(this.activeRowIndex), this.activeRowIndex = t, this.$focusFoldWidget(this.activeRowIndex));\n }\n }, r.prototype.$rowIndexToRow = function (e) {\n e = this.lines.get(e);\n return e ? e.row : null;\n }, r.prototype.$rowToRowIndex = function (e) {\n for (var t = 0; t < this.lines.getLength(); t++) if (this.lines.get(t).row == e) return t;\n return null;\n }, t.GutterKeyboardHandler = r;\n a.prototype.getKey = function () {\n return o.keyCodeToString(this.domEvent.keyCode);\n }, a.prototype.getRow = function () {\n return this.gutterKeyboardHandler.$rowIndexToRow(this.gutterKeyboardHandler.activeRowIndex);\n }, a.prototype.isInAnnotationLane = function () {\n return \"annotation\" === this.gutterKeyboardHandler.activeLane;\n }, a.prototype.isInFoldLane = function () {\n return \"fold\" === this.gutterKeyboardHandler.activeLane;\n };\n var s = a;\n function a(e, t) {\n this.gutterKeyboardHandler = t, this.domEvent = e;\n }\n t.GutterKeyboardEvent = s;\n }), ace.define(\"ace/editor\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/lib/lang\", \"ace/lib/useragent\", \"ace/keyboard/textinput\", \"ace/mouse/mouse_handler\", \"ace/mouse/fold_handler\", \"ace/keyboard/keybinding\", \"ace/edit_session\", \"ace/search\", \"ace/range\", \"ace/lib/event_emitter\", \"ace/commands/command_manager\", \"ace/commands/default_commands\", \"ace/config\", \"ace/token_iterator\", \"ace/line_widgets\", \"ace/keyboard/gutter_handler\", \"ace/config\", \"ace/clipboard\", \"ace/lib/keys\"], function (e, t, n) {\n \"use strict\";\n\n var d = this && this.__values || function (e) {\n var t = \"function\" == typeof Symbol && Symbol.iterator,\n n = t && e[t],\n i = 0;\n if (n) return n.call(e);\n if (e && \"number\" == typeof e.length) return {\n next: function () {\n return {\n value: (e = e && i >= e.length ? void 0 : e) && e[i++],\n done: !e\n };\n }\n };\n throw new TypeError(t ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n },\n o = e(\"./lib/oop\"),\n i = e(\"./lib/dom\"),\n m = e(\"./lib/lang\"),\n r = e(\"./lib/useragent\"),\n s = e(\"./keyboard/textinput\").TextInput,\n a = e(\"./mouse/mouse_handler\").MouseHandler,\n l = e(\"./mouse/fold_handler\").FoldHandler,\n c = e(\"./keyboard/keybinding\").KeyBinding,\n h = e(\"./edit_session\").EditSession,\n u = e(\"./search\").Search,\n f = e(\"./range\").Range,\n g = e(\"./lib/event_emitter\").EventEmitter,\n p = e(\"./commands/command_manager\").CommandManager,\n C = e(\"./commands/default_commands\").commands,\n y = e(\"./config\"),\n v = e(\"./token_iterator\").TokenIterator,\n I = e(\"./line_widgets\").LineWidgets,\n b = e(\"./keyboard/gutter_handler\").GutterKeyboardHandler,\n A = e(\"./config\").nls,\n w = e(\"./clipboard\"),\n S = e(\"./lib/keys\"),\n e = (x.prototype.$initOperationListeners = function () {\n this.commands.on(\"exec\", this.startOperation.bind(this), !0), this.commands.on(\"afterExec\", this.endOperation.bind(this), !0), this.$opResetTimer = m.delayedCall(this.endOperation.bind(this, !0)), this.on(\"change\", function () {\n this.curOp || (this.startOperation(), this.curOp.selectionBefore = this.$lastSel), this.curOp.docChanged = !0;\n }.bind(this), !0), this.on(\"changeSelection\", function () {\n this.curOp || (this.startOperation(), this.curOp.selectionBefore = this.$lastSel), this.curOp.selectionChanged = !0;\n }.bind(this), !0);\n }, x.prototype.startOperation = function (e) {\n if (this.curOp) {\n if (!e || this.curOp.command) return;\n this.prevOp = this.curOp;\n }\n e || (this.previousCommand = null, e = {}), this.$opResetTimer.schedule(), this.curOp = this.session.curOp = {\n command: e.command || {},\n args: e.args,\n scrollTop: this.renderer.scrollTop\n }, this.curOp.selectionBefore = this.selection.toJSON();\n }, x.prototype.endOperation = function (e) {\n if (this.curOp && this.session) {\n if (e && !1 === e.returnValue || !this.session) return this.curOp = null;\n if ((1 != e || !this.curOp.command || \"mouse\" != this.curOp.command.name) && (this._signal(\"beforeEndOperation\"), this.curOp)) {\n var e = this.curOp.command,\n t = e && e.scrollIntoView;\n if (t) {\n switch (t) {\n case \"center-animate\":\n t = \"animate\";\n case \"center\":\n this.renderer.scrollCursorIntoView(null, .5);\n break;\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n case \"selectionPart\":\n var n = this.selection.getRange(),\n i = this.renderer.layerConfig;\n (n.start.row >= i.lastRow || n.end.row <= i.firstRow) && this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n \"animate\" == t && this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n e = this.selection.toJSON();\n this.curOp.selectionAfter = e, this.$lastSel = this.selection.toJSON(), this.session.getUndoManager().addSelection(e), this.prevOp = this.curOp, this.curOp = null;\n }\n }\n }, x.prototype.$historyTracker = function (e) {\n var t, n, i, o;\n this.$mergeUndoDeltas && (t = this.prevOp, n = this.$mergeableCommands, i = t.command && e.command.name == t.command.name, \"insertstring\" == e.command.name ? (o = e.args, void 0 === this.mergeNextCommand && (this.mergeNextCommand = !0), i = i && this.mergeNextCommand && (!/\\s/.test(o) || /\\s/.test(t.args)), this.mergeNextCommand = !0) : i = i && -1 !== n.indexOf(e.command.name), (i = \"always\" != this.$mergeUndoDeltas && 2e3 < Date.now() - this.sequenceStartTime ? !1 : i) ? this.session.mergeUndoDeltas = !0 : -1 !== n.indexOf(e.command.name) && (this.sequenceStartTime = Date.now()));\n }, x.prototype.setKeyboardHandler = function (t, n) {\n var i;\n t && \"string\" == typeof t && \"ace\" != t ? (this.$keybindingId = t, i = this, y.loadModule([\"keybinding\", t], function (e) {\n i.$keybindingId == t && i.keyBinding.setKeyboardHandler(e && e.handler), n && n();\n })) : (this.$keybindingId = null, this.keyBinding.setKeyboardHandler(t), n && n());\n }, x.prototype.getKeyboardHandler = function () {\n return this.keyBinding.getKeyboardHandler();\n }, x.prototype.setSession = function (e) {\n var t, n;\n this.session != e && (this.curOp && this.endOperation(), this.curOp = {}, (t = this.session) && (this.session.off(\"change\", this.$onDocumentChange), this.session.off(\"changeMode\", this.$onChangeMode), this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate), this.session.off(\"changeTabSize\", this.$onChangeTabSize), this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit), this.session.off(\"changeWrapMode\", this.$onChangeWrapMode), this.session.off(\"changeFold\", this.$onChangeFold), this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker), this.session.off(\"changeBackMarker\", this.$onChangeBackMarker), this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint), this.session.off(\"changeAnnotation\", this.$onChangeAnnotation), this.session.off(\"changeOverwrite\", this.$onCursorChange), this.session.off(\"changeScrollTop\", this.$onScrollTopChange), this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange), (n = this.session.getSelection()).off(\"changeCursor\", this.$onCursorChange), n.off(\"changeSelection\", this.$onSelectionChange)), (this.session = e) ? (this.$onDocumentChange = this.onDocumentChange.bind(this), e.on(\"change\", this.$onDocumentChange), this.renderer.setSession(e), this.$onChangeMode = this.onChangeMode.bind(this), e.on(\"changeMode\", this.$onChangeMode), this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this), e.on(\"tokenizerUpdate\", this.$onTokenizerUpdate), this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer), e.on(\"changeTabSize\", this.$onChangeTabSize), this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this), e.on(\"changeWrapLimit\", this.$onChangeWrapLimit), this.$onChangeWrapMode = this.onChangeWrapMode.bind(this), e.on(\"changeWrapMode\", this.$onChangeWrapMode), this.$onChangeFold = this.onChangeFold.bind(this), e.on(\"changeFold\", this.$onChangeFold), this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this), this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker), this.$onChangeBackMarker = this.onChangeBackMarker.bind(this), this.session.on(\"changeBackMarker\", this.$onChangeBackMarker), this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this), this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint), this.$onChangeAnnotation = this.onChangeAnnotation.bind(this), this.session.on(\"changeAnnotation\", this.$onChangeAnnotation), this.$onCursorChange = this.onCursorChange.bind(this), this.session.on(\"changeOverwrite\", this.$onCursorChange), this.$onScrollTopChange = this.onScrollTopChange.bind(this), this.session.on(\"changeScrollTop\", this.$onScrollTopChange), this.$onScrollLeftChange = this.onScrollLeftChange.bind(this), this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange), this.selection = e.getSelection(), this.selection.on(\"changeCursor\", this.$onCursorChange), this.$onSelectionChange = this.onSelectionChange.bind(this), this.selection.on(\"changeSelection\", this.$onSelectionChange), this.onChangeMode(), this.onCursorChange(), this.onScrollTopChange(), this.onScrollLeftChange(), this.onSelectionChange(), this.onChangeFrontMarker(), this.onChangeBackMarker(), this.onChangeBreakpoint(), this.onChangeAnnotation(), this.session.getUseWrapMode() && this.renderer.adjustWrapLimit(), this.renderer.updateFull()) : (this.selection = null, this.renderer.setSession(e)), this._signal(\"changeSession\", {\n session: e,\n oldSession: t\n }), this.curOp = null, t && t._signal(\"changeEditor\", {\n oldEditor: this\n }), e && e._signal(\"changeEditor\", {\n editor: this\n }), e) && !e.destroyed && e.bgTokenizer.scheduleStart();\n }, x.prototype.getSession = function () {\n return this.session;\n }, x.prototype.setValue = function (e, t) {\n return this.session.doc.setValue(e), t ? 1 == t ? this.navigateFileEnd() : -1 == t && this.navigateFileStart() : this.selectAll(), e;\n }, x.prototype.getValue = function () {\n return this.session.getValue();\n }, x.prototype.getSelection = function () {\n return this.selection;\n }, x.prototype.resize = function (e) {\n this.renderer.onResize(e);\n }, x.prototype.setTheme = function (e, t) {\n this.renderer.setTheme(e, t);\n }, x.prototype.getTheme = function () {\n return this.renderer.getTheme();\n }, x.prototype.setStyle = function (e) {\n this.renderer.setStyle(e);\n }, x.prototype.unsetStyle = function (e) {\n this.renderer.unsetStyle(e);\n }, x.prototype.getFontSize = function () {\n return this.getOption(\"fontSize\") || i.computedStyle(this.container).fontSize;\n }, x.prototype.setFontSize = function (e) {\n this.setOption(\"fontSize\", e);\n }, x.prototype.$highlightBrackets = function () {\n var r;\n this.$highlightPending || ((r = this).$highlightPending = !0, setTimeout(function () {\n r.$highlightPending = !1;\n var e,\n t,\n n,\n i,\n o = r.session;\n o && !o.destroyed && (o.$bracketHighlight && (o.$bracketHighlight.markerIds.forEach(function (e) {\n o.removeMarker(e);\n }), o.$bracketHighlight = null), e = r.getCursorPosition(), t = (t = r.getKeyboardHandler()) && t.$getDirectionForHighlight && t.$getDirectionForHighlight(r), (t = o.getMatchingBracketRanges(e, t)) || (n = new v(o, e.row, e.column).getCurrentToken()) && /\\b(?:tag-open|tag-name)/.test(n.type) && (n = o.getMatchingTags(e)) && (t = [n.openTagName, n.closeTagName]), (t = !t && o.$mode.getMatching ? o.$mode.getMatching(r.session) : t) && (i = \"ace_bracket\", Array.isArray(t) ? 1 == t.length && (i = \"ace_error_bracket\") : t = [t], 2 == t.length && (0 == f.comparePoints(t[0].end, t[1].start) ? t = [f.fromPoints(t[0].start, t[1].end)] : 0 == f.comparePoints(t[0].start, t[1].end) && (t = [f.fromPoints(t[1].start, t[0].end)])), o.$bracketHighlight = {\n ranges: t,\n markerIds: t.map(function (e) {\n return o.addMarker(e, i, \"text\");\n })\n }), r.getHighlightIndentGuides()) && r.renderer.$textLayer.$highlightIndentGuide();\n }, 50));\n }, x.prototype.focus = function () {\n this.textInput.focus();\n }, x.prototype.isFocused = function () {\n return this.textInput.isFocused();\n }, x.prototype.blur = function () {\n this.textInput.blur();\n }, x.prototype.onFocus = function (e) {\n this.$isFocused || (this.$isFocused = !0, this.renderer.showCursor(), this.renderer.visualizeFocus(), this._emit(\"focus\", e));\n }, x.prototype.onBlur = function (e) {\n this.$isFocused && (this.$isFocused = !1, this.renderer.hideCursor(), this.renderer.visualizeBlur(), this._emit(\"blur\", e));\n }, x.prototype.$cursorChange = function () {\n this.renderer.updateCursor(), this.$highlightBrackets(), this.$updateHighlightActiveLine();\n }, x.prototype.onDocumentChange = function (e) {\n var t = this.session.$useWrapMode,\n n = e.start.row == e.end.row ? e.end.row : 1 / 0;\n this.renderer.updateLines(e.start.row, n, t), this._signal(\"change\", e), this.$cursorChange();\n }, x.prototype.onTokenizerUpdate = function (e) {\n e = e.data;\n this.renderer.updateLines(e.first, e.last);\n }, x.prototype.onScrollTopChange = function () {\n this.renderer.scrollToY(this.session.getScrollTop());\n }, x.prototype.onScrollLeftChange = function () {\n this.renderer.scrollToX(this.session.getScrollLeft());\n }, x.prototype.onCursorChange = function () {\n this.$cursorChange(), this._signal(\"changeSelection\");\n }, x.prototype.$updateHighlightActiveLine = function () {\n var e,\n t,\n n = this.getSession();\n this.$highlightActiveLine && (\"line\" == this.$selectionStyle && this.selection.isMultiLine() || (e = this.getCursorPosition()), this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty() && (e = !1), !this.renderer.$maxLines || 1 !== this.session.getLength() || 1 < this.renderer.$minLines || (e = !1)), n.$highlightLineMarker && !e ? (n.removeMarker(n.$highlightLineMarker.id), n.$highlightLineMarker = null) : !n.$highlightLineMarker && e ? ((t = new f(e.row, e.column, e.row, 1 / 0)).id = n.addMarker(t, \"ace_active-line\", \"screenLine\"), n.$highlightLineMarker = t) : e && (n.$highlightLineMarker.start.row = e.row, n.$highlightLineMarker.end.row = e.row, n.$highlightLineMarker.start.column = e.column, n._signal(\"changeBackMarker\"));\n }, x.prototype.onSelectionChange = function (e) {\n var t,\n n,\n i = this.session,\n i = (i.$selectionMarker && i.removeMarker(i.$selectionMarker), i.$selectionMarker = null, this.selection.isEmpty() ? this.$updateHighlightActiveLine() : (t = this.selection.getRange(), n = this.getSelectionStyle(), i.$selectionMarker = i.addMarker(t, \"ace_selection\", n)), this.$highlightSelectedWord && this.$getSelectionHighLightRegexp());\n this.session.highlight(i), this._signal(\"changeSelection\");\n }, x.prototype.$getSelectionHighLightRegexp = function () {\n var e = this.session,\n t = this.getSelectionRange();\n if (!t.isEmpty() && !t.isMultiLine()) {\n var n = t.start.column,\n i = t.end.column,\n e = e.getLine(t.start.row),\n t = e.substring(n, i);\n if (!(5e3 < t.length) && /[\\w\\d]/.test(t)) {\n t = this.$search.$assembleRegExp({\n wholeWord: !0,\n caseSensitive: !0,\n needle: t\n }), e = e.substring(n - 1, i + 1);\n if (t.test(e)) return t;\n }\n }\n }, x.prototype.onChangeFrontMarker = function () {\n this.renderer.updateFrontMarkers();\n }, x.prototype.onChangeBackMarker = function () {\n this.renderer.updateBackMarkers();\n }, x.prototype.onChangeBreakpoint = function () {\n this.renderer.updateBreakpoints();\n }, x.prototype.onChangeAnnotation = function () {\n this.renderer.setAnnotations(this.session.getAnnotations());\n }, x.prototype.onChangeMode = function (e) {\n this.renderer.updateText(), this._emit(\"changeMode\", e);\n }, x.prototype.onChangeWrapLimit = function () {\n this.renderer.updateFull();\n }, x.prototype.onChangeWrapMode = function () {\n this.renderer.onResize(!0);\n }, x.prototype.onChangeFold = function () {\n this.$updateHighlightActiveLine(), this.renderer.updateFull();\n }, x.prototype.getSelectedText = function () {\n return this.session.getTextRange(this.getSelectionRange());\n }, x.prototype.getCopyText = function () {\n var e = this.getSelectedText(),\n t = this.session.doc.getNewLineCharacter(),\n n = !1;\n if (!e && this.$copyWithEmptySelection) for (var n = !0, i = this.selection.getAllRanges(), o = 0; o < i.length; o++) {\n var r = i[o];\n o && i[o - 1].start.row == r.start.row || (e += this.session.getLine(r.start.row) + t);\n }\n var s = {\n text: e\n };\n return this._signal(\"copy\", s), w.lineMode = !!n && s.text, s.text;\n }, x.prototype.onCopy = function () {\n this.commands.exec(\"copy\", this);\n }, x.prototype.onCut = function () {\n this.commands.exec(\"cut\", this);\n }, x.prototype.onPaste = function (e, t) {\n this.commands.exec(\"paste\", this, {\n text: e,\n event: t\n });\n }, x.prototype.$handlePaste = function (e) {\n this._signal(\"paste\", e = \"string\" == typeof e ? {\n text: e\n } : e);\n var t = e.text,\n e = t === w.lineMode,\n n = this.session;\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) e ? n.insert({\n row: this.selection.lead.row,\n column: 0\n }, t) : this.insert(t);else if (e) this.selection.rangeList.ranges.forEach(function (e) {\n n.insert({\n row: e.start.row,\n column: 0\n }, t);\n });else {\n var i = t.split(/\\r\\n|\\r|\\n/),\n o = this.selection.rangeList.ranges,\n e = !(2 != i.length || i[0] && i[1]);\n if (i.length != o.length || e) return this.commands.exec(\"insertstring\", this, t);\n for (var r = o.length; r--;) {\n var s = o[r];\n s.isEmpty() || n.remove(s), n.insert(s.start, i[r]);\n }\n }\n }, x.prototype.execCommand = function (e, t) {\n return this.commands.exec(e, this, t);\n }, x.prototype.insert = function (e, t) {\n var n,\n i = this.session,\n o = i.getMode(),\n r = this.getCursorPosition(),\n s = (this.getBehavioursEnabled() && !t && (n = o.transformAction(i.getState(r.row), \"insertion\", this, i, e)) && (e === n.text || this.inVirtualSelectionMode || (this.session.mergeUndoDeltas = !1, this.mergeNextCommand = !1), e = n.text), \"\\t\" == e && (e = this.session.getTabString()), this.selection.isEmpty() ? this.session.getOverwrite() && -1 == e.indexOf(\"\\n\") && ((s = new f.fromPoints(r, r)).end.column += e.length, this.session.remove(s)) : (s = this.getSelectionRange(), r = this.session.remove(s), this.clearSelection()), \"\\n\" != e && \"\\r\\n\" != e || (a = i.getLine(r.row), r.column > a.search(/\\S|$/) && (t = a.substr(r.column).search(/\\S|$/), i.doc.removeInLine(r.row, r.column, r.column + t))), this.clearSelection(), r.column),\n t = i.getState(r.row),\n a = i.getLine(r.row),\n l = o.checkOutdent(t, a, e);\n i.insert(r, e), n && n.selection && (2 == n.selection.length ? this.selection.setSelectionRange(new f(r.row, s + n.selection[0], r.row, s + n.selection[1])) : this.selection.setSelectionRange(new f(r.row + n.selection[0], n.selection[1], r.row + n.selection[2], n.selection[3]))), this.$enableAutoIndent && (i.getDocument().isNewLine(e) && (s = o.getNextLineIndent(t, a.slice(0, r.column), i.getTabString()), i.insert({\n row: r.row + 1,\n column: 0\n }, s)), l) && o.autoOutdent(t, i, r.row);\n }, x.prototype.autoIndent = function () {\n for (var e, t, n, i, o, r = this.session, s = r.getMode(), a = (n = this.selection.isEmpty() ? (t = 0, r.doc.getLength() - 1) : (t = (e = this.getSelectionRange()).start.row, e.end.row), \"\"), l = \"\", c = r.getTabString(), h = t; h <= n; h++) 0 < h && (a = r.getState(h - 1), i = r.getLine(h - 1), l = s.getNextLineIndent(a, i, c)), i = r.getLine(h), l !== (o = s.$getIndent(i)) && (0 < o.length && (o = new f(h, 0, h, o.length), r.remove(o)), 0 < l.length) && r.insert({\n row: h,\n column: 0\n }, l), s.autoOutdent(a, r, h);\n }, x.prototype.onTextInput = function (e, t) {\n if (!t) return this.keyBinding.onTextInput(e);\n this.startOperation({\n command: {\n name: \"insertstring\"\n }\n });\n e = this.applyComposition.bind(this, e, t);\n this.selection.rangeCount ? this.forEachSelection(e) : e(), this.endOperation();\n }, x.prototype.applyComposition = function (e, t) {\n var n;\n (t.extendLeft || t.extendRight) && ((n = this.selection.getRange()).start.column -= t.extendLeft, n.end.column += t.extendRight, n.start.column < 0 && (n.start.row--, n.start.column += this.session.getLine(n.start.row).length + 1), this.selection.setRange(n), e || n.isEmpty() || this.remove()), !e && this.selection.isEmpty() || this.insert(e, !0), (t.restoreStart || t.restoreEnd) && ((n = this.selection.getRange()).start.column -= t.restoreStart, n.end.column -= t.restoreEnd, this.selection.setRange(n));\n }, x.prototype.onCommandKey = function (e, t, n) {\n return this.keyBinding.onCommandKey(e, t, n);\n }, x.prototype.setOverwrite = function (e) {\n this.session.setOverwrite(e);\n }, x.prototype.getOverwrite = function () {\n return this.session.getOverwrite();\n }, x.prototype.toggleOverwrite = function () {\n this.session.toggleOverwrite();\n }, x.prototype.setScrollSpeed = function (e) {\n this.setOption(\"scrollSpeed\", e);\n }, x.prototype.getScrollSpeed = function () {\n return this.getOption(\"scrollSpeed\");\n }, x.prototype.setDragDelay = function (e) {\n this.setOption(\"dragDelay\", e);\n }, x.prototype.getDragDelay = function () {\n return this.getOption(\"dragDelay\");\n }, x.prototype.setSelectionStyle = function (e) {\n this.setOption(\"selectionStyle\", e);\n }, x.prototype.getSelectionStyle = function () {\n return this.getOption(\"selectionStyle\");\n }, x.prototype.setHighlightActiveLine = function (e) {\n this.setOption(\"highlightActiveLine\", e);\n }, x.prototype.getHighlightActiveLine = function () {\n return this.getOption(\"highlightActiveLine\");\n }, x.prototype.setHighlightGutterLine = function (e) {\n this.setOption(\"highlightGutterLine\", e);\n }, x.prototype.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n }, x.prototype.setHighlightSelectedWord = function (e) {\n this.setOption(\"highlightSelectedWord\", e);\n }, x.prototype.getHighlightSelectedWord = function () {\n return this.$highlightSelectedWord;\n }, x.prototype.setAnimatedScroll = function (e) {\n this.renderer.setAnimatedScroll(e);\n }, x.prototype.getAnimatedScroll = function () {\n return this.renderer.getAnimatedScroll();\n }, x.prototype.setShowInvisibles = function (e) {\n this.renderer.setShowInvisibles(e);\n }, x.prototype.getShowInvisibles = function () {\n return this.renderer.getShowInvisibles();\n }, x.prototype.setDisplayIndentGuides = function (e) {\n this.renderer.setDisplayIndentGuides(e);\n }, x.prototype.getDisplayIndentGuides = function () {\n return this.renderer.getDisplayIndentGuides();\n }, x.prototype.setHighlightIndentGuides = function (e) {\n this.renderer.setHighlightIndentGuides(e);\n }, x.prototype.getHighlightIndentGuides = function () {\n return this.renderer.getHighlightIndentGuides();\n }, x.prototype.setShowPrintMargin = function (e) {\n this.renderer.setShowPrintMargin(e);\n }, x.prototype.getShowPrintMargin = function () {\n return this.renderer.getShowPrintMargin();\n }, x.prototype.setPrintMarginColumn = function (e) {\n this.renderer.setPrintMarginColumn(e);\n }, x.prototype.getPrintMarginColumn = function () {\n return this.renderer.getPrintMarginColumn();\n }, x.prototype.setReadOnly = function (e) {\n this.setOption(\"readOnly\", e);\n }, x.prototype.getReadOnly = function () {\n return this.getOption(\"readOnly\");\n }, x.prototype.setBehavioursEnabled = function (e) {\n this.setOption(\"behavioursEnabled\", e);\n }, x.prototype.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n }, x.prototype.setWrapBehavioursEnabled = function (e) {\n this.setOption(\"wrapBehavioursEnabled\", e);\n }, x.prototype.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n }, x.prototype.setShowFoldWidgets = function (e) {\n this.setOption(\"showFoldWidgets\", e);\n }, x.prototype.getShowFoldWidgets = function () {\n return this.getOption(\"showFoldWidgets\");\n }, x.prototype.setFadeFoldWidgets = function (e) {\n this.setOption(\"fadeFoldWidgets\", e);\n }, x.prototype.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n }, x.prototype.remove = function (e) {\n this.selection.isEmpty() && (\"left\" == e ? this.selection.selectLeft() : this.selection.selectRight());\n var t,\n n,\n i,\n e = this.getSelectionRange();\n this.getBehavioursEnabled() && (n = (t = this.session).getState(e.start.row), n = t.getMode().transformAction(n, \"deletion\", this, t, e), 0 === e.end.column && \"\\n\" == (i = t.getTextRange(e))[i.length - 1] && (i = t.getLine(e.end.row), /^\\s+$/.test(i)) && (e.end.column = i.length), n) && (e = n), this.session.remove(e), this.clearSelection();\n }, x.prototype.removeWordRight = function () {\n this.selection.isEmpty() && this.selection.selectWordRight(), this.session.remove(this.getSelectionRange()), this.clearSelection();\n }, x.prototype.removeWordLeft = function () {\n this.selection.isEmpty() && this.selection.selectWordLeft(), this.session.remove(this.getSelectionRange()), this.clearSelection();\n }, x.prototype.removeToLineStart = function () {\n this.selection.isEmpty() && this.selection.selectLineStart(), this.selection.isEmpty() && this.selection.selectLeft(), this.session.remove(this.getSelectionRange()), this.clearSelection();\n }, x.prototype.removeToLineEnd = function () {\n this.selection.isEmpty() && this.selection.selectLineEnd();\n var e = this.getSelectionRange();\n e.start.column == e.end.column && e.start.row == e.end.row && (e.end.column = 0, e.end.row++), this.session.remove(e), this.clearSelection();\n }, x.prototype.splitLine = function () {\n this.selection.isEmpty() || (this.session.remove(this.getSelectionRange()), this.clearSelection());\n var e = this.getCursorPosition();\n this.insert(\"\\n\"), this.moveCursorToPosition(e);\n }, x.prototype.setGhostText = function (e, t) {\n this.session.widgetManager || (this.session.widgetManager = new I(this.session), this.session.widgetManager.attach(this)), this.renderer.setGhostText(e, t);\n }, x.prototype.removeGhostText = function () {\n this.session.widgetManager && this.renderer.removeGhostText();\n }, x.prototype.transposeLetters = function () {\n var e, t, n, i;\n this.selection.isEmpty() && 0 !== (t = (e = this.getCursorPosition()).column) && (i = t < (i = this.session.getLine(e.row)).length ? (n = i.charAt(t) + i.charAt(t - 1), new f(e.row, t - 1, e.row, t + 1)) : (n = i.charAt(t - 1) + i.charAt(t - 2), new f(e.row, t - 2, e.row, t)), this.session.replace(i, n), this.session.selection.moveToPosition(i.end));\n }, x.prototype.toLowerCase = function () {\n var e = this.getSelectionRange(),\n t = (this.selection.isEmpty() && this.selection.selectWord(), this.getSelectionRange()),\n n = this.session.getTextRange(t);\n this.session.replace(t, n.toLowerCase()), this.selection.setSelectionRange(e);\n }, x.prototype.toUpperCase = function () {\n var e = this.getSelectionRange(),\n t = (this.selection.isEmpty() && this.selection.selectWord(), this.getSelectionRange()),\n n = this.session.getTextRange(t);\n this.session.replace(t, n.toUpperCase()), this.selection.setSelectionRange(e);\n }, x.prototype.indent = function () {\n var e = this.session,\n t = this.getSelectionRange();\n if (!(t.start.row < t.end.row)) {\n if (t.start.column < t.end.column) {\n var n,\n i = e.getTextRange(t);\n if (!/^\\s+$/.test(i)) return n = this.$getSelectedRows(), void e.indentRows(n.first, n.last, \"\\t\");\n }\n var o = e.getLine(t.start.row),\n i = t.start,\n r = e.getTabSize(),\n i = e.documentToScreenColumn(i.row, i.column);\n if (this.session.getUseSoftTabs()) var s = r - i % r,\n a = m.stringRepeat(\" \", s);else {\n for (s = i % r; \" \" == o[t.start.column - 1] && s;) t.start.column--, s--;\n this.selection.setSelectionRange(t), a = \"\\t\";\n }\n return this.insert(a);\n }\n n = this.$getSelectedRows(), e.indentRows(n.first, n.last, \"\\t\");\n }, x.prototype.blockIndent = function () {\n var e = this.$getSelectedRows();\n this.session.indentRows(e.first, e.last, \"\\t\");\n }, x.prototype.blockOutdent = function () {\n var e = this.session.getSelection();\n this.session.outdentRows(e.getRange());\n }, x.prototype.sortLines = function () {\n for (var e = this.$getSelectedRows(), t = this.session, n = [], i = e.first; i <= e.last; i++) n.push(t.getLine(i));\n n.sort(function (e, t) {\n return e.toLowerCase() < t.toLowerCase() ? -1 : e.toLowerCase() > t.toLowerCase() ? 1 : 0;\n });\n for (var o = new f(0, 0, 0, 0), i = e.first; i <= e.last; i++) {\n var r = t.getLine(i);\n o.start.row = i, o.end.row = i, o.end.column = r.length, t.replace(o, n[i - e.first]);\n }\n }, x.prototype.toggleCommentLines = function () {\n var e = this.session.getState(this.getCursorPosition().row),\n t = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(e, this.session, t.first, t.last);\n }, x.prototype.toggleBlockComment = function () {\n var e = this.getCursorPosition(),\n t = this.session.getState(e.row),\n n = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(t, this.session, n, e);\n }, x.prototype.getNumberAt = function (e, t) {\n for (var n = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g, i = (n.lastIndex = 0, this.session.getLine(e)); n.lastIndex < t;) {\n var o = n.exec(i);\n if (o.index <= t && o.index + o[0].length >= t) return {\n value: o[0],\n start: o.index,\n end: o.index + o[0].length\n };\n }\n return null;\n }, x.prototype.modifyNumber = function (e) {\n var t,\n n,\n i,\n o = this.selection.getCursor().row,\n r = this.selection.getCursor().column,\n s = new f(o, r - 1, o, r),\n s = this.session.getTextRange(s);\n !isNaN(parseFloat(s)) && isFinite(s) ? (s = this.getNumberAt(o, r)) && (i = 0 <= s.value.indexOf(\".\") ? s.start + s.value.indexOf(\".\") + 1 : s.end, t = s.start + s.value.length - i, n = parseFloat(s.value), n *= Math.pow(10, t), i !== s.end && r < i ? e *= Math.pow(10, s.end - r - 1) : e *= Math.pow(10, s.end - r), i = (n = (n += e) / Math.pow(10, t)).toFixed(t), e = new f(o, s.start, o, s.end), this.session.replace(e, i), this.moveCursorTo(o, Math.max(s.start + 1, r + i.length - s.value.length))) : this.toggleWord();\n }, x.prototype.toggleWord = function () {\n for (var n, i = this.selection.getCursor().row, e = this.selection.getCursor().column, o = (this.selection.selectWord(), this.getSelectedText()), r = this.selection.getWordRange().start.column, t = o.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, \"$1 \").split(/\\s/), s = e - r - 1, a = (s < 0 && (s = 0), 0), l = this, c = (o.match(/[A-Za-z0-9_]+/) && t.forEach(function (e, t) {\n n = a + e.length, a <= s && s <= n && (o = e, l.selection.clearSelection(), l.moveCursorTo(i, a + r), l.selection.selectTo(i, n + r)), a = n;\n }), this.$toggleWordPairs), h = 0; h < c.length; h++) for (var d = c[h], u = 0; u <= 1; u++) {\n var g = +!u,\n p = o.match(new RegExp(\"^\\\\s?_?(\" + m.escapeRegExp(d[u]) + \")\\\\s?$\", \"i\"));\n p && o.match(new RegExp(\"([_]|^|\\\\s)(\" + m.escapeRegExp(p[1]) + \")($|\\\\s)\", \"g\")) && (p = o.replace(new RegExp(m.escapeRegExp(d[u]), \"i\"), function (e) {\n var t = d[g];\n return e.toUpperCase() == e ? t = t.toUpperCase() : e.charAt(0).toUpperCase() == e.charAt(0) && (t = t.substr(0, 0) + d[g].charAt(0).toUpperCase() + t.substr(1)), t;\n }), this.insert(p));\n }\n }, x.prototype.findLinkAt = function (e, t) {\n var n,\n i,\n o,\n e = this.session.getLine(e).split(/((?:https?|ftp):\\/\\/[\\S]+)/),\n r = t,\n s = (r < 0 && (r = 0), 0);\n try {\n for (var a = d(e), l = a.next(); !l.done; l = a.next()) {\n var c = l.value,\n h = s + c.length;\n if (s <= r && r <= h && c.match(/((?:https?|ftp):\\/\\/[\\S]+)/)) {\n o = c.replace(/[\\s:.,'\";}\\]]+$/, \"\");\n break;\n }\n s = h;\n }\n } catch (e) {\n n = {\n error: e\n };\n } finally {\n try {\n l && !l.done && (i = a.return) && i.call(a);\n } finally {\n if (n) throw n.error;\n }\n }\n return o;\n }, x.prototype.openLink = function () {\n var e = this.selection.getCursor(),\n e = this.findLinkAt(e.row, e.column);\n return e && window.open(e, \"_blank\"), null != e;\n }, x.prototype.removeLines = function () {\n var e = this.$getSelectedRows();\n this.session.removeFullLines(e.first, e.last), this.clearSelection();\n }, x.prototype.duplicateSelection = function () {\n var e,\n t = this.selection,\n n = this.session,\n i = t.getRange(),\n o = t.isBackwards();\n i.isEmpty() ? (e = i.start.row, n.duplicateLines(e, e)) : (e = o ? i.start : i.end, n = n.insert(e, n.getTextRange(i), !1), i.start = e, i.end = n, t.setSelectionRange(i, o));\n }, x.prototype.moveLinesDown = function () {\n this.$moveLines(1, !1);\n }, x.prototype.moveLinesUp = function () {\n this.$moveLines(-1, !1);\n }, x.prototype.moveText = function (e, t, n) {\n return this.session.moveText(e, t, n);\n }, x.prototype.copyLinesUp = function () {\n this.$moveLines(-1, !0);\n }, x.prototype.copyLinesDown = function () {\n this.$moveLines(1, !0);\n }, x.prototype.$moveLines = function (e, t) {\n var n = this.selection;\n if (!n.inMultiSelectMode || this.inVirtualSelectionMode) {\n var i = n.toOrientedRange(),\n o = this.$getSelectedRows(i),\n r = this.session.$moveLines(o.first, o.last, t ? 0 : e);\n i.moveBy(r = t && -1 == e ? 0 : r, 0), n.fromOrientedRange(i);\n } else {\n for (var s = n.rangeList.ranges, a = (n.rangeList.detach(this.session), this.inVirtualSelectionMode = !0, 0), l = 0, c = s.length, h = 0; h < c; h++) {\n for (var d = h, u = (s[h].moveBy(a, 0), (o = this.$getSelectedRows(s[h])).first), g = o.last; ++h < c;) {\n l && s[h].moveBy(l, 0);\n var p = this.$getSelectedRows(s[h]);\n if (t && p.first != g) break;\n if (!t && p.first > g + 1) break;\n g = p.last;\n }\n for (h--, a = this.session.$moveLines(u, g, t ? 0 : e), t && -1 == e && (d = h + 1); d <= h;) s[d].moveBy(a, 0), d++;\n l += a = t ? a : 0;\n }\n n.fromOrientedRange(n.ranges[0]), n.rangeList.attach(this.session), this.inVirtualSelectionMode = !1;\n }\n }, x.prototype.$getSelectedRows = function (e) {\n return e = (e || this.getSelectionRange()).collapseRows(), {\n first: this.session.getRowFoldStart(e.start.row),\n last: this.session.getRowFoldEnd(e.end.row)\n };\n }, x.prototype.onCompositionStart = function (e) {\n this.renderer.showComposition(e);\n }, x.prototype.onCompositionUpdate = function (e) {\n this.renderer.setCompositionText(e);\n }, x.prototype.onCompositionEnd = function () {\n this.renderer.hideComposition();\n }, x.prototype.getFirstVisibleRow = function () {\n return this.renderer.getFirstVisibleRow();\n }, x.prototype.getLastVisibleRow = function () {\n return this.renderer.getLastVisibleRow();\n }, x.prototype.isRowVisible = function (e) {\n return e >= this.getFirstVisibleRow() && e <= this.getLastVisibleRow();\n }, x.prototype.isRowFullyVisible = function (e) {\n return e >= this.renderer.getFirstFullyVisibleRow() && e <= this.renderer.getLastFullyVisibleRow();\n }, x.prototype.$getVisibleRowCount = function () {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n }, x.prototype.$moveByPage = function (e, t) {\n var n = this.renderer,\n i = this.renderer.layerConfig,\n o = e * Math.floor(i.height / i.lineHeight),\n e = (!0 === t ? this.selection.$moveSelection(function () {\n this.moveCursorBy(o, 0);\n }) : !1 === t && (this.selection.moveCursorBy(o, 0), this.selection.clearSelection()), n.scrollTop);\n n.scrollBy(0, o * i.lineHeight), null != t && n.scrollCursorIntoView(null, .5), n.animateScrolling(e);\n }, x.prototype.selectPageDown = function () {\n this.$moveByPage(1, !0);\n }, x.prototype.selectPageUp = function () {\n this.$moveByPage(-1, !0);\n }, x.prototype.gotoPageDown = function () {\n this.$moveByPage(1, !1);\n }, x.prototype.gotoPageUp = function () {\n this.$moveByPage(-1, !1);\n }, x.prototype.scrollPageDown = function () {\n this.$moveByPage(1);\n }, x.prototype.scrollPageUp = function () {\n this.$moveByPage(-1);\n }, x.prototype.scrollToRow = function (e) {\n this.renderer.scrollToRow(e);\n }, x.prototype.scrollToLine = function (e, t, n, i) {\n this.renderer.scrollToLine(e, t, n, i);\n }, x.prototype.centerSelection = function () {\n var e = this.getSelectionRange(),\n e = {\n row: Math.floor(e.start.row + (e.end.row - e.start.row) / 2),\n column: Math.floor(e.start.column + (e.end.column - e.start.column) / 2)\n };\n this.renderer.alignCursor(e, .5);\n }, x.prototype.getCursorPosition = function () {\n return this.selection.getCursor();\n }, x.prototype.getCursorPositionScreen = function () {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n }, x.prototype.getSelectionRange = function () {\n return this.selection.getRange();\n }, x.prototype.selectAll = function () {\n this.selection.selectAll();\n }, x.prototype.clearSelection = function () {\n this.selection.clearSelection();\n }, x.prototype.moveCursorTo = function (e, t) {\n this.selection.moveCursorTo(e, t);\n }, x.prototype.moveCursorToPosition = function (e) {\n this.selection.moveCursorToPosition(e);\n }, x.prototype.jumpToMatching = function (e, t) {\n var n = this.getCursorPosition(),\n i = new v(this.session, n.row, n.column),\n o = i.getCurrentToken(),\n r = 0,\n s = (o = o && -1 !== o.type.indexOf(\"tag-name\") ? i.stepBackward() : o) || i.stepForward();\n if (s) {\n var a,\n l,\n c = !1,\n h = {},\n d = n.column - s.start,\n u = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n do {\n if (s.value.match(/[{}()\\[\\]]/g)) {\n for (; d < s.value.length && !c; d++) if (u[s.value[d]]) switch (l = u[s.value[d]] + \".\" + s.type.replace(\"rparen\", \"lparen\"), isNaN(h[l]) && (h[l] = 0), s.value[d]) {\n case \"(\":\n case \"[\":\n case \"{\":\n h[l]++;\n break;\n case \")\":\n case \"]\":\n case \"}\":\n h[l]--, -1 === h[l] && (a = \"bracket\", c = !0);\n }\n } else -1 !== s.type.indexOf(\"tag-name\") && (isNaN(h[s.value]) && (h[s.value] = 0), \"<\" === o.value && 1 < r ? h[s.value]++ : \"\" === o.value && h[s.value]--, -1 === h[s.value]) && (a = \"tag\", c = !0);\n } while ((c || (o = s, r++, s = i.stepForward(), d = 0), s && !c));\n if (a) {\n if (\"bracket\" === a) !(p = this.session.getBracketRange(n)) && (m = (p = new f(i.getCurrentTokenRow(), i.getCurrentTokenColumn() + d - 1, i.getCurrentTokenRow(), i.getCurrentTokenColumn() + d - 1)).start, t || m.row === n.row && Math.abs(m.column - n.column) < 2) && (p = this.session.getBracketRange(m));else if (\"tag\" === a) {\n if (!s || -1 === s.type.indexOf(\"tag-name\")) return;\n var g,\n p,\n m = (m = 0 === (p = new f(i.getCurrentTokenRow(), i.getCurrentTokenColumn() - 2, i.getCurrentTokenRow(), i.getCurrentTokenColumn() - 2)).compare(n.row, n.column) && (g = this.session.getMatchingTags(n)) ? g.openTag.contains(n.row, n.column) ? (p = g.closeTag).start : (p = g.openTag, g.closeTag.start.row === n.row && g.closeTag.start.column === n.column ? p.end : p.start) : m) || p.start;\n }\n (m = p && p.cursor || m) && (e ? p && t ? this.selection.setRange(p) : p && p.isEqual(this.getSelectionRange()) ? this.clearSelection() : this.selection.selectTo(m.row, m.column) : this.selection.moveTo(m.row, m.column));\n }\n }\n }, x.prototype.gotoLine = function (e, t, n) {\n this.selection.clearSelection(), this.session.unfold({\n row: e - 1,\n column: t || 0\n }), this.exitMultiSelectMode && this.exitMultiSelectMode(), this.moveCursorTo(e - 1, t || 0), this.isRowFullyVisible(e - 1) || this.scrollToLine(e - 1, !0, n);\n }, x.prototype.navigateTo = function (e, t) {\n this.selection.moveTo(e, t);\n }, x.prototype.navigateUp = function (e) {\n var t;\n if (this.selection.isMultiLine() && !this.selection.isBackwards()) return t = this.selection.anchor.getPosition(), this.moveCursorToPosition(t);\n this.selection.clearSelection(), this.selection.moveCursorBy(-e || -1, 0);\n }, x.prototype.navigateDown = function (e) {\n var t;\n if (this.selection.isMultiLine() && this.selection.isBackwards()) return t = this.selection.anchor.getPosition(), this.moveCursorToPosition(t);\n this.selection.clearSelection(), this.selection.moveCursorBy(e || 1, 0);\n }, x.prototype.navigateLeft = function (e) {\n if (this.selection.isEmpty()) for (e = e || 1; e--;) this.selection.moveCursorLeft();else {\n var t = this.getSelectionRange().start;\n this.moveCursorToPosition(t);\n }\n this.clearSelection();\n }, x.prototype.navigateRight = function (e) {\n if (this.selection.isEmpty()) for (e = e || 1; e--;) this.selection.moveCursorRight();else {\n var t = this.getSelectionRange().end;\n this.moveCursorToPosition(t);\n }\n this.clearSelection();\n }, x.prototype.navigateLineStart = function () {\n this.selection.moveCursorLineStart(), this.clearSelection();\n }, x.prototype.navigateLineEnd = function () {\n this.selection.moveCursorLineEnd(), this.clearSelection();\n }, x.prototype.navigateFileEnd = function () {\n this.selection.moveCursorFileEnd(), this.clearSelection();\n }, x.prototype.navigateFileStart = function () {\n this.selection.moveCursorFileStart(), this.clearSelection();\n }, x.prototype.navigateWordRight = function () {\n this.selection.moveCursorWordRight(), this.clearSelection();\n }, x.prototype.navigateWordLeft = function () {\n this.selection.moveCursorWordLeft(), this.clearSelection();\n }, x.prototype.replace = function (e, t) {\n t && this.$search.set(t);\n var t = this.$search.find(this.session),\n n = 0;\n return t && (this.$tryReplace(t, e) && (n = 1), this.selection.setSelectionRange(t), this.renderer.scrollSelectionIntoView(t.start, t.end)), n;\n }, x.prototype.replaceAll = function (e, t) {\n t && this.$search.set(t);\n var n = this.$search.findAll(this.session),\n i = 0;\n if (n.length) {\n t = this.getSelectionRange();\n this.selection.moveTo(0, 0);\n for (var o = n.length - 1; 0 <= o; --o) this.$tryReplace(n[o], e) && i++;\n this.selection.setSelectionRange(t);\n }\n return i;\n }, x.prototype.$tryReplace = function (e, t) {\n var n = this.session.getTextRange(e);\n return null !== (t = this.$search.replace(n, t)) ? (e.end = this.session.replace(e, t), e) : null;\n }, x.prototype.getLastSearchOptions = function () {\n return this.$search.getOptions();\n }, x.prototype.find = function (e, t, n) {\n t = t || {}, \"string\" == typeof e || e instanceof RegExp ? t.needle = e : \"object\" == typeof e && o.mixin(t, e);\n var i = this.selection.getRange(),\n e = (null == t.needle && ((e = this.session.getTextRange(i) || this.$search.$options.needle) || (i = this.session.getWordRange(i.start.row, i.start.column), e = this.session.getTextRange(i)), this.$search.set({\n needle: e\n })), this.$search.set(t), t.start || this.$search.set({\n start: i\n }), this.$search.find(this.session));\n return t.preventScroll ? e : e ? (this.revealRange(e, n), e) : (t.backwards ? i.start = i.end : i.end = i.start, void this.selection.setRange(i));\n }, x.prototype.findNext = function (e, t) {\n this.find({\n skipCurrent: !0,\n backwards: !1\n }, e, t);\n }, x.prototype.findPrevious = function (e, t) {\n this.find(e, {\n skipCurrent: !0,\n backwards: !0\n }, t);\n }, x.prototype.revealRange = function (e, t) {\n this.session.unfold(e), this.selection.setSelectionRange(e);\n var n = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(e.start, e.end, .5), !1 !== t && this.renderer.animateScrolling(n);\n }, x.prototype.undo = function () {\n this.session.getUndoManager().undo(this.session), this.renderer.scrollCursorIntoView(null, .5);\n }, x.prototype.redo = function () {\n this.session.getUndoManager().redo(this.session), this.renderer.scrollCursorIntoView(null, .5);\n }, x.prototype.destroy = function () {\n this.$toDestroy && (this.$toDestroy.forEach(function (e) {\n e.destroy();\n }), this.$toDestroy = null), this.$mouseHandler && this.$mouseHandler.destroy(), this.renderer.destroy(), this._signal(\"destroy\", this), this.session && this.session.destroy(), this._$emitInputEvent && this._$emitInputEvent.cancel(), this.removeAllListeners();\n }, x.prototype.setAutoScrollEditorIntoView = function (e) {\n var i, o, r, s, t, n, a;\n e && (r = !1, (o = this).$scrollAnchor || (this.$scrollAnchor = document.createElement(\"div\")), (s = this.$scrollAnchor).style.cssText = \"position:absolute\", this.container.insertBefore(s, this.container.firstChild), t = this.on(\"changeSelection\", function () {\n r = !0;\n }), n = this.renderer.on(\"beforeRender\", function () {\n r && (i = o.renderer.container.getBoundingClientRect());\n }), a = this.renderer.on(\"afterRender\", function () {\n var e, t, n;\n r && i && (o.isFocused() || o.searchBox && o.searchBox.isFocused()) && (e = (t = o.renderer).$cursorLayer.$pixelPos, t = t.layerConfig, n = e.top - t.offset, null != (r = 0 <= e.top && n + i.top < 0 || !(e.top < t.height && e.top + i.top + t.lineHeight > window.innerHeight) && null) && (s.style.top = n + \"px\", s.style.left = e.left + \"px\", s.style.height = t.lineHeight + \"px\", s.scrollIntoView(r)), r = i = null);\n }), this.setAutoScrollEditorIntoView = function (e) {\n e || (delete this.setAutoScrollEditorIntoView, this.off(\"changeSelection\", t), this.renderer.off(\"afterRender\", a), this.renderer.off(\"beforeRender\", n));\n });\n }, x.prototype.$resetCursorStyle = function () {\n var e = this.$cursorStyle || \"ace\",\n t = this.renderer.$cursorLayer;\n t && (t.setSmoothBlinking(/smooth/.test(e)), t.isBlinking = !this.$readOnly && \"wide\" != e, i.setCssClass(t.element, \"ace_slim-cursors\", /slim/.test(e)));\n }, x.prototype.prompt = function (t, n, i) {\n var o = this;\n y.loadModule(\"ace/ext/prompt\", function (e) {\n e.prompt(o, t, n, i);\n });\n }, x);\n function x(e, t, n) {\n this.$toDestroy = [];\n var i = e.getContainerElement();\n this.container = i, this.renderer = e, this.id = \"editor\" + ++x.$uid, this.commands = new p(r.isMac ? \"mac\" : \"win\", C), \"object\" == typeof document && (this.textInput = new s(e.getTextAreaContainer(), this), this.renderer.textarea = this.textInput.getElement(), this.$mouseHandler = new a(this), new l(this)), this.keyBinding = new c(this), this.$search = new u().set({\n wrap: !0\n }), this.$historyTracker = this.$historyTracker.bind(this), this.commands.on(\"exec\", this.$historyTracker), this.$initOperationListeners(), this._$emitInputEvent = m.delayedCall(function () {\n this._signal(\"input\", {}), this.session && !this.session.destroyed && this.session.bgTokenizer.scheduleStart();\n }.bind(this)), this.on(\"change\", function (e, t) {\n t._$emitInputEvent.schedule(31);\n }), this.setSession(t || n && n.session || new h(\"\")), y.resetOptions(this), n && this.setOptions(n), y._signal(\"editor\", this);\n }\n e.$uid = 0, e.prototype.curOp = null, e.prototype.prevOp = {}, e.prototype.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"], e.prototype.$toggleWordPairs = [[\"first\", \"last\"], [\"true\", \"false\"], [\"yes\", \"no\"], [\"width\", \"height\"], [\"top\", \"bottom\"], [\"right\", \"left\"], [\"on\", \"off\"], [\"x\", \"y\"], [\"get\", \"set\"], [\"max\", \"min\"], [\"horizontal\", \"vertical\"], [\"show\", \"hide\"], [\"add\", \"remove\"], [\"up\", \"down\"], [\"before\", \"after\"], [\"even\", \"odd\"], [\"in\", \"out\"], [\"inside\", \"outside\"], [\"next\", \"previous\"], [\"increase\", \"decrease\"], [\"attach\", \"detach\"], [\"&&\", \"||\"], [\"==\", \"!=\"]], o.implement(e.prototype, g), y.defineOptions(e.prototype, \"editor\", {\n selectionStyle: {\n set: function (e) {\n this.onSelectionChange(), this._signal(\"changeSelectionStyle\", {\n data: e\n });\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function () {\n this.$updateHighlightActiveLine();\n },\n initialValue: !0\n },\n highlightSelectedWord: {\n set: function (e) {\n this.$onSelectionChange();\n },\n initialValue: !0\n },\n readOnly: {\n set: function (e) {\n this.textInput.setReadOnly(e), this.$resetCursorStyle();\n },\n initialValue: !1\n },\n copyWithEmptySelection: {\n set: function (e) {\n this.textInput.setCopyWithEmptySelection(e);\n },\n initialValue: !1\n },\n cursorStyle: {\n set: function (e) {\n this.$resetCursorStyle();\n },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [!1, !0, \"always\"],\n initialValue: !0\n },\n behavioursEnabled: {\n initialValue: !0\n },\n wrapBehavioursEnabled: {\n initialValue: !0\n },\n enableAutoIndent: {\n initialValue: !0\n },\n autoScrollEditorIntoView: {\n set: function (e) {\n this.setAutoScrollEditorIntoView(e);\n }\n },\n keyboardHandler: {\n set: function (e) {\n this.setKeyboardHandler(e);\n },\n get: function () {\n return this.$keybindingId;\n },\n handlesSet: !0\n },\n value: {\n set: function (e) {\n this.session.setValue(e);\n },\n get: function () {\n return this.getValue();\n },\n handlesSet: !0,\n hidden: !0\n },\n session: {\n set: function (e) {\n this.setSession(e);\n },\n get: function () {\n return this.session;\n },\n handlesSet: !0,\n hidden: !0\n },\n showLineNumbers: {\n set: function (e) {\n this.renderer.$gutterLayer.setShowLineNumbers(e), this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER), e && this.$relativeLineNumbers ? k.attach(this) : k.detach(this);\n },\n initialValue: !0\n },\n relativeLineNumbers: {\n set: function (e) {\n this.$showLineNumbers && e ? k.attach(this) : k.detach(this);\n }\n },\n placeholder: {\n set: function (e) {\n this.$updatePlaceholder || (this.$updatePlaceholder = function () {\n var e = this.session && (this.renderer.$composition || 1 < this.session.getLength() || 0 < this.session.getLine(0).length);\n e && this.renderer.placeholderNode ? (this.renderer.off(\"afterRender\", this.$updatePlaceholder), i.removeCssClass(this.container, \"ace_hasPlaceholder\"), this.renderer.placeholderNode.remove(), this.renderer.placeholderNode = null) : e || this.renderer.placeholderNode ? !e && this.renderer.placeholderNode && (this.renderer.placeholderNode.textContent = this.$placeholder || \"\") : (this.renderer.on(\"afterRender\", this.$updatePlaceholder), i.addCssClass(this.container, \"ace_hasPlaceholder\"), (e = i.createElement(\"div\")).className = \"ace_placeholder\", e.textContent = this.$placeholder || \"\", this.renderer.placeholderNode = e, this.renderer.content.appendChild(this.renderer.placeholderNode));\n }.bind(this), this.on(\"input\", this.$updatePlaceholder)), this.$updatePlaceholder();\n }\n },\n enableKeyboardAccessibility: {\n set: function (e) {\n function t(e) {\n e.target == this.renderer.scroller && e.keyCode === S.enter && (e.preventDefault(), e = this.getCursorPosition().row, this.isRowVisible(e) || this.scrollToLine(e, !0, !0), this.focus());\n }\n var n,\n i = {\n name: \"blurTextInput\",\n description: \"Set focus to the editor content div to allow tabbing through the page\",\n bindKey: \"Esc\",\n exec: function (e) {\n e.blur(), e.renderer.scroller.focus();\n },\n readOnly: !0\n };\n e ? (this.renderer.enableKeyboardAccessibility = !0, this.renderer.keyboardFocusClassName = \"ace_keyboard-focus\", this.textInput.getElement().setAttribute(\"tabindex\", -1), this.textInput.setNumberOfExtraLines(r.isWin ? 3 : 0), this.renderer.scroller.setAttribute(\"tabindex\", 0), this.renderer.scroller.setAttribute(\"role\", \"group\"), this.renderer.scroller.setAttribute(\"aria-roledescription\", A(\"editor\")), this.renderer.scroller.classList.add(this.renderer.keyboardFocusClassName), this.renderer.scroller.setAttribute(\"aria-label\", A(\"Editor content, press Enter to start editing, press Escape to exit\")), this.renderer.scroller.addEventListener(\"keyup\", t.bind(this)), this.commands.addCommand(i), this.renderer.$gutter.setAttribute(\"tabindex\", 0), this.renderer.$gutter.setAttribute(\"aria-hidden\", !1), this.renderer.$gutter.setAttribute(\"role\", \"group\"), this.renderer.$gutter.setAttribute(\"aria-roledescription\", A(\"editor\")), this.renderer.$gutter.setAttribute(\"aria-label\", A(\"Editor gutter, press Enter to interact with controls using arrow keys, press Escape to exit\")), this.renderer.$gutter.classList.add(this.renderer.keyboardFocusClassName), this.renderer.content.setAttribute(\"aria-hidden\", !0), (n = n || new b(this)).addListener()) : (this.renderer.enableKeyboardAccessibility = !1, this.textInput.getElement().setAttribute(\"tabindex\", 0), this.textInput.setNumberOfExtraLines(0), this.renderer.scroller.setAttribute(\"tabindex\", -1), this.renderer.scroller.removeAttribute(\"role\"), this.renderer.scroller.removeAttribute(\"aria-roledescription\"), this.renderer.scroller.classList.remove(this.renderer.keyboardFocusClassName), this.renderer.scroller.removeAttribute(\"aria-label\"), this.renderer.scroller.removeEventListener(\"keyup\", t.bind(this)), this.commands.removeCommand(i), this.renderer.content.removeAttribute(\"aria-hidden\"), this.renderer.$gutter.setAttribute(\"tabindex\", -1), this.renderer.$gutter.setAttribute(\"aria-hidden\", !0), this.renderer.$gutter.removeAttribute(\"role\"), this.renderer.$gutter.removeAttribute(\"aria-roledescription\"), this.renderer.$gutter.removeAttribute(\"aria-label\"), this.renderer.$gutter.classList.remove(this.renderer.keyboardFocusClassName), n && n.removeListener());\n },\n initialValue: !1\n },\n customScrollbar: \"renderer\",\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n displayIndentGuides: \"renderer\",\n highlightIndentGuides: \"renderer\",\n showGutter: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n hasCssTransforms: \"renderer\",\n maxPixelHeight: \"renderer\",\n useTextareaForIME: \"renderer\",\n useResizeObserver: \"renderer\",\n useSvgGutterIcons: \"renderer\",\n showFoldedAnnotations: \"renderer\",\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimeout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n navigateWithinSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n });\n var k = {\n getText: function (e, t) {\n return (Math.abs(e.selection.lead.row - t) || t + 1 + (t < 9 ? \"·\" : \"\")) + \"\";\n },\n getWidth: function (e, t, n) {\n return Math.max(t.toString().length, (n.lastRow + 1).toString().length, 2) * n.characterWidth;\n },\n update: function (e, t) {\n t.renderer.$loop.schedule(t.renderer.CHANGE_GUTTER);\n },\n attach: function (e) {\n e.renderer.$gutterLayer.$renderer = this, e.on(\"changeSelection\", this.update), this.update(null, e);\n },\n detach: function (e) {\n e.renderer.$gutterLayer.$renderer == this && (e.renderer.$gutterLayer.$renderer = null), e.off(\"changeSelection\", this.update), this.update(null, e);\n }\n };\n t.Editor = e;\n }), ace.define(\"ace/layer/lines\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (e, t, n) {\n \"use strict\";\n\n var s = e(\"../lib/dom\");\n function i(e, t) {\n this.element = e, this.canvasHeight = t || 5e5, this.element.style.height = 2 * this.canvasHeight + \"px\", this.cells = [], this.cellCache = [], this.$offsetCoefficient = 0;\n }\n i.prototype.moveContainer = function (e) {\n s.translate(this.element, 0, -(e.firstRowScreen * e.lineHeight % this.canvasHeight) - e.offset * this.$offsetCoefficient);\n }, i.prototype.pageChanged = function (e, t) {\n return Math.floor(e.firstRowScreen * e.lineHeight / this.canvasHeight) !== Math.floor(t.firstRowScreen * t.lineHeight / this.canvasHeight);\n }, i.prototype.computeLineTop = function (e, t, n) {\n var i = t.firstRowScreen * t.lineHeight,\n i = Math.floor(i / this.canvasHeight);\n return n.documentToScreenRow(e, 0) * t.lineHeight - i * this.canvasHeight;\n }, i.prototype.computeLineHeight = function (e, t, n) {\n return t.lineHeight * n.getRowLineCount(e);\n }, i.prototype.getLength = function () {\n return this.cells.length;\n }, i.prototype.get = function (e) {\n return this.cells[e];\n }, i.prototype.shift = function () {\n this.$cacheCell(this.cells.shift());\n }, i.prototype.pop = function () {\n this.$cacheCell(this.cells.pop());\n }, i.prototype.push = function (e) {\n if (Array.isArray(e)) {\n this.cells.push.apply(this.cells, e);\n for (var t = s.createFragment(this.element), n = 0; n < e.length; n++) t.appendChild(e[n].element);\n this.element.appendChild(t);\n } else this.cells.push(e), this.element.appendChild(e.element);\n }, i.prototype.unshift = function (e) {\n if (Array.isArray(e)) {\n this.cells.unshift.apply(this.cells, e);\n for (var t = s.createFragment(this.element), n = 0; n < e.length; n++) t.appendChild(e[n].element);\n this.element.firstChild ? this.element.insertBefore(t, this.element.firstChild) : this.element.appendChild(t);\n } else this.cells.unshift(e), this.element.insertAdjacentElement(\"afterbegin\", e.element);\n }, i.prototype.last = function () {\n return this.cells.length ? this.cells[this.cells.length - 1] : null;\n }, i.prototype.$cacheCell = function (e) {\n e && (e.element.remove(), this.cellCache.push(e));\n }, i.prototype.createCell = function (e, t, n, i) {\n var o,\n r = this.cellCache.pop();\n return r || (o = s.createElement(\"div\"), i && i(o), this.element.appendChild(o), r = {\n element: o,\n text: \"\",\n row: e\n }), r.row = e, r;\n }, t.Lines = i;\n }), ace.define(\"ace/layer/gutter\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/oop\", \"ace/lib/lang\", \"ace/lib/event_emitter\", \"ace/layer/lines\", \"ace/config\"], function (e, t, n) {\n \"use strict\";\n\n var w = e(\"../lib/dom\"),\n i = e(\"../lib/oop\"),\n s = e(\"../lib/lang\"),\n o = e(\"../lib/event_emitter\").EventEmitter,\n r = e(\"./lines\").Lines,\n S = e(\"../config\").nls,\n e = (a.prototype.setSession = function (e) {\n this.session && this.session.off(\"change\", this.$updateAnnotations), (this.session = e) && e.on(\"change\", this.$updateAnnotations);\n }, a.prototype.addGutterDecoration = function (e, t) {\n window.console && console.warn && console.warn(\"deprecated use session.addGutterDecoration\"), this.session.addGutterDecoration(e, t);\n }, a.prototype.removeGutterDecoration = function (e, t) {\n window.console && console.warn && console.warn(\"deprecated use session.removeGutterDecoration\"), this.session.removeGutterDecoration(e, t);\n }, a.prototype.setAnnotations = function (e) {\n this.$annotations = [];\n for (var t = 0; t < e.length; t++) {\n var n = e[t],\n i = n.row,\n o = (o = this.$annotations[i]) || (this.$annotations[i] = {\n text: [],\n type: []\n }),\n i = n.text,\n r = n.type,\n i = i ? s.escapeHTML(i) : n.html || \"\",\n i = (-1 === o.text.indexOf(i) && (o.text.push(i), o.type.push(r)), n.className);\n i ? o.className = i : \"error\" == r ? o.className = \" ace_error\" : \"warning\" == r && \" ace_error\" != o.className ? o.className = \" ace_warning\" : \"info\" != r || o.className || (o.className = \" ace_info\");\n }\n }, a.prototype.$updateAnnotations = function (e) {\n var t, n;\n this.$annotations.length && (t = e.start.row, 0 != (n = e.end.row - t)) && (\"remove\" == e.action ? this.$annotations.splice(t, 1 + n, null) : ((e = new Array(1 + n)).unshift(t, 1), this.$annotations.splice.apply(this.$annotations, e)));\n }, a.prototype.update = function (e) {\n this.config = e;\n for (var t = this.session, n = e.firstRow, i = Math.min(e.lastRow + e.gutterOffset, t.getLength() - 1), o = (this.oldLastRow = i, this.config = e, this.$lines.moveContainer(e), this.$updateCursorRow(), t.getNextFoldLine(n)), r = o ? o.start.row : 1 / 0, s = null, a = -1, l = n;;) {\n if (r < l && (l = o.end.row + 1, r = (o = t.getNextFoldLine(l, o)) ? o.start.row : 1 / 0), i < l) {\n for (; this.$lines.getLength() > a + 1;) this.$lines.pop();\n break;\n }\n (s = this.$lines.get(++a)) ? s.row = l : (s = this.$lines.createCell(l, e, this.session, c), this.$lines.push(s)), this.$renderCell(s, e, o, l), l++;\n }\n this._signal(\"afterRender\"), this.$updateGutterWidth(e);\n }, a.prototype.$updateGutterWidth = function (e) {\n var t = this.session,\n n = t.gutterRenderer || this.$renderer,\n i = t.$firstLineNumber,\n o = this.$lines.last() ? this.$lines.last().text : \"\",\n i = ((this.$fixedWidth || t.$useWrapMode) && (o = t.getLength() + i - 1), n ? n.getWidth(t, o, e) : o.toString().length * e.characterWidth),\n n = this.$padding || this.$computePadding();\n (i += n.left + n.right) === this.gutterWidth || isNaN(i) || (this.gutterWidth = i, this.element.parentNode.style.width = this.element.style.width = Math.ceil(this.gutterWidth) + \"px\", this._signal(\"changeGutterWidth\", i));\n }, a.prototype.$updateCursorRow = function () {\n var e;\n this.$highlightGutterLine && (e = this.session.selection.getCursor(), this.$cursorRow !== e.row) && (this.$cursorRow = e.row);\n }, a.prototype.updateLineHighlight = function () {\n if (this.$highlightGutterLine) {\n var e = this.session.selection.cursor.row;\n if (this.$cursorRow = e, !this.$cursorCell || this.$cursorCell.row != e) {\n this.$cursorCell && (this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\"));\n var t = this.$lines.cells;\n this.$cursorCell = null;\n for (var n = 0; n < t.length; n++) {\n var i = t[n];\n if (i.row >= this.$cursorRow) {\n if (i.row > this.$cursorRow) {\n var o = this.session.getFoldLine(this.$cursorRow);\n if (!(0 < n && o && o.start.row == t[n - 1].row)) break;\n i = t[n - 1];\n }\n i.element.className = \"ace_gutter-active-line \" + i.element.className, this.$cursorCell = i;\n break;\n }\n }\n }\n }\n }, a.prototype.scrollLines = function (e) {\n var t = this.config;\n if (this.config = e, this.$updateCursorRow(), this.$lines.pageChanged(t, e)) return this.update(e);\n this.$lines.moveContainer(e);\n var n = Math.min(e.lastRow + e.gutterOffset, this.session.getLength() - 1),\n i = this.oldLastRow;\n if (this.oldLastRow = n, !t || i < e.firstRow) return this.update(e);\n if (n < t.firstRow) return this.update(e);\n if (t.firstRow < e.firstRow) for (var o = this.session.getFoldedRowCount(t.firstRow, e.firstRow - 1); 0 < o; o--) this.$lines.shift();\n if (n < i) for (o = this.session.getFoldedRowCount(n + 1, i); 0 < o; o--) this.$lines.pop();\n e.firstRow < t.firstRow && this.$lines.unshift(this.$renderLines(e, e.firstRow, t.firstRow - 1)), i < n && this.$lines.push(this.$renderLines(e, i + 1, n)), this.updateLineHighlight(), this._signal(\"afterRender\"), this.$updateGutterWidth(e);\n }, a.prototype.$renderLines = function (e, t, n) {\n for (var i = [], o = t, r = this.session.getNextFoldLine(o), s = r ? r.start.row : 1 / 0; s < o && (o = r.end.row + 1, s = (r = this.session.getNextFoldLine(o, r)) ? r.start.row : 1 / 0), !(n < o);) {\n var a = this.$lines.createCell(o, e, this.session, c);\n this.$renderCell(a, e, r, o), i.push(a), o++;\n }\n return i;\n }, a.prototype.$renderCell = function (e, t, n, i) {\n var o,\n r = e.element,\n s = this.session,\n a = r.childNodes[0],\n l = r.childNodes[1],\n c = r.childNodes[2],\n h = c.firstChild,\n d = s.$firstLineNumber,\n u = s.$breakpoints,\n g = s.$decorations,\n p = s.gutterRenderer || this.$renderer,\n m = this.$showFoldWidgets && s.foldWidgets,\n f = n ? n.start.row : Number.MAX_VALUE,\n C = t.lineHeight + \"px\",\n y = this.$useSvgGutterIcons ? \"ace_gutter-cell_svg-icons \" : \"ace_gutter-cell \",\n v = this.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\",\n p = (p ? p.getText(s, i) : i + d).toString();\n if (this.$highlightGutterLine && (i == this.$cursorRow || n && i < this.$cursorRow && f <= i && this.$cursorRow <= n.end.row) && (y += \"ace_gutter-active-line \", this.$cursorCell != e) && (this.$cursorCell && (this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\")), this.$cursorCell = e), u[i] && (y += u[i]), g[i] && (y += g[i]), this.$annotations[i] && i !== f && (y += this.$annotations[i].className), o = m && null == (o = m[i]) ? m[i] = s.getFoldWidget(i) : o) {\n d = \"ace_fold-widget ace_\" + o, u = \"start\" == o && i == f && i < n.end.row;\n if (u) {\n d += \" ace_closed\";\n for (var I = \"\", b = !1, A = i + 1; A <= n.end.row; A++) if (this.$annotations[A]) {\n if (\" ace_error\" === this.$annotations[A].className) {\n b = !0, I = \" ace_error_fold\";\n break;\n }\n \" ace_warning\" === this.$annotations[A].className && (b = !0, I = \" ace_warning_fold\");\n }\n y += I;\n } else d += \" ace_open\";\n l.className != d && (l.className = d), w.setStyle(l.style, \"height\", C), w.setStyle(l.style, \"display\", \"inline-block\"), l.setAttribute(\"role\", \"button\"), l.setAttribute(\"tabindex\", \"-1\");\n g = s.getFoldWidgetRange(i);\n g ? l.setAttribute(\"aria-label\", S(\"Toggle code folding, rows $0 through $1\", [g.start.row + 1, g.end.row + 1])) : n ? l.setAttribute(\"aria-label\", S(\"Toggle code folding, rows $0 through $1\", [n.start.row + 1, n.end.row + 1])) : l.setAttribute(\"aria-label\", S(\"Toggle code folding, row $0\", [i + 1])), u ? (l.setAttribute(\"aria-expanded\", \"false\"), l.setAttribute(\"title\", S(\"Unfold code\"))) : (l.setAttribute(\"aria-expanded\", \"true\"), l.setAttribute(\"title\", S(\"Fold code\")));\n } else l && (w.setStyle(l.style, \"display\", \"none\"), l.setAttribute(\"tabindex\", \"0\"), l.removeAttribute(\"role\"), l.removeAttribute(\"aria-label\"));\n return b && this.$showFoldedAnnotations ? (c.className = \"ace_gutter_annotation\", h.className = v, h.className += I, w.setStyle(h.style, \"height\", C), w.setStyle(c.style, \"display\", \"block\"), w.setStyle(c.style, \"height\", C), c.setAttribute(\"aria-label\", S(\"Read annotations row $0\", [p])), c.setAttribute(\"tabindex\", \"-1\"), c.setAttribute(\"role\", \"button\")) : this.$annotations[i] ? (c.className = \"ace_gutter_annotation\", h.className = v, this.$useSvgGutterIcons ? h.className += this.$annotations[i].className : r.classList.add(this.$annotations[i].className.replace(\" \", \"\")), w.setStyle(h.style, \"height\", C), w.setStyle(c.style, \"display\", \"block\"), w.setStyle(c.style, \"height\", C), c.setAttribute(\"aria-label\", S(\"Read annotations row $0\", [p])), c.setAttribute(\"tabindex\", \"-1\"), c.setAttribute(\"role\", \"button\")) : (w.setStyle(c.style, \"display\", \"none\"), c.removeAttribute(\"aria-label\"), c.removeAttribute(\"role\"), c.setAttribute(\"tabindex\", \"0\")), p !== a.data && (a.data = p), r.className != y && (r.className = y), w.setStyle(e.element.style, \"height\", this.$lines.computeLineHeight(i, t, s) + \"px\"), w.setStyle(e.element.style, \"top\", this.$lines.computeLineTop(i, t, s) + \"px\"), e.text = p, \"none\" === c.style.display && \"none\" === l.style.display ? e.element.setAttribute(\"aria-hidden\", !0) : e.element.setAttribute(\"aria-hidden\", !1), e;\n }, a.prototype.setHighlightGutterLine = function (e) {\n this.$highlightGutterLine = e;\n }, a.prototype.setShowLineNumbers = function (e) {\n this.$renderer = !e && {\n getWidth: function () {\n return 0;\n },\n getText: function () {\n return \"\";\n }\n };\n }, a.prototype.getShowLineNumbers = function () {\n return this.$showLineNumbers;\n }, a.prototype.setShowFoldWidgets = function (e) {\n e ? w.addCssClass(this.element, \"ace_folding-enabled\") : w.removeCssClass(this.element, \"ace_folding-enabled\"), this.$showFoldWidgets = e, this.$padding = null;\n }, a.prototype.getShowFoldWidgets = function () {\n return this.$showFoldWidgets;\n }, a.prototype.$computePadding = function () {\n var e;\n return this.element.firstChild ? (e = w.computedStyle(this.element.firstChild), this.$padding = {}, this.$padding.left = (parseInt(e.borderLeftWidth) || 0) + (parseInt(e.paddingLeft) || 0) + 1, this.$padding.right = (parseInt(e.borderRightWidth) || 0) + (parseInt(e.paddingRight) || 0), this.$padding) : {\n left: 0,\n right: 0\n };\n }, a.prototype.getRegion = function (e) {\n var t = this.$padding || this.$computePadding(),\n n = this.element.getBoundingClientRect();\n return e.x < t.left + n.left ? \"markers\" : this.$showFoldWidgets && e.x > n.right - t.right ? \"foldWidgets\" : void 0;\n }, a);\n function a(e) {\n this.element = w.createElement(\"div\"), this.element.className = \"ace_layer ace_gutter-layer\", e.appendChild(this.element), this.setShowFoldWidgets(this.$showFoldWidgets), this.gutterWidth = 0, this.$annotations = [], this.$updateAnnotations = this.$updateAnnotations.bind(this), this.$lines = new r(this.element), this.$lines.$offsetCoefficient = 1;\n }\n function c(e) {\n var t = document.createTextNode(\"\"),\n t = (e.appendChild(t), w.createElement(\"span\")),\n t = (e.appendChild(t), w.createElement(\"span\")),\n n = (e.appendChild(t), w.createElement(\"span\"));\n return t.appendChild(n), e;\n }\n e.prototype.$fixedWidth = !1, e.prototype.$highlightGutterLine = !0, e.prototype.$renderer = \"\", e.prototype.$showLineNumbers = !0, e.prototype.$showFoldWidgets = !0, i.implement(e.prototype, o), t.Gutter = e;\n }), ace.define(\"ace/layer/marker\", [\"require\", \"exports\", \"module\", \"ace/range\", \"ace/lib/dom\"], function (e, t, n) {\n \"use strict\";\n\n var g = e(\"../range\").Range,\n i = e(\"../lib/dom\"),\n e = (o.prototype.setPadding = function (e) {\n this.$padding = e;\n }, o.prototype.setSession = function (e) {\n this.session = e;\n }, o.prototype.setMarkers = function (e) {\n this.markers = e;\n }, o.prototype.elt = function (e, t) {\n var n = -1 != this.i && this.element.childNodes[this.i];\n n ? this.i++ : (n = document.createElement(\"div\"), this.element.appendChild(n), this.i = -1), n.style.cssText = t, n.className = e;\n }, o.prototype.update = function (e) {\n if (e) {\n var t, n;\n for (n in this.config = e, this.i = 0, this.markers) {\n var i,\n o,\n r,\n s = this.markers[n];\n s.range ? (r = s.range.clipRows(e.firstRow, e.lastRow)).isEmpty() || (r = r.toScreenRange(this.session), s.renderer ? (i = this.$getTop(r.start.row, e), o = this.$padding + r.start.column * e.characterWidth, s.renderer(t, r, o, i, e)) : \"fullLine\" == s.type ? this.drawFullLineMarker(t, r, s.clazz, e) : \"screenLine\" == s.type ? this.drawScreenLineMarker(t, r, s.clazz, e) : r.isMultiLine() ? \"text\" == s.type ? this.drawTextMarker(t, r, s.clazz, e) : this.drawMultiLineMarker(t, r, s.clazz, e) : this.drawSingleLineMarker(t, r, s.clazz + \" ace_start ace_br15\", e)) : s.update(t, this, this.session, e);\n }\n if (-1 != this.i) for (; this.i < this.element.childElementCount;) this.element.removeChild(this.element.lastChild);\n }\n }, o.prototype.$getTop = function (e, t) {\n return (e - t.firstRowScreen) * t.lineHeight;\n }, o.prototype.drawTextMarker = function (e, t, n, i, o) {\n for (var r, s = this.session, a = t.start.row, l = t.end.row, c = a, h = 0, d = s.getScreenLastRowColumn(c), u = new g(c, t.start.column, c, h); c <= l; c++) u.start.row = u.end.row = c, u.start.column = c == a ? t.start.column : s.getRowWrapIndent(c), u.end.column = d, r = h, h = d, d = c + 1 < l ? s.getScreenLastRowColumn(c + 1) : c == l ? 0 : t.end.column, this.drawSingleLineMarker(e, u, n + (c == a ? \" ace_start\" : \"\") + \" ace_br\" + ((c == a || c == a + 1 && t.start.column ? 1 : 0) | (r < h ? 2 : 0) | (d < h ? 4 : 0) | (c == l ? 8 : 0)), i, c == l ? 0 : 1, o);\n }, o.prototype.drawMultiLineMarker = function (e, t, n, i, o) {\n var r,\n s = this.$padding,\n a = i.lineHeight,\n l = this.$getTop(t.start.row, i),\n c = s + t.start.column * i.characterWidth;\n o = o || \"\", this.session.$bidiHandler.isBidiRow(t.start.row) ? ((r = t.clone()).end.row = r.start.row, r.end.column = this.session.getLine(r.start.row).length, this.drawBidiSingleLineMarker(e, r, n + \" ace_br1 ace_start\", i, null, o)) : this.elt(n + \" ace_br1 ace_start\", \"height:\" + a + \"px;right:0;top:\" + l + \"px;left:\" + c + \"px;\" + (o || \"\")), this.session.$bidiHandler.isBidiRow(t.end.row) ? ((r = t.clone()).start.row = r.end.row, r.start.column = 0, this.drawBidiSingleLineMarker(e, r, n + \" ace_br12\", i, null, o)) : (l = this.$getTop(t.end.row, i), c = t.end.column * i.characterWidth, this.elt(n + \" ace_br12\", \"height:\" + a + \"px;width:\" + c + \"px;top:\" + l + \"px;left:\" + s + \"px;\" + (o || \"\"))), (a = (t.end.row - t.start.row - 1) * i.lineHeight) <= 0 || (l = this.$getTop(t.start.row + 1, i), e = (t.start.column ? 1 : 0) | (t.end.column ? 0 : 8), this.elt(n + (e ? \" ace_br\" + e : \"\"), \"height:\" + a + \"px;right:0;top:\" + l + \"px;left:\" + s + \"px;\" + (o || \"\")));\n }, o.prototype.drawSingleLineMarker = function (e, t, n, i, o, r) {\n if (this.session.$bidiHandler.isBidiRow(t.start.row)) return this.drawBidiSingleLineMarker(e, t, n, i, o, r);\n var e = i.lineHeight,\n o = (t.end.column + (o || 0) - t.start.column) * i.characterWidth,\n s = this.$getTop(t.start.row, i),\n t = this.$padding + t.start.column * i.characterWidth;\n this.elt(n, \"height:\" + e + \"px;width:\" + o + \"px;top:\" + s + \"px;left:\" + t + \"px;\" + (r || \"\"));\n }, o.prototype.drawBidiSingleLineMarker = function (e, t, n, i, o, r) {\n var s = i.lineHeight,\n a = this.$getTop(t.start.row, i),\n l = this.$padding;\n this.session.$bidiHandler.getSelections(t.start.column, t.end.column).forEach(function (e) {\n this.elt(n, \"height:\" + s + \"px;width:\" + (e.width + (o || 0)) + \"px;top:\" + a + \"px;left:\" + (l + e.left) + \"px;\" + (r || \"\"));\n }, this);\n }, o.prototype.drawFullLineMarker = function (e, t, n, i, o) {\n var r = this.$getTop(t.start.row, i),\n s = i.lineHeight;\n t.start.row != t.end.row && (s += this.$getTop(t.end.row, i) - r), this.elt(n, \"height:\" + s + \"px;top:\" + r + \"px;left:0;right:0;\" + (o || \"\"));\n }, o.prototype.drawScreenLineMarker = function (e, t, n, i, o) {\n t = this.$getTop(t.start.row, i), i = i.lineHeight;\n this.elt(n, \"height:\" + i + \"px;top:\" + t + \"px;left:0;right:0;\" + (o || \"\"));\n }, o);\n function o(e) {\n this.element = i.createElement(\"div\"), this.element.className = \"ace_layer ace_marker-layer\", e.appendChild(this.element);\n }\n e.prototype.$padding = 0, t.Marker = e;\n }), ace.define(\"ace/layer/text_util\", [\"require\", \"exports\", \"module\"], function (e, t, n) {\n var i = new Set([\"text\", \"rparen\", \"lparen\"]);\n t.isTextToken = function (e) {\n return i.has(e);\n };\n }), ace.define(\"ace/layer/text\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/lib/lang\", \"ace/layer/lines\", \"ace/lib/event_emitter\", \"ace/config\", \"ace/layer/text_util\"], function (e, t, n) {\n \"use strict\";\n\n var i = e(\"../lib/oop\"),\n c = e(\"../lib/dom\"),\n C = e(\"../lib/lang\"),\n o = e(\"./lines\").Lines,\n r = e(\"../lib/event_emitter\").EventEmitter,\n y = e(\"../config\").nls,\n v = e(\"./text_util\").isTextToken,\n e = (s.prototype.$updateEolChar = function () {\n var e = this.session.doc,\n e = \"\\n\" == e.getNewLineCharacter() && \"windows\" != e.getNewLineMode() ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF;\n if (this.EOL_CHAR != e) return this.EOL_CHAR = e, !0;\n }, s.prototype.setPadding = function (e) {\n this.$padding = e, this.element.style.margin = \"0 \" + e + \"px\";\n }, s.prototype.getLineHeight = function () {\n return this.$fontMetrics.$characterSize.height || 0;\n }, s.prototype.getCharacterWidth = function () {\n return this.$fontMetrics.$characterSize.width || 0;\n }, s.prototype.$setFontMetrics = function (e) {\n this.$fontMetrics = e, this.$fontMetrics.on(\"changeCharacterSize\", function (e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this)), this.$pollSizeChanges();\n }, s.prototype.checkForSizeChanges = function () {\n this.$fontMetrics.checkForSizeChanges();\n }, s.prototype.$pollSizeChanges = function () {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n }, s.prototype.setSession = function (e) {\n (this.session = e) && this.$computeTabString();\n }, s.prototype.setShowInvisibles = function (e) {\n return this.showInvisibles != e && (\"string\" == typeof (this.showInvisibles = e) ? (this.showSpaces = /tab/i.test(e), this.showTabs = /space/i.test(e), this.showEOL = /eol/i.test(e)) : this.showSpaces = this.showTabs = this.showEOL = e, this.$computeTabString(), !0);\n }, s.prototype.setDisplayIndentGuides = function (e) {\n return this.displayIndentGuides != e && (this.displayIndentGuides = e, this.$computeTabString(), !0);\n }, s.prototype.setHighlightIndentGuides = function (e) {\n return this.$highlightIndentGuides !== e && (this.$highlightIndentGuides = e);\n }, s.prototype.$computeTabString = function () {\n for (var e, t, n, i, o, r, s = this.session.getTabSize(), a = (this.tabSize = s, this.$tabStrings = [0]), l = 1; l < s + 1; l++) this.showTabs ? ((r = this.dom.createElement(\"span\")).className = \"ace_invisible ace_invisible_tab\", r.textContent = C.stringRepeat(this.TAB_CHAR, l), a.push(r)) : a.push(this.dom.createTextNode(C.stringRepeat(\" \", l), this.element));\n this.displayIndentGuides && (this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/, e = \"ace_indent-guide\", t = this.showSpaces ? \" ace_invisible ace_invisible_space\" : \"\", n = this.showSpaces ? C.stringRepeat(this.SPACE_CHAR, this.tabSize) : C.stringRepeat(\" \", this.tabSize), i = this.showTabs ? \" ace_invisible ace_invisible_tab\" : \"\", o = this.showTabs ? C.stringRepeat(this.TAB_CHAR, this.tabSize) : n, (r = this.dom.createElement(\"span\")).className = e + t, r.textContent = n, this.$tabStrings[\" \"] = r, (r = this.dom.createElement(\"span\")).className = e + i, r.textContent = o, this.$tabStrings[\"\\t\"] = r);\n }, s.prototype.updateLines = function (e, t, n) {\n if (this.config.lastRow != e.lastRow || this.config.firstRow != e.firstRow) return this.update(e);\n this.config = e;\n for (var i = Math.max(t, e.firstRow), o = Math.min(n, e.lastRow), r = this.element.childNodes, s = 0, a = e.firstRow; a < i; a++) {\n if (l = this.session.getFoldLine(a)) {\n if (l.containsRow(i)) {\n i = l.start.row;\n break;\n }\n a = l.end.row;\n }\n s++;\n }\n for (var l, c = !1, a = i, h = (l = this.session.getNextFoldLine(a)) ? l.start.row : 1 / 0; h < a && (a = l.end.row + 1, h = (l = this.session.getNextFoldLine(a, l)) ? l.start.row : 1 / 0), !(o < a);) {\n var d,\n u = r[s++];\n u && (this.dom.removeChildren(u), this.$renderLine(u, a, a == h && l), c && (u.style.top = this.$lines.computeLineTop(a, e, this.session) + \"px\"), d = e.lineHeight * this.session.getRowLength(a) + \"px\", u.style.height != d) && (c = !0, u.style.height = d), a++;\n }\n if (c) for (; s < this.$lines.cells.length;) {\n var g = this.$lines.cells[s++];\n g.element.style.top = this.$lines.computeLineTop(g.row, e, this.session) + \"px\";\n }\n }, s.prototype.scrollLines = function (e) {\n var t = this.config;\n if (this.config = e, this.$lines.pageChanged(t, e)) return this.update(e);\n this.$lines.moveContainer(e);\n var n = e.lastRow,\n i = t ? t.lastRow : -1;\n if (!t || i < e.firstRow) return this.update(e);\n if (n < t.firstRow) return this.update(e);\n if (!t || t.lastRow < e.firstRow) return this.update(e);\n if (e.lastRow < t.firstRow) return this.update(e);\n if (t.firstRow < e.firstRow) for (var o = this.session.getFoldedRowCount(t.firstRow, e.firstRow - 1); 0 < o; o--) this.$lines.shift();\n if (t.lastRow > e.lastRow) for (o = this.session.getFoldedRowCount(e.lastRow + 1, t.lastRow); 0 < o; o--) this.$lines.pop();\n e.firstRow < t.firstRow && this.$lines.unshift(this.$renderLinesFragment(e, e.firstRow, t.firstRow - 1)), e.lastRow > t.lastRow && this.$lines.push(this.$renderLinesFragment(e, t.lastRow + 1, e.lastRow)), this.$highlightIndentGuide();\n }, s.prototype.$renderLinesFragment = function (e, t, n) {\n for (var i = [], o = t, r = this.session.getNextFoldLine(o), s = r ? r.start.row : 1 / 0; s < o && (o = r.end.row + 1, s = (r = this.session.getNextFoldLine(o, r)) ? r.start.row : 1 / 0), !(n < o);) {\n var a = this.$lines.createCell(o, e, this.session),\n l = a.element;\n this.dom.removeChildren(l), c.setStyle(l.style, \"height\", this.$lines.computeLineHeight(o, e, this.session) + \"px\"), c.setStyle(l.style, \"top\", this.$lines.computeLineTop(o, e, this.session) + \"px\"), this.$renderLine(l, o, o == s && r), this.$useLineGroups() ? l.className = \"ace_line_group\" : l.className = \"ace_line\", i.push(a), o++;\n }\n return i;\n }, s.prototype.update = function (e) {\n this.$lines.moveContainer(e);\n for (var t = (this.config = e).firstRow, n = e.lastRow, i = this.$lines; i.getLength();) i.pop();\n i.push(this.$renderLinesFragment(e, t, n));\n }, s.prototype.$renderToken = function (e, t, n, i) {\n for (var o, r, s = this, a = /(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC\\u2066\\u2067\\u2068\\u202A\\u202B\\u202D\\u202E\\u202C\\u2069]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g, l = this.dom.createFragment(this.element), c = 0; o = a.exec(i);) {\n var h,\n d,\n u = o[1],\n g = o[2],\n p = o[3],\n m = o[4],\n f = o[5];\n !s.showSpaces && g || (h = c != o.index ? i.slice(c, o.index) : \"\", c = o.index + o[0].length, h && l.appendChild(this.dom.createTextNode(h, this.element)), u ? (h = s.session.getScreenTabSize(t + o.index), l.appendChild(s.$tabStrings[h].cloneNode(!0)), t += h - 1) : g ? s.showSpaces ? ((d = this.dom.createElement(\"span\")).className = \"ace_invisible ace_invisible_space\", d.textContent = C.stringRepeat(s.SPACE_CHAR, g.length), l.appendChild(d)) : l.appendChild(this.dom.createTextNode(g, this.element)) : p ? ((d = this.dom.createElement(\"span\")).className = \"ace_invisible ace_invisible_space ace_invalid\", d.textContent = C.stringRepeat(s.SPACE_CHAR, p.length), l.appendChild(d)) : m ? (t += 1, (d = this.dom.createElement(\"span\")).style.width = 2 * s.config.characterWidth + \"px\", d.className = s.showSpaces ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\", d.textContent = s.showSpaces ? s.SPACE_CHAR : m, l.appendChild(d)) : f && (t += 1, (d = this.dom.createElement(\"span\")).style.width = 2 * s.config.characterWidth + \"px\", d.className = \"ace_cjk\", d.textContent = f, l.appendChild(d)));\n }\n return l.appendChild(this.dom.createTextNode(c ? i.slice(c) : i, this.element)), v(n.type) ? e.appendChild(l) : (r = \"ace_\" + n.type.replace(/\\./g, \" ace_\"), d = this.dom.createElement(\"span\"), \"fold\" == n.type && (d.style.width = n.value.length * this.config.characterWidth + \"px\", d.setAttribute(\"title\", y(\"Unfold code\"))), d.className = r, d.appendChild(l), e.appendChild(d)), t + i.length;\n }, s.prototype.renderIndentGuide = function (e, t, n) {\n var i = t.search(this.$indentGuideRe);\n if (!(i <= 0 || n <= i)) {\n if (\" \" == t[0]) {\n for (var o = (i -= i % this.tabSize) / this.tabSize, r = 0; r < o; r++) e.appendChild(this.$tabStrings[\" \"].cloneNode(!0));\n return this.$highlightIndentGuide(), t.substr(i);\n }\n if (\"\\t\" == t[0]) {\n for (r = 0; r < i; r++) e.appendChild(this.$tabStrings[\"\\t\"].cloneNode(!0));\n return this.$highlightIndentGuide(), t.substr(i);\n }\n this.$highlightIndentGuide();\n }\n return t;\n }, s.prototype.$highlightIndentGuide = function () {\n if (this.$highlightIndentGuides && this.displayIndentGuides) {\n this.$highlightIndentGuideMarker = {\n indentLevel: void 0,\n start: void 0,\n end: void 0,\n dir: void 0\n };\n var e = this.session.doc.$lines;\n if (e) {\n var t = this.session.selection.getCursor(),\n n = /^\\s*/.exec(this.session.doc.getLine(t.row))[0].length,\n i = Math.floor(n / this.tabSize);\n if (this.$highlightIndentGuideMarker = {\n indentLevel: i,\n start: t.row\n }, this.session.$bracketHighlight) for (var o = this.session.$bracketHighlight.ranges, r = 0; r < o.length; r++) if (t.row !== o[r].start.row) {\n this.$highlightIndentGuideMarker.end = o[r].start.row, t.row > o[r].start.row ? this.$highlightIndentGuideMarker.dir = -1 : this.$highlightIndentGuideMarker.dir = 1;\n break;\n }\n if (!this.$highlightIndentGuideMarker.end && \"\" !== e[t.row] && t.column === e[t.row].length) {\n this.$highlightIndentGuideMarker.dir = 1;\n for (r = t.row + 1; r < e.length; r++) {\n var s = e[r],\n a = /^\\s*/.exec(s)[0].length;\n if (\"\" !== s && (this.$highlightIndentGuideMarker.end = r, a <= n)) break;\n }\n }\n this.$renderHighlightIndentGuide();\n }\n }\n }, s.prototype.$clearActiveIndentGuide = function () {\n for (var e = this.$lines.cells, t = 0; t < e.length; t++) {\n var n = e[t].element.childNodes;\n if (0 < n.length) for (var i = 0; i < n.length; i++) if (n[i].classList && n[i].classList.contains(\"ace_indent-guide-active\")) {\n n[i].classList.remove(\"ace_indent-guide-active\");\n break;\n }\n }\n }, s.prototype.$setIndentGuideActive = function (e, t) {\n \"\" !== this.session.doc.getLine(e.row) && (e = e.element.childNodes) && (e = e[t - 1]) && e.classList && e.classList.contains(\"ace_indent-guide\") && e.classList.add(\"ace_indent-guide-active\");\n }, s.prototype.$renderHighlightIndentGuide = function () {\n if (this.$lines) {\n var e = this.$lines.cells,\n t = (this.$clearActiveIndentGuide(), this.$highlightIndentGuideMarker.indentLevel);\n if (0 !== t) if (1 === this.$highlightIndentGuideMarker.dir) for (var n = 0; n < e.length; n++) {\n var i = e[n];\n if (this.$highlightIndentGuideMarker.end && i.row >= this.$highlightIndentGuideMarker.start + 1) {\n if (i.row >= this.$highlightIndentGuideMarker.end) break;\n this.$setIndentGuideActive(i, t);\n }\n } else for (n = e.length - 1; 0 <= n; n--) {\n i = e[n];\n if (this.$highlightIndentGuideMarker.end && i.row < this.$highlightIndentGuideMarker.start) {\n if (i.row <= this.$highlightIndentGuideMarker.end) break;\n this.$setIndentGuideActive(i, t);\n }\n }\n }\n }, s.prototype.$createLineElement = function (e) {\n var t = this.dom.createElement(\"div\");\n return t.className = \"ace_line\", t.style.height = this.config.lineHeight + \"px\", t;\n }, s.prototype.$renderWrappedLine = function (e, t, n) {\n var i = 0,\n o = 0,\n r = n[0],\n s = 0,\n a = this.$createLineElement();\n e.appendChild(a);\n for (var l = 0; l < t.length; l++) {\n var c = t[l],\n h = c.value;\n if (0 == l && this.displayIndentGuides) {\n if (i = h.length, !(h = this.renderIndentGuide(a, h, r))) continue;\n i -= h.length;\n }\n if (i + h.length < r) s = this.$renderToken(a, s, c, h), i += h.length;else {\n for (; i + h.length >= r;) s = this.$renderToken(a, s, c, h.substring(0, r - i)), h = h.substring(r - i), i = r, a = this.$createLineElement(), e.appendChild(a), a.appendChild(this.dom.createTextNode(C.stringRepeat(\" \", n.indent), this.element)), s = 0, r = n[++o] || Number.MAX_VALUE;\n 0 != h.length && (i += h.length, s = this.$renderToken(a, s, c, h));\n }\n }\n n[n.length - 1] > this.MAX_LINE_LENGTH && this.$renderOverflowMessage(a, s, null, \"\", !0);\n }, s.prototype.$renderSimpleLine = function (e, t) {\n for (var n = 0, i = 0; i < t.length; i++) {\n var o = t[i],\n r = o.value;\n if (0 != i || !this.displayIndentGuides || (r = this.renderIndentGuide(e, r))) {\n if (n + r.length > this.MAX_LINE_LENGTH) return this.$renderOverflowMessage(e, n, o, r);\n n = this.$renderToken(e, n, o, r);\n }\n }\n }, s.prototype.$renderOverflowMessage = function (e, t, n, i, o) {\n n && this.$renderToken(e, t, n, i.slice(0, this.MAX_LINE_LENGTH - t));\n n = this.dom.createElement(\"span\");\n n.className = \"ace_inline_button ace_keyword ace_toggle_wrap\", n.textContent = o ? \"\" : \"\", e.appendChild(n);\n }, s.prototype.$renderLine = function (e, t, n) {\n var i,\n o,\n r = e;\n (i = (n = n || 0 == n ? n : this.session.getFoldLine(t)) ? this.$getFoldLineTokens(t, n) : this.session.getTokens(t)).length ? (o = this.session.getRowSplitData(t)) && o.length ? (this.$renderWrappedLine(e, i, o), r = e.lastChild) : (r = e, this.$useLineGroups() && (r = this.$createLineElement(), e.appendChild(r)), this.$renderSimpleLine(r, i)) : this.$useLineGroups() && (r = this.$createLineElement(), e.appendChild(r)), this.showEOL && r && (n && (t = n.end.row), (o = this.dom.createElement(\"span\")).className = \"ace_invisible ace_invisible_eol\", o.textContent = t == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR, r.appendChild(o));\n }, s.prototype.$getFoldLineTokens = function (e, t) {\n var d = this.session,\n u = [];\n var g = d.getTokens(e);\n return t.walk(function (e, t, n, i, o) {\n if (null != e) u.push({\n type: \"fold\",\n value: e\n });else if ((g = o ? d.getTokens(t) : g).length) {\n for (var r, s = g, a = i, l = n, c = 0, h = 0; h + s[c].value.length < a;) if (h += s[c].value.length, ++c == s.length) return void !void 0;\n for (h != a && ((r = s[c].value.substring(a - h)).length > l - a && (r = r.substring(0, l - a)), u.push({\n type: s[c].type,\n value: r\n }), h = a + r.length, c += 1); h < l && c < s.length;) (r = s[c].value).length + h > l ? u.push({\n type: s[c].type,\n value: r.substring(0, l - h)\n }) : u.push(s[c]), h += r.length, c += 1;\n }\n }, t.end.row, this.session.getLine(t.end.row).length), u;\n }, s.prototype.$useLineGroups = function () {\n return this.session.getUseWrapMode();\n }, s);\n function s(e) {\n this.dom = c, this.element = this.dom.createElement(\"div\"), this.element.className = \"ace_layer ace_text-layer\", e.appendChild(this.element), this.$updateEolChar = this.$updateEolChar.bind(this), this.$lines = new o(this.element);\n }\n e.prototype.EOF_CHAR = \"¶\", e.prototype.EOL_CHAR_LF = \"¬\", e.prototype.EOL_CHAR_CRLF = \"¤\", e.prototype.EOL_CHAR = e.prototype.EOL_CHAR_LF, e.prototype.TAB_CHAR = \"—\", e.prototype.SPACE_CHAR = \"·\", e.prototype.$padding = 0, e.prototype.MAX_LINE_LENGTH = 1e4, e.prototype.showInvisibles = !1, e.prototype.showSpaces = !1, e.prototype.showTabs = !1, e.prototype.showEOL = !1, e.prototype.displayIndentGuides = !0, e.prototype.$highlightIndentGuides = !0, e.prototype.$tabStrings = [], e.prototype.destroy = {}, e.prototype.onChangeTabSize = e.prototype.$computeTabString, i.implement(e.prototype, r), t.Text = e;\n }), ace.define(\"ace/layer/cursor\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (e, t, n) {\n \"use strict\";\n\n var c = e(\"../lib/dom\"),\n e = (i.prototype.$updateOpacity = function (e) {\n for (var t = this.cursors, n = t.length; n--;) c.setStyle(t[n].style, \"opacity\", e ? \"\" : \"0\");\n }, i.prototype.$startCssAnimation = function () {\n for (var e = this.cursors, t = e.length; t--;) e[t].style.animationDuration = this.blinkInterval + \"ms\";\n this.$isAnimating = !0, setTimeout(function () {\n this.$isAnimating && c.addCssClass(this.element, \"ace_animate-blinking\");\n }.bind(this));\n }, i.prototype.$stopCssAnimation = function () {\n this.$isAnimating = !1, c.removeCssClass(this.element, \"ace_animate-blinking\");\n }, i.prototype.setPadding = function (e) {\n this.$padding = e;\n }, i.prototype.setSession = function (e) {\n this.session = e;\n }, i.prototype.setBlinking = function (e) {\n e != this.isBlinking && (this.isBlinking = e, this.restartTimer());\n }, i.prototype.setBlinkInterval = function (e) {\n e != this.blinkInterval && (this.blinkInterval = e, this.restartTimer());\n }, i.prototype.setSmoothBlinking = function (e) {\n e != this.smoothBlinking && (this.smoothBlinking = e, c.setCssClass(this.element, \"ace_smooth-blinking\", e), this.$updateCursors(!0), this.restartTimer());\n }, i.prototype.addCursor = function () {\n var e = c.createElement(\"div\");\n return e.className = \"ace_cursor\", this.element.appendChild(e), this.cursors.push(e), e;\n }, i.prototype.removeCursor = function () {\n var e;\n if (1 < this.cursors.length) return (e = this.cursors.pop()).parentNode.removeChild(e), e;\n }, i.prototype.hideCursor = function () {\n this.isVisible = !1, c.addCssClass(this.element, \"ace_hidden-cursors\"), this.restartTimer();\n }, i.prototype.showCursor = function () {\n this.isVisible = !0, c.removeCssClass(this.element, \"ace_hidden-cursors\"), this.restartTimer();\n }, i.prototype.restartTimer = function () {\n var e,\n t = this.$updateCursors;\n clearInterval(this.intervalId), clearTimeout(this.timeoutId), this.$stopCssAnimation(), this.smoothBlinking && (this.$isSmoothBlinking = !1, c.removeCssClass(this.element, \"ace_smooth-blinking\")), t(!0), this.isBlinking && this.blinkInterval && this.isVisible ? (this.smoothBlinking && (this.$isSmoothBlinking = !0, setTimeout(function () {\n this.$isSmoothBlinking && c.addCssClass(this.element, \"ace_smooth-blinking\");\n }.bind(this))), c.HAS_CSS_ANIMATION ? this.$startCssAnimation() : (e = function () {\n this.timeoutId = setTimeout(function () {\n t(!1);\n }, .6 * this.blinkInterval);\n }.bind(this), this.intervalId = setInterval(function () {\n t(!0), e();\n }, this.blinkInterval), e())) : this.$stopCssAnimation();\n }, i.prototype.getPixelPosition = function (e, t) {\n if (!this.config || !this.session) return {\n left: 0,\n top: 0\n };\n e = e || this.session.selection.getCursor();\n var n = this.session.documentToScreenPosition(e);\n return {\n left: this.$padding + (this.session.$bidiHandler.isBidiRow(n.row, e.row) ? this.session.$bidiHandler.getPosLeft(n.column) : n.column * this.config.characterWidth),\n top: (n.row - (t ? this.config.firstRowScreen : 0)) * this.config.lineHeight\n };\n }, i.prototype.isCursorInView = function (e, t) {\n return 0 <= e.top && e.top < t.maxHeight;\n }, i.prototype.update = function (e) {\n this.config = e;\n for (var t = this.session.$selectionMarkers, n = 0, i = 0, n = 0, o = (t = void 0 !== t && 0 !== t.length ? t : [{\n cursor: null\n }]).length; n < o; n++) {\n var r,\n s,\n a = this.getPixelPosition(t[n].cursor, !0);\n (a.top > e.height + e.offset || a.top < 0) && 1 < n || (s = (r = this.cursors[i++] || this.addCursor()).style, this.drawCursor ? this.drawCursor(r, a, e, t[n], this.session) : this.isCursorInView(a, e) ? (c.setStyle(s, \"display\", \"block\"), c.translate(r, a.left, a.top), c.setStyle(s, \"width\", Math.round(e.characterWidth) + \"px\"), c.setStyle(s, \"height\", e.lineHeight + \"px\")) : c.setStyle(s, \"display\", \"none\"));\n }\n for (; this.cursors.length > i;) this.removeCursor();\n var l = this.session.getOverwrite();\n this.$setOverwrite(l), this.$pixelPos = a, this.restartTimer();\n }, i.prototype.$setOverwrite = function (e) {\n e != this.overwrite && ((this.overwrite = e) ? c.addCssClass(this.element, \"ace_overwrite-cursors\") : c.removeCssClass(this.element, \"ace_overwrite-cursors\"));\n }, i.prototype.destroy = function () {\n clearInterval(this.intervalId), clearTimeout(this.timeoutId);\n }, i);\n function i(e) {\n this.element = c.createElement(\"div\"), this.element.className = \"ace_layer ace_cursor-layer\", e.appendChild(this.element), this.isVisible = !1, this.isBlinking = !0, this.blinkInterval = 1e3, this.smoothBlinking = !1, this.cursors = [], this.cursor = this.addCursor(), c.addCssClass(this.element, \"ace_hidden-cursors\"), this.$updateCursors = this.$updateOpacity.bind(this);\n }\n e.prototype.$padding = 0, e.prototype.drawCursor = null, t.Cursor = e;\n }), ace.define(\"ace/scrollbar\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/lib/event\", \"ace/lib/event_emitter\"], function (e, t, n) {\n \"use strict\";\n\n var i,\n o = this && this.__extends || (i = function (e, t) {\n return (i = Object.setPrototypeOf || ({\n __proto__: []\n } instanceof Array ? function (e, t) {\n e.__proto__ = t;\n } : function (e, t) {\n for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);\n }))(e, t);\n }, function (e, t) {\n if (\"function\" != typeof t && null !== t) throw new TypeError(\"Class extends value \" + String(t) + \" is not a constructor or null\");\n function n() {\n this.constructor = e;\n }\n i(e, t), e.prototype = null === t ? Object.create(t) : (n.prototype = t.prototype, new n());\n }),\n r = e(\"./lib/oop\"),\n s = e(\"./lib/dom\"),\n a = e(\"./lib/event\"),\n e = e(\"./lib/event_emitter\").EventEmitter,\n l = (c.prototype.setVisible = function (e) {\n this.element.style.display = e ? \"\" : \"none\", this.isVisible = e, this.coeff = 1;\n }, c);\n function c(e, t) {\n this.element = s.createElement(\"div\"), this.element.className = \"ace_scrollbar ace_scrollbar\" + t, this.inner = s.createElement(\"div\"), this.inner.className = \"ace_scrollbar-inner\", this.inner.textContent = \" \", this.element.appendChild(this.inner), e.appendChild(this.element), this.setVisible(!1), this.skipEvent = !1, a.addListener(this.element, \"scroll\", this.onScroll.bind(this)), a.addListener(this.element, \"mousedown\", a.preventDefault);\n }\n r.implement(l.prototype, e);\n o(d, h = l), d.prototype.onScroll = function () {\n var e;\n this.skipEvent || (this.scrollTop = this.element.scrollTop, 1 != this.coeff && (e = this.element.clientHeight / this.scrollHeight, this.scrollTop = this.scrollTop * (1 - e) / (this.coeff - e)), this._emit(\"scroll\", {\n data: this.scrollTop\n })), this.skipEvent = !1;\n }, d.prototype.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n }, d.prototype.setHeight = function (e) {\n this.element.style.height = e + \"px\";\n }, d.prototype.setScrollHeight = function (e) {\n 32768 < (this.scrollHeight = e) ? (this.coeff = 32768 / e, e = 32768) : 1 != this.coeff && (this.coeff = 1), this.inner.style.height = e + \"px\";\n }, d.prototype.setScrollTop = function (e) {\n this.scrollTop != e && (this.skipEvent = !0, this.scrollTop = e, this.element.scrollTop = e * this.coeff);\n };\n var h,\n r = d;\n function d(e, t) {\n var n = h.call(this, e, \"-v\") || this;\n return n.scrollTop = 0, n.scrollHeight = 0, t.$scrollbarWidth = n.width = s.scrollbarWidth(e.ownerDocument), n.inner.style.width = n.element.style.width = (n.width || 15) + 5 + \"px\", n.$minWidth = 0, n;\n }\n r.prototype.setInnerHeight = r.prototype.setScrollHeight;\n o(g, u = l), g.prototype.onScroll = function () {\n this.skipEvent || (this.scrollLeft = this.element.scrollLeft, this._emit(\"scroll\", {\n data: this.scrollLeft\n })), this.skipEvent = !1;\n }, g.prototype.getHeight = function () {\n return this.isVisible ? this.height : 0;\n }, g.prototype.setWidth = function (e) {\n this.element.style.width = e + \"px\";\n }, g.prototype.setInnerWidth = function (e) {\n this.inner.style.width = e + \"px\";\n }, g.prototype.setScrollWidth = function (e) {\n this.inner.style.width = e + \"px\";\n }, g.prototype.setScrollLeft = function (e) {\n this.scrollLeft != e && (this.skipEvent = !0, this.scrollLeft = this.element.scrollLeft = e);\n };\n var u,\n e = g;\n function g(e, t) {\n e = u.call(this, e, \"-h\") || this;\n return e.scrollLeft = 0, e.height = t.$scrollbarWidth, e.inner.style.height = e.element.style.height = (e.height || 15) + 5 + \"px\", e;\n }\n t.ScrollBar = r, t.ScrollBarV = r, t.ScrollBarH = e, t.VScrollBar = r, t.HScrollBar = e;\n }), ace.define(\"ace/scrollbar_custom\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/lib/event\", \"ace/lib/event_emitter\"], function (e, t, n) {\n \"use strict\";\n\n var i,\n o = this && this.__extends || (i = function (e, t) {\n return (i = Object.setPrototypeOf || ({\n __proto__: []\n } instanceof Array ? function (e, t) {\n e.__proto__ = t;\n } : function (e, t) {\n for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);\n }))(e, t);\n }, function (e, t) {\n if (\"function\" != typeof t && null !== t) throw new TypeError(\"Class extends value \" + String(t) + \" is not a constructor or null\");\n function n() {\n this.constructor = e;\n }\n i(e, t), e.prototype = null === t ? Object.create(t) : (n.prototype = t.prototype, new n());\n }),\n r = e(\"./lib/oop\"),\n s = e(\"./lib/dom\"),\n a = e(\"./lib/event\"),\n e = e(\"./lib/event_emitter\").EventEmitter,\n l = (s.importCssString(\".ace_editor>.ace_sb-v div, .ace_editor>.ace_sb-h div{\\n position: absolute;\\n background: rgba(128, 128, 128, 0.6);\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n border: 1px solid #bbb;\\n border-radius: 2px;\\n z-index: 8;\\n}\\n.ace_editor>.ace_sb-v, .ace_editor>.ace_sb-h {\\n position: absolute;\\n z-index: 6;\\n background: none;\\n overflow: hidden!important;\\n}\\n.ace_editor>.ace_sb-v {\\n z-index: 6;\\n right: 0;\\n top: 0;\\n width: 12px;\\n}\\n.ace_editor>.ace_sb-v div {\\n z-index: 8;\\n right: 0;\\n width: 100%;\\n}\\n.ace_editor>.ace_sb-h {\\n bottom: 0;\\n left: 0;\\n height: 12px;\\n}\\n.ace_editor>.ace_sb-h div {\\n bottom: 0;\\n height: 100%;\\n}\\n.ace_editor>.ace_sb_grabbed {\\n z-index: 8;\\n background: #000;\\n}\", \"ace_scrollbar.css\", !1), c.prototype.setVisible = function (e) {\n this.element.style.display = e ? \"\" : \"none\", this.isVisible = e, this.coeff = 1;\n }, c);\n function c(e, t) {\n this.element = s.createElement(\"div\"), this.element.className = \"ace_sb\" + t, this.inner = s.createElement(\"div\"), this.inner.className = \"\", this.element.appendChild(this.inner), this.VScrollWidth = 12, this.HScrollHeight = 12, e.appendChild(this.element), this.setVisible(!1), this.skipEvent = !1, a.addMultiMouseDownListener(this.element, [500, 300, 300], this, \"onMouseDown\");\n }\n r.implement(l.prototype, e);\n o(d, h = l), d.prototype.onMouseDown = function (e, t) {\n var n, i, o, r, s;\n if (\"mousedown\" === e && 0 === a.getButton(t) && 2 !== t.detail) return t.target === this.inner ? (n = this, i = t.clientY, o = t.clientY, r = this.thumbTop, a.capture(this.inner, function (e) {\n i = e.clientY;\n }, function () {\n clearInterval(s);\n }), s = setInterval(function () {\n var e;\n void 0 !== i && (e = n.scrollTopFromThumbTop(r + i - o)) !== n.scrollTop && n._emit(\"scroll\", {\n data: e\n });\n }, 20)) : (e = t.clientY - this.element.getBoundingClientRect().top - this.thumbHeight / 2, this._emit(\"scroll\", {\n data: this.scrollTopFromThumbTop(e)\n })), a.preventDefault(t);\n }, d.prototype.getHeight = function () {\n return this.height;\n }, d.prototype.scrollTopFromThumbTop = function (e) {\n e = e * (this.pageHeight - this.viewHeight) / (this.slideHeight - this.thumbHeight);\n return (e >>= 0) < 0 ? e = 0 : e > this.pageHeight - this.viewHeight && (e = this.pageHeight - this.viewHeight), e;\n }, d.prototype.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n }, d.prototype.setHeight = function (e) {\n this.height = Math.max(0, e), this.slideHeight = this.height, this.viewHeight = this.height, this.setScrollHeight(this.pageHeight, !0);\n }, d.prototype.setScrollHeight = function (e, t) {\n (this.pageHeight !== e || t) && (this.pageHeight = e, this.thumbHeight = this.slideHeight * this.viewHeight / this.pageHeight, this.thumbHeight > this.slideHeight && (this.thumbHeight = this.slideHeight), this.thumbHeight < 15 && (this.thumbHeight = 15), this.inner.style.height = this.thumbHeight + \"px\", this.scrollTop > this.pageHeight - this.viewHeight) && (this.scrollTop = this.pageHeight - this.viewHeight, this.scrollTop < 0 && (this.scrollTop = 0), this._emit(\"scroll\", {\n data: this.scrollTop\n }));\n }, d.prototype.setScrollTop = function (e) {\n this.scrollTop = e, this.thumbTop = (e = e < 0 ? 0 : e) * (this.slideHeight - this.thumbHeight) / (this.pageHeight - this.viewHeight), this.inner.style.top = this.thumbTop + \"px\";\n };\n var h,\n r = d;\n function d(e, t) {\n var n = h.call(this, e, \"-v\") || this;\n return n.scrollTop = 0, n.scrollHeight = 0, n.parent = e, n.width = n.VScrollWidth, n.renderer = t, n.inner.style.width = n.element.style.width = (n.width || 15) + \"px\", n.$minWidth = 0, n;\n }\n r.prototype.setInnerHeight = r.prototype.setScrollHeight;\n o(g, u = l), g.prototype.onMouseDown = function (e, t) {\n var n, i, o, r, s;\n if (\"mousedown\" === e && 0 === a.getButton(t) && 2 !== t.detail) return t.target === this.inner ? (n = this, i = t.clientX, o = t.clientX, r = this.thumbLeft, a.capture(this.inner, function (e) {\n i = e.clientX;\n }, function () {\n clearInterval(s);\n }), s = setInterval(function () {\n var e;\n void 0 !== i && (e = n.scrollLeftFromThumbLeft(r + i - o)) !== n.scrollLeft && n._emit(\"scroll\", {\n data: e\n });\n }, 20)) : (e = t.clientX - this.element.getBoundingClientRect().left - this.thumbWidth / 2, this._emit(\"scroll\", {\n data: this.scrollLeftFromThumbLeft(e)\n })), a.preventDefault(t);\n }, g.prototype.getHeight = function () {\n return this.isVisible ? this.height : 0;\n }, g.prototype.scrollLeftFromThumbLeft = function (e) {\n e = e * (this.pageWidth - this.viewWidth) / (this.slideWidth - this.thumbWidth);\n return (e >>= 0) < 0 ? e = 0 : e > this.pageWidth - this.viewWidth && (e = this.pageWidth - this.viewWidth), e;\n }, g.prototype.setWidth = function (e) {\n this.width = Math.max(0, e), this.element.style.width = this.width + \"px\", this.slideWidth = this.width, this.viewWidth = this.width, this.setScrollWidth(this.pageWidth, !0);\n }, g.prototype.setScrollWidth = function (e, t) {\n (this.pageWidth !== e || t) && (this.pageWidth = e, this.thumbWidth = this.slideWidth * this.viewWidth / this.pageWidth, this.thumbWidth > this.slideWidth && (this.thumbWidth = this.slideWidth), this.thumbWidth < 15 && (this.thumbWidth = 15), this.inner.style.width = this.thumbWidth + \"px\", this.scrollLeft > this.pageWidth - this.viewWidth) && (this.scrollLeft = this.pageWidth - this.viewWidth, this.scrollLeft < 0 && (this.scrollLeft = 0), this._emit(\"scroll\", {\n data: this.scrollLeft\n }));\n }, g.prototype.setScrollLeft = function (e) {\n this.scrollLeft = e, this.thumbLeft = (e = e < 0 ? 0 : e) * (this.slideWidth - this.thumbWidth) / (this.pageWidth - this.viewWidth), this.inner.style.left = this.thumbLeft + \"px\";\n };\n var u,\n e = g;\n function g(e, t) {\n e = u.call(this, e, \"-h\") || this;\n return e.scrollLeft = 0, e.scrollWidth = 0, e.height = e.HScrollHeight, e.inner.style.height = e.element.style.height = (e.height || 12) + \"px\", e.renderer = t, e;\n }\n e.prototype.setInnerWidth = e.prototype.setScrollWidth, t.ScrollBar = r, t.ScrollBarV = r, t.ScrollBarH = e, t.VScrollBar = r, t.HScrollBar = e;\n }), ace.define(\"ace/renderloop\", [\"require\", \"exports\", \"module\", \"ace/lib/event\"], function (e, t, n) {\n \"use strict\";\n\n var i = e(\"./lib/event\");\n function o(e, t) {\n this.onRender = e, this.pending = !1, this.changes = 0, this.$recursionLimit = 2, this.window = t || window;\n var n = this;\n this._flush = function (e) {\n n.pending = !1;\n var t = n.changes;\n t && (i.blockIdle(100), n.changes = 0, n.onRender(t)), n.changes ? n.$recursionLimit-- < 0 || n.schedule() : n.$recursionLimit = 2;\n };\n }\n o.prototype.schedule = function (e) {\n this.changes = this.changes | e, this.changes && !this.pending && (i.nextFrame(this._flush), this.pending = !0);\n }, o.prototype.clear = function (e) {\n var t = this.changes;\n return this.changes = 0, t;\n }, t.RenderLoop = o;\n }), ace.define(\"ace/layer/font_metrics\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/lib/lang\", \"ace/lib/event\", \"ace/lib/useragent\", \"ace/lib/event_emitter\"], function (e, t, n) {\n var i = e(\"../lib/oop\"),\n o = e(\"../lib/dom\"),\n r = e(\"../lib/lang\"),\n s = e(\"../lib/event\"),\n a = e(\"../lib/useragent\"),\n e = e(\"../lib/event_emitter\").EventEmitter,\n l = \"function\" == typeof ResizeObserver,\n c = (h.prototype.$setMeasureNodeStyles = function (e, t) {\n e.width = e.height = \"auto\", e.left = e.top = \"0px\", e.visibility = \"hidden\", e.position = \"absolute\", e.whiteSpace = \"pre\", a.isIE < 8 ? e[\"font-family\"] = \"inherit\" : e.font = \"inherit\", e.overflow = t ? \"hidden\" : \"visible\";\n }, h.prototype.checkForSizeChanges = function (e) {\n var t;\n !(e = void 0 === e ? this.$measureSizes() : e) || this.$characterSize.width === e.width && this.$characterSize.height === e.height || (this.$measureNode.style.fontWeight = \"bold\", t = this.$measureSizes(), this.$measureNode.style.fontWeight = \"\", this.$characterSize = e, this.charSizes = Object.create(null), this.allowBoldFonts = t && t.width === e.width && t.height === e.height, this._emit(\"changeCharacterSize\", {\n data: e\n }));\n }, h.prototype.$addObserver = function () {\n var t = this;\n this.$observer = new window.ResizeObserver(function (e) {\n t.checkForSizeChanges();\n }), this.$observer.observe(this.$measureNode);\n }, h.prototype.$pollSizeChanges = function () {\n var t;\n return this.$pollSizeChangesTimer || this.$observer ? this.$pollSizeChangesTimer : (t = this).$pollSizeChangesTimer = s.onIdle(function e() {\n t.checkForSizeChanges(), s.onIdle(e, 500);\n }, 500);\n }, h.prototype.setPolling = function (e) {\n e ? this.$pollSizeChanges() : this.$pollSizeChangesTimer && (clearInterval(this.$pollSizeChangesTimer), this.$pollSizeChangesTimer = 0);\n }, h.prototype.$measureSizes = function (e) {\n e = {\n height: (e || this.$measureNode).clientHeight,\n width: (e || this.$measureNode).clientWidth / 512\n };\n return 0 === e.width || 0 === e.height ? null : e;\n }, h.prototype.$measureCharWidth = function (e) {\n return this.$main.textContent = r.stringRepeat(e, 512), this.$main.getBoundingClientRect().width / 512;\n }, h.prototype.getCharacterWidth = function (e) {\n var t = this.charSizes[e];\n return t = void 0 === t ? this.charSizes[e] = this.$measureCharWidth(e) / this.$characterSize.width : t;\n }, h.prototype.destroy = function () {\n clearInterval(this.$pollSizeChangesTimer), this.$observer && this.$observer.disconnect(), this.el && this.el.parentNode && this.el.parentNode.removeChild(this.el);\n }, h.prototype.$getZoom = function (e) {\n return e && e.parentElement ? (window.getComputedStyle(e).zoom || 1) * this.$getZoom(e.parentElement) : 1;\n }, h.prototype.$initTransformMeasureNodes = function () {\n function e(e, t) {\n return [\"div\", {\n style: \"position: absolute;top:\" + e + \"px;left:\" + t + \"px;\"\n }];\n }\n this.els = o.buildDom([e(0, 0), e(200, 0), e(0, 200), e(200, 200)], this.el);\n }, h.prototype.transformCoordinates = function (e, t) {\n function n(e, t, n) {\n var i = e[1] * t[0] - e[0] * t[1];\n return [(-t[1] * n[0] + t[0] * n[1]) / i, (+e[1] * n[0] - e[0] * n[1]) / i];\n }\n function i(e, t) {\n return [e[0] - t[0], e[1] - t[1]];\n }\n function o(e, t) {\n return [e[0] + t[0], e[1] + t[1]];\n }\n function r(e, t) {\n return [e * t[0], e * t[1]];\n }\n function s(e) {\n e = e.getBoundingClientRect();\n return [e.left, e.top];\n }\n e = e && r(1 / this.$getZoom(this.el), e), this.els || this.$initTransformMeasureNodes();\n var a,\n l = s(this.els[0]),\n c = s(this.els[1]),\n h = s(this.els[2]),\n d = s(this.els[3]),\n d = n(i(d, c), i(d, h), i(o(c, h), o(d, l))),\n c = r(1 + d[0], i(c, l)),\n h = r(1 + d[1], i(h, l));\n return t ? (a = d[0] * t[0] / 200 + d[1] * t[1] / 200 + 1, t = o(r(t[0], c), r(t[1], h)), o(r(1 / a / 200, t), l)) : (a = i(e, l), t = n(i(c, r(d[0], a)), i(h, r(d[1], a)), a), r(200, t));\n }, h);\n function h(e) {\n this.el = o.createElement(\"div\"), this.$setMeasureNodeStyles(this.el.style, !0), this.$main = o.createElement(\"div\"), this.$setMeasureNodeStyles(this.$main.style), this.$measureNode = o.createElement(\"div\"), this.$setMeasureNodeStyles(this.$measureNode.style), this.el.appendChild(this.$main), this.el.appendChild(this.$measureNode), e.appendChild(this.el), this.$measureNode.textContent = r.stringRepeat(\"X\", 512), this.$characterSize = {\n width: 0,\n height: 0\n }, l ? this.$addObserver() : this.checkForSizeChanges();\n }\n c.prototype.$characterSize = {\n width: 0,\n height: 0\n }, i.implement(c.prototype, e), t.FontMetrics = c;\n }), ace.define(\"ace/css/editor-css\", [\"require\", \"exports\", \"module\"], function (e, t, n) {\n n.exports = '\\n.ace_br1 {border-top-left-radius : 3px;}\\n.ace_br2 {border-top-right-radius : 3px;}\\n.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\\n.ace_br4 {border-bottom-right-radius: 3px;}\\n.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\\n.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\\n.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\\n.ace_br8 {border-bottom-left-radius : 3px;}\\n.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\\n.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\\n.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\n\\n\\n.ace_editor {\\n position: relative;\\n overflow: hidden;\\n padding: 0;\\n font: 12px/normal \\'Monaco\\', \\'Menlo\\', \\'Ubuntu Mono\\', \\'Consolas\\', \\'Source Code Pro\\', \\'source-code-pro\\', monospace;\\n direction: ltr;\\n text-align: left;\\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n}\\n\\n.ace_scroller {\\n position: absolute;\\n overflow: hidden;\\n top: 0;\\n bottom: 0;\\n background-color: inherit;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n cursor: text;\\n}\\n\\n.ace_content {\\n position: absolute;\\n box-sizing: border-box;\\n min-width: 100%;\\n contain: style size layout;\\n font-variant-ligatures: no-common-ligatures;\\n}\\n\\n.ace_keyboard-focus:focus {\\n box-shadow: inset 0 0 0 2px #5E9ED6;\\n outline: none;\\n}\\n\\n.ace_dragging .ace_scroller:before{\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n content: \\'\\';\\n background: rgba(250, 250, 250, 0.01);\\n z-index: 1000;\\n}\\n.ace_dragging.ace_dark .ace_scroller:before{\\n background: rgba(0, 0, 0, 0.01);\\n}\\n\\n.ace_gutter {\\n position: absolute;\\n overflow : hidden;\\n width: auto;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n cursor: default;\\n z-index: 4;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n contain: style size layout;\\n}\\n\\n.ace_gutter-active-line {\\n position: absolute;\\n left: 0;\\n right: 0;\\n}\\n\\n.ace_scroller.ace_scroll-left:after {\\n content: \"\";\\n position: absolute;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\n pointer-events: none;\\n}\\n\\n.ace_gutter-cell, .ace_gutter-cell_svg-icons {\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n padding-left: 19px;\\n padding-right: 6px;\\n background-repeat: no-repeat;\\n}\\n\\n.ace_gutter-cell_svg-icons .ace_gutter_annotation {\\n margin-left: -14px;\\n float: left;\\n}\\n\\n.ace_gutter-cell .ace_gutter_annotation {\\n margin-left: -19px;\\n float: left;\\n}\\n\\n.ace_gutter-cell.ace_error, .ace_icon.ace_error, .ace_icon.ace_error_fold {\\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\");\\n background-repeat: no-repeat;\\n background-position: 2px center;\\n}\\n\\n.ace_gutter-cell.ace_warning, .ace_icon.ace_warning, .ace_icon.ace_warning_fold {\\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\");\\n background-repeat: no-repeat;\\n background-position: 2px center;\\n}\\n\\n.ace_gutter-cell.ace_info, .ace_icon.ace_info {\\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\");\\n background-repeat: no-repeat;\\n background-position: 2px center;\\n}\\n.ace_dark .ace_gutter-cell.ace_info, .ace_dark .ace_icon.ace_info {\\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\");\\n}\\n\\n.ace_icon_svg.ace_error {\\n -webkit-mask-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJyZWQiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KPGNpcmNsZSBmaWxsPSJub25lIiBjeD0iOCIgY3k9IjgiIHI9IjciIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGxpbmUgeDE9IjExIiB5MT0iNSIgeDI9IjUiIHkyPSIxMSIvPgo8bGluZSB4MT0iMTEiIHkxPSIxMSIgeDI9IjUiIHkyPSI1Ii8+CjwvZz4KPC9zdmc+\");\\n background-color: crimson;\\n}\\n.ace_icon_svg.ace_warning {\\n -webkit-mask-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJkYXJrb3JhbmdlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+Cjxwb2x5Z29uIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGZpbGw9Im5vbmUiIHBvaW50cz0iOCAxIDE1IDE1IDEgMTUgOCAxIi8+CjxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iMC4wMSIgaGVpZ2h0PSIwLjAxIi8+CjxsaW5lIHgxPSI4IiB5MT0iNiIgeDI9IjgiIHkyPSIxMCIvPgo8L2c+Cjwvc3ZnPg==\");\\n background-color: darkorange;\\n}\\n.ace_icon_svg.ace_info {\\n -webkit-mask-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiI+CjxnIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJibHVlIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CjxjaXJjbGUgZmlsbD0ibm9uZSIgY3g9IjgiIGN5PSI4IiByPSI3IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjxwb2x5bGluZSBwb2ludHM9IjggMTEgOCA4Ii8+Cjxwb2x5bGluZSBwb2ludHM9IjkgOCA2IDgiLz4KPGxpbmUgeDE9IjEwIiB5MT0iMTEiIHgyPSI2IiB5Mj0iMTEiLz4KPHJlY3QgeD0iOCIgeT0iNSIgd2lkdGg9IjAuMDEiIGhlaWdodD0iMC4wMSIvPgo8L2c+Cjwvc3ZnPg==\");\\n background-color: royalblue;\\n}\\n\\n.ace_icon_svg.ace_error_fold {\\n -webkit-mask-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxNiIgZmlsbD0ibm9uZSI+CiAgPHBhdGggZD0ibSAxOC45Mjk4NTEsNy44Mjk4MDc2IGMgMC4xNDYzNTMsNi4zMzc0NjA0IC02LjMyMzE0Nyw3Ljc3Nzg0NDQgLTcuNDc3OTEyLDcuNzc3ODQ0NCAtMi4xMDcyNzI2LC0wLjEyODc1IDUuMTE3Njc4LDAuMzU2MjQ5IDUuMDUxNjk4LC03Ljg3MDA2MTggLTAuNjA0NjcyLC04LjAwMzk3MzQ5IC03LjA3NzI3MDYsLTcuNTYzMTE4OSAtNC44NTczLC03LjQzMDM5NTU2IDEuNjA2LC0wLjExNTE0MjI1IDYuODk3NDg1LDEuMjYyNTQ1OTYgNy4yODM1MTQsNy41MjI2MTI5NiB6IiBmaWxsPSJjcmltc29uIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0ibSA4LjExNDc1NjIsMi4wNTI5ODI4IGMgMy4zNDkxNjk4LDAgNi4wNjQxMzI4LDIuNjc2ODYyNyA2LjA2NDEzMjgsNS45Nzg5NTMgMCwzLjMwMjExMjIgLTIuNzE0OTYzLDUuOTc4OTIwMiAtNi4wNjQxMzI4LDUuOTc4OTIwMiAtMy4zNDkxNDczLDAgLTYuMDY0MTc3MiwtMi42NzY4MDggLTYuMDY0MTc3MiwtNS45Nzg5MjAyIDAuMDA1MzksLTMuMjk5ODg2MSAyLjcxNzI2NTYsLTUuOTczNjQwOCA2LjA2NDE3NzIsLTUuOTc4OTUzIHogbSAwLC0xLjczNTgyNzE5IGMgLTQuMzIxNDgzNiwwIC03LjgyNDc0MDM4LDMuNDU0MDE4NDkgLTcuODI0NzQwMzgsNy43MTQ3ODAxOSAwLDQuMjYwNzI4MiAzLjUwMzI1Njc4LDcuNzE0NzQ1MiA3LjgyNDc0MDM4LDcuNzE0NzQ1MiA0LjMyMTQ0OTgsMCA3LjgyNDY5OTgsLTMuNDU0MDE3IDcuODI0Njk5OCwtNy43MTQ3NDUyIDAsLTIuMDQ2MDkxNCAtMC44MjQzOTIsLTQuMDA4MzY3MiAtMi4yOTE3NTYsLTUuNDU1MTc0NiBDIDEyLjE4MDIyNSwxLjEyOTk2NDggMTAuMTkwMDEzLDAuMzE3MTU1NjEgOC4xMTQ3NTYyLDAuMzE3MTU1NjEgWiBNIDYuOTM3NDU2Myw4LjI0MDU5ODUgNC42NzE4Njg1LDEwLjQ4NTg1MiA2LjAwODY4MTQsMTEuODc2NzI4IDguMzE3MDAzNSw5LjYwMDc5MTEgMTAuNjI1MzM3LDExLjg3NjcyOCAxMS45NjIxMzgsMTAuNDg1ODUyIDkuNjk2NTUwOCw4LjI0MDU5ODUgMTEuOTYyMTM4LDYuMDA2ODA2NiAxMC41NzMyNDYsNC42Mzc0MzM1IDguMzE3MDAzNSw2Ljg3MzQyOTcgNi4wNjA3NjA3LDQuNjM3NDMzNSA0LjY3MTg2ODUsNi4wMDY4MDY2IFoiIGZpbGw9ImNyaW1zb24iIHN0cm9rZS13aWR0aD0iMiIvPgo8L3N2Zz4=\");\\n background-color: crimson;\\n}\\n.ace_icon_svg.ace_warning_fold {\\n -webkit-mask-image: url(\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAyMCAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNC43NzY5IDE0LjczMzdMOC42NTE5MiAyLjQ4MzY5QzguMzI5NDYgMS44Mzg3NyA3LjQwOTEzIDEuODM4NzcgNy4wODY2NyAyLjQ4MzY5TDAuOTYxNjY5IDE0LjczMzdDMC42NzA3NzUgMTUuMzE1NSAxLjA5MzgzIDE2IDEuNzQ0MjkgMTZIMTMuOTk0M0MxNC42NDQ4IDE2IDE1LjA2NzggMTUuMzE1NSAxNC43NzY5IDE0LjczMzdaTTMuMTYwMDcgMTQuMjVMNy44NjkyOSA0LjgzMTU2TDEyLjU3ODUgMTQuMjVIMy4xNjAwN1pNOC43NDQyOSAxMS42MjVWMTMuMzc1SDYuOTk0MjlWMTEuNjI1SDguNzQ0MjlaTTYuOTk0MjkgMTAuNzVWNy4yNUg4Ljc0NDI5VjEwLjc1SDYuOTk0MjlaIiBmaWxsPSIjRUM3MjExIi8+CjxwYXRoIGQ9Ik0xMS4xOTkxIDIuOTUyMzhDMTAuODgwOSAyLjMxNDY3IDEwLjM1MzcgMS44MDUyNiA5LjcwNTUgMS41MDlMMTEuMDQxIDEuMDY5NzhDMTEuNjg4MyAwLjk0OTgxNCAxMi4zMzcgMS4yNzI2MyAxMi42MzE3IDEuODYxNDFMMTcuNjEzNiAxMS44MTYxQzE4LjM1MjcgMTMuMjkyOSAxNy41OTM4IDE1LjA4MDQgMTYuMDE4IDE1LjU3NDVDMTYuNDA0NCAxNC40NTA3IDE2LjMyMzEgMTMuMjE4OCAxNS43OTI0IDEyLjE1NTVMMTEuMTk5MSAyLjk1MjM4WiIgZmlsbD0iI0VDNzIxMSIvPgo8L3N2Zz4=\");\\n background-color: darkorange;\\n}\\n\\n.ace_scrollbar {\\n contain: strict;\\n position: absolute;\\n right: 0;\\n bottom: 0;\\n z-index: 6;\\n}\\n\\n.ace_scrollbar-inner {\\n position: absolute;\\n cursor: text;\\n left: 0;\\n top: 0;\\n}\\n\\n.ace_scrollbar-v{\\n overflow-x: hidden;\\n overflow-y: scroll;\\n top: 0;\\n}\\n\\n.ace_scrollbar-h {\\n overflow-x: scroll;\\n overflow-y: hidden;\\n left: 0;\\n}\\n\\n.ace_print-margin {\\n position: absolute;\\n height: 100%;\\n}\\n\\n.ace_text-input {\\n position: absolute;\\n z-index: 0;\\n width: 0.5em;\\n height: 1em;\\n opacity: 0;\\n background: transparent;\\n -moz-appearance: none;\\n appearance: none;\\n border: none;\\n resize: none;\\n outline: none;\\n overflow: hidden;\\n font: inherit;\\n padding: 0 1px;\\n margin: 0 -1px;\\n contain: strict;\\n -ms-user-select: text;\\n -moz-user-select: text;\\n -webkit-user-select: text;\\n user-select: text;\\n /*with `pre-line` chrome inserts instead of space*/\\n white-space: pre!important;\\n}\\n.ace_text-input.ace_composition {\\n background: transparent;\\n color: inherit;\\n z-index: 1000;\\n opacity: 1;\\n}\\n.ace_composition_placeholder { color: transparent }\\n.ace_composition_marker { \\n border-bottom: 1px solid;\\n position: absolute;\\n border-radius: 0;\\n margin-top: 1px;\\n}\\n\\n[ace_nocontext=true] {\\n transform: none!important;\\n filter: none!important;\\n clip-path: none!important;\\n mask : none!important;\\n contain: none!important;\\n perspective: none!important;\\n mix-blend-mode: initial!important;\\n z-index: auto;\\n}\\n\\n.ace_layer {\\n z-index: 1;\\n position: absolute;\\n overflow: hidden;\\n /* workaround for chrome bug https://github.com/ajaxorg/ace/issues/2312*/\\n word-wrap: normal;\\n white-space: pre;\\n height: 100%;\\n width: 100%;\\n box-sizing: border-box;\\n /* setting pointer-events: auto; on node under the mouse, which changes\\n during scroll, will break mouse wheel scrolling in Safari */\\n pointer-events: none;\\n}\\n\\n.ace_gutter-layer {\\n position: relative;\\n width: auto;\\n text-align: right;\\n pointer-events: auto;\\n height: 1000000px;\\n contain: style size layout;\\n}\\n\\n.ace_text-layer {\\n font: inherit !important;\\n position: absolute;\\n height: 1000000px;\\n width: 1000000px;\\n contain: style size layout;\\n}\\n\\n.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {\\n contain: style size layout;\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n}\\n\\n.ace_hidpi .ace_text-layer,\\n.ace_hidpi .ace_gutter-layer,\\n.ace_hidpi .ace_content,\\n.ace_hidpi .ace_gutter {\\n contain: strict;\\n}\\n.ace_hidpi .ace_text-layer > .ace_line, \\n.ace_hidpi .ace_text-layer > .ace_line_group {\\n contain: strict;\\n}\\n\\n.ace_cjk {\\n display: inline-block;\\n text-align: center;\\n}\\n\\n.ace_cursor-layer {\\n z-index: 4;\\n}\\n\\n.ace_cursor {\\n z-index: 4;\\n position: absolute;\\n box-sizing: border-box;\\n border-left: 2px solid;\\n /* workaround for smooth cursor repaintng whole screen in chrome */\\n transform: translatez(0);\\n}\\n\\n.ace_multiselect .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_slim-cursors .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_overwrite-cursors .ace_cursor {\\n border-left-width: 0;\\n border-bottom: 1px solid;\\n}\\n\\n.ace_hidden-cursors .ace_cursor {\\n opacity: 0.2;\\n}\\n\\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\\n opacity: 0;\\n}\\n\\n.ace_smooth-blinking .ace_cursor {\\n transition: opacity 0.18s;\\n}\\n\\n.ace_animate-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: step-end;\\n animation-name: blink-ace-animate;\\n animation-iteration-count: infinite;\\n}\\n\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: ease-in-out;\\n animation-name: blink-ace-animate-smooth;\\n}\\n \\n@keyframes blink-ace-animate {\\n from, to { opacity: 1; }\\n 60% { opacity: 0; }\\n}\\n\\n@keyframes blink-ace-animate-smooth {\\n from, to { opacity: 1; }\\n 45% { opacity: 1; }\\n 60% { opacity: 0; }\\n 85% { opacity: 0; }\\n}\\n\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\n position: absolute;\\n z-index: 3;\\n}\\n\\n.ace_marker-layer .ace_selection {\\n position: absolute;\\n z-index: 5;\\n}\\n\\n.ace_marker-layer .ace_bracket {\\n position: absolute;\\n z-index: 6;\\n}\\n\\n.ace_marker-layer .ace_error_bracket {\\n position: absolute;\\n border-bottom: 1px solid #DE5555;\\n border-radius: 0;\\n}\\n\\n.ace_marker-layer .ace_active-line {\\n position: absolute;\\n z-index: 2;\\n}\\n\\n.ace_marker-layer .ace_selected-word {\\n position: absolute;\\n z-index: 4;\\n box-sizing: border-box;\\n}\\n\\n.ace_line .ace_fold {\\n box-sizing: border-box;\\n\\n display: inline-block;\\n height: 11px;\\n margin-top: -2px;\\n vertical-align: middle;\\n\\n background-image:\\n url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\\n url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\");\\n background-repeat: no-repeat, repeat-x;\\n background-position: center center, top left;\\n color: transparent;\\n\\n border: 1px solid black;\\n border-radius: 2px;\\n\\n cursor: pointer;\\n pointer-events: auto;\\n}\\n\\n.ace_dark .ace_fold {\\n}\\n\\n.ace_fold:hover{\\n background-image:\\n url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\\n url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\");\\n}\\n\\n.ace_tooltip {\\n background-color: #f5f5f5;\\n border: 1px solid gray;\\n border-radius: 1px;\\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\n color: black;\\n max-width: 100%;\\n padding: 3px 4px;\\n position: fixed;\\n z-index: 999999;\\n box-sizing: border-box;\\n cursor: default;\\n white-space: pre;\\n word-wrap: break-word;\\n line-height: normal;\\n font-style: normal;\\n font-weight: normal;\\n letter-spacing: normal;\\n pointer-events: none;\\n}\\n\\n.ace_tooltip.ace_dark {\\n background-color: #636363;\\n color: #fff;\\n}\\n\\n.ace_tooltip:focus {\\n outline: 1px solid #5E9ED6;\\n}\\n\\n.ace_icon {\\n display: inline-block;\\n width: 18px;\\n vertical-align: top;\\n}\\n\\n.ace_icon_svg {\\n display: inline-block;\\n width: 12px;\\n vertical-align: top;\\n -webkit-mask-repeat: no-repeat;\\n -webkit-mask-size: 12px;\\n -webkit-mask-position: center;\\n}\\n\\n.ace_folding-enabled > .ace_gutter-cell, .ace_folding-enabled > .ace_gutter-cell_svg-icons {\\n padding-right: 13px;\\n}\\n\\n.ace_fold-widget {\\n box-sizing: border-box;\\n\\n margin: 0 -12px 0 1px;\\n display: none;\\n width: 11px;\\n vertical-align: top;\\n\\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\");\\n background-repeat: no-repeat;\\n background-position: center;\\n\\n border-radius: 3px;\\n \\n border: 1px solid transparent;\\n cursor: pointer;\\n}\\n\\n.ace_folding-enabled .ace_fold-widget {\\n display: inline-block; \\n}\\n\\n.ace_fold-widget.ace_end {\\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\");\\n}\\n\\n.ace_fold-widget.ace_closed {\\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\");\\n}\\n\\n.ace_fold-widget:hover {\\n border: 1px solid rgba(0, 0, 0, 0.3);\\n background-color: rgba(255, 255, 255, 0.2);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\n}\\n\\n.ace_fold-widget:active {\\n border: 1px solid rgba(0, 0, 0, 0.4);\\n background-color: rgba(0, 0, 0, 0.05);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\n}\\n/**\\n * Dark version for fold widgets\\n */\\n.ace_dark .ace_fold-widget {\\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");\\n}\\n.ace_dark .ace_fold-widget.ace_end {\\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");\\n}\\n.ace_dark .ace_fold-widget.ace_closed {\\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");\\n}\\n.ace_dark .ace_fold-widget:hover {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.ace_dark .ace_fold-widget:active {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n}\\n\\n.ace_inline_button {\\n border: 1px solid lightgray;\\n display: inline-block;\\n margin: -1px 8px;\\n padding: 0 5px;\\n pointer-events: auto;\\n cursor: pointer;\\n}\\n.ace_inline_button:hover {\\n border-color: gray;\\n background: rgba(200,200,200,0.2);\\n display: inline-block;\\n pointer-events: auto;\\n}\\n\\n.ace_fold-widget.ace_invalid {\\n background-color: #FFB4B4;\\n border-color: #DE5555;\\n}\\n\\n.ace_fade-fold-widgets .ace_fold-widget {\\n transition: opacity 0.4s ease 0.05s;\\n opacity: 0;\\n}\\n\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\n transition: opacity 0.05s ease 0.05s;\\n opacity:1;\\n}\\n\\n.ace_underline {\\n text-decoration: underline;\\n}\\n\\n.ace_bold {\\n font-weight: bold;\\n}\\n\\n.ace_nobold .ace_bold {\\n font-weight: normal;\\n}\\n\\n.ace_italic {\\n font-style: italic;\\n}\\n\\n\\n.ace_error-marker {\\n background-color: rgba(255, 0, 0,0.2);\\n position: absolute;\\n z-index: 9;\\n}\\n\\n.ace_highlight-marker {\\n background-color: rgba(255, 255, 0,0.2);\\n position: absolute;\\n z-index: 8;\\n}\\n\\n.ace_mobile-menu {\\n position: absolute;\\n line-height: 1.5;\\n border-radius: 4px;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n background: white;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #dcdcdc;\\n color: black;\\n}\\n.ace_dark > .ace_mobile-menu {\\n background: #333;\\n color: #ccc;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #444;\\n\\n}\\n.ace_mobile-button {\\n padding: 2px;\\n cursor: pointer;\\n overflow: hidden;\\n}\\n.ace_mobile-button:hover {\\n background-color: #eee;\\n opacity:1;\\n}\\n.ace_mobile-button:active {\\n background-color: #ddd;\\n}\\n\\n.ace_placeholder {\\n font-family: arial;\\n transform: scale(0.9);\\n transform-origin: left;\\n white-space: pre;\\n opacity: 0.7;\\n margin: 0 10px;\\n}\\n\\n.ace_ghost_text {\\n opacity: 0.5;\\n font-style: italic;\\n white-space: pre;\\n}\\n\\n.ace_screenreader-only {\\n position:absolute;\\n left:-10000px;\\n top:auto;\\n width:1px;\\n height:1px;\\n overflow:hidden;\\n}';\n }), ace.define(\"ace/layer/decorators\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/oop\", \"ace/lib/event_emitter\"], function (e, t, n) {\n \"use strict\";\n\n var i = e(\"../lib/dom\"),\n o = e(\"../lib/oop\"),\n e = e(\"../lib/event_emitter\").EventEmitter,\n r = (s.prototype.$updateDecorators = function (e) {\n var t = !0 === this.renderer.theme.isDark ? this.colors.dark : this.colors.light,\n n = (e && (this.maxHeight = e.maxHeight, this.lineHeight = e.lineHeight, this.canvasHeight = e.height, (e.lastRow + 1) * this.lineHeight < this.canvasHeight ? this.heightRatio = 1 : this.heightRatio = this.canvasHeight / this.maxHeight), this.canvas.getContext(\"2d\"));\n var i = this.renderer.session.$annotations;\n if (n.clearRect(0, 0, this.canvas.width, this.canvas.height), i) for (var o = {\n info: 1,\n warning: 2,\n error: 3\n }, r = (i.forEach(function (e) {\n e.priority = o[e.type] || null;\n }), i = i.sort(function (e, t) {\n return e.priority < t.priority ? -1 : e.priority > t.priority ? 1 : 0;\n }), this.renderer.session.$foldData), s = 0; s < i.length; s++) {\n var a,\n l = i[s].row,\n c = this.compensateFoldRows(l, r),\n h = Math.round((l - c) * this.lineHeight * this.heightRatio),\n d = Math.round((l - c) * this.lineHeight * this.heightRatio),\n l = Math.round(((l - c) * this.lineHeight + this.lineHeight) * this.heightRatio);\n l - d < this.minDecorationHeight && ((a = (d + l) / 2 | 0) < this.halfMinDecorationHeight ? a = this.halfMinDecorationHeight : a + this.halfMinDecorationHeight > this.canvasHeight && (a = this.canvasHeight - this.halfMinDecorationHeight), d = Math.round(a - this.halfMinDecorationHeight), l = Math.round(a + this.halfMinDecorationHeight)), n.fillStyle = t[i[s].type] || null, n.fillRect(0, h, this.canvasWidth, l - d);\n }\n e = this.renderer.session.selection.getCursor();\n e && (c = this.compensateFoldRows(e.row, r), h = Math.round((e.row - c) * this.lineHeight * this.heightRatio), n.fillStyle = \"rgba(0, 0, 0, 0.5)\", n.fillRect(0, h, this.canvasWidth, 2));\n }, s.prototype.compensateFoldRows = function (e, t) {\n var n = 0;\n if (t && 0 < t.length) for (var i = 0; i < t.length; i++) e > t[i].start.row && e < t[i].end.row ? n += e - t[i].start.row : e >= t[i].end.row && (n += t[i].end.row - t[i].start.row);\n return n;\n }, s);\n function s(e, t) {\n this.canvas = i.createElement(\"canvas\"), this.renderer = t, this.pixelRatio = 1, this.maxHeight = t.layerConfig.maxHeight, this.lineHeight = t.layerConfig.lineHeight, this.canvasHeight = e.parent.scrollHeight, this.heightRatio = this.canvasHeight / this.maxHeight, this.canvasWidth = e.width, this.minDecorationHeight = 2 * this.pixelRatio | 0, this.halfMinDecorationHeight = this.minDecorationHeight / 2 | 0, this.canvas.width = this.canvasWidth, this.canvas.height = this.canvasHeight, this.canvas.style.top = \"0px\", this.canvas.style.right = \"0px\", this.canvas.style.zIndex = \"7px\", this.canvas.style.position = \"absolute\", this.colors = {}, this.colors.dark = {\n error: \"rgba(255, 18, 18, 1)\",\n warning: \"rgba(18, 136, 18, 1)\",\n info: \"rgba(18, 18, 136, 1)\"\n }, this.colors.light = {\n error: \"rgb(255,51,51)\",\n warning: \"rgb(32,133,72)\",\n info: \"rgb(35,68,138)\"\n }, e.element.appendChild(this.canvas);\n }\n o.implement(r.prototype, e), t.Decorator = r;\n }), ace.define(\"ace/virtual_renderer\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/lib/lang\", \"ace/config\", \"ace/layer/gutter\", \"ace/layer/marker\", \"ace/layer/text\", \"ace/layer/cursor\", \"ace/scrollbar\", \"ace/scrollbar\", \"ace/scrollbar_custom\", \"ace/scrollbar_custom\", \"ace/renderloop\", \"ace/layer/font_metrics\", \"ace/lib/event_emitter\", \"ace/css/editor-css\", \"ace/layer/decorators\", \"ace/lib/useragent\"], function (e, t, n) {\n \"use strict\";\n\n var i = e(\"./lib/oop\"),\n a = e(\"./lib/dom\"),\n o = e(\"./lib/lang\"),\n r = e(\"./config\"),\n s = e(\"./layer/gutter\").Gutter,\n l = e(\"./layer/marker\").Marker,\n c = e(\"./layer/text\").Text,\n h = e(\"./layer/cursor\").Cursor,\n d = e(\"./scrollbar\").HScrollBar,\n u = e(\"./scrollbar\").VScrollBar,\n g = e(\"./scrollbar_custom\").HScrollBar,\n p = e(\"./scrollbar_custom\").VScrollBar,\n m = e(\"./renderloop\").RenderLoop,\n f = e(\"./layer/font_metrics\").FontMetrics,\n C = e(\"./lib/event_emitter\").EventEmitter,\n y = e(\"./css/editor-css\"),\n v = e(\"./layer/decorators\").Decorator,\n I = e(\"./lib/useragent\"),\n e = (a.importCssString(y, \"ace_editor.css\", !1), b.prototype.updateCharacterSize = function () {\n this.$textLayer.allowBoldFonts != this.$allowBoldFonts && (this.$allowBoldFonts = this.$textLayer.allowBoldFonts, this.setStyle(\"ace_nobold\", !this.$allowBoldFonts)), this.layerConfig.characterWidth = this.characterWidth = this.$textLayer.getCharacterWidth(), this.layerConfig.lineHeight = this.lineHeight = this.$textLayer.getLineHeight(), this.$updatePrintMargin(), a.setStyle(this.scroller.style, \"line-height\", this.lineHeight + \"px\");\n }, b.prototype.setSession = function (e) {\n this.session && this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode), (this.session = e) && this.scrollMargin.top && e.getScrollTop() <= 0 && e.setScrollTop(-this.scrollMargin.top), this.$cursorLayer.setSession(e), this.$markerBack.setSession(e), this.$markerFront.setSession(e), this.$gutterLayer.setSession(e), this.$textLayer.setSession(e), e && (this.$loop.schedule(this.CHANGE_FULL), this.session.$setFontMetrics(this.$fontMetrics), this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null, this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this), this.onChangeNewLineMode(), this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode));\n }, b.prototype.updateLines = function (e, t, n) {\n if (void 0 === t && (t = 1 / 0), this.$changedLines ? (this.$changedLines.firstRow > e && (this.$changedLines.firstRow = e), this.$changedLines.lastRow < t && (this.$changedLines.lastRow = t)) : this.$changedLines = {\n firstRow: e,\n lastRow: t\n }, this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (!n) return;\n this.$changedLines.lastRow = this.layerConfig.lastRow;\n }\n this.$changedLines.firstRow > this.layerConfig.lastRow || this.$loop.schedule(this.CHANGE_LINES);\n }, b.prototype.onChangeNewLineMode = function () {\n this.$loop.schedule(this.CHANGE_TEXT), this.$textLayer.$updateEolChar(), this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n }, b.prototype.onChangeTabSize = function () {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER), this.$textLayer.onChangeTabSize();\n }, b.prototype.updateText = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n }, b.prototype.updateFull = function (e) {\n e ? this.$renderChanges(this.CHANGE_FULL, !0) : this.$loop.schedule(this.CHANGE_FULL);\n }, b.prototype.updateFontSize = function () {\n this.$textLayer.checkForSizeChanges();\n }, b.prototype.$updateSizeAsync = function () {\n this.$loop.pending ? this.$size.$dirty = !0 : this.onResize();\n }, b.prototype.onResize = function (e, t, n, i) {\n if (!(2 < this.resizing)) {\n 0 < this.resizing ? this.resizing++ : this.resizing = e ? 1 : 0;\n var o = this.container,\n o = (i = i || o.clientHeight || o.scrollHeight, n = n || o.clientWidth || o.scrollWidth, this.$updateCachedSize(e, t, n, i));\n if (this.$resizeTimer && this.$resizeTimer.cancel(), !this.$size.scrollerHeight || !n && !i) return this.resizing = 0;\n e && (this.$gutterLayer.$padding = null), e ? this.$renderChanges(o | this.$changes, !0) : this.$loop.schedule(o | this.$changes), this.resizing && (this.resizing = 0), this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null, this.$customScrollbar && this.$updateCustomScrollbar(!0);\n }\n }, b.prototype.$updateCachedSize = function (e, t, n, i) {\n i -= this.$extraHeight || 0;\n var o = 0,\n r = this.$size,\n s = {\n width: r.width,\n height: r.height,\n scrollerHeight: r.scrollerHeight,\n scrollerWidth: r.scrollerWidth\n };\n return i && (e || r.height != i) && (r.height = i, o |= this.CHANGE_SIZE, r.scrollerHeight = r.height, this.$horizScroll && (r.scrollerHeight -= this.scrollBarH.getHeight()), this.scrollBarV.setHeight(r.scrollerHeight), this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\", o |= this.CHANGE_SCROLL), n && (e || r.width != n) && (o |= this.CHANGE_SIZE, r.width = n, null == t && (t = this.$showGutter ? this.$gutter.offsetWidth : 0), this.gutterWidth = t, a.setStyle(this.scrollBarH.element.style, \"left\", t + \"px\"), a.setStyle(this.scroller.style, \"left\", t + this.margin.left + \"px\"), r.scrollerWidth = Math.max(0, n - t - this.scrollBarV.getWidth() - this.margin.h), a.setStyle(this.$gutter.style, \"left\", this.margin.left + \"px\"), t = this.scrollBarV.getWidth() + \"px\", a.setStyle(this.scrollBarH.element.style, \"right\", t), a.setStyle(this.scroller.style, \"right\", t), a.setStyle(this.scroller.style, \"bottom\", this.scrollBarH.getHeight()), this.scrollBarH.setWidth(r.scrollerWidth), this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || e) && (o |= this.CHANGE_FULL), r.$dirty = !n || !i, o && this._signal(\"resize\", s), o;\n }, b.prototype.onGutterResize = function (e) {\n e = this.$showGutter ? e : 0;\n e != this.gutterWidth && (this.$changes |= this.$updateCachedSize(!0, e, this.$size.width, this.$size.height)), this.session.getUseWrapMode() && this.adjustWrapLimit() || this.$size.$dirty ? this.$loop.schedule(this.CHANGE_FULL) : this.$computeLayerConfig();\n }, b.prototype.adjustWrapLimit = function () {\n var e = this.$size.scrollerWidth - 2 * this.$padding,\n e = Math.floor(e / this.characterWidth);\n return this.session.adjustWrapLimit(e, this.$showPrintMargin && this.$printMarginColumn);\n }, b.prototype.setAnimatedScroll = function (e) {\n this.setOption(\"animatedScroll\", e);\n }, b.prototype.getAnimatedScroll = function () {\n return this.$animatedScroll;\n }, b.prototype.setShowInvisibles = function (e) {\n this.setOption(\"showInvisibles\", e), this.session.$bidiHandler.setShowInvisibles(e);\n }, b.prototype.getShowInvisibles = function () {\n return this.getOption(\"showInvisibles\");\n }, b.prototype.getDisplayIndentGuides = function () {\n return this.getOption(\"displayIndentGuides\");\n }, b.prototype.setDisplayIndentGuides = function (e) {\n this.setOption(\"displayIndentGuides\", e);\n }, b.prototype.getHighlightIndentGuides = function () {\n return this.getOption(\"highlightIndentGuides\");\n }, b.prototype.setHighlightIndentGuides = function (e) {\n this.setOption(\"highlightIndentGuides\", e);\n }, b.prototype.setShowPrintMargin = function (e) {\n this.setOption(\"showPrintMargin\", e);\n }, b.prototype.getShowPrintMargin = function () {\n return this.getOption(\"showPrintMargin\");\n }, b.prototype.setPrintMarginColumn = function (e) {\n this.setOption(\"printMarginColumn\", e);\n }, b.prototype.getPrintMarginColumn = function () {\n return this.getOption(\"printMarginColumn\");\n }, b.prototype.getShowGutter = function () {\n return this.getOption(\"showGutter\");\n }, b.prototype.setShowGutter = function (e) {\n return this.setOption(\"showGutter\", e);\n }, b.prototype.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n }, b.prototype.setFadeFoldWidgets = function (e) {\n this.setOption(\"fadeFoldWidgets\", e);\n }, b.prototype.setHighlightGutterLine = function (e) {\n this.setOption(\"highlightGutterLine\", e);\n }, b.prototype.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n }, b.prototype.$updatePrintMargin = function () {\n var e;\n (this.$showPrintMargin || this.$printMarginEl) && (this.$printMarginEl || ((e = a.createElement(\"div\")).className = \"ace_layer ace_print-margin-layer\", this.$printMarginEl = a.createElement(\"div\"), this.$printMarginEl.className = \"ace_print-margin\", e.appendChild(this.$printMarginEl), this.content.insertBefore(e, this.content.firstChild)), (e = this.$printMarginEl.style).left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + \"px\", e.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\", this.session) && -1 == this.session.$wrap && this.adjustWrapLimit();\n }, b.prototype.getContainerElement = function () {\n return this.container;\n }, b.prototype.getMouseEventTarget = function () {\n return this.scroller;\n }, b.prototype.getTextAreaContainer = function () {\n return this.container;\n }, b.prototype.$moveTextAreaToCursor = function () {\n var e, t, n, i, o, r, s;\n this.$isMousePressed || (e = this.textarea.style, r = this.$composition, this.$keepTextAreaAtCursor || r ? (n = this.$cursorLayer.$pixelPos) && (r && r.markerRange && (n = this.$cursorLayer.getPixelPosition(r.markerRange.start, !0)), s = this.layerConfig, t = n.top, n = n.left, t -= s.offset, i = r && r.useTextareaForIME || I.isMobile ? this.lineHeight : 1, t < 0 || t > s.height - i ? a.translate(this.textarea, 0, 0) : (s = 1, o = this.$size.height - i, r ? r.useTextareaForIME ? (r = this.textarea.value, s = this.characterWidth * this.session.$getStringScreenWidth(r)[0]) : t += this.lineHeight + 2 : t += this.lineHeight, (n -= this.scrollLeft) > this.$size.scrollerWidth - s && (n = this.$size.scrollerWidth - s), n += this.gutterWidth + this.margin.left, a.setStyle(e, \"height\", i + \"px\"), a.setStyle(e, \"width\", s + \"px\"), a.translate(this.textarea, Math.min(n, this.$size.scrollerWidth - s), Math.min(t, o)))) : a.translate(this.textarea, -100, 0));\n }, b.prototype.getFirstVisibleRow = function () {\n return this.layerConfig.firstRow;\n }, b.prototype.getFirstFullyVisibleRow = function () {\n return this.layerConfig.firstRow + (0 === this.layerConfig.offset ? 0 : 1);\n }, b.prototype.getLastFullyVisibleRow = function () {\n var e = this.layerConfig,\n t = e.lastRow;\n return this.session.documentToScreenRow(t, 0) * e.lineHeight - this.session.getScrollTop() > e.height - e.lineHeight ? t - 1 : t;\n }, b.prototype.getLastVisibleRow = function () {\n return this.layerConfig.lastRow;\n }, b.prototype.setPadding = function (e) {\n this.$padding = e, this.$textLayer.setPadding(e), this.$cursorLayer.setPadding(e), this.$markerFront.setPadding(e), this.$markerBack.setPadding(e), this.$loop.schedule(this.CHANGE_FULL), this.$updatePrintMargin();\n }, b.prototype.setScrollMargin = function (e, t, n, i) {\n var o = this.scrollMargin;\n o.top = 0 | e, o.bottom = 0 | t, o.right = 0 | i, o.left = 0 | n, o.v = o.top + o.bottom, o.h = o.left + o.right, o.top && this.scrollTop <= 0 && this.session && this.session.setScrollTop(-o.top), this.updateFull();\n }, b.prototype.setMargin = function (e, t, n, i) {\n var o = this.margin;\n o.top = 0 | e, o.bottom = 0 | t, o.right = 0 | i, o.left = 0 | n, o.v = o.top + o.bottom, o.h = o.left + o.right, this.$updateCachedSize(!0, this.gutterWidth, this.$size.width, this.$size.height), this.updateFull();\n }, b.prototype.getHScrollBarAlwaysVisible = function () {\n return this.$hScrollBarAlwaysVisible;\n }, b.prototype.setHScrollBarAlwaysVisible = function (e) {\n this.setOption(\"hScrollBarAlwaysVisible\", e);\n }, b.prototype.getVScrollBarAlwaysVisible = function () {\n return this.$vScrollBarAlwaysVisible;\n }, b.prototype.setVScrollBarAlwaysVisible = function (e) {\n this.setOption(\"vScrollBarAlwaysVisible\", e);\n }, b.prototype.$updateScrollBarV = function () {\n var e = this.layerConfig.maxHeight,\n t = this.$size.scrollerHeight;\n !this.$maxLines && this.$scrollPastEnd && (e -= (t - this.lineHeight) * this.$scrollPastEnd, this.scrollTop > e - t) && (e = this.scrollTop + t, this.scrollBarV.scrollTop = null), this.scrollBarV.setScrollHeight(e + this.scrollMargin.v), this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n }, b.prototype.$updateScrollBarH = function () {\n this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h), this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n }, b.prototype.freeze = function () {\n this.$frozen = !0;\n }, b.prototype.unfreeze = function () {\n this.$frozen = !1;\n }, b.prototype.$renderChanges = function (e, t) {\n if (this.$changes && (e |= this.$changes, this.$changes = 0), this.session && this.container.offsetWidth && !this.$frozen && (e || t)) {\n if (this.$size.$dirty) return this.$changes |= e, this.onResize(!0);\n this.lineHeight || this.$textLayer.checkForSizeChanges(), this._signal(\"beforeRender\", e), this.session && this.session.$bidiHandler && this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n var n,\n i,\n t = this.layerConfig;\n (e & this.CHANGE_FULL || e & this.CHANGE_SIZE || e & this.CHANGE_TEXT || e & this.CHANGE_LINES || e & this.CHANGE_SCROLL || e & this.CHANGE_H_SCROLL) && (e |= this.$computeLayerConfig() | this.$loop.clear(), t.firstRow != this.layerConfig.firstRow && t.firstRowScreen == this.layerConfig.firstRowScreen && 0 < (n = this.scrollTop + (t.firstRow - Math.max(this.layerConfig.firstRow, 0)) * this.lineHeight) && (this.scrollTop = n, e = (e |= this.CHANGE_SCROLL) | (this.$computeLayerConfig() | this.$loop.clear())), t = this.layerConfig, this.$updateScrollBarV(), e & this.CHANGE_H_SCROLL && this.$updateScrollBarH(), a.translate(this.content, -this.scrollLeft, -t.offset), n = t.width + 2 * this.$padding + \"px\", i = t.minHeight + \"px\", a.setStyle(this.content.style, \"width\", n), a.setStyle(this.content.style, \"height\", i)), e & this.CHANGE_H_SCROLL && (a.translate(this.content, -this.scrollLeft, -t.offset), this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller \" : \"ace_scroller ace_scroll-left \", this.enableKeyboardAccessibility) && (this.scroller.className += this.keyboardFocusClassName), e & this.CHANGE_FULL ? (this.$changedLines = null, this.$textLayer.update(t), this.$showGutter && this.$gutterLayer.update(t), this.$customScrollbar && this.$scrollDecorator.$updateDecorators(t), this.$markerBack.update(t), this.$markerFront.update(t), this.$cursorLayer.update(t), this.$moveTextAreaToCursor()) : e & this.CHANGE_SCROLL ? (this.$changedLines = null, e & this.CHANGE_TEXT || e & this.CHANGE_LINES ? this.$textLayer.update(t) : this.$textLayer.scrollLines(t), this.$showGutter && (e & this.CHANGE_GUTTER || e & this.CHANGE_LINES ? this.$gutterLayer.update(t) : this.$gutterLayer.scrollLines(t)), this.$customScrollbar && this.$scrollDecorator.$updateDecorators(t), this.$markerBack.update(t), this.$markerFront.update(t), this.$cursorLayer.update(t), this.$moveTextAreaToCursor()) : (e & this.CHANGE_TEXT ? (this.$changedLines = null, this.$textLayer.update(t), this.$showGutter && this.$gutterLayer.update(t), this.$customScrollbar && this.$scrollDecorator.$updateDecorators(t)) : e & this.CHANGE_LINES ? ((this.$updateLines() || e & this.CHANGE_GUTTER && this.$showGutter) && this.$gutterLayer.update(t), this.$customScrollbar && this.$scrollDecorator.$updateDecorators(t)) : e & this.CHANGE_TEXT || e & this.CHANGE_GUTTER ? (this.$showGutter && this.$gutterLayer.update(t), this.$customScrollbar && this.$scrollDecorator.$updateDecorators(t)) : e & this.CHANGE_CURSOR && (this.$highlightGutterLine && this.$gutterLayer.updateLineHighlight(t), this.$customScrollbar) && this.$scrollDecorator.$updateDecorators(t), e & this.CHANGE_CURSOR && (this.$cursorLayer.update(t), this.$moveTextAreaToCursor()), e & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT) && this.$markerFront.update(t), e & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK) && this.$markerBack.update(t)), this._signal(\"afterRender\", e);\n } else this.$changes |= e;\n }, b.prototype.$autosize = function () {\n var e = this.session.getScreenLength() * this.lineHeight,\n t = this.$maxLines * this.lineHeight,\n n = Math.min(t, Math.max((this.$minLines || 1) * this.lineHeight, e)) + this.scrollMargin.v + (this.$extraHeight || 0);\n this.$horizScroll && (n += this.scrollBarH.getHeight());\n t = !((n = this.$maxPixelHeight && n > this.$maxPixelHeight ? this.$maxPixelHeight : n) <= 2 * this.lineHeight) && t < e;\n n == this.desiredHeight && this.$size.height == this.desiredHeight && t == this.$vScroll || (t != this.$vScroll && (this.$vScroll = t, this.scrollBarV.setVisible(t)), e = this.container.clientWidth, this.container.style.height = n + \"px\", this.$updateCachedSize(!0, this.$gutterWidth, e, n), this.desiredHeight = n, this._signal(\"autosize\"));\n }, b.prototype.$computeLayerConfig = function () {\n var e,\n t = this.session,\n n = this.$size,\n i = n.height <= 2 * this.lineHeight,\n o = this.session.getScreenLength() * this.lineHeight,\n r = this.$getLongestLine(),\n s = !i && (this.$hScrollBarAlwaysVisible || n.scrollerWidth - r - 2 * this.$padding < 0),\n a = this.$horizScroll !== s,\n s = (a && (this.$horizScroll = s, this.scrollBarH.setVisible(s)), this.$vScroll),\n l = (this.$maxLines && 1 < this.lineHeight && this.$autosize(), n.scrollerHeight + this.lineHeight),\n c = !this.$maxLines && this.$scrollPastEnd ? (n.scrollerHeight - this.lineHeight) * this.$scrollPastEnd : 0,\n h = (o += c, this.scrollMargin),\n i = (this.session.setScrollTop(Math.max(-h.top, Math.min(this.scrollTop, o - n.scrollerHeight + h.bottom))), this.session.setScrollLeft(Math.max(-h.left, Math.min(this.scrollLeft, r + 2 * this.$padding - n.scrollerWidth + h.right))), !i && (this.$vScrollBarAlwaysVisible || n.scrollerHeight - o + c < 0 || this.scrollTop > h.top)),\n c = s !== i,\n h = (c && (this.$vScroll = i, this.scrollBarV.setVisible(i)), this.scrollTop % this.lineHeight),\n s = Math.ceil(l / this.lineHeight) - 1,\n s = (i = Math.max(0, Math.round((this.scrollTop - h) / this.lineHeight))) + s,\n d = this.lineHeight,\n i = t.screenToDocumentRow(i, 0),\n u = t.getFoldLine(i),\n t = (u && (i = u.start.row), u = t.documentToScreenRow(i, 0), e = t.getRowLength(i) * d, s = Math.min(t.screenToDocumentRow(s, 0), t.getLength() - 1), l = n.scrollerHeight + t.getRowLength(s) * d + e, h = this.scrollTop - u * d, 0);\n return this.layerConfig.width == r && !a || (t = this.CHANGE_H_SCROLL), (a || c) && (t |= this.$updateCachedSize(!0, this.gutterWidth, n.width, n.height), this._signal(\"scrollbarVisibilityChanged\"), c) && (r = this.$getLongestLine()), this.layerConfig = {\n width: r,\n padding: this.$padding,\n firstRow: i,\n firstRowScreen: u,\n lastRow: s,\n lineHeight: d,\n characterWidth: this.characterWidth,\n minHeight: l,\n maxHeight: o,\n offset: h,\n gutterOffset: d ? Math.max(0, Math.ceil((h + n.height - n.scrollerHeight) / d)) : 0,\n height: this.$size.scrollerHeight\n }, this.session.$bidiHandler && this.session.$bidiHandler.setContentWidth(r - this.$padding), t;\n }, b.prototype.$updateLines = function () {\n if (this.$changedLines) {\n var e = this.$changedLines.firstRow,\n t = this.$changedLines.lastRow,\n n = (this.$changedLines = null, this.layerConfig);\n if (!(e > n.lastRow + 1 || t < n.firstRow)) {\n if (t !== 1 / 0) return this.$textLayer.updateLines(n, e, t), !0;\n this.$showGutter && this.$gutterLayer.update(n), this.$textLayer.update(n);\n }\n }\n }, b.prototype.$getLongestLine = function () {\n var e = this.session.getScreenWidth();\n return this.showInvisibles && !this.session.$useWrapMode && (e += 1), this.$textLayer && e > this.$textLayer.MAX_LINE_LENGTH && (e = this.$textLayer.MAX_LINE_LENGTH + 30), Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(e * this.characterWidth));\n }, b.prototype.updateFrontMarkers = function () {\n this.$markerFront.setMarkers(this.session.getMarkers(!0)), this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n }, b.prototype.updateBackMarkers = function () {\n this.$markerBack.setMarkers(this.session.getMarkers()), this.$loop.schedule(this.CHANGE_MARKER_BACK);\n }, b.prototype.addGutterDecoration = function (e, t) {\n this.$gutterLayer.addGutterDecoration(e, t);\n }, b.prototype.removeGutterDecoration = function (e, t) {\n this.$gutterLayer.removeGutterDecoration(e, t);\n }, b.prototype.updateBreakpoints = function (e) {\n this.$loop.schedule(this.CHANGE_GUTTER);\n }, b.prototype.setAnnotations = function (e) {\n this.$gutterLayer.setAnnotations(e), this.$loop.schedule(this.CHANGE_GUTTER);\n }, b.prototype.updateCursor = function () {\n this.$loop.schedule(this.CHANGE_CURSOR);\n }, b.prototype.hideCursor = function () {\n this.$cursorLayer.hideCursor();\n }, b.prototype.showCursor = function () {\n this.$cursorLayer.showCursor();\n }, b.prototype.scrollSelectionIntoView = function (e, t, n) {\n this.scrollCursorIntoView(e, n), this.scrollCursorIntoView(t, n);\n }, b.prototype.scrollCursorIntoView = function (e, t, n) {\n var i, o, r;\n 0 !== this.$size.scrollerHeight && (i = (e = this.$cursorLayer.getPixelPosition(e)).left, e = e.top, o = n && n.top || 0, n = n && n.bottom || 0, this.$scrollAnimation && (this.$stopAnimation = !0), e < (r = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop) + o ? (t && r + o > e + this.lineHeight && (e -= t * this.$size.scrollerHeight), 0 === e && (e = -this.scrollMargin.top), this.session.setScrollTop(e)) : r + this.$size.scrollerHeight - n < e + this.lineHeight && (t && r + this.$size.scrollerHeight - n < e - this.lineHeight && (e += t * this.$size.scrollerHeight), this.session.setScrollTop(e + this.lineHeight + n - this.$size.scrollerHeight)), o = this.scrollLeft, i - (r = 2 * this.layerConfig.characterWidth) < o ? ((i -= r) < this.$padding + r && (i = -this.scrollMargin.left), this.session.setScrollLeft(i)) : o + this.$size.scrollerWidth < (i += r) + this.characterWidth ? this.session.setScrollLeft(Math.round(i + this.characterWidth - this.$size.scrollerWidth)) : o <= this.$padding && i - o < this.characterWidth && this.session.setScrollLeft(0));\n }, b.prototype.getScrollTop = function () {\n return this.session.getScrollTop();\n }, b.prototype.getScrollLeft = function () {\n return this.session.getScrollLeft();\n }, b.prototype.getScrollTopRow = function () {\n return this.scrollTop / this.lineHeight;\n }, b.prototype.getScrollBottomRow = function () {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n }, b.prototype.scrollToRow = function (e) {\n this.session.setScrollTop(e * this.lineHeight);\n }, b.prototype.alignCursor = function (e, t) {\n var e = this.$cursorLayer.getPixelPosition(e = \"number\" == typeof e ? {\n row: e,\n column: 0\n } : e),\n n = this.$size.scrollerHeight - this.lineHeight,\n e = e.top - n * (t || 0);\n return this.session.setScrollTop(e), e;\n }, b.prototype.$calcSteps = function (e, t) {\n for (var n, i, o = 0, r = this.STEPS, s = [], o = 0; o < r; ++o) s.push((n = o / this.STEPS, (t - (i = e)) * (Math.pow(n - 1, 3) + 1) + i));\n return s;\n }, b.prototype.scrollToLine = function (e, t, n, i) {\n e = this.$cursorLayer.getPixelPosition({\n row: e,\n column: 0\n }).top, t && (e -= this.$size.scrollerHeight / 2), t = this.scrollTop;\n this.session.setScrollTop(e), !1 !== n && this.animateScrolling(t, i);\n }, b.prototype.animateScrolling = function (e, t) {\n var n = this.scrollTop;\n if (this.$animatedScroll) {\n var i = this;\n if (e != n) {\n if (this.$scrollAnimation) {\n var o = this.$scrollAnimation.steps;\n if (o.length && (e = o[0]) == n) return;\n }\n var r = i.$calcSteps(e, n);\n this.$scrollAnimation = {\n from: e,\n to: n,\n steps: r\n }, clearInterval(this.$timer), i.session.setScrollTop(r.shift()), i.session.$scrollTop = n, this.$timer = setInterval(function () {\n if (!i.$stopAnimation) return i.session ? void (r.length ? (i.session.setScrollTop(r.shift()), i.session.$scrollTop = n) : null != n ? (i.session.$scrollTop = -1, i.session.setScrollTop(n), n = null) : s()) : clearInterval(i.$timer);\n s();\n }, 10);\n }\n }\n function s() {\n i.$timer = clearInterval(i.$timer), i.$scrollAnimation = null, i.$stopAnimation = !1, t && t();\n }\n }, b.prototype.scrollToY = function (e) {\n this.scrollTop !== e && (this.$loop.schedule(this.CHANGE_SCROLL), this.scrollTop = e);\n }, b.prototype.scrollToX = function (e) {\n this.scrollLeft !== e && (this.scrollLeft = e), this.$loop.schedule(this.CHANGE_H_SCROLL);\n }, b.prototype.scrollTo = function (e, t) {\n this.session.setScrollTop(t), this.session.setScrollLeft(e);\n }, b.prototype.scrollBy = function (e, t) {\n t && this.session.setScrollTop(this.session.getScrollTop() + t), e && this.session.setScrollLeft(this.session.getScrollLeft() + e);\n }, b.prototype.isScrollableBy = function (e, t) {\n return t < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top || 0 < t && this.session.getScrollTop() + this.$size.scrollerHeight - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom || e < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left || 0 < e && this.session.getScrollLeft() + this.$size.scrollerWidth - this.layerConfig.width < -1 + this.scrollMargin.right || void 0;\n }, b.prototype.pixelToScreenCoordinates = function (e, t) {\n this.$hasCssTransforms ? (i = {\n top: 0,\n left: 0\n }, e = (n = this.$fontMetrics.transformCoordinates([e, t]))[1] - this.gutterWidth - this.margin.left, t = n[0]) : i = this.scroller.getBoundingClientRect();\n var n = e + this.scrollLeft - i.left - this.$padding,\n e = n / this.characterWidth,\n t = Math.floor((t + this.scrollTop - i.top) / this.lineHeight),\n i = this.$blockCursor ? Math.floor(e) : Math.round(e);\n return {\n row: t,\n column: i,\n side: 0 < e - i ? 1 : -1,\n offsetX: n\n };\n }, b.prototype.screenToTextCoordinates = function (e, t) {\n this.$hasCssTransforms ? (n = {\n top: 0,\n left: 0\n }, e = (i = this.$fontMetrics.transformCoordinates([e, t]))[1] - this.gutterWidth - this.margin.left, t = i[0]) : n = this.scroller.getBoundingClientRect();\n var n,\n i = e + this.scrollLeft - n.left - this.$padding,\n e = i / this.characterWidth,\n e = this.$blockCursor ? Math.floor(e) : Math.round(e),\n t = Math.floor((t + this.scrollTop - n.top) / this.lineHeight);\n return this.session.screenToDocumentPosition(t, Math.max(e, 0), i);\n }, b.prototype.textToScreenCoordinates = function (e, t) {\n var n = this.scroller.getBoundingClientRect(),\n t = this.session.documentToScreenPosition(e, t),\n e = this.$padding + (this.session.$bidiHandler.isBidiRow(t.row, e) ? this.session.$bidiHandler.getPosLeft(t.column) : Math.round(t.column * this.characterWidth)),\n t = t.row * this.lineHeight;\n return {\n pageX: n.left + e - this.scrollLeft,\n pageY: n.top + t - this.scrollTop\n };\n }, b.prototype.visualizeFocus = function () {\n a.addCssClass(this.container, \"ace_focus\");\n }, b.prototype.visualizeBlur = function () {\n a.removeCssClass(this.container, \"ace_focus\");\n }, b.prototype.showComposition = function (e) {\n (this.$composition = e).cssText || (e.cssText = this.textarea.style.cssText), null == e.useTextareaForIME && (e.useTextareaForIME = this.$useTextareaForIME), this.$useTextareaForIME ? (a.addCssClass(this.textarea, \"ace_composition\"), this.textarea.style.cssText = \"\", this.$moveTextAreaToCursor(), this.$cursorLayer.element.style.display = \"none\") : e.markerId = this.session.addMarker(e.markerRange, \"ace_composition_marker\", \"text\");\n }, b.prototype.setCompositionText = function (e) {\n var t = this.session.selection.cursor;\n this.addToken(e, \"composition_placeholder\", t.row, t.column), this.$moveTextAreaToCursor();\n }, b.prototype.hideComposition = function () {\n var e;\n this.$composition && (this.$composition.markerId && this.session.removeMarker(this.$composition.markerId), a.removeCssClass(this.textarea, \"ace_composition\"), this.textarea.style.cssText = this.$composition.cssText, e = this.session.selection.cursor, this.removeExtraToken(e.row, e.column), this.$composition = null, this.$cursorLayer.element.style.display = \"\");\n }, b.prototype.setGhostText = function (e, t) {\n var n = this.session.selection.cursor,\n t = t || {\n row: n.row,\n column: n.column\n },\n n = (this.removeGhostText(), e.split(\"\\n\"));\n this.addToken(n[0], \"ghost_text\", t.row, t.column), this.$ghostText = {\n text: e,\n position: {\n row: t.row,\n column: t.column\n }\n }, 1 < n.length && (this.$ghostTextWidget = {\n text: n.slice(1).join(\"\\n\"),\n row: t.row,\n column: t.column,\n className: \"ace_ghost_text\"\n }, this.session.widgetManager.addLineWidget(this.$ghostTextWidget));\n }, b.prototype.removeGhostText = function () {\n var e;\n this.$ghostText && (e = this.$ghostText.position, this.removeExtraToken(e.row, e.column), this.$ghostTextWidget && (this.session.widgetManager.removeLineWidget(this.$ghostTextWidget), this.$ghostTextWidget = null), this.$ghostText = null);\n }, b.prototype.addToken = function (e, t, n, i) {\n var o = this.session,\n r = (o.bgTokenizer.lines[n] = null, {\n type: t,\n value: e\n }),\n s = o.getTokens(n);\n if (null != i && s.length) for (var a = 0, l = 0; l < s.length; l++) {\n var c = s[l];\n if (i <= (a += c.value.length)) {\n var h = c.value.length - (a - i),\n d = c.value.slice(0, h),\n h = c.value.slice(h);\n s.splice(l, 1, {\n type: c.type,\n value: d\n }, r, {\n type: c.type,\n value: h\n });\n break;\n }\n } else s.push(r);\n this.updateLines(n, n);\n }, b.prototype.removeExtraToken = function (e, t) {\n this.session.bgTokenizer.lines[e] = null, this.updateLines(e, e);\n }, b.prototype.setTheme = function (n, i) {\n var e,\n o = this;\n function t(e) {\n if (o.$themeId != n) return i && i();\n if (!e || !e.cssClass) throw new Error(\"couldn't load module \" + n + \" or it didn't call define\");\n e.$id && (o.$themeId = e.$id), a.importCssString(e.cssText, e.cssClass, o.container), o.theme && a.removeCssClass(o.container, o.theme.cssClass);\n var t = \"padding\" in e ? e.padding : \"padding\" in (o.theme || {}) ? 4 : o.$padding;\n o.$padding && t != o.$padding && o.setPadding(t), o.$theme = e.cssClass, o.theme = e, a.addCssClass(o.container, e.cssClass), a.setCssClass(o.container, \"ace_dark\", e.isDark), o.$size && (o.$size.width = 0, o.$updateSizeAsync()), o._dispatchEvent(\"themeLoaded\", {\n theme: e\n }), i && i();\n }\n this.$themeId = n, o._dispatchEvent(\"themeChange\", {\n theme: n\n }), n && \"string\" != typeof n ? t(n) : (e = n || this.$options.theme.initialValue, r.loadModule([\"theme\", e], t));\n }, b.prototype.getTheme = function () {\n return this.$themeId;\n }, b.prototype.setStyle = function (e, t) {\n a.setCssClass(this.container, e, !1 !== t);\n }, b.prototype.unsetStyle = function (e) {\n a.removeCssClass(this.container, e);\n }, b.prototype.setCursorStyle = function (e) {\n a.setStyle(this.scroller.style, \"cursor\", e);\n }, b.prototype.setMouseCursor = function (e) {\n a.setStyle(this.scroller.style, \"cursor\", e);\n }, b.prototype.attachToShadowRoot = function () {\n a.importCssString(y, \"ace_editor.css\", this.container);\n }, b.prototype.destroy = function () {\n this.freeze(), this.$fontMetrics.destroy(), this.$cursorLayer.destroy(), this.removeAllListeners(), this.container.textContent = \"\", this.setOption(\"useResizeObserver\", !1);\n }, b.prototype.$updateCustomScrollbar = function (e) {\n var t = this;\n this.$horizScroll = this.$vScroll = null, this.scrollBarV.element.remove(), this.scrollBarH.element.remove(), this.$scrollDecorator && delete this.$scrollDecorator, !0 === e ? (this.scrollBarV = new p(this.container, this), this.scrollBarH = new g(this.container, this), this.scrollBarV.setHeight(this.$size.scrollerHeight), this.scrollBarH.setWidth(this.$size.scrollerWidth), this.scrollBarV.addEventListener(\"scroll\", function (e) {\n t.$scrollAnimation || t.session.setScrollTop(e.data - t.scrollMargin.top);\n }), this.scrollBarH.addEventListener(\"scroll\", function (e) {\n t.$scrollAnimation || t.session.setScrollLeft(e.data - t.scrollMargin.left);\n }), this.$scrollDecorator = new v(this.scrollBarV, this), this.$scrollDecorator.$updateDecorators()) : (this.scrollBarV = new u(this.container, this), this.scrollBarH = new d(this.container, this), this.scrollBarV.addEventListener(\"scroll\", function (e) {\n t.$scrollAnimation || t.session.setScrollTop(e.data - t.scrollMargin.top);\n }), this.scrollBarH.addEventListener(\"scroll\", function (e) {\n t.$scrollAnimation || t.session.setScrollLeft(e.data - t.scrollMargin.left);\n }));\n }, b.prototype.$addResizeObserver = function () {\n var n;\n window.ResizeObserver && !this.$resizeObserver && ((n = this).$resizeTimer = o.delayedCall(function () {\n n.destroyed || n.onResize();\n }, 50), this.$resizeObserver = new window.ResizeObserver(function (e) {\n var t = e[0].contentRect.width,\n e = e[0].contentRect.height;\n 1 < Math.abs(n.$size.width - t) || 1 < Math.abs(n.$size.height - e) ? n.$resizeTimer.delay() : n.$resizeTimer.cancel();\n }), this.$resizeObserver.observe(this.container));\n }, b);\n function b(e, t) {\n var n = this,\n e = (this.container = e || a.createElement(\"div\"), a.addCssClass(this.container, \"ace_editor\"), a.HI_DPI && a.addCssClass(this.container, \"ace_hidpi\"), this.setTheme(t), null == r.get(\"useStrictCSP\") && r.set(\"useStrictCSP\", !1), this.$gutter = a.createElement(\"div\"), this.$gutter.className = \"ace_gutter\", this.container.appendChild(this.$gutter), this.$gutter.setAttribute(\"aria-hidden\", !0), this.scroller = a.createElement(\"div\"), this.scroller.className = \"ace_scroller\", this.container.appendChild(this.scroller), this.content = a.createElement(\"div\"), this.content.className = \"ace_content\", this.scroller.appendChild(this.content), this.$gutterLayer = new s(this.$gutter), this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this)), this.$markerBack = new l(this.content), this.$textLayer = new c(this.content));\n this.canvas = e.element, this.$markerFront = new l(this.content), this.$cursorLayer = new h(this.content), this.$horizScroll = !1, this.$vScroll = !1, this.scrollBar = this.scrollBarV = new u(this.container, this), this.scrollBarH = new d(this.container, this), this.scrollBarV.on(\"scroll\", function (e) {\n n.$scrollAnimation || n.session.setScrollTop(e.data - n.scrollMargin.top);\n }), this.scrollBarH.on(\"scroll\", function (e) {\n n.$scrollAnimation || n.session.setScrollLeft(e.data - n.scrollMargin.left);\n }), this.scrollTop = 0, this.scrollLeft = 0, this.cursorPos = {\n row: 0,\n column: 0\n }, this.$fontMetrics = new f(this.container), this.$textLayer.$setFontMetrics(this.$fontMetrics), this.$textLayer.on(\"changeCharacterSize\", function (e) {\n n.updateCharacterSize(), n.onResize(!0, n.gutterWidth, n.$size.width, n.$size.height), n._signal(\"changeCharacterSize\", e);\n }), this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: !0\n }, this.layerConfig = {\n width: 1,\n padding: 0,\n firstRow: 0,\n firstRowScreen: 0,\n lastRow: 0,\n lineHeight: 0,\n characterWidth: 0,\n minHeight: 1,\n maxHeight: 1,\n offset: 0,\n height: 1,\n gutterOffset: 1\n }, this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n }, this.margin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n }, this.$keepTextAreaAtCursor = !I.isIOS, this.$loop = new m(this.$renderChanges.bind(this), this.container.ownerDocument.defaultView), this.$loop.schedule(this.CHANGE_FULL), this.updateCharacterSize(), this.setPadding(4), this.$addResizeObserver(), r.resetOptions(this), r._signal(\"renderer\", this);\n }\n e.prototype.CHANGE_CURSOR = 1, e.prototype.CHANGE_MARKER = 2, e.prototype.CHANGE_GUTTER = 4, e.prototype.CHANGE_SCROLL = 8, e.prototype.CHANGE_LINES = 16, e.prototype.CHANGE_TEXT = 32, e.prototype.CHANGE_SIZE = 64, e.prototype.CHANGE_MARKER_BACK = 128, e.prototype.CHANGE_MARKER_FRONT = 256, e.prototype.CHANGE_FULL = 512, e.prototype.CHANGE_H_SCROLL = 1024, e.prototype.$changes = 0, e.prototype.$padding = null, e.prototype.$frozen = !1, e.prototype.STEPS = 8, i.implement(e.prototype, C), r.defineOptions(e.prototype, \"renderer\", {\n useResizeObserver: {\n set: function (e) {\n !e && this.$resizeObserver ? (this.$resizeObserver.disconnect(), this.$resizeTimer.cancel(), this.$resizeTimer = this.$resizeObserver = null) : e && !this.$resizeObserver && this.$addResizeObserver();\n }\n },\n animatedScroll: {\n initialValue: !1\n },\n showInvisibles: {\n set: function (e) {\n this.$textLayer.setShowInvisibles(e) && this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: !1\n },\n showPrintMargin: {\n set: function () {\n this.$updatePrintMargin();\n },\n initialValue: !0\n },\n printMarginColumn: {\n set: function () {\n this.$updatePrintMargin();\n },\n initialValue: 80\n },\n printMargin: {\n set: function (e) {\n \"number\" == typeof e && (this.$printMarginColumn = e), this.$showPrintMargin = !!e, this.$updatePrintMargin();\n },\n get: function () {\n return this.$showPrintMargin && this.$printMarginColumn;\n }\n },\n showGutter: {\n set: function (e) {\n this.$gutter.style.display = e ? \"block\" : \"none\", this.$loop.schedule(this.CHANGE_FULL), this.onGutterResize();\n },\n initialValue: !0\n },\n useSvgGutterIcons: {\n set: function (e) {\n this.$gutterLayer.$useSvgGutterIcons = e;\n },\n initialValue: !1\n },\n showFoldedAnnotations: {\n set: function (e) {\n this.$gutterLayer.$showFoldedAnnotations = e;\n },\n initialValue: !1\n },\n fadeFoldWidgets: {\n set: function (e) {\n a.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", e);\n },\n initialValue: !1\n },\n showFoldWidgets: {\n set: function (e) {\n this.$gutterLayer.setShowFoldWidgets(e), this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: !0\n },\n displayIndentGuides: {\n set: function (e) {\n this.$textLayer.setDisplayIndentGuides(e) && this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: !0\n },\n highlightIndentGuides: {\n set: function (e) {\n 1 == this.$textLayer.setHighlightIndentGuides(e) ? this.$textLayer.$highlightIndentGuide() : this.$textLayer.$clearActiveIndentGuide(this.$textLayer.$lines.cells);\n },\n initialValue: !0\n },\n highlightGutterLine: {\n set: function (e) {\n this.$gutterLayer.setHighlightGutterLine(e), this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: !0\n },\n hScrollBarAlwaysVisible: {\n set: function (e) {\n this.$hScrollBarAlwaysVisible && this.$horizScroll || this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: !1\n },\n vScrollBarAlwaysVisible: {\n set: function (e) {\n this.$vScrollBarAlwaysVisible && this.$vScroll || this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: !1\n },\n fontSize: {\n set: function (e) {\n \"number\" == typeof e && (e += \"px\"), this.container.style.fontSize = e, this.updateFontSize();\n },\n initialValue: 12\n },\n fontFamily: {\n set: function (e) {\n this.container.style.fontFamily = e, this.updateFontSize();\n }\n },\n maxLines: {\n set: function (e) {\n this.updateFull();\n }\n },\n minLines: {\n set: function (e) {\n this.$minLines < 562949953421311 || (this.$minLines = 0), this.updateFull();\n }\n },\n maxPixelHeight: {\n set: function (e) {\n this.updateFull();\n },\n initialValue: 0\n },\n scrollPastEnd: {\n set: function (e) {\n this.$scrollPastEnd != (e = +e || 0) && (this.$scrollPastEnd = e, this.$loop.schedule(this.CHANGE_SCROLL));\n },\n initialValue: 0,\n handlesSet: !0\n },\n fixedWidthGutter: {\n set: function (e) {\n this.$gutterLayer.$fixedWidth = !!e, this.$loop.schedule(this.CHANGE_GUTTER);\n }\n },\n customScrollbar: {\n set: function (e) {\n this.$updateCustomScrollbar(e);\n },\n initialValue: !1\n },\n theme: {\n set: function (e) {\n this.setTheme(e);\n },\n get: function () {\n return this.$themeId || this.theme;\n },\n initialValue: \"./theme/textmate\",\n handlesSet: !0\n },\n hasCssTransforms: {},\n useTextareaForIME: {\n initialValue: !I.isMobile && !I.isIE\n }\n }), t.VirtualRenderer = e;\n }), ace.define(\"ace/worker/worker_client\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/net\", \"ace/lib/event_emitter\", \"ace/config\"], function (a, e, t) {\n \"use strict\";\n\n var n = a(\"../lib/oop\"),\n i = a(\"../lib/net\"),\n c = a(\"../lib/event_emitter\").EventEmitter,\n h = a(\"../config\");\n function l(e) {\n var t;\n return \"undefined\" == typeof Worker ? {\n postMessage: function () {},\n terminate: function () {}\n } : h.get(\"loadWorkerFromBlob\") ? (t = function (t) {\n t = \"importScripts('\" + i.qualifyURL(t) + \"');\";\n try {\n return new Blob([t], {\n type: \"application/javascript\"\n });\n } catch (e) {\n var n = new (window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder)();\n return n.append(t), n.getBlob(\"application/javascript\");\n }\n }(e), t = (window.URL || window.webkitURL).createObjectURL(t), new Worker(t)) : new Worker(e);\n }\n function d(e) {\n e.postMessage || (e = this.$createWorkerFromOldConfig.apply(this, arguments)), this.$worker = e, this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this), this.changeListener = this.changeListener.bind(this), this.onMessage = this.onMessage.bind(this), this.callbackId = 1, this.callbacks = {}, this.$worker.onmessage = this.onMessage;\n }\n (function () {\n n.implement(this, c), this.$createWorkerFromOldConfig = function (e, t, n, i, o) {\n var r, s;\n return a.nameToUrl && !a.toUrl && (a.toUrl = a.nameToUrl), h.get(\"packaged\") || !a.toUrl ? i = i || h.moduleUrl(t, \"worker\") : (r = this.$normalizePath, i = i || r(a.toUrl(\"ace/worker/worker.js\", null, \"_\")), s = {}, e.forEach(function (e) {\n s[e] = r(a.toUrl(e, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n })), this.$worker = l(i), o && this.send(\"importScripts\", o), this.$worker.postMessage({\n init: !0,\n tlns: s,\n module: t,\n classname: n\n }), this.$worker;\n }, this.onMessage = function (e) {\n var t = e.data;\n switch (t.type) {\n case \"event\":\n this._signal(t.name, {\n data: t.data\n });\n break;\n case \"call\":\n var n = this.callbacks[t.id];\n n && (n(t.data), delete this.callbacks[t.id]);\n break;\n case \"error\":\n this.reportError(t.data);\n break;\n case \"log\":\n window.console && console.log && console.log.apply(console, t.data);\n }\n }, this.reportError = function (e) {\n window.console && console.error && console.error(e);\n }, this.$normalizePath = function (e) {\n return i.qualifyURL(e);\n }, this.terminate = function () {\n this._signal(\"terminate\", {}), this.deltaQueue = null, this.$worker.terminate(), this.$worker.onerror = function (e) {\n e.preventDefault();\n }, this.$worker = null, this.$doc && this.$doc.off(\"change\", this.changeListener), this.$doc = null;\n }, this.send = function (e, t) {\n this.$worker.postMessage({\n command: e,\n args: t\n });\n }, this.call = function (e, t, n) {\n var i;\n n && (i = this.callbackId++, this.callbacks[i] = n, t.push(i)), this.send(e, t);\n }, this.emit = function (e, t) {\n try {\n t.data && t.data.err && (t.data.err = {\n message: t.data.err.message,\n stack: t.data.err.stack,\n code: t.data.err.code\n }), this.$worker && this.$worker.postMessage({\n event: e,\n data: {\n data: t.data\n }\n });\n } catch (e) {\n console.error(e.stack);\n }\n }, this.attachToDocument = function (e) {\n this.$doc && this.terminate(), this.$doc = e, this.call(\"setValue\", [e.getValue()]), e.on(\"change\", this.changeListener, !0);\n }, this.changeListener = function (e) {\n this.deltaQueue || (this.deltaQueue = [], setTimeout(this.$sendDeltaQueue, 0)), \"insert\" == e.action ? this.deltaQueue.push(e.start, e.lines) : this.deltaQueue.push(e.start, e.end);\n }, this.$sendDeltaQueue = function () {\n var e = this.deltaQueue;\n e && (this.deltaQueue = null, 50 < e.length && e.length > this.$doc.getLength() >> 1 ? this.call(\"setValue\", [this.$doc.getValue()]) : this.emit(\"change\", {\n data: e\n }));\n };\n }).call(d.prototype);\n e.UIWorkerClient = function (e, t, n) {\n var i = null,\n o = !1,\n r = Object.create(c),\n s = [],\n a = new d({\n messageBuffer: s,\n terminate: function () {},\n postMessage: function (e) {\n s.push(e), i && (o ? setTimeout(l) : l());\n }\n }),\n l = (a.setEmitSync = function (e) {\n o = e;\n }, function () {\n var e = s.shift();\n e.command ? i[e.command].apply(i, e.args) : e.event && r._signal(e.event, e.data);\n });\n return r.postMessage = function (e) {\n a.onMessage({\n data: e\n });\n }, r.callback = function (e, t) {\n this.postMessage({\n type: \"call\",\n id: t,\n data: e\n });\n }, r.emit = function (e, t) {\n this.postMessage({\n type: \"event\",\n name: e,\n data: t\n });\n }, h.loadModule([\"worker\", t], function (e) {\n for (i = new e[n](r); s.length;) l();\n }), a;\n }, e.WorkerClient = d, e.createWorker = l;\n }), ace.define(\"ace/placeholder\", [\"require\", \"exports\", \"module\", \"ace/range\", \"ace/lib/event_emitter\", \"ace/lib/oop\"], function (e, t, n) {\n \"use strict\";\n\n var l = e(\"./range\").Range,\n i = e(\"./lib/event_emitter\").EventEmitter,\n e = e(\"./lib/oop\"),\n o = (r.prototype.setup = function () {\n var t = this,\n n = this.doc,\n e = this.session,\n i = (this.selectionBefore = e.selection.toJSON(), e.selection.inMultiSelectMode && e.selection.toSingleRange(), this.pos = n.createAnchor(this.$pos.row, this.$pos.column), this.pos);\n i.$insertRight = !0, i.detach(), i.markerId = e.addMarker(new l(i.row, i.column, i.row, i.column + this.length), this.mainClass, null, !1), this.others = [], this.$others.forEach(function (e) {\n e = n.createAnchor(e.row, e.column);\n e.$insertRight = !0, e.detach(), t.others.push(e);\n }), e.setUndoSelect(!1);\n }, r.prototype.showOtherMarkers = function () {\n var t, n;\n this.othersActive || (t = this.session, (n = this).othersActive = !0, this.others.forEach(function (e) {\n e.markerId = t.addMarker(new l(e.row, e.column, e.row, e.column + n.length), n.othersClass, null, !1);\n }));\n }, r.prototype.hideOtherMarkers = function () {\n if (this.othersActive) {\n this.othersActive = !1;\n for (var e = 0; e < this.others.length; e++) this.session.removeMarker(this.others[e].markerId);\n }\n }, r.prototype.onUpdate = function (e) {\n if (this.$updating) return this.updateAnchors(e);\n var t = e;\n if (t.start.row === t.end.row && t.start.row === this.pos.row) {\n this.$updating = !0;\n var n = \"insert\" === e.action ? t.end.column - t.start.column : t.start.column - t.end.column,\n i = t.start.column >= this.pos.column && t.start.column <= this.pos.column + this.length + 1,\n o = t.start.column - this.pos.column;\n if (this.updateAnchors(e), i && (this.length += n), i && !this.session.$fromUndo) if (\"insert\" === e.action) for (var r = this.others.length - 1; 0 <= r; r--) {\n var s = {\n row: (a = this.others[r]).row,\n column: a.column + o\n };\n this.doc.insertMergedLines(s, e.lines);\n } else if (\"remove\" === e.action) for (r = this.others.length - 1; 0 <= r; r--) {\n var a,\n s = {\n row: (a = this.others[r]).row,\n column: a.column + o\n };\n this.doc.remove(new l(s.row, s.column, s.row, s.column - n));\n }\n this.$updating = !1, this.updateMarkers();\n }\n }, r.prototype.updateAnchors = function (e) {\n this.pos.onChange(e);\n for (var t = this.others.length; t--;) this.others[t].onChange(e);\n this.updateMarkers();\n }, r.prototype.updateMarkers = function () {\n if (!this.$updating) {\n var n = this,\n i = this.session,\n e = function (e, t) {\n i.removeMarker(e.markerId), e.markerId = i.addMarker(new l(e.row, e.column, e.row, e.column + n.length), t, null, !1);\n };\n e(this.pos, this.mainClass);\n for (var t = this.others.length; t--;) e(this.others[t], this.othersClass);\n }\n }, r.prototype.onCursorChange = function (e) {\n var t;\n !this.$updating && this.session && ((t = this.session.selection.getCursor()).row === this.pos.row && t.column >= this.pos.column && t.column <= this.pos.column + this.length ? (this.showOtherMarkers(), this._emit(\"cursorEnter\", e)) : (this.hideOtherMarkers(), this._emit(\"cursorLeave\", e)));\n }, r.prototype.detach = function () {\n this.session.removeMarker(this.pos && this.pos.markerId), this.hideOtherMarkers(), this.doc.off(\"change\", this.$onUpdate), this.session.selection.off(\"changeCursor\", this.$onCursorChange), this.session.setUndoSelect(!0), this.session = null;\n }, r.prototype.cancel = function () {\n if (-1 !== this.$undoStackDepth) {\n for (var e = this.session.getUndoManager(), t = (e.$undoStack || e.$undostack).length - this.$undoStackDepth, n = 0; n < t; n++) e.undo(this.session, !0);\n this.selectionBefore && this.session.selection.fromJSON(this.selectionBefore);\n }\n }, r);\n function r(e, t, n, i, o, r) {\n var s = this,\n t = (this.length = t, this.session = e, this.doc = e.getDocument(), this.mainClass = o, this.othersClass = r, this.$onUpdate = this.onUpdate.bind(this), this.doc.on(\"change\", this.$onUpdate, !0), this.$others = i, this.$onCursorChange = function () {\n setTimeout(function () {\n s.onCursorChange();\n });\n }, this.$pos = n, e.getUndoManager().$undoStack || e.getUndoManager().$undostack || {\n length: -1\n });\n this.$undoStackDepth = t.length, this.setup(), e.selection.on(\"changeCursor\", this.$onCursorChange);\n }\n e.implement(o.prototype, i), t.PlaceHolder = o;\n }), ace.define(\"ace/mouse/multi_select_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/lib/useragent\"], function (e, t, n) {\n var x = e(\"../lib/event\"),\n k = e(\"../lib/useragent\");\n function E(e, t) {\n return e.row == t.row && e.column == t.column;\n }\n t.onMouseDown = function (e) {\n var t = e.domEvent,\n n = t.altKey,\n i = t.shiftKey,\n o = t.ctrlKey,\n r = e.getAccelKey(),\n s = e.getButton();\n if (o && k.isMac && (s = t.button), e.editor.inMultiSelectMode && 2 == s) e.editor.textInput.onContextMenu(e.domEvent);else if (o || n || r) {\n if (0 === s) {\n var a,\n l,\n c,\n h,\n d,\n u,\n g,\n p,\n m = e.editor,\n f = m.selection,\n C = m.inMultiSelectMode,\n y = e.getDocumentPosition(),\n v = f.getCursor(),\n v = e.inSelection() || f.isEmpty() && E(y, v),\n I = e.x,\n b = e.y,\n A = m.session,\n w = m.renderer.pixelToScreenCoordinates(I, b),\n S = w;\n if (m.$mouseHandler.$enableJumpToDef) o && n || r && n ? a = i ? \"block\" : \"add\" : n && m.$blockSelectEnabled && (a = \"block\");else if (r && !n) {\n if (a = \"add\", !C && i) return;\n } else n && m.$blockSelectEnabled && (a = \"block\");\n if (a && k.isMac && t.ctrlKey && m.$mouseHandler.cancelContextMenu(), \"add\" == a) !C && v || (C || (l = f.toOrientedRange(), m.addSelectionMarker(l)), c = f.rangeList.rangeAtPoint(y), m.inVirtualSelectionMode = !0, i && (c = null, l = f.ranges[0] || l, m.removeSelectionMarker(l)), m.once(\"mouseup\", function () {\n var e = f.toOrientedRange();\n c && e.isEmpty() && E(c.cursor, e.cursor) ? f.substractPoint(e.cursor) : (i ? f.substractPoint(l.cursor) : l && (m.removeSelectionMarker(l), f.addRange(l)), f.addRange(e)), m.inVirtualSelectionMode = !1;\n }));else if (\"block\" == a) return e.stop(), m.inVirtualSelectionMode = !0, d = [], u = function () {\n var e = m.renderer.pixelToScreenCoordinates(I, b),\n t = A.screenToDocumentPosition(e.row, e.column, e.offsetX);\n E(S, e) && E(t, f.lead) || (S = e, m.selection.moveToPosition(t), m.renderer.scrollCursorIntoView(), m.removeSelectionMarkers(d), d = f.rectangularRangeBlock(S, w), m.$mouseHandler.$clickSelection && 1 == d.length && d[0].isEmpty() && (d[0] = m.$mouseHandler.$clickSelection.clone()), d.forEach(m.addSelectionMarker, m), m.updateSelectionMarkers());\n }, C && !r ? f.toSingleRange() : !C && r && (h = f.toOrientedRange(), m.addSelectionMarker(h)), i ? w = A.documentToScreenPosition(f.lead) : f.moveToPosition(y), S = {\n row: -1,\n column: -1\n }, g = u, x.capture(m.container, function (e) {\n I = e.clientX, b = e.clientY;\n }, function (e) {\n u(), clearInterval(p), m.removeSelectionMarkers(d), d.length || (d = [f.toOrientedRange()]), h && (m.removeSelectionMarker(h), f.toSingleRange(h));\n for (var t = 0; t < d.length; t++) f.addRange(d[t]);\n m.inVirtualSelectionMode = !1, m.$mouseHandler.$clickSelection = null;\n }), p = setInterval(function () {\n g();\n }, 20), e.preventDefault();\n }\n } else 0 === s && e.editor.inMultiSelectMode && e.editor.exitMultiSelectMode();\n };\n }), ace.define(\"ace/commands/multi_select_commands\", [\"require\", \"exports\", \"module\", \"ace/keyboard/hash_handler\"], function (e, t, n) {\n t.defaultCommands = [{\n name: \"addCursorAbove\",\n description: \"Add cursor above\",\n exec: function (e) {\n e.selectMoreLines(-1);\n },\n bindKey: {\n win: \"Ctrl-Alt-Up\",\n mac: \"Ctrl-Alt-Up\"\n },\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"addCursorBelow\",\n description: \"Add cursor below\",\n exec: function (e) {\n e.selectMoreLines(1);\n },\n bindKey: {\n win: \"Ctrl-Alt-Down\",\n mac: \"Ctrl-Alt-Down\"\n },\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"addCursorAboveSkipCurrent\",\n description: \"Add cursor above (skip current)\",\n exec: function (e) {\n e.selectMoreLines(-1, !0);\n },\n bindKey: {\n win: \"Ctrl-Alt-Shift-Up\",\n mac: \"Ctrl-Alt-Shift-Up\"\n },\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"addCursorBelowSkipCurrent\",\n description: \"Add cursor below (skip current)\",\n exec: function (e) {\n e.selectMoreLines(1, !0);\n },\n bindKey: {\n win: \"Ctrl-Alt-Shift-Down\",\n mac: \"Ctrl-Alt-Shift-Down\"\n },\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"selectMoreBefore\",\n description: \"Select more before\",\n exec: function (e) {\n e.selectMore(-1);\n },\n bindKey: {\n win: \"Ctrl-Alt-Left\",\n mac: \"Ctrl-Alt-Left\"\n },\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"selectMoreAfter\",\n description: \"Select more after\",\n exec: function (e) {\n e.selectMore(1);\n },\n bindKey: {\n win: \"Ctrl-Alt-Right\",\n mac: \"Ctrl-Alt-Right\"\n },\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"selectNextBefore\",\n description: \"Select next before\",\n exec: function (e) {\n e.selectMore(-1, !0);\n },\n bindKey: {\n win: \"Ctrl-Alt-Shift-Left\",\n mac: \"Ctrl-Alt-Shift-Left\"\n },\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"selectNextAfter\",\n description: \"Select next after\",\n exec: function (e) {\n e.selectMore(1, !0);\n },\n bindKey: {\n win: \"Ctrl-Alt-Shift-Right\",\n mac: \"Ctrl-Alt-Shift-Right\"\n },\n scrollIntoView: \"cursor\",\n readOnly: !0\n }, {\n name: \"toggleSplitSelectionIntoLines\",\n description: \"Split selection into lines\",\n exec: function (e) {\n 1 < e.multiSelect.rangeCount ? e.multiSelect.joinSelections() : e.multiSelect.splitIntoLines();\n },\n bindKey: {\n win: \"Ctrl-Alt-L\",\n mac: \"Ctrl-Alt-L\"\n },\n readOnly: !0\n }, {\n name: \"splitSelectionIntoLines\",\n description: \"Split into lines\",\n exec: function (e) {\n e.multiSelect.splitIntoLines();\n },\n readOnly: !0\n }, {\n name: \"alignCursors\",\n description: \"Align cursors\",\n exec: function (e) {\n e.alignCursors();\n },\n bindKey: {\n win: \"Ctrl-Alt-A\",\n mac: \"Ctrl-Alt-A\"\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"findAll\",\n description: \"Find all\",\n exec: function (e) {\n e.findAll();\n },\n bindKey: {\n win: \"Ctrl-Alt-K\",\n mac: \"Ctrl-Alt-G\"\n },\n scrollIntoView: \"cursor\",\n readOnly: !0\n }], t.multiSelectCommands = [{\n name: \"singleSelection\",\n description: \"Single selection\",\n bindKey: \"esc\",\n exec: function (e) {\n e.exitMultiSelectMode();\n },\n scrollIntoView: \"cursor\",\n readOnly: !0,\n isAvailable: function (e) {\n return e && e.inMultiSelectMode;\n }\n }];\n e = e(\"../keyboard/hash_handler\").HashHandler;\n t.keyboardHandler = new e(t.multiSelectCommands);\n }), ace.define(\"ace/multi_select\", [\"require\", \"exports\", \"module\", \"ace/range_list\", \"ace/range\", \"ace/selection\", \"ace/mouse/multi_select_handler\", \"ace/lib/event\", \"ace/lib/lang\", \"ace/commands/multi_select_commands\", \"ace/search\", \"ace/edit_session\", \"ace/editor\", \"ace/config\"], function (e, o, t) {\n var n = e(\"./range_list\").RangeList,\n I = e(\"./range\").Range,\n u = e(\"./selection\").Selection,\n r = e(\"./mouse/multi_select_handler\").onMouseDown,\n s = e(\"./lib/event\"),\n g = e(\"./lib/lang\"),\n a = e(\"./commands/multi_select_commands\");\n o.commands = a.defaultCommands.concat(a.multiSelectCommands);\n var l = new (e(\"./search\").Search)();\n var i = e(\"./edit_session\").EditSession,\n i = (!function () {\n this.getSelectionMarkers = function () {\n return this.$selectionMarkers;\n };\n }.call(i.prototype), !function () {\n this.ranges = null, this.rangeList = null, this.addRange = function (e, t) {\n if (e) {\n if (!this.inMultiSelectMode && 0 === this.rangeCount) {\n var n = this.toOrientedRange();\n if (this.rangeList.add(n), this.rangeList.add(e), 2 != this.rangeList.ranges.length) return this.rangeList.removeAll(), t || this.fromOrientedRange(e);\n this.rangeList.removeAll(), this.rangeList.add(n), this.$onAddRange(n);\n }\n e.cursor || (e.cursor = e.end);\n n = this.rangeList.add(e);\n return this.$onAddRange(e), n.length && this.$onRemoveRange(n), 1 < this.rangeCount && !this.inMultiSelectMode && (this._signal(\"multiSelect\"), this.inMultiSelectMode = !0, this.session.$undoSelect = !1, this.rangeList.attach(this.session)), t || this.fromOrientedRange(e);\n }\n }, this.toSingleRange = function (e) {\n e = e || this.ranges[0];\n var t = this.rangeList.removeAll();\n t.length && this.$onRemoveRange(t), e && this.fromOrientedRange(e);\n }, this.substractPoint = function (e) {\n e = this.rangeList.substractPoint(e);\n if (e) return this.$onRemoveRange(e), e[0];\n }, this.mergeOverlappingRanges = function () {\n var e = this.rangeList.merge();\n e.length && this.$onRemoveRange(e);\n }, this.$onAddRange = function (e) {\n this.rangeCount = this.rangeList.ranges.length, this.ranges.unshift(e), this._signal(\"addRange\", {\n range: e\n });\n }, this.$onRemoveRange = function (e) {\n var t;\n this.rangeCount = this.rangeList.ranges.length, 1 == this.rangeCount && this.inMultiSelectMode && (t = this.rangeList.ranges.pop(), e.push(t), this.rangeCount = 0);\n for (var n = e.length; n--;) {\n var i = this.ranges.indexOf(e[n]);\n this.ranges.splice(i, 1);\n }\n this._signal(\"removeRange\", {\n ranges: e\n }), 0 === this.rangeCount && this.inMultiSelectMode && (this.inMultiSelectMode = !1, this._signal(\"singleSelect\"), this.session.$undoSelect = !0, this.rangeList.detach(this.session)), (t = t || this.ranges[0]) && !t.isEqual(this.getRange()) && this.fromOrientedRange(t);\n }, this.$initRangeList = function () {\n this.rangeList || (this.rangeList = new n(), this.ranges = [], this.rangeCount = 0);\n }, this.getAllRanges = function () {\n return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n }, this.splitIntoLines = function () {\n for (var e = this.ranges.length ? this.ranges : [this.getRange()], t = [], n = 0; n < e.length; n++) {\n var i = e[n],\n o = i.start.row,\n r = i.end.row;\n if (o === r) t.push(i.clone());else {\n for (t.push(new I(o, i.start.column, o, this.session.getLine(o).length)); ++o < r;) t.push(this.getLineRange(o, !0));\n t.push(new I(r, 0, r, i.end.column));\n }\n 0 != n || this.isBackwards() || (t = t.reverse());\n }\n this.toSingleRange();\n for (n = t.length; n--;) this.addRange(t[n]);\n }, this.joinSelections = function () {\n var e = this.rangeList.ranges,\n t = e[e.length - 1],\n e = I.fromPoints(e[0].start, t.end);\n this.toSingleRange(), this.setSelectionRange(e, t.cursor == t.start);\n }, this.toggleBlockSelection = function () {\n var e, t;\n 1 < this.rangeCount ? (t = (e = this.rangeList.ranges)[e.length - 1], e = I.fromPoints(e[0].start, t.end), this.toSingleRange(), this.setSelectionRange(e, t.cursor == t.start)) : (e = this.session.documentToScreenPosition(this.cursor), t = this.session.documentToScreenPosition(this.anchor), this.rectangularRangeBlock(e, t).forEach(this.addRange, this));\n }, this.rectangularRangeBlock = function (e, t, n) {\n var i,\n o,\n r,\n s,\n a,\n l,\n c,\n h = [],\n d = e.column < t.column,\n u = (s = (d ? (i = e.column, o = t.column, r = e.offsetX, t) : (i = t.column, o = e.column, r = t.offsetX, e)).offsetX, e.row < t.row);\n l = (u ? (a = e.row, t) : (a = t.row, e)).row, i < 0 && (i = 0), (a = a < 0 ? 0 : a) == l && (n = !0);\n for (var g, p, m = a; m <= l; m++) {\n var f = I.fromPoints(this.session.screenToDocumentPosition(m, i, r), this.session.screenToDocumentPosition(m, o, s));\n if (f.isEmpty()) {\n if (c && (g = f.end, p = c, g.row == p.row) && g.column == p.column) break;\n c = f.end;\n }\n f.cursor = d ? f.start : f.end, h.push(f);\n }\n if (u && h.reverse(), !n) {\n for (var C = h.length - 1; h[C].isEmpty() && 0 < C;) C--;\n if (0 < C) for (var y = 0; h[y].isEmpty();) y++;\n for (var v = C; y <= v; v--) h[v].isEmpty() && h.splice(v, 1);\n }\n return h;\n };\n }.call(u.prototype), e(\"./editor\").Editor);\n function c(e) {\n var t, n;\n function i(e) {\n n && (t.renderer.setMouseCursor(\"\"), n = !1);\n }\n e.$multiselectOnSessionChange || (e.$onAddRange = e.$onAddRange.bind(e), e.$onRemoveRange = e.$onRemoveRange.bind(e), e.$onMultiSelect = e.$onMultiSelect.bind(e), e.$onSingleSelect = e.$onSingleSelect.bind(e), e.$multiselectOnSessionChange = o.onSessionChange.bind(e), e.$checkMultiselectChange = e.$checkMultiselectChange.bind(e), e.$multiselectOnSessionChange(e), e.on(\"changeSession\", e.$multiselectOnSessionChange), e.on(\"mousedown\", r), e.commands.addCommands(a.defaultCommands), (t = e).textInput && (e = t.textInput.getElement(), n = !1, s.addListener(e, \"keydown\", function (e) {\n e = 18 == e.keyCode && !(e.ctrlKey || e.shiftKey || e.metaKey);\n t.$blockSelectEnabled && e ? n || (t.renderer.setMouseCursor(\"crosshair\"), n = !0) : n && i();\n }, t), s.addListener(e, \"keyup\", i, t), s.addListener(e, \"blur\", i, t)));\n }\n !function () {\n this.updateSelectionMarkers = function () {\n this.renderer.updateCursor(), this.renderer.updateBackMarkers();\n }, this.addSelectionMarker = function (e) {\n e.cursor || (e.cursor = e.end);\n var t = this.getSelectionStyle();\n return e.marker = this.session.addMarker(e, \"ace_selection\", t), this.session.$selectionMarkers.push(e), this.session.selectionMarkerCount = this.session.$selectionMarkers.length, e;\n }, this.removeSelectionMarker = function (e) {\n e.marker && (this.session.removeMarker(e.marker), -1 != (e = this.session.$selectionMarkers.indexOf(e)) && this.session.$selectionMarkers.splice(e, 1), this.session.selectionMarkerCount = this.session.$selectionMarkers.length);\n }, this.removeSelectionMarkers = function (e) {\n for (var t = this.session.$selectionMarkers, n = e.length; n--;) {\n var i = e[n];\n i.marker && (this.session.removeMarker(i.marker), -1 != (i = t.indexOf(i))) && t.splice(i, 1);\n }\n this.session.selectionMarkerCount = t.length;\n }, this.$onAddRange = function (e) {\n this.addSelectionMarker(e.range), this.renderer.updateCursor(), this.renderer.updateBackMarkers();\n }, this.$onRemoveRange = function (e) {\n this.removeSelectionMarkers(e.ranges), this.renderer.updateCursor(), this.renderer.updateBackMarkers();\n }, this.$onMultiSelect = function (e) {\n this.inMultiSelectMode || (this.inMultiSelectMode = !0, this.setStyle(\"ace_multiselect\"), this.keyBinding.addKeyboardHandler(a.keyboardHandler), this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec), this.renderer.updateCursor(), this.renderer.updateBackMarkers());\n }, this.$onSingleSelect = function (e) {\n this.session.multiSelect.inVirtualMode || (this.inMultiSelectMode = !1, this.unsetStyle(\"ace_multiselect\"), this.keyBinding.removeKeyboardHandler(a.keyboardHandler), this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec), this.renderer.updateCursor(), this.renderer.updateBackMarkers(), this._emit(\"changeSelection\"));\n }, this.$onMultiSelectExec = function (e) {\n var t,\n n = e.command,\n i = e.editor;\n if (i.multiSelect) return n.multiSelectAction ? t = \"forEach\" == n.multiSelectAction ? i.forEachSelection(n, e.args) : \"forEachLine\" == n.multiSelectAction ? i.forEachSelection(n, e.args, !0) : \"single\" == n.multiSelectAction ? (i.exitMultiSelectMode(), n.exec(i, e.args || {})) : n.multiSelectAction(i, e.args || {}) : (t = n.exec(i, e.args || {}), i.multiSelect.addRange(i.multiSelect.toOrientedRange()), i.multiSelect.mergeOverlappingRanges()), t;\n }, this.forEachSelection = function (e, t, n) {\n if (!this.inVirtualSelectionMode) {\n var i,\n o = n && n.keepOrder,\n r = 1 == n || n && n.$byLines,\n s = this.session,\n n = this.selection,\n a = n.rangeList,\n l = (o ? n : a).ranges;\n if (!l.length) return e.exec ? e.exec(this, t || {}) : e(this, t || {});\n var o = n._eventRegistry,\n c = (n._eventRegistry = {}, new u(s));\n this.inVirtualSelectionMode = !0;\n for (var h = l.length; h--;) {\n if (r) for (; 0 < h && l[h].start.row == l[h - 1].end.row;) h--;\n c.fromOrientedRange(l[h]), c.index = h, this.selection = s.selection = c;\n var d = e.exec ? e.exec(this, t || {}) : e(this, t || {});\n i || void 0 === d || (i = d), c.toOrientedRange(l[h]);\n }\n c.detach(), this.selection = s.selection = n, this.inVirtualSelectionMode = !1, n._eventRegistry = o, n.mergeOverlappingRanges(), n.ranges[0] && n.fromOrientedRange(n.ranges[0]);\n a = this.renderer.$scrollAnimation;\n return this.onCursorChange(), this.onSelectionChange(), a && a.from == a.to && this.renderer.animateScrolling(a.from), i;\n }\n }, this.exitMultiSelectMode = function () {\n this.inMultiSelectMode && !this.inVirtualSelectionMode && this.multiSelect.toSingleRange();\n }, this.getSelectedText = function () {\n var e = \"\";\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n for (var t = this.multiSelect.rangeList.ranges, n = [], i = 0; i < t.length; i++) n.push(this.session.getTextRange(t[i]));\n var o = this.session.getDocument().getNewLineCharacter();\n (e = n.join(o)).length == (n.length - 1) * o.length && (e = \"\");\n } else this.selection.isEmpty() || (e = this.session.getTextRange(this.getSelectionRange()));\n return e;\n }, this.$checkMultiselectChange = function (e, t) {\n var n;\n this.inMultiSelectMode && !this.inVirtualSelectionMode && (n = this.multiSelect.ranges[0], this.multiSelect.isEmpty() && t == this.multiSelect.anchor || ((n = t == this.multiSelect.anchor ? n.cursor == n.start ? n.end : n.start : n.cursor).row != t.row || this.session.$clipPositionToDocument(n.row, n.column).column != t.column ? this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange()) : this.multiSelect.mergeOverlappingRanges()));\n }, this.findAll = function (e, t, n) {\n (t = t || {}).needle = e || t.needle, null == t.needle && (i = this.selection.isEmpty() ? this.selection.getWordRange() : this.selection.getRange(), t.needle = this.session.getTextRange(i)), this.$search.set(t);\n var i,\n o = this.$search.findAll(this.session);\n if (!o.length) return 0;\n var r = this.multiSelect;\n n || r.toSingleRange(o[0]);\n for (var s = o.length; s--;) r.addRange(o[s], !0);\n return i && r.rangeList.rangeAtPoint(i.start) && r.addRange(i, !0), o.length;\n }, this.selectMoreLines = function (e, t) {\n var n,\n i,\n o,\n r = this.selection.toOrientedRange(),\n s = r.cursor == r.end,\n a = this.session.documentToScreenPosition(r.cursor),\n l = (this.selection.$desiredColumn && (a.column = this.selection.$desiredColumn), this.session.screenToDocumentPosition(a.row + e, a.column));\n e = r.isEmpty() ? l : (n = this.session.documentToScreenPosition(s ? r.end : r.start), this.session.screenToDocumentPosition(n.row + e, n.column)), s ? (i = I.fromPoints(l, e)).cursor = i.start : (i = I.fromPoints(e, l)).cursor = i.end, i.desiredColumn = a.column, this.selection.inMultiSelectMode ? t && (o = r.cursor) : this.selection.addRange(r), this.selection.addRange(i), o && this.selection.substractPoint(o);\n }, this.transposeSelections = function (e) {\n for (var t = this.session, n = t.multiSelect, i = n.ranges, o = i.length; o--;) (s = i[o]).isEmpty() && (a = t.getWordRange(s.start.row, s.start.column), s.start.row = a.start.row, s.start.column = a.start.column, s.end.row = a.end.row, s.end.column = a.end.column);\n n.mergeOverlappingRanges();\n for (var r = [], o = i.length; o--;) {\n var s = i[o];\n r.unshift(t.getTextRange(s));\n }\n e < 0 ? r.unshift(r.pop()) : r.push(r.shift());\n for (o = i.length; o--;) {\n var a = (s = i[o]).clone();\n t.replace(s, r[o]), s.start.row = a.start.row, s.start.column = a.start.column;\n }\n n.fromOrientedRange(n.ranges[0]);\n }, this.selectMore = function (e, t, n) {\n var i,\n o = this.session,\n r = o.multiSelect.toOrientedRange();\n r.isEmpty() && ((r = o.getWordRange(r.start.row, r.start.column)).cursor = -1 == e ? r.start : r.end, this.multiSelect.addRange(r), n) || (n = o.getTextRange(r), o = o, n = n, i = e, l.$options.wrap = !0, l.$options.needle = n, l.$options.backwards = -1 == i, (n = l.find(o)) && (n.cursor = -1 == e ? n.start : n.end, this.session.unfold(n), this.multiSelect.addRange(n), this.renderer.scrollCursorIntoView(null, .5)), t && this.multiSelect.substractPoint(r.cursor));\n }, this.alignCursors = function () {\n var o = this.session,\n t = o.multiSelect,\n e = t.ranges,\n n = -1,\n i = e.filter(function (e) {\n if (e.cursor.row == n) return !0;\n n = e.cursor.row;\n });\n if (e.length && i.length != e.length - 1) {\n i.forEach(function (e) {\n t.substractPoint(e.cursor);\n });\n var r = 0,\n s = 1 / 0,\n a = e.map(function (e) {\n var e = e.cursor,\n t = o.getLine(e.row).substr(e.column).search(/\\S/g);\n return e.column > r && (r = e.column), (t = -1 == t ? 0 : t) < s && (s = t), t;\n });\n e.forEach(function (e, t) {\n var n = e.cursor,\n i = r - n.column,\n t = a[t] - s;\n t < i ? o.insert(n, g.stringRepeat(\" \", i - t)) : o.remove(new I(n.row, n.column, n.row, n.column - i + t)), e.start.column = e.end.column = r, e.start.row = e.end.row = n.row, e.cursor = e.end;\n }), t.fromOrientedRange(e[0]), this.renderer.updateCursor(), this.renderer.updateBackMarkers();\n } else {\n var i = this.selection.getRange(),\n l = i.start.row,\n c = i.end.row,\n e = l == c;\n if (e) {\n for (var h, d = this.session.getLength(); h = this.session.getLine(c), /[=:]/.test(h) && ++c < d;);\n for (; h = this.session.getLine(l), /[=:]/.test(h) && 0 < --l;);\n l < 0 && (l = 0), d <= c && (c = d - 1);\n }\n var u = this.session.removeFullLines(l, c),\n u = this.$reAlignText(u, e);\n this.session.insert({\n row: l,\n column: 0\n }, u.join(\"\\n\") + \"\\n\"), e || (i.start.column = 0, i.end.column = u[u.length - 1].length), this.selection.setRange(i);\n }\n }, this.$reAlignText = function (e, t) {\n var n,\n i,\n o,\n r = !0,\n s = !0;\n return e.map(function (e) {\n var t = e.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n return t ? (null == n ? (n = t[1].length, i = t[2].length, o = t[3].length) : (n + i + o != t[1].length + t[2].length + t[3].length && (s = !1), n != t[1].length && (r = !1), n > t[1].length && (n = t[1].length), i < t[2].length && (i = t[2].length), o > t[3].length && (o = t[3].length)), t) : [e];\n }).map(t ? l : r ? s ? function (e) {\n return e[2] ? a(n + i - e[2].length) + e[2] + a(o) + e[4].replace(/^([=:])\\s+/, \"$1 \") : e[0];\n } : l : function (e) {\n return e[2] ? a(n) + e[2] + a(o) + e[4].replace(/^([=:])\\s+/, \"$1 \") : e[0];\n });\n function a(e) {\n return g.stringRepeat(\" \", e);\n }\n function l(e) {\n return e[2] ? a(n) + e[2] + a(i - e[2].length + o) + e[4].replace(/^([=:])\\s+/, \"$1 \") : e[0];\n }\n };\n }.call(i.prototype), o.onSessionChange = function (e) {\n var t = e.session,\n e = (t && !t.multiSelect && (t.$selectionMarkers = [], t.selection.$initRangeList(), t.multiSelect = t.selection), this.multiSelect = t && t.multiSelect, e.oldSession);\n e && (e.multiSelect.off(\"addRange\", this.$onAddRange), e.multiSelect.off(\"removeRange\", this.$onRemoveRange), e.multiSelect.off(\"multiSelect\", this.$onMultiSelect), e.multiSelect.off(\"singleSelect\", this.$onSingleSelect), e.multiSelect.lead.off(\"change\", this.$checkMultiselectChange), e.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange)), t && (t.multiSelect.on(\"addRange\", this.$onAddRange), t.multiSelect.on(\"removeRange\", this.$onRemoveRange), t.multiSelect.on(\"multiSelect\", this.$onMultiSelect), t.multiSelect.on(\"singleSelect\", this.$onSingleSelect), t.multiSelect.lead.on(\"change\", this.$checkMultiselectChange), t.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange)), t && this.inMultiSelectMode != t.selection.inMultiSelectMode && (t.selection.inMultiSelectMode ? this.$onMultiSelect() : this.$onSingleSelect());\n }, o.MultiSelect = c, e(\"./config\").defineOptions(i.prototype, \"editor\", {\n enableMultiselect: {\n set: function (e) {\n c(this), e ? this.on(\"mousedown\", r) : this.off(\"mousedown\", r);\n },\n value: !0\n },\n enableBlockSelect: {\n set: function (e) {\n this.$blockSelectEnabled = e;\n },\n value: !0\n }\n });\n }), ace.define(\"ace/mode/folding/fold_mode\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (e, t, n) {\n \"use strict\";\n\n var h = e(\"../../range\").Range,\n e = t.FoldMode = function () {};\n !function () {\n this.foldingStartMarker = null, this.foldingStopMarker = null, this.getFoldWidget = function (e, t, n) {\n e = e.getLine(n);\n return this.foldingStartMarker.test(e) ? \"start\" : \"markbeginend\" == t && this.foldingStopMarker && this.foldingStopMarker.test(e) ? \"end\" : \"\";\n }, this.getFoldWidgetRange = function (e, t, n) {\n return null;\n }, this.indentationBlock = function (e, t, n) {\n var i = /\\S/,\n o = e.getLine(t),\n r = o.search(i);\n if (-1 != r) {\n for (var s, n = n || o.length, a = e.getLength(), o = t, l = t; ++t < a;) {\n var c = e.getLine(t).search(i);\n if (-1 != c) {\n if (c <= r) {\n c = e.getTokenAt(t, 0);\n if (!c || \"string\" !== c.type) break;\n }\n l = t;\n }\n }\n return o < l ? (s = e.getLine(l).length, new h(o, n, l, s)) : void 0;\n }\n }, this.openingBracketBlock = function (e, t, n, i, o) {\n n = {\n row: n,\n column: i + 1\n }, i = e.$findClosingBracket(t, n, o);\n if (i) return \"start\" == (t = null == (t = e.foldWidgets[i.row]) ? e.getFoldWidget(i.row) : t) && i.row > n.row && (i.row--, i.column = e.getLine(i.row).length), h.fromPoints(n, i);\n }, this.closingBracketBlock = function (e, t, n, i, o) {\n n = {\n row: n,\n column: i\n }, i = e.$findOpeningBracket(t, n);\n if (i) return i.column++, n.column--, h.fromPoints(i, n);\n };\n }.call(e.prototype);\n }), ace.define(\"ace/ext/error_marker\", [\"require\", \"exports\", \"module\", \"ace/line_widgets\", \"ace/lib/dom\", \"ace/range\", \"ace/config\"], function (e, t, n) {\n \"use strict\";\n\n var c = e(\"../line_widgets\").LineWidgets,\n h = e(\"../lib/dom\"),\n a = e(\"../range\").Range,\n d = e(\"../config\").nls;\n function u(e, t, n) {\n var i = e.getAnnotations().sort(a.comparePoints);\n if (i.length) {\n var o = function (e, t, n) {\n for (var i = 0, o = e.length - 1; i <= o;) {\n var r = i + o >> 1,\n s = n(t, e[r]);\n if (0 < s) i = 1 + r;else {\n if (!(s < 0)) return r;\n o = r - 1;\n }\n }\n return -(i + 1);\n }(i, {\n row: t,\n column: -1\n }, a.comparePoints),\n r = ((o = o < 0 ? -o - 1 : o) >= i.length ? o = 0 < n ? 0 : i.length - 1 : 0 === o && n < 0 && (o = i.length - 1), i[o]);\n if (r && n) {\n if (r.row === t) {\n for (; (r = i[o += n]) && r.row === t;);\n if (!r) return i.slice();\n }\n var s = [];\n for (t = r.row; s[n < 0 ? \"unshift\" : \"push\"](r), (r = i[o += n]) && r.row == t;);\n return s.length && s;\n }\n }\n }\n t.showErrorMarker = function (e, t) {\n var n,\n i = e.session,\n o = (i.widgetManager || (i.widgetManager = new c(i), i.widgetManager.attach(e)), e.getCursorPosition()),\n r = o.row,\n s = i.widgetManager.getWidgetsAtRow(r).filter(function (e) {\n return \"errorMarker\" == e.type;\n })[0],\n r = (s ? s.destroy() : r -= t, u(i, r, t));\n if (r) {\n t = r[0];\n o.column = (t.pos && \"number\" != typeof t.column ? t.pos.sc : t.column) || 0, o.row = t.row, n = e.renderer.$gutterLayer.$annotations[o.row];\n } else {\n if (s) return;\n n = {\n text: [d(\"Looks good!\")],\n className: \"ace_ok\"\n };\n }\n e.session.unfold(o.row), e.selection.moveToPosition(o);\n function a(e, t, n) {\n if (0 === t && (\"esc\" === n || \"return\" === n)) return l.destroy(), {\n command: \"null\"\n };\n }\n var l = {\n row: o.row,\n fixedWidth: !0,\n coverGutter: !0,\n el: h.createElement(\"div\"),\n type: \"errorMarker\"\n },\n r = l.el.appendChild(h.createElement(\"div\")),\n t = l.el.appendChild(h.createElement(\"div\")),\n s = (t.className = \"error_widget_arrow \" + n.className, e.renderer.$cursorLayer.getPixelPosition(o).left);\n t.style.left = s + e.renderer.gutterWidth - 5 + \"px\", l.el.className = \"error_widget_wrapper\", r.className = \"error_widget \" + n.className, r.innerHTML = n.text.join(\" \"), r.appendChild(h.createElement(\"div\"));\n l.destroy = function () {\n e.$mouseHandler.isMousePressed || (e.keyBinding.removeKeyboardHandler(a), i.widgetManager.removeLineWidget(l), e.off(\"changeSelection\", l.destroy), e.off(\"changeSession\", l.destroy), e.off(\"mouseup\", l.destroy), e.off(\"change\", l.destroy));\n }, e.keyBinding.addKeyboardHandler(a), e.on(\"changeSelection\", l.destroy), e.on(\"changeSession\", l.destroy), e.on(\"mouseup\", l.destroy), e.on(\"change\", l.destroy), e.session.widgetManager.addLineWidget(l), l.el.onmousedown = e.focus.bind(e), e.renderer.scrollCursorIntoView(null, .5, {\n bottom: l.el.offsetHeight\n });\n }, h.importCssString(\"\\n .error_widget_wrapper {\\n background: inherit;\\n color: inherit;\\n border:none\\n }\\n .error_widget {\\n border-top: solid 2px;\\n border-bottom: solid 2px;\\n margin: 5px 0;\\n padding: 10px 40px;\\n white-space: pre-wrap;\\n }\\n .error_widget.ace_error, .error_widget_arrow.ace_error{\\n border-color: #ff5a5a\\n }\\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\n border-color: #F1D817\\n }\\n .error_widget.ace_info, .error_widget_arrow.ace_info{\\n border-color: #5a5a5a\\n }\\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\n border-color: #5aaa5a\\n }\\n .error_widget_arrow {\\n position: absolute;\\n border: solid 5px;\\n border-top-color: transparent!important;\\n border-right-color: transparent!important;\\n border-left-color: transparent!important;\\n top: -5px;\\n }\\n\", \"error_marker.css\", !1);\n }), ace.define(\"ace/ace\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/range\", \"ace/editor\", \"ace/edit_session\", \"ace/undomanager\", \"ace/virtual_renderer\", \"ace/worker/worker_client\", \"ace/keyboard/hash_handler\", \"ace/placeholder\", \"ace/multi_select\", \"ace/mode/folding/fold_mode\", \"ace/theme/textmate\", \"ace/ext/error_marker\", \"ace/config\", \"ace/loader_build\"], function (e, r, t) {\n \"use strict\";\n\n e(\"./loader_build\")(r);\n var s = e(\"./lib/dom\"),\n n = e(\"./range\").Range,\n a = e(\"./editor\").Editor,\n i = e(\"./edit_session\").EditSession,\n o = e(\"./undomanager\").UndoManager,\n l = e(\"./virtual_renderer\").VirtualRenderer;\n e(\"./worker/worker_client\"), e(\"./keyboard/hash_handler\"), e(\"./placeholder\"), e(\"./multi_select\"), e(\"./mode/folding/fold_mode\"), e(\"./theme/textmate\"), e(\"./ext/error_marker\"), r.config = e(\"./config\"), r.edit = function (e, t) {\n if (\"string\" == typeof e) {\n var n = e;\n if (!(e = document.getElementById(n))) throw new Error(\"ace.edit can't find div #\" + n);\n }\n var i, o;\n return e && e.env && e.env.editor instanceof a ? e.env.editor : (n = \"\", e && /input|textarea/i.test(e.tagName) ? (n = (i = e).value, e = s.createElement(\"pre\"), i.parentNode.replaceChild(e, i)) : e && (n = e.textContent, e.innerHTML = \"\"), n = r.createEditSession(n), e = new a(new l(e), n, t), o = {\n document: n,\n editor: e,\n onResize: e.resize.bind(e, null)\n }, i && (o.textarea = i), e.on(\"destroy\", function () {\n o.editor.container.env = null;\n }), e.container.env = e.env = o, e);\n }, r.createEditSession = function (e, t) {\n e = new i(e, t);\n return e.setUndoManager(new o()), e;\n }, r.Range = n, r.Editor = a, r.EditSession = i, r.UndoManager = o, r.VirtualRenderer = l, r.version = r.config.version;\n }), ace.require([\"ace/ace\"], function (e) {\n e && (e.config.init(!0), e.define = ace.define);\n var t,\n n = function () {\n return this;\n }();\n for (t in (n = (n = n || \"undefined\" == typeof window ? n : window) || \"undefined\" == typeof self ? n : self).ace || (n.ace = e), e) e.hasOwnProperty(t) && (n.ace[t] = e[t]);\n n.ace.default = n.ace, i && (i.exports = n.ace);\n });\n },\n 4317: function (t, e, n) {\n t = n.nmd(t), ace.define(\"ace/snippets\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/oop\", \"ace/lib/event_emitter\", \"ace/lib/lang\", \"ace/range\", \"ace/range_list\", \"ace/keyboard/hash_handler\", \"ace/tokenizer\", \"ace/clipboard\", \"ace/editor\"], function (e, s, t) {\n \"use strict\";\n\n var n = e(\"./lib/dom\"),\n i = e(\"./lib/oop\"),\n o = e(\"./lib/event_emitter\").EventEmitter,\n c = e(\"./lib/lang\"),\n h = e(\"./range\").Range,\n d = e(\"./range_list\").RangeList,\n r = e(\"./keyboard/hash_handler\").HashHandler,\n a = e(\"./tokenizer\").Tokenizer,\n l = e(\"./clipboard\"),\n u = {\n CURRENT_WORD: function (e) {\n return e.session.getTextRange(e.session.getWordRange());\n },\n SELECTION: function (e, t, n) {\n e = e.session.getTextRange();\n return n ? e.replace(/\\n\\r?([ \\t]*\\S)/g, \"\\n\" + n + \"$1\") : e;\n },\n CURRENT_LINE: function (e) {\n return e.session.getLine(e.getCursorPosition().row);\n },\n PREV_LINE: function (e) {\n return e.session.getLine(e.getCursorPosition().row - 1);\n },\n LINE_INDEX: function (e) {\n return e.getCursorPosition().row;\n },\n LINE_NUMBER: function (e) {\n return e.getCursorPosition().row + 1;\n },\n SOFT_TABS: function (e) {\n return e.session.getUseSoftTabs() ? \"YES\" : \"NO\";\n },\n TAB_SIZE: function (e) {\n return e.session.getTabSize();\n },\n CLIPBOARD: function (e) {\n return l.getText && l.getText();\n },\n FILENAME: function (e) {\n return /[^/\\\\]*$/.exec(this.FILEPATH(e))[0];\n },\n FILENAME_BASE: function (e) {\n return /[^/\\\\]*$/.exec(this.FILEPATH(e))[0].replace(/\\.[^.]*$/, \"\");\n },\n DIRECTORY: function (e) {\n return this.FILEPATH(e).replace(/[^/\\\\]*$/, \"\");\n },\n FILEPATH: function (e) {\n return \"/not implemented.txt\";\n },\n WORKSPACE_NAME: function () {\n return \"Unknown\";\n },\n FULLNAME: function () {\n return \"Unknown\";\n },\n BLOCK_COMMENT_START: function (e) {\n e = e.session.$mode || {};\n return e.blockComment && e.blockComment.start || \"\";\n },\n BLOCK_COMMENT_END: function (e) {\n e = e.session.$mode || {};\n return e.blockComment && e.blockComment.end || \"\";\n },\n LINE_COMMENT: function (e) {\n return (e.session.$mode || {}).lineCommentStart || \"\";\n },\n CURRENT_YEAR: g.bind(null, {\n year: \"numeric\"\n }),\n CURRENT_YEAR_SHORT: g.bind(null, {\n year: \"2-digit\"\n }),\n CURRENT_MONTH: g.bind(null, {\n month: \"numeric\"\n }),\n CURRENT_MONTH_NAME: g.bind(null, {\n month: \"long\"\n }),\n CURRENT_MONTH_NAME_SHORT: g.bind(null, {\n month: \"short\"\n }),\n CURRENT_DATE: g.bind(null, {\n day: \"2-digit\"\n }),\n CURRENT_DAY_NAME: g.bind(null, {\n weekday: \"long\"\n }),\n CURRENT_DAY_NAME_SHORT: g.bind(null, {\n weekday: \"short\"\n }),\n CURRENT_HOUR: g.bind(null, {\n hour: \"2-digit\",\n hour12: !1\n }),\n CURRENT_MINUTE: g.bind(null, {\n minute: \"2-digit\"\n }),\n CURRENT_SECOND: g.bind(null, {\n second: \"2-digit\"\n })\n };\n function g(e) {\n e = new Date().toLocaleString(\"en-us\", e);\n return 1 == e.length ? \"0\" + e : e;\n }\n u.SELECTED_TEXT = u.SELECTION;\n m.prototype.getTokenizer = function () {\n return m.$tokenizer || this.createTokenizer();\n }, m.prototype.createTokenizer = function () {\n function i(e) {\n return e = e.substr(1), /^\\d+$/.test(e) ? [{\n tabstopId: parseInt(e, 10)\n }] : [{\n text: e\n }];\n }\n function e(e) {\n return \"(?:[^\\\\\\\\\" + e + \"]|\\\\\\\\.)\";\n }\n var t = {\n regex: \"/(\" + e(\"/\") + \"+)/\",\n onMatch: function (e, t, n) {\n n = n[0];\n return n.fmtString = !0, n.guard = e.slice(1, -1), n.flag = \"\";\n },\n next: \"formatString\"\n };\n return m.$tokenizer = new a({\n start: [{\n regex: /\\\\./,\n onMatch: function (e, t, n) {\n var i = e[1];\n return [e = \"}\" == i && n.length || -1 != \"`$\\\\\".indexOf(i) ? i : e];\n }\n }, {\n regex: /}/,\n onMatch: function (e, t, n) {\n return [n.length ? n.shift() : e];\n }\n }, {\n regex: /\\$(?:\\d+|\\w+)/,\n onMatch: i\n }, {\n regex: /\\$\\{[\\dA-Z_a-z]+/,\n onMatch: function (e, t, n) {\n e = i(e.substr(1));\n return n.unshift(e[0]), e;\n },\n next: \"snippetVar\"\n }, {\n regex: /\\n/,\n token: \"newline\",\n merge: !1\n }],\n snippetVar: [{\n regex: \"\\\\|\" + e(\"\\\\|\") + \"*\\\\|\",\n onMatch: function (e, t, n) {\n e = e.slice(1, -1).replace(/\\\\[,|\\\\]|,/g, function (e) {\n return 2 == e.length ? e[1] : \"\\0\";\n }).split(\"\\0\").map(function (e) {\n return {\n value: e\n };\n });\n return [(n[0].choices = e)[0]];\n },\n next: \"start\"\n }, t, {\n regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\",\n token: \"\",\n next: \"start\"\n }],\n formatString: [{\n regex: /:/,\n onMatch: function (e, t, n) {\n return n.length && n[0].expectElse ? (n[0].expectElse = !1, n[0].ifEnd = {\n elseEnd: n[0]\n }, [n[0].ifEnd]) : \":\";\n }\n }, {\n regex: /\\\\./,\n onMatch: function (e, t, n) {\n var i = e[1];\n return \"}\" == i && n.length || -1 != \"`$\\\\\".indexOf(i) ? e = i : \"n\" == i ? e = \"\\n\" : \"t\" == i ? e = \"\\t\" : -1 != \"ulULE\".indexOf(i) && (e = {\n changeCase: i,\n local: \"a\" < i\n }), [e];\n }\n }, {\n regex: \"/\\\\w*}\",\n onMatch: function (e, t, n) {\n n = n.shift();\n return n && (n.flag = e.slice(1, -1)), this.next = n && n.tabstopId ? \"start\" : \"\", [n || e];\n },\n next: \"start\"\n }, {\n regex: /\\$(?:\\d+|\\w+)/,\n onMatch: function (e, t, n) {\n return [{\n text: e.slice(1)\n }];\n }\n }, {\n regex: /\\${\\w+/,\n onMatch: function (e, t, n) {\n e = {\n text: e.slice(2)\n };\n return n.unshift(e), [e];\n },\n next: \"formatStringVar\"\n }, {\n regex: /\\n/,\n token: \"newline\",\n merge: !1\n }, {\n regex: /}/,\n onMatch: function (e, t, n) {\n n = n.shift();\n return this.next = n && n.tabstopId ? \"start\" : \"\", [n || e];\n },\n next: \"start\"\n }],\n formatStringVar: [{\n regex: /:\\/\\w+}/,\n onMatch: function (e, t, n) {\n return n[0].formatFunction = e.slice(2, -1), [n.shift()];\n },\n next: \"formatString\"\n }, t, {\n regex: /:[\\?\\-+]?/,\n onMatch: function (e, t, n) {\n \"+\" == e[1] && (n[0].ifEnd = n[0]), \"?\" == e[1] && (n[0].expectElse = !0);\n },\n next: \"formatString\"\n }, {\n regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\",\n token: \"\",\n next: \"formatString\"\n }]\n });\n }, m.prototype.tokenizeTmSnippet = function (e, t) {\n return this.getTokenizer().getLineTokens(e, t).tokens.map(function (e) {\n return e.value || e;\n });\n }, m.prototype.getVariableValue = function (e, t, n) {\n var i;\n return /^\\d+$/.test(t) ? (this.variables.__ || {})[t] || \"\" : /^[A-Z]\\d+$/.test(t) ? (this.variables[t[0] + \"__\"] || {})[t.substr(1)] || \"\" : (t = t.replace(/^TM_/, \"\"), !this.variables.hasOwnProperty(t) || null == (i = \"function\" == typeof (i = this.variables[t]) ? this.variables[t](e, t, n) : i) ? \"\" : i);\n }, m.prototype.tmStrFormat = function (e, t, s) {\n var n, i, a, l;\n return t.fmt ? (n = t.flag || \"\", i = t.guard, i = new RegExp(i, n.replace(/[^gim]/g, \"\")), a = \"string\" == typeof t.fmt ? this.tokenizeTmSnippet(t.fmt, \"formatString\") : t.fmt, l = this, e.replace(i, function () {\n for (var e = l.variables.__, t = (l.variables.__ = [].slice.call(arguments), l.resolveVariables(a, s)), n = \"E\", i = 0; i < t.length; i++) {\n var o,\n r = t[i];\n \"object\" == typeof r ? (t[i] = \"\", r.changeCase && r.local ? (o = t[i + 1]) && \"string\" == typeof o && (\"u\" == r.changeCase ? t[i] = o[0].toUpperCase() : t[i] = o[0].toLowerCase(), t[i + 1] = o.substr(1)) : r.changeCase && (n = r.changeCase)) : \"U\" == n ? t[i] = r.toUpperCase() : \"L\" == n && (t[i] = r.toLowerCase());\n }\n return l.variables.__ = e, t.join(\"\");\n })) : e;\n }, m.prototype.tmFormatFunction = function (e, t, n) {\n return \"upcase\" == t.formatFunction ? e.toUpperCase() : \"downcase\" == t.formatFunction ? e.toLowerCase() : e;\n }, m.prototype.resolveVariables = function (t, e) {\n for (var n = [], i = \"\", o = !0, r = 0; r < t.length; r++) {\n var s,\n a = t[r];\n \"string\" == typeof a ? (n.push(a), \"\\n\" == a ? (o = !0, i = \"\") : o && (i = /^\\t*/.exec(a)[0], o = /\\S/.test(a))) : a && (o = !1, a.fmtString && (-1 == (s = t.indexOf(a, r + 1)) && (s = t.length), a.fmt = t.slice(r + 1, s), r = s), a.text ? (s = this.getVariableValue(e, a.text, i) + \"\", a.fmtString && (s = this.tmStrFormat(s, a, e)), (s = a.formatFunction ? this.tmFormatFunction(s, a, e) : s) && !a.ifEnd ? (n.push(s), l(a)) : !s && a.ifEnd && l(a.ifEnd)) : a.elseEnd ? l(a.elseEnd) : null == a.tabstopId && null == a.changeCase || n.push(a));\n }\n function l(e) {\n e = t.indexOf(e, r + 1);\n -1 != e && (r = e);\n }\n return n;\n }, m.prototype.getDisplayTextForSnippet = function (e, t) {\n return f.call(this, e, t).text;\n }, m.prototype.insertSnippetForSelection = function (e, t, n) {\n var t = f.call(this, e, t, n = void 0 === n ? {} : n),\n n = e.getSelectionRange(),\n i = e.session.replace(n, t.text),\n o = new C(e),\n e = e.inVirtualSelectionMode && e.selection.index;\n o.addTabstops(t.tabstops, n.start, i, e);\n }, m.prototype.insertSnippet = function (e, t, n) {\n void 0 === n && (n = {});\n var i = this;\n if (e.inVirtualSelectionMode) return i.insertSnippetForSelection(e, t, n);\n e.forEachSelection(function () {\n i.insertSnippetForSelection(e, t, n);\n }, null, {\n keepOrder: !0\n }), e.tabstopManager && e.tabstopManager.tabNext();\n }, m.prototype.$getScope = function (e) {\n var t,\n n = e.session.$mode.$id || \"\";\n return \"html\" !== (n = n.split(\"/\").pop()) && \"php\" !== n || (\"php\" !== n || e.session.$mode.inlinePhp || (n = \"html\"), t = e.getCursorPosition(), (e = \"object\" == typeof (e = e.session.getState(t.row)) ? e[0] : e).substring && (\"js-\" == e.substring(0, 3) ? n = \"javascript\" : \"css-\" == e.substring(0, 4) ? n = \"css\" : \"php-\" == e.substring(0, 4) && (n = \"php\"))), n;\n }, m.prototype.getActiveScopes = function (e) {\n var e = this.$getScope(e),\n t = [e],\n n = this.snippetMap;\n return n[e] && n[e].includeScopes && t.push.apply(t, n[e].includeScopes), t.push(\"_\"), t;\n }, m.prototype.expandWithTab = function (e, t) {\n var n = this,\n i = e.forEachSelection(function () {\n return n.expandSnippetForSelection(e, t);\n }, null, {\n keepOrder: !0\n });\n return i && e.tabstopManager && e.tabstopManager.tabNext(), i;\n }, m.prototype.expandSnippetForSelection = function (e, t) {\n var n,\n i = e.getCursorPosition(),\n o = e.session.getLine(i.row),\n r = o.substring(0, i.column),\n s = o.substr(i.column),\n a = this.snippetMap;\n return this.getActiveScopes(e).some(function (e) {\n e = a[e];\n return !!(n = e ? this.findMatchingSnippet(e, r, s) : n);\n }, this), !!n && (t && t.dryRun || (e.session.doc.removeInLine(i.row, i.column - n.replaceBefore.length, i.column + n.replaceAfter.length), this.variables.M__ = n.matchBefore, this.variables.T__ = n.matchAfter, this.insertSnippetForSelection(e, n.content), this.variables.M__ = this.variables.T__ = null), !0);\n }, m.prototype.findMatchingSnippet = function (e, t, n) {\n for (var i = e.length; i--;) {\n var o = e[i];\n if ((!o.startRe || o.startRe.test(t)) && (!o.endRe || o.endRe.test(n)) && (o.startRe || o.endRe)) return o.matchBefore = o.startRe ? o.startRe.exec(t) : [\"\"], o.matchAfter = o.endRe ? o.endRe.exec(n) : [\"\"], o.replaceBefore = o.triggerRe ? o.triggerRe.exec(t)[0] : \"\", o.replaceAfter = o.endTriggerRe ? o.endTriggerRe.exec(n)[0] : \"\", o;\n }\n }, m.prototype.register = function (t, i) {\n var o = this.snippetMap,\n r = this.snippetNameMap,\n s = this;\n function a(e) {\n return (e = e && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(e) ? \"(?:\" + e + \")\" : e) || \"\";\n }\n function l(e, t, n) {\n return e = a(e), t = a(t), n ? (e = t + e) && \"$\" != e[e.length - 1] && (e += \"$\") : (e += t) && \"^\" != e[0] && (e = \"^\" + e), new RegExp(e);\n }\n function n(e) {\n e.scope || (e.scope = i || \"_\"), i = e.scope, o[i] || (o[i] = [], r[i] = {});\n var t,\n n = r[i];\n e.name && ((t = n[e.name]) && s.unregister(t), n[e.name] = e), o[i].push(e), e.prefix && (e.tabTrigger = e.prefix), !e.content && e.body && (e.content = Array.isArray(e.body) ? e.body.join(\"\\n\") : e.body), e.tabTrigger && !e.trigger && (!e.guard && /^\\w/.test(e.tabTrigger) && (e.guard = \"\\\\b\"), e.trigger = c.escapeRegExp(e.tabTrigger)), (e.trigger || e.guard || e.endTrigger || e.endGuard) && (e.startRe = l(e.trigger, e.guard, !0), e.triggerRe = new RegExp(e.trigger), e.endRe = l(e.endTrigger, e.endGuard, !0), e.endTriggerRe = new RegExp(e.endTrigger));\n }\n t = t || [], Array.isArray(t) ? t.forEach(n) : Object.keys(t).forEach(function (e) {\n n(t[e]);\n }), this._signal(\"registerSnippets\", {\n scope: i\n });\n }, m.prototype.unregister = function (e, n) {\n var i = this.snippetMap,\n o = this.snippetNameMap;\n function t(e) {\n var t = o[e.scope || n];\n t && t[e.name] && (delete t[e.name], 0 <= (e = (t = i[e.scope || n]) && t.indexOf(e))) && t.splice(e, 1);\n }\n e.content ? t(e) : Array.isArray(e) && e.forEach(t);\n }, m.prototype.parseSnippetFile = function (e) {\n e = e.replace(/\\r/g, \"\");\n for (var t, n, i, o = [], r = {}, s = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm; n = s.exec(e);) {\n if (n[1]) try {\n r = JSON.parse(n[1]), o.push(r);\n } catch (e) {}\n n[4] ? (r.content = n[4].replace(/^\\t/gm, \"\"), o.push(r), r = {}) : (t = n[2], n = n[3], \"regex\" == t ? (r.guard = (i = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g).exec(n)[1], r.trigger = i.exec(n)[1], r.endTrigger = i.exec(n)[1], r.endGuard = i.exec(n)[1]) : \"snippet\" == t ? (r.tabTrigger = n.match(/^\\S*/)[0], r.name || (r.name = n)) : t && (r[t] = n));\n }\n return o;\n }, m.prototype.getSnippetByName = function (t, e) {\n var n,\n i = this.snippetNameMap;\n return this.getActiveScopes(e).some(function (e) {\n e = i[e];\n return !!(n = e ? e[t] : n);\n }, this), n;\n };\n var p = m;\n function m() {\n this.snippetMap = {}, this.snippetNameMap = {}, this.variables = u;\n }\n i.implement(p.prototype, o);\n var f = function (e, t, n) {\n void 0 === n && (n = {});\n var i = e.getCursorPosition(),\n o = e.session.getLine(i.row),\n r = e.session.getTabString(),\n s = o.match(/^\\s*/)[0],\n a = (i.column < s.length && (s = s.slice(0, i.column)), t = t.replace(/\\r/g, \"\"), this.tokenizeTmSnippet(t)),\n l = (a = (a = this.resolveVariables(a, e)).map(function (e) {\n return \"\\n\" != e || n.excludeExtraIndent ? \"string\" == typeof e ? e.replace(/\\t/g, r) : e : e + s;\n }), []),\n c = (a.forEach(function (e, t) {\n var n, i, o;\n \"object\" == typeof e && (o = e.tabstopId, (n = l[o]) || ((n = l[o] = []).index = o, n.value = \"\", n.parents = {}), -1 === n.indexOf(e)) && (e.choices && !n.choices && (n.choices = e.choices), n.push(e), -1 !== (i = a.indexOf(e, t + 1))) && ((o = a.slice(t + 1, i)).some(function (e) {\n return \"object\" == typeof e;\n }) && !n.value ? n.value = o : !o.length || n.value && \"string\" == typeof n.value || (n.value = o.join(\"\")));\n }), l.forEach(function (e) {\n e.length = 0;\n }), {});\n for (var h = 0; h < a.length; h++) {\n var d,\n u,\n g,\n p = a[h];\n \"object\" == typeof p && (g = p.tabstopId, d = l[g], u = a.indexOf(p, h + 1), c[g] ? c[g] === p && (delete c[g], Object.keys(c).forEach(function (e) {\n d.parents[e] = !0;\n })) : (c[g] = p, \"string\" != typeof (g = d.value) ? g = function (e) {\n for (var t = [], n = 0; n < e.length; n++) {\n if (\"object\" == typeof (i = e[n])) {\n if (c[i.tabstopId]) continue;\n var i = t[e.lastIndexOf(i, n - 1)] || {\n tabstopId: i.tabstopId\n };\n }\n t[n] = i;\n }\n return t;\n }(g) : p.fmt && (g = this.tmStrFormat(g, p, e)), a.splice.apply(a, [h + 1, Math.max(0, u - h)].concat(g, p)), -1 === d.indexOf(p) && d.push(p)));\n }\n var m = 0,\n f = 0,\n C = \"\";\n return a.forEach(function (e) {\n var t;\n \"string\" == typeof e ? (1 < (t = e.split(\"\\n\")).length ? (f = t[t.length - 1].length, m += t.length - 1) : f += e.length, C += e) : e && (e.start ? e.end = {\n row: m,\n column: f\n } : e.start = {\n row: m,\n column: f\n });\n }), {\n text: C,\n tabstops: l,\n tokens: a\n };\n },\n C = (y.prototype.attach = function (e) {\n this.$openTabstops = null, this.selectedTabstop = null, this.editor = e, this.session = e.session, this.editor.on(\"change\", this.$onChange), this.editor.on(\"changeSelection\", this.$onChangeSelection), this.editor.on(\"changeSession\", this.$onChangeSession), this.editor.commands.on(\"afterExec\", this.$onAfterExec), this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n }, y.prototype.detach = function () {\n this.tabstops.forEach(this.removeTabstopMarkers, this), this.ranges.length = 0, this.tabstops.length = 0, this.selectedTabstop = null, this.editor.off(\"change\", this.$onChange), this.editor.off(\"changeSelection\", this.$onChangeSelection), this.editor.off(\"changeSession\", this.$onChangeSession), this.editor.commands.off(\"afterExec\", this.$onAfterExec), this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler), this.editor.tabstopManager = null, this.session = null, this.editor = null;\n }, y.prototype.onChange = function (e) {\n for (var t = \"r\" == e.action[0], n = this.selectedTabstop || {}, i = n.parents || {}, o = this.tabstops.slice(), r = 0; r < o.length; r++) {\n var s = o[r],\n a = s == n || i[s.index];\n if (s.rangeList.$bias = a ? 0 : 1, \"remove\" == e.action && s !== n) for (var a = s.parents && s.parents[n.index], l = (l = s.rangeList.pointIndex(e.start, a)) < 0 ? -l - 1 : l + 1, a = s.rangeList.pointIndex(e.end, a), c = s.rangeList.ranges.slice(l, a < 0 ? -a - 1 : a - 1), h = 0; h < c.length; h++) this.removeRange(c[h]);\n s.rangeList.$onChange(e);\n }\n var d = this.session;\n this.$inChange || !t || 1 != d.getLength() || d.getValue() || this.detach();\n }, y.prototype.updateLinkedFields = function () {\n var e = this.selectedTabstop;\n if (e && e.hasLinkedRanges && e.firstNonLinked) {\n this.$inChange = !0;\n for (var t = this.session, n = t.getTextRange(e.firstNonLinked), i = 0; i < e.length; i++) {\n var o,\n r = e[i];\n r.linked && (o = r.original, o = s.snippetManager.tmStrFormat(n, o, this.editor), t.replace(r, o));\n }\n this.$inChange = !1;\n }\n }, y.prototype.onAfterExec = function (e) {\n e.command && !e.command.readOnly && this.updateLinkedFields();\n }, y.prototype.onChangeSelection = function () {\n if (this.editor) {\n for (var e = this.editor.selection.lead, t = this.editor.selection.anchor, n = this.editor.selection.isEmpty(), i = 0; i < this.ranges.length; i++) if (!this.ranges[i].linked) {\n var o = this.ranges[i].contains(e.row, e.column),\n r = n || this.ranges[i].contains(t.row, t.column);\n if (o && r) return;\n }\n this.detach();\n }\n }, y.prototype.onChangeSession = function () {\n this.detach();\n }, y.prototype.tabNext = function (e) {\n var t = this.tabstops.length,\n e = this.index + (e || 1),\n e = Math.min(Math.max(e, 1), t);\n this.selectTabstop(e = e == t ? 0 : e), 0 === e && this.detach();\n }, y.prototype.selectTabstop = function (e) {\n this.$openTabstops = null;\n var t = this.tabstops[this.index];\n if (t && this.addTabstopMarkers(t), this.index = e, (t = this.tabstops[this.index]) && t.length) {\n e = (this.selectedTabstop = t).firstNonLinked || t;\n if (t.choices && (e.cursor = e.start), this.editor.inVirtualSelectionMode) this.editor.selection.fromOrientedRange(e);else {\n var n = this.editor.multiSelect;\n n.toSingleRange(e);\n for (var i = 0; i < t.length; i++) t.hasLinkedRanges && t[i].linked || n.addRange(t[i].clone(), !0);\n }\n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler), this.selectedTabstop && this.selectedTabstop.choices && this.editor.execCommand(\"startAutocomplete\", {\n matches: this.selectedTabstop.choices\n });\n }\n }, y.prototype.addTabstops = function (e, s, t) {\n var a = this.useLink || !this.editor.getOption(\"enableMultiselect\");\n this.$openTabstops || (this.$openTabstops = []), e[0] || (t = h.fromPoints(t, t), I(t.start, s), I(t.end, s), e[0] = [t], e[0].index = 0);\n var l = [this.index + 1, 0],\n c = this.ranges;\n e.forEach(function (e, t) {\n for (var n = this.$openTabstops[t] || e, i = 0; i < e.length; i++) {\n var o = e[i],\n r = h.fromPoints(o.start, o.end || o.start);\n v(r.start, s), v(r.end, s), r.original = o, r.tabstop = n, c.push(r), n != e ? n.unshift(r) : n[i] = r, o.fmtString || n.firstNonLinked && a ? (r.linked = !0, n.hasLinkedRanges = !0) : n.firstNonLinked || (n.firstNonLinked = r);\n }\n n.firstNonLinked || (n.hasLinkedRanges = !1), n === e && (l.push(n), this.$openTabstops[t] = n), this.addTabstopMarkers(n), n.rangeList = n.rangeList || new d(), n.rangeList.$bias = 0, n.rangeList.addList(n);\n }, this), 2 < l.length && (this.tabstops.length && l.push(l.splice(2, 1)[0]), this.tabstops.splice.apply(this.tabstops, l));\n }, y.prototype.addTabstopMarkers = function (e) {\n var t = this.session;\n e.forEach(function (e) {\n e.markerId || (e.markerId = t.addMarker(e, \"ace_snippet-marker\", \"text\"));\n });\n }, y.prototype.removeTabstopMarkers = function (e) {\n var t = this.session;\n e.forEach(function (e) {\n t.removeMarker(e.markerId), e.markerId = null;\n });\n }, y.prototype.removeRange = function (e) {\n var t = e.tabstop.indexOf(e);\n -1 != t && e.tabstop.splice(t, 1), -1 != (t = this.ranges.indexOf(e)) && this.ranges.splice(t, 1), -1 != (t = e.tabstop.rangeList.ranges.indexOf(e)) && e.tabstop.splice(t, 1), this.session.removeMarker(e.markerId), e.tabstop.length || (-1 != (t = this.tabstops.indexOf(e.tabstop)) && this.tabstops.splice(t, 1), this.tabstops.length) || this.detach();\n }, y);\n function y(e) {\n if (this.index = 0, this.ranges = [], this.tabstops = [], e.tabstopManager) return e.tabstopManager;\n (e.tabstopManager = this).$onChange = this.onChange.bind(this), this.$onChangeSelection = c.delayedCall(this.onChangeSelection.bind(this)).schedule, this.$onChangeSession = this.onChangeSession.bind(this), this.$onAfterExec = this.onAfterExec.bind(this), this.attach(e);\n }\n C.prototype.keyboardHandler = new r(), C.prototype.keyboardHandler.bindKeys({\n Tab: function (e) {\n s.snippetManager && s.snippetManager.expandWithTab(e) || (e.tabstopManager.tabNext(1), e.renderer.scrollCursorIntoView());\n },\n \"Shift-Tab\": function (e) {\n e.tabstopManager.tabNext(-1), e.renderer.scrollCursorIntoView();\n },\n Esc: function (e) {\n e.tabstopManager.detach();\n }\n });\n var v = function (e, t) {\n 0 == e.row && (e.column += t.column), e.row += t.row;\n },\n I = function (e, t) {\n e.row == t.row && (e.column -= t.column), e.row -= t.row;\n },\n i = (n.importCssString(\"\\n.ace_snippet-marker {\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n background: rgba(194, 193, 208, 0.09);\\n border: 1px dotted rgba(211, 208, 235, 0.62);\\n position: absolute;\\n}\", \"snippets.css\", !1), s.snippetManager = new p(), e(\"./editor\").Editor);\n !function () {\n this.insertSnippet = function (e, t) {\n return s.snippetManager.insertSnippet(this, e, t);\n }, this.expandSnippet = function (e) {\n return s.snippetManager.expandWithTab(this, e);\n };\n }.call(i.prototype);\n }), ace.define(\"ace/autocomplete/popup\", [\"require\", \"exports\", \"module\", \"ace/virtual_renderer\", \"ace/editor\", \"ace/range\", \"ace/lib/event\", \"ace/lib/lang\", \"ace/lib/dom\", \"ace/config\"], function (e, t, n) {\n \"use strict\";\n\n function a(e) {\n return \"suggest-aria-id:\".concat(e);\n }\n function l(e) {\n return (e = new o(e)).$maxLines = 4, (e = new r(e)).setHighlightActiveLine(!1), e.setShowPrintMargin(!1), e.renderer.setShowGutter(!1), e.renderer.setHighlightGutterLine(!1), e.$mouseHandler.$focusTimeout = 0, e.$highlightTagPending = !0, e;\n }\n function i(e) {\n function t() {}\n function n() {\n s(-1);\n }\n var u,\n i = p.createElement(\"div\"),\n g = new l(i),\n o = (e && e.appendChild(i), i.style.display = \"none\", g.renderer.content.style.cursor = \"default\", g.renderer.setStyle(\"ace_autocomplete\"), g.renderer.$textLayer.element.setAttribute(\"role\", \"listbox\"), g.renderer.$textLayer.element.setAttribute(\"aria-label\", m(\"Autocomplete suggestions\")), g.renderer.textarea.setAttribute(\"aria-hidden\", \"true\"), g.setOption(\"displayIndentGuides\", !1), g.setOption(\"dragDelay\", 150), g.focus = t, g.$isFocused = !0, g.renderer.$cursorLayer.restartTimer = t, g.renderer.$cursorLayer.element.style.opacity = 0, g.renderer.$maxLines = 8, g.renderer.$keepTextAreaAtCursor = !1, g.setHighlightActiveLine(!1), g.session.highlight(\"\"), g.session.$searchHighlight.clazz = \"ace_highlight-marker\", g.on(\"mousedown\", function (e) {\n var t = e.getDocumentPosition();\n g.selection.moveToPosition(t), r.start.row = r.end.row = t.row, e.stop();\n }), new c(-1, 0, -1, 1 / 0)),\n r = new c(-1, 0, -1, 1 / 0),\n s = (r.id = g.session.addMarker(r, \"ace_active-line\", \"fullLine\"), g.setSelectOnHover = function (e) {\n e ? o.id && (g.session.removeMarker(o.id), o.id = null) : o.id = g.session.addMarker(o, \"ace_line-hover\", \"fullLine\");\n }, g.setSelectOnHover(!1), g.on(\"mousemove\", function (e) {\n var t;\n u ? u.x == e.x && u.y == e.y || ((u = e).scrollTop = g.renderer.scrollTop, g.isMouseOver = !0, t = u.getDocumentPosition().row, o.start.row != t && (o.id || g.setRow(t), s(t))) : u = e;\n }), g.renderer.on(\"beforeRender\", function () {\n var e;\n u && -1 != o.start.row && (u.$pos = null, e = u.getDocumentPosition().row, o.id || g.setRow(e), s(e, !0));\n }), g.renderer.on(\"afterRender\", function () {\n var e,\n t = g.getRow(),\n n = g.renderer.$textLayer,\n i = n.element.childNodes[t - n.config.firstRow],\n o = document.activeElement;\n i !== n.selectedNode && n.selectedNode && (p.removeCssClass(n.selectedNode, \"ace_selected\"), o.removeAttribute(\"aria-activedescendant\"), n.selectedNode.removeAttribute(\"id\")), (n.selectedNode = i) && (p.addCssClass(i, \"ace_selected\"), e = a(t), i.id = e, n.element.setAttribute(\"aria-activedescendant\", e), o.setAttribute(\"aria-activedescendant\", e), i.setAttribute(\"role\", \"option\"), i.setAttribute(\"aria-label\", g.getData(t).value), i.setAttribute(\"aria-setsize\", g.data.length), i.setAttribute(\"aria-posinset\", t + 1), i.setAttribute(\"aria-describedby\", \"doc-tooltip\"));\n }), function (e, t) {\n e !== o.start.row && (o.start.row = o.end.row = e, t || g.session._emit(\"changeBackMarker\"), g._emit(\"changeHoverMarker\"));\n });\n return g.getHoveredRow = function () {\n return o.start.row;\n }, h.addListener(g.container, \"mouseout\", function () {\n g.isMouseOver = !1, n();\n }), g.on(\"hide\", n), g.on(\"changeSelection\", n), g.session.doc.getLength = function () {\n return g.data.length;\n }, g.session.doc.getLine = function (e) {\n e = g.data[e];\n return \"string\" == typeof e ? e : e && e.value || \"\";\n }, (e = g.session.bgTokenizer).$tokenizeRow = function (e) {\n var n = g.data[e],\n i = [];\n if (n) {\n for (var t, o, r = (n = \"string\" == typeof n ? {\n value: n\n } : n).caption || n.value || n.name, s = r.toLowerCase(), a = (g.filterText || \"\").toLowerCase(), l = 0, c = 0, h = 0; h <= a.length; h++) h != c && (n.matchMask & 1 << h || h == a.length) && (t = a.slice(c, h), c = h, -1 != (o = s.indexOf(t, l))) && (d(r.slice(l, o), \"\"), l = o + t.length, d(r.slice(o, l), \"completion-highlight\"));\n d(r.slice(l, r.length), \"\"), i.push({\n type: \"completion-spacer\",\n value: \" \"\n }), n.meta && i.push({\n type: \"completion-meta\",\n value: n.meta\n }), n.message && i.push({\n type: \"completion-message\",\n value: n.message\n });\n }\n return i;\n function d(e, t) {\n e && i.push({\n type: (n.className || \"\") + (t || \"\"),\n value: e\n });\n }\n }, e.$updateOnChange = t, e.start = t, g.session.$computeWidth = function () {\n return this.screenWidth = 0;\n }, g.isOpen = !1, g.isTopdown = !1, g.autoSelect = !0, g.filterText = \"\", g.isMouseOver = !1, g.data = [], g.setData = function (e, t) {\n g.filterText = t || \"\", g.setValue(d.stringRepeat(\"\\n\", e.length), -1), g.data = e || [], g.setRow(0);\n }, g.getData = function (e) {\n return g.data[e];\n }, g.getRow = function () {\n return r.start.row;\n }, g.setRow = function (e) {\n e = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length - 1, e)), r.start.row != e && (g.selection.clearSelection(), r.start.row = r.end.row = e || 0, g.session._emit(\"changeBackMarker\"), g.moveCursorTo(e || 0, 0), g.isOpen) && g._signal(\"select\");\n }, g.on(\"changeSelection\", function () {\n g.isOpen && g.setRow(g.selection.lead.row), g.renderer.scrollCursorIntoView();\n }), g.hide = function () {\n this.container.style.display = \"none\", g.anchorPos = null, g.anchor = null, g.isOpen && (g.isOpen = !1, this._signal(\"hide\"));\n }, g.tryShow = function (e, t, n, i) {\n if (i || !g.isOpen || !g.anchorPos || !g.anchor || g.anchorPos.top !== e.top || g.anchorPos.left !== e.left || g.anchor !== n) {\n var o = this.container,\n r = window.innerHeight,\n s = window.innerWidth,\n a = this.renderer,\n l = a.$maxLines * t * 1.4,\n c = {\n top: 0,\n bottom: 0,\n left: 0\n },\n h = r - e.top - 3 * this.$borderSize - t,\n d = e.top - 3 * this.$borderSize,\n t = (\"top\" === (n = n || (d <= h || l <= h ? \"bottom\" : \"top\")) ? (c.bottom = e.top - this.$borderSize, c.top = c.bottom - l) : \"bottom\" === n && (c.top = e.top + t + this.$borderSize, c.bottom = c.top + l), 0 <= c.top && c.bottom <= r);\n if (!i && !t) return !1;\n a.$maxPixelHeight = t ? null : \"top\" === n ? d : h, \"top\" === n ? (o.style.top = \"\", o.style.bottom = r - c.bottom + \"px\", g.isTopdown = !1) : (o.style.top = c.top + \"px\", o.style.bottom = \"\", g.isTopdown = !0), o.style.display = \"\";\n l = e.left;\n l + o.offsetWidth > s && (l = s - o.offsetWidth), o.style.left = l + \"px\", o.style.right = \"\", g.isOpen || (g.isOpen = !0, this._signal(\"show\"), u = null), g.anchorPos = e, g.anchor = n;\n }\n return !0;\n }, g.show = function (e, t, n) {\n this.tryShow(e, t, n ? \"bottom\" : void 0, !0);\n }, g.goTo = function (e) {\n var t = this.getRow(),\n n = this.session.getLength() - 1;\n switch (e) {\n case \"up\":\n t = t <= 0 ? n : t - 1;\n break;\n case \"down\":\n t = n <= t ? -1 : t + 1;\n break;\n case \"start\":\n t = 0;\n break;\n case \"end\":\n t = n;\n }\n this.setRow(t);\n }, g.getTextLeftOffset = function () {\n return this.$borderSize + this.renderer.$padding + this.$imageSize;\n }, g.$imageSize = 0, g.$borderSize = 1, g;\n }\n var o = e(\"../virtual_renderer\").VirtualRenderer,\n r = e(\"../editor\").Editor,\n c = e(\"../range\").Range,\n h = e(\"../lib/event\"),\n d = e(\"../lib/lang\"),\n p = e(\"../lib/dom\"),\n m = e(\"../config\").nls;\n p.importCssString('\\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n background-color: #CAD6FA;\\n z-index: 1;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\n background-color: #3a674e;\\n}\\n.ace_editor.ace_autocomplete .ace_line-hover {\\n border: 1px solid #abbffe;\\n margin-top: -1px;\\n background: rgba(233,233,253,0.4);\\n position: absolute;\\n z-index: 2;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\\n border: 1px solid rgba(109, 150, 13, 0.8);\\n background: rgba(58, 103, 78, 0.62);\\n}\\n.ace_completion-meta {\\n opacity: 0.5;\\n margin-left: 0.9em;\\n}\\n.ace_completion-message {\\n margin-left: 0.9em;\\n color: blue;\\n}\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\n color: #2d69c7;\\n}\\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\\n color: #93ca12;\\n}\\n.ace_editor.ace_autocomplete {\\n width: 300px;\\n z-index: 200000;\\n border: 1px lightgray solid;\\n position: fixed;\\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\n line-height: 1.4;\\n background: #fefefe;\\n color: #111;\\n}\\n.ace_dark.ace_editor.ace_autocomplete {\\n border: 1px #484747 solid;\\n box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\\n line-height: 1.4;\\n background: #25282c;\\n color: #c1c1c1;\\n}\\n.ace_autocomplete .ace_text-layer {\\n width: calc(100% - 8px);\\n}\\n.ace_autocomplete .ace_line {\\n display: flex;\\n align-items: center;\\n}\\n.ace_autocomplete .ace_line > * {\\n min-width: 0;\\n flex: 0 0 auto;\\n}\\n.ace_autocomplete .ace_line .ace_ {\\n flex: 0 1 auto;\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n}\\n.ace_autocomplete .ace_completion-spacer {\\n flex: 1;\\n}\\n.ace_autocomplete.ace_loading:after {\\n content: \"\";\\n position: absolute;\\n top: 0px;\\n height: 2px;\\n width: 8%;\\n background: blue;\\n z-index: 100;\\n animation: ace_progress 3s infinite linear;\\n animation-delay: 300ms;\\n transform: translateX(-100%) scaleX(1);\\n}\\n@keyframes ace_progress {\\n 0% { transform: translateX(-100%) scaleX(1) }\\n 50% { transform: translateX(625%) scaleX(2) } \\n 100% { transform: translateX(1500%) scaleX(3) } \\n}\\n@media (prefers-reduced-motion) {\\n .ace_autocomplete.ace_loading:after {\\n transform: translateX(625%) scaleX(2);\\n animation: none;\\n }\\n}\\n', \"autocompletion.css\", !1), t.AcePopup = i, t.$singleLineEditor = l, t.getAriaId = a;\n }), ace.define(\"ace/autocomplete/inline_screenreader\", [\"require\", \"exports\", \"module\"], function (e, t, n) {\n \"use strict\";\n\n function i(e) {\n this.editor = e, this.screenReaderDiv = document.createElement(\"div\"), this.screenReaderDiv.classList.add(\"ace_screenreader-only\"), this.editor.container.appendChild(this.screenReaderDiv);\n }\n i.prototype.setScreenReaderContent = function (e) {\n for (!this.popup && this.editor.completer && this.editor.completer.popup && (this.popup = this.editor.completer.popup, this.popup.renderer.on(\"afterRender\", function () {\n var e = this.popup.getRow(),\n t = this.popup.renderer.$textLayer,\n e = t.element.childNodes[e - t.config.firstRow];\n if (e) {\n for (var n = \"doc-tooltip \", i = 0; i < this._lines.length; i++) n += \"ace-inline-screenreader-line-\".concat(i, \" \");\n e.setAttribute(\"aria-describedby\", n);\n }\n }.bind(this))); this.screenReaderDiv.firstChild;) this.screenReaderDiv.removeChild(this.screenReaderDiv.firstChild);\n this._lines = e.split(/\\r\\n|\\r|\\n/);\n e = this.createCodeBlock();\n this.screenReaderDiv.appendChild(e);\n }, i.prototype.destroy = function () {\n this.screenReaderDiv.remove();\n }, i.prototype.createCodeBlock = function () {\n var e = document.createElement(\"pre\");\n e.setAttribute(\"id\", \"ace-inline-screenreader\");\n for (var t = 0; t < this._lines.length; t++) {\n var n = document.createElement(\"code\"),\n i = (n.setAttribute(\"id\", \"ace-inline-screenreader-line-\".concat(t)), document.createTextNode(this._lines[t]));\n n.appendChild(i), e.appendChild(n);\n }\n return e;\n }, t.AceInlineScreenReader = i;\n }), ace.define(\"ace/autocomplete/inline\", [\"require\", \"exports\", \"module\", \"ace/snippets\", \"ace/autocomplete/inline_screenreader\"], function (e, t, n) {\n \"use strict\";\n\n var o = e(\"../snippets\").snippetManager,\n r = e(\"./inline_screenreader\").AceInlineScreenReader;\n function i() {\n this.editor = null;\n }\n i.prototype.show = function (e, t, n) {\n if (n = n || \"\", e && this.editor && this.editor !== e && (this.hide(), this.editor = null, this.inlineScreenReader = null), !e || !t) return !1;\n this.inlineScreenReader || (this.inlineScreenReader = new r(e));\n var i = t.snippet ? o.getDisplayTextForSnippet(e, t.snippet) : t.value;\n return !(t.hideInlinePreview || !i || !i.startsWith(n) || (this.editor = e, this.inlineScreenReader.setScreenReaderContent(i), \"\" === (i = i.slice(n.length)) ? e.removeGhostText() : e.setGhostText(i), 0));\n }, i.prototype.isOpen = function () {\n return !!this.editor && !!this.editor.renderer.$ghostText;\n }, i.prototype.hide = function () {\n return !!this.editor && (this.editor.removeGhostText(), !0);\n }, i.prototype.destroy = function () {\n this.hide(), this.editor = null, this.inlineScreenReader && (this.inlineScreenReader.destroy(), this.inlineScreenReader = null);\n }, t.AceInline = i;\n }), ace.define(\"ace/autocomplete/util\", [\"require\", \"exports\", \"module\"], function (e, t, n) {\n \"use strict\";\n\n t.parForEach = function (e, t, n) {\n var i = 0,\n o = e.length;\n 0 === o && n();\n for (var r = 0; r < o; r++) t(e[r], function (e, t) {\n ++i === o && n(e, t);\n });\n };\n var r = /[a-zA-Z_0-9\\$\\-\\u00A2-\\u2000\\u2070-\\uFFFF]/;\n t.retrievePrecedingIdentifier = function (e, t, n) {\n n = n || r;\n for (var i = [], o = t - 1; 0 <= o && n.test(e[o]); o--) i.push(e[o]);\n return i.reverse().join(\"\");\n }, t.retrieveFollowingIdentifier = function (e, t, n) {\n n = n || r;\n for (var i = [], o = t; o < e.length && n.test(e[o]); o++) i.push(e[o]);\n return i;\n }, t.getCompletionPrefix = function (e) {\n var t,\n n = e.getCursorPosition(),\n i = e.session.getLine(n.row);\n return e.completers.forEach(function (e) {\n e.identifierRegexps && e.identifierRegexps.forEach(function (e) {\n !t && e && (t = this.retrievePrecedingIdentifier(i, n.column, e));\n }.bind(this));\n }.bind(this)), t || this.retrievePrecedingIdentifier(i, n.column);\n }, t.triggerAutocomplete = function (e) {\n var t = e.getCursorPosition(),\n n = e.session.getLine(t.row)[0 === t.column ? 0 : t.column - 1];\n return e.completers.some(function (e) {\n if (e.triggerCharacters && Array.isArray(e.triggerCharacters)) return e.triggerCharacters.includes(n);\n });\n };\n }), ace.define(\"ace/autocomplete\", [\"require\", \"exports\", \"module\", \"ace/keyboard/hash_handler\", \"ace/autocomplete/popup\", \"ace/autocomplete/inline\", \"ace/autocomplete/popup\", \"ace/autocomplete/util\", \"ace/lib/lang\", \"ace/lib/dom\", \"ace/snippets\", \"ace/config\", \"ace/lib/event\"], function (e, t, n) {\n \"use strict\";\n\n function i(e, t) {\n t.completer && t.completer.destroy();\n }\n var o = e(\"./keyboard/hash_handler\").HashHandler,\n r = e(\"./autocomplete/popup\").AcePopup,\n s = e(\"./autocomplete/inline\").AceInline,\n a = e(\"./autocomplete/popup\").getAriaId,\n c = e(\"./autocomplete/util\"),\n l = e(\"./lib/lang\"),\n h = e(\"./lib/dom\"),\n d = e(\"./snippets\").snippetManager,\n u = e(\"./config\"),\n g = e(\"./lib/event\"),\n p = (m.prototype.$init = function () {\n return this.popup = new r(this.parentNode || document.body || document.documentElement), this.popup.on(\"click\", function (e) {\n this.insertMatch(), e.stop();\n }.bind(this)), this.popup.focus = this.editor.focus.bind(this.editor), this.popup.on(\"show\", this.$onPopupShow.bind(this)), this.popup.on(\"hide\", this.$onHidePopup.bind(this)), this.popup.on(\"select\", this.$onPopupChange.bind(this)), g.addListener(this.popup.container, \"mouseout\", this.mouseOutListener.bind(this)), this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null)), this.popup;\n }, m.prototype.$initInline = function () {\n if (this.inlineEnabled && !this.inlineRenderer) return this.inlineRenderer = new s(), this.inlineRenderer;\n }, m.prototype.getPopup = function () {\n return this.popup || this.$init();\n }, m.prototype.$onHidePopup = function () {\n this.inlineRenderer && this.inlineRenderer.hide(), this.hideDocTooltip(), this.stickySelectionTimer.cancel(), this.stickySelection = !1;\n }, m.prototype.$onPopupChange = function (e) {\n if (this.inlineRenderer && this.inlineEnabled) {\n var e = e ? null : this.popup.getData(this.popup.getRow()),\n t = c.getCompletionPrefix(this.editor);\n if (this.inlineRenderer.show(this.editor, e, t) || this.inlineRenderer.hide(), this.popup.isMouseOver && this.setSelectOnHover) return void this.tooltipTimer.call(null, null);\n }\n this.$updatePopupPosition(), this.tooltipTimer.call(null, null);\n }, m.prototype.$onPopupShow = function (e) {\n this.$onPopupChange(e), this.stickySelection = !1, 0 <= this.stickySelectionDelay && this.stickySelectionTimer.schedule(this.stickySelectionDelay);\n }, m.prototype.observeLayoutChanges = function () {\n if (!this.$elements && this.editor) {\n window.addEventListener(\"resize\", this.onLayoutChange, {\n passive: !0\n }), window.addEventListener(\"wheel\", this.mousewheelListener);\n for (var e = this.editor.container.parentNode, t = []; e;) t.push(e), e.addEventListener(\"scroll\", this.onLayoutChange, {\n passive: !0\n }), e = e.parentNode;\n this.$elements = t;\n }\n }, m.prototype.unObserveLayoutChanges = function () {\n var t = this;\n window.removeEventListener(\"resize\", this.onLayoutChange, {\n passive: !0\n }), window.removeEventListener(\"wheel\", this.mousewheelListener), this.$elements && this.$elements.forEach(function (e) {\n e.removeEventListener(\"scroll\", t.onLayoutChange, {\n passive: !0\n });\n }), this.$elements = null;\n }, m.prototype.onLayoutChange = function () {\n if (!this.popup.isOpen) return this.unObserveLayoutChanges();\n this.$updatePopupPosition(), this.updateDocTooltip();\n }, m.prototype.$updatePopupPosition = function () {\n var e = this.editor,\n t = e.renderer,\n n = t.layerConfig.lineHeight,\n i = t.$cursorLayer.getPixelPosition(this.base, !0),\n o = (i.left -= this.popup.getTextLeftOffset(), e.container.getBoundingClientRect()),\n o = (i.top += o.top - t.layerConfig.offset, i.left += o.left - e.renderer.scrollLeft, i.left += t.gutterWidth, {\n top: i.top,\n left: i.left\n });\n t.$ghostText && t.$ghostTextWidget && this.base.row === t.$ghostText.position.row && (o.top += t.$ghostTextWidget.el.offsetHeight), this.popup.tryShow(o, n, \"bottom\") || this.popup.tryShow(i, n, \"top\") || this.popup.show(i, n);\n }, m.prototype.openPopup = function (e, t, n) {\n this.$firstOpenTimer.cancel(), this.popup || this.$init(), this.inlineEnabled && !this.inlineRenderer && this.$initInline(), this.popup.autoSelect = this.autoSelect, this.popup.setSelectOnHover(this.setSelectOnHover);\n var i = this.popup.data[this.popup.getRow()],\n i = (this.popup.setData(this.completions.filtered, this.completions.filterText), this.editor.textInput.setAriaOptions && this.editor.textInput.setAriaOptions({\n activeDescendant: a(this.popup.getRow()),\n inline: this.inlineEnabled\n }), e.keyBinding.addKeyboardHandler(this.keyboardHandler), this.popup.data.indexOf(i));\n i && this.stickySelection ? this.popup.setRow(this.autoSelect ? i : -1) : this.popup.setRow(this.autoSelect ? 0 : -1), n ? t || this.detach() : (this.popup.setTheme(e.getTheme()), this.popup.setFontSize(e.getFontSize()), this.$updatePopupPosition(), this.tooltipNode && this.updateDocTooltip()), this.changeTimer.cancel(), this.observeLayoutChanges();\n }, m.prototype.detach = function () {\n this.editor && (this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler), this.editor.off(\"changeSelection\", this.changeListener), this.editor.off(\"blur\", this.blurListener), this.editor.off(\"mousedown\", this.mousedownListener), this.editor.off(\"mousewheel\", this.mousewheelListener)), this.$firstOpenTimer.cancel(), this.changeTimer.cancel(), this.hideDocTooltip(), this.completionProvider && this.completionProvider.detach(), this.popup && this.popup.isOpen && this.popup.hide(), this.base && this.base.detach(), this.activated = !1, this.completionProvider = this.completions = this.base = null, this.unObserveLayoutChanges();\n }, m.prototype.changeListener = function (e) {\n var t = this.editor.selection.lead;\n (t.row != this.base.row || t.column < this.base.column) && this.detach(), this.activated ? this.changeTimer.schedule() : this.detach();\n }, m.prototype.blurListener = function (e) {\n var t = document.activeElement,\n n = this.editor.textInput.getElement(),\n i = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget),\n o = this.popup && this.popup.container;\n t == n || t.parentNode == o || i || t == this.tooltipNode || e.relatedTarget == n || this.detach();\n }, m.prototype.mousedownListener = function (e) {\n this.detach();\n }, m.prototype.mousewheelListener = function (e) {\n this.popup.isMouseOver || this.detach();\n }, m.prototype.mouseOutListener = function (e) {\n this.popup.isOpen && this.$updatePopupPosition();\n }, m.prototype.goTo = function (e) {\n this.popup.goTo(e);\n }, m.prototype.insertMatch = function (e, t) {\n var n;\n return !!(e = e || this.popup.getData(this.popup.getRow())) && (\"\" === e.value ? this.detach() : (n = this.completions, e = this.getCompletionProvider().insertMatch(this.editor, e, n.filterText, t), this.completions == n && this.detach(), e));\n }, m.prototype.showPopup = function (e, t) {\n this.editor && this.detach(), this.activated = !0, (this.editor = e).completer != this && (e.completer && e.completer.detach(), e.completer = this), e.on(\"changeSelection\", this.changeListener), e.on(\"blur\", this.blurListener), e.on(\"mousedown\", this.mousedownListener), e.on(\"mousewheel\", this.mousewheelListener), this.updateCompletions(!1, t);\n }, m.prototype.getCompletionProvider = function (e) {\n return this.completionProvider || (this.completionProvider = new f(e)), this.completionProvider;\n }, m.prototype.gatherCompletions = function (e, t) {\n return this.getCompletionProvider().gatherCompletions(e, t);\n }, m.prototype.updateCompletions = function (s, e) {\n var t, n;\n return s && this.base && this.completions ? (t = this.editor.getCursorPosition(), (n = this.editor.session.getTextRange({\n start: this.base,\n end: t\n })) == this.completions.filterText ? void 0 : (this.completions.setFilter(n), this.completions.filtered.length && (1 != this.completions.filtered.length || this.completions.filtered[0].value != n || this.completions.filtered[0].snippet) ? void this.openPopup(this.editor, n, s) : this.detach())) : e && e.matches ? (t = this.editor.getSelectionRange().start, this.base = this.editor.session.doc.createAnchor(t.row, t.column), this.base.$insertRight = !0, this.completions = new y(e.matches), this.openPopup(this.editor, \"\", s)) : (e = this.editor.getSession(), t = this.editor.getCursorPosition(), n = c.getCompletionPrefix(this.editor), this.base = e.doc.createAnchor(t.row, t.column - n.length), this.base.$insertRight = !0, e = {\n exactMatch: this.exactMatch,\n ignoreCaption: this.ignoreCaption\n }, this.getCompletionProvider({\n prefix: n,\n pos: t\n }).provideCompletions(this.editor, e, function (e, t, n) {\n var i,\n o = t.filtered,\n r = c.getCompletionPrefix(this.editor);\n if (this.$firstOpenTimer.cancel(), n) {\n if (!o.length) return (i = \"function\" == typeof (i = !this.autoShown && this.emptyMessage) ? this.emptyMessage(r) : i) ? (this.completions = new y([{\n caption: i,\n value: \"\"\n }]), void this.openPopup(this.editor, r, s)) : this.detach();\n if (1 == o.length && o[0].value == r && !o[0].snippet) return this.detach();\n if (this.autoInsert && !this.autoShown && 1 == o.length) return this.insertMatch(o[0]);\n }\n this.completions = t, this.openPopup(this.editor, r, s), this.popup.renderer.setStyle(\"ace_loading\", !n);\n }.bind(this)), void (this.autoShown || this.popup && this.popup.isOpen || this.$firstOpenTimer.delay(this.stickySelectionDelay / 2)));\n }, m.prototype.cancelContextMenu = function () {\n this.editor.$mouseHandler.cancelContextMenu();\n }, m.prototype.updateDocTooltip = function () {\n var e = this.popup,\n t = this.completions.filtered,\n n = t && (t[e.getHoveredRow()] || t[e.getRow()]),\n i = null;\n if (!n || !this.editor || !this.popup.isOpen) return this.hideDocTooltip();\n for (var o = this.editor.completers.length, r = 0; r < o; r++) {\n var s = this.editor.completers[r];\n if (s.getDocTooltip && n.completerId === s.id) {\n i = s.getDocTooltip(n);\n break;\n }\n }\n if (!(i = \"string\" == typeof (i = i || \"string\" == typeof n ? i : n) ? {\n docText: i\n } : i) || !i.docHTML && !i.docText) return this.hideDocTooltip();\n this.showDocTooltip(i);\n }, m.prototype.showDocTooltip = function (e) {\n this.tooltipNode || (this.tooltipNode = h.createElement(\"div\"), this.tooltipNode.style.margin = 0, this.tooltipNode.style.pointerEvents = \"auto\", this.tooltipNode.tabIndex = -1, this.tooltipNode.onblur = this.blurListener.bind(this), this.tooltipNode.onclick = this.onTooltipClick.bind(this), this.tooltipNode.id = \"doc-tooltip\", this.tooltipNode.setAttribute(\"role\", \"tooltip\"));\n var t = this.editor.renderer.theme,\n t = (this.tooltipNode.className = \"ace_tooltip ace_doc-tooltip \" + (t.isDark ? \"ace_dark \" : \"\") + (t.cssClass || \"\"), this.tooltipNode),\n e = (e.docHTML ? t.innerHTML = e.docHTML : e.docText && (t.textContent = e.docText), t.parentNode || this.popup.container.appendChild(this.tooltipNode), this.popup),\n n = e.container.getBoundingClientRect();\n t.style.top = e.container.style.top, t.style.bottom = e.container.style.bottom, t.style.display = \"block\", window.innerWidth - n.right < 320 ? n.left < 320 ? (e.isTopdown ? t.style.top = n.bottom + \"px\" : t.style.top = e.container.offsetTop - t.offsetHeight + \"px\", t.style.left = n.left + \"px\", t.style.right = \"\", t.style.bottom = \"\") : (t.style.right = window.innerWidth - n.left + \"px\", t.style.left = \"\") : (t.style.left = n.right + 1 + \"px\", t.style.right = \"\");\n }, m.prototype.hideDocTooltip = function () {\n var e;\n this.tooltipTimer.cancel(), this.tooltipNode && (e = this.tooltipNode, this.editor.isFocused() || document.activeElement != e || this.editor.focus(), this.tooltipNode = null, e.parentNode) && e.parentNode.removeChild(e);\n }, m.prototype.onTooltipClick = function (e) {\n for (var t = e.target; t && t != this.tooltipNode;) {\n if (\"A\" == t.nodeName && t.href) {\n t.rel = \"noreferrer\", t.target = \"_blank\";\n break;\n }\n t = t.parentNode;\n }\n }, m.prototype.destroy = function () {\n var e;\n this.detach(), this.popup && (this.popup.destroy(), e = this.popup.container) && e.parentNode && e.parentNode.removeChild(e), this.editor && this.editor.completer == this && (this.editor.off(\"destroy\", i), this.editor.completer = null), this.inlineRenderer = this.popup = this.editor = null;\n }, m);\n function m() {\n this.autoInsert = !1, this.autoSelect = !0, this.autoShown = !1, this.exactMatch = !1, this.inlineEnabled = !1, this.keyboardHandler = new o(), this.keyboardHandler.bindKeys(this.commands), this.parentNode = null, this.setSelectOnHover = !1, this.stickySelectionDelay = 500, this.blurListener = this.blurListener.bind(this), this.changeListener = this.changeListener.bind(this), this.mousedownListener = this.mousedownListener.bind(this), this.mousewheelListener = this.mousewheelListener.bind(this), this.onLayoutChange = this.onLayoutChange.bind(this), this.changeTimer = l.delayedCall(function () {\n this.updateCompletions(!0);\n }.bind(this)), this.tooltipTimer = l.delayedCall(this.updateDocTooltip.bind(this), 50), this.stickySelectionTimer = l.delayedCall(function () {\n this.stickySelection = !0;\n }.bind(this), this.stickySelectionDelay), this.$firstOpenTimer = l.delayedCall(function () {\n var e,\n t = this.completionProvider && this.completionProvider.initialPosition;\n this.autoShown || this.popup && this.popup.isOpen || !t || (e = [{\n caption: u.nls(\"Loading...\"),\n value: \"\"\n }], this.completions = new y(e), this.openPopup(this.editor, t.prefix, !1), this.popup.renderer.setStyle(\"ace_loading\", !0));\n }.bind(this), this.stickySelectionDelay);\n }\n p.prototype.commands = {\n Up: function (e) {\n e.completer.goTo(\"up\");\n },\n Down: function (e) {\n e.completer.goTo(\"down\");\n },\n \"Ctrl-Up|Ctrl-Home\": function (e) {\n e.completer.goTo(\"start\");\n },\n \"Ctrl-Down|Ctrl-End\": function (e) {\n e.completer.goTo(\"end\");\n },\n Esc: function (e) {\n e.completer.detach();\n },\n Return: function (e) {\n return e.completer.insertMatch();\n },\n \"Shift-Return\": function (e) {\n e.completer.insertMatch(null, {\n deleteSuffix: !0\n });\n },\n Tab: function (e) {\n var t = e.completer.insertMatch();\n if (t || e.tabstopManager) return t;\n e.completer.goTo(\"down\");\n },\n PageUp: function (e) {\n e.completer.popup.gotoPageUp();\n },\n PageDown: function (e) {\n e.completer.popup.gotoPageDown();\n }\n }, p.for = function (e) {\n return e.completer instanceof p || (e.completer && (e.completer.destroy(), e.completer = null), u.get(\"sharedPopups\") ? (p.$sharedInstance || (p.$sharedInstance = new p()), e.completer = p.$sharedInstance) : (e.completer = new p(), e.once(\"destroy\", i))), e.completer;\n }, p.startCommand = {\n name: \"startAutocomplete\",\n exec: function (e, t) {\n var n = p.for(e);\n n.autoInsert = !1, n.autoSelect = !0, n.autoShown = !1, n.showPopup(e, t), n.cancelContextMenu();\n },\n bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n };\n C.prototype.insertByIndex = function (e, t, n) {\n return !(!this.completions || !this.completions.filtered) && this.insertMatch(e, this.completions.filtered[t], n);\n }, C.prototype.insertMatch = function (e, t, n) {\n if (!t) return !1;\n if (e.startOperation({\n command: {\n name: \"insertMatch\"\n }\n }), t.completer && t.completer.insertMatch) t.completer.insertMatch(e, t);else {\n if (!this.completions) return !1;\n var i = this.completions.filterText.length,\n o = 0;\n if (t.range && t.range.start.row === t.range.end.row && (i = (i -= this.initialPosition.prefix.length) + (this.initialPosition.pos.column - t.range.start.column), o += t.range.end.column - this.initialPosition.pos.column), i || o) for (var r, s = e.selection.getAllRanges ? e.selection.getAllRanges() : [e.getSelectionRange()], a = 0; r = s[a]; a++) r.start.column -= i, r.end.column += o, e.session.remove(r);\n t.snippet ? d.insertSnippet(e, t.snippet) : this.$insertString(e, t), t.command && \"startAutocomplete\" === t.command && e.execCommand(t.command);\n }\n return e.endOperation(), !0;\n }, C.prototype.$insertString = function (e, t) {\n t = t.value || t;\n e.execCommand(\"insertstring\", t);\n }, C.prototype.gatherCompletions = function (i, o) {\n var t = i.getSession(),\n r = i.getCursorPosition(),\n s = c.getCompletionPrefix(i),\n a = [],\n l = (this.completers = i.completers, i.completers.length);\n return i.completers.forEach(function (n, e) {\n n.getCompletions(i, t, r, s, function (e, t) {\n n.hideInlinePreview && (t = t.map(function (e) {\n return Object.assign(e, {\n hideInlinePreview: n.hideInlinePreview\n });\n })), !e && t && (a = a.concat(t)), o(null, {\n prefix: c.getCompletionPrefix(i),\n matches: a,\n finished: 0 == --l\n });\n });\n }), !0;\n }, C.prototype.provideCompletions = function (e, i, o) {\n var n = function (e) {\n var t = e.prefix,\n n = e.matches;\n this.completions = new y(n), i.exactMatch && (this.completions.exactMatch = !0), i.ignoreCaption && (this.completions.ignoreCaption = !0), this.completions.setFilter(t), (e.finished || this.completions.filtered.length) && o(null, this.completions, e.finished);\n }.bind(this),\n r = !0,\n s = null;\n this.gatherCompletions(e, function (e, t) {\n this.active && (e && (o(e, [], !0), this.detach()), 0 === t.prefix.indexOf(t.prefix)) && (r ? s = t : n(t));\n }.bind(this)), r = !1, s && (e = s, s = null, n(e));\n }, C.prototype.detach = function () {\n this.active = !1, this.completers && this.completers.forEach(function (e) {\n \"function\" == typeof e.cancel && e.cancel();\n });\n };\n var f = C;\n function C(e) {\n this.initialPosition = e, this.active = !0;\n }\n v.prototype.setFilter = function (e) {\n t = e.length > this.filterText && 0 === e.lastIndexOf(this.filterText, 0) ? this.filtered : this.all, this.filterText = e, t = (t = this.filterCompletions(t, this.filterText)).sort(function (e, t) {\n return t.exactMatch - e.exactMatch || t.$score - e.$score || (e.caption || e.value).localeCompare(t.caption || t.value);\n });\n var t,\n n = null;\n t = t.filter(function (e) {\n e = e.snippet || e.caption || e.value;\n return e !== n && (n = e, !0);\n }), this.filtered = t;\n }, v.prototype.filterCompletions = function (e, t) {\n var n = [],\n i = t.toUpperCase(),\n o = t.toLowerCase();\n e: for (var r, s = 0; r = e[s]; s++) {\n var a = !this.ignoreCaption && r.caption || r.value || r.snippet;\n if (a) {\n var l = -1,\n c = 0,\n h = 0;\n if (this.exactMatch) {\n if (t !== a.substr(0, t.length)) continue;\n } else {\n var d = a.toLowerCase().indexOf(o);\n if (-1 < d) h = d;else for (var u = 0; u < t.length; u++) {\n var g = a.indexOf(o[u], l + 1),\n p = a.indexOf(i[u], l + 1);\n if ((g = 0 <= g && (p < 0 || g < p) ? g : p) < 0) continue e;\n 0 < (p = g - l - 1) && (-1 === l && (h += 10), h += p, c |= 1 << u), l = g;\n }\n }\n r.matchMask = c, r.exactMatch = h ? 0 : 1, r.$score = (r.score || 0) - h, n.push(r);\n }\n }\n return n;\n };\n var y = v;\n function v(e, t) {\n this.all = e, this.filtered = e, this.filterText = t || \"\", this.exactMatch = !1, this.ignoreCaption = !1;\n }\n t.Autocomplete = p, t.CompletionProvider = f, t.FilteredList = y;\n }), ace.define(\"ace/autocomplete/text_completer\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (e, t, n) {\n var s = e(\"../range\").Range,\n a = /[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;\n function l(e, t) {\n var n = e.getTextRange(s.fromPoints({\n row: 0,\n column: 0\n }, t)).split(a).length - 1,\n i = e.getValue().split(a),\n o = Object.create(null),\n r = i[n];\n return i.forEach(function (e, t) {\n e && e !== r && (t = Math.abs(n - t), t = i.length - t, o[e] ? o[e] = Math.max(t, o[e]) : o[e] = t);\n }), o;\n }\n t.getCompletions = function (e, t, n, i, o) {\n var r = l(t, n);\n o(null, Object.keys(r).map(function (e) {\n return {\n caption: e,\n value: e,\n score: r[e],\n meta: \"local\"\n };\n }));\n };\n }), ace.define(\"ace/ext/language_tools\", [\"require\", \"exports\", \"module\", \"ace/snippets\", \"ace/autocomplete\", \"ace/config\", \"ace/lib/lang\", \"ace/autocomplete/util\", \"ace/autocomplete/text_completer\", \"ace/editor\", \"ace/config\"], function (e, t, n) {\n \"use strict\";\n\n function i(e, t) {\n f(t.session.$mode);\n }\n function o(e) {\n var t = e.editor,\n n = t.completer && t.completer.activated;\n \"backspace\" === e.command.name ? n && !h.getCompletionPrefix(t) && t.completer.detach() : \"insertstring\" !== e.command.name || n || ((t = (r = e).editor.$liveAutocompletionDelay) ? y.delay(t) : v(e));\n }\n var r,\n l = e(\"../snippets\").snippetManager,\n s = e(\"../autocomplete\").Autocomplete,\n a = e(\"../config\"),\n c = e(\"../lib/lang\"),\n h = e(\"../autocomplete/util\"),\n d = e(\"../autocomplete/text_completer\"),\n u = {\n getCompletions: function (e, t, n, i, o) {\n if (t.$mode.completer) return t.$mode.completer.getCompletions(e, t, n, i, o);\n e = e.session.getState(n.row);\n o(null, t.$mode.getCompletions(e, t, n, i).map(function (e) {\n return e.completerId = u.id, e;\n }));\n },\n id: \"keywordCompleter\"\n },\n g = {\n getCompletions: function (e, t, n, i, o) {\n var r = [],\n t = t.getTokenAt(n.row, n.column),\n s = (t && t.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\\.xml$/) ? r.push(\"html-tag\") : r = l.getActiveScopes(e), l.snippetMap),\n a = [];\n r.forEach(function (e) {\n for (var t = s[e] || [], n = t.length; n--;) {\n var i = t[n],\n o = i.name || i.tabTrigger;\n o && a.push({\n caption: o,\n snippet: i.content,\n meta: i.tabTrigger && !i.name ? i.tabTrigger + \"⇥ \" : \"snippet\",\n completerId: g.id\n });\n }\n }, this), o(null, a);\n },\n getDocTooltip: function (e) {\n var o;\n e.snippet && !e.docHTML && (e.docHTML = [\"\", c.escapeHTML(e.caption), \" \", \" \", c.escapeHTML((e = e.snippet, o = {}, e.replace(/\\${(\\d+)(:(.*?))?}/g, function (e, t, n, i) {\n return o[t] = i || \"\";\n }).replace(/\\$(\\d+?)/g, function (e, t) {\n return o[t];\n })))].join(\"\"));\n },\n id: \"snippetCompleter\"\n },\n p = [g, d, u],\n m = (t.setCompleters = function (e) {\n p.length = 0, e && p.push.apply(p, e);\n }, t.addCompleter = function (e) {\n p.push(e);\n }, t.textCompleter = d, t.keyWordCompleter = u, t.snippetCompleter = g, {\n name: \"expandSnippet\",\n exec: function (e) {\n return l.expandWithTab(e);\n },\n bindKey: \"Tab\"\n }),\n f = function (e) {\n (e = \"string\" == typeof e ? a.$modes[e] : e) && (l.files || (l.files = {}), C(e.$id, e.snippetFileId), e.modes) && e.modes.forEach(f);\n },\n C = function (t, e) {\n e && t && !l.files[t] && (l.files[t] = {}, a.loadModule(e, function (e) {\n e && (!(l.files[t] = e).snippets && e.snippetText && (e.snippets = l.parseSnippetFile(e.snippetText)), l.register(e.snippets || [], e.scope), e.includeScopes) && (l.snippetMap[e.scope].includeScopes = e.includeScopes, e.includeScopes.forEach(function (e) {\n f(\"ace/mode/\" + e);\n }));\n }));\n },\n y = c.delayedCall(function () {\n v(r);\n }, 0),\n v = function (e) {\n var e = e.editor,\n t = h.getCompletionPrefix(e),\n n = h.triggerAutocomplete(e);\n (t && t.length >= e.$liveAutocompletionThreshold || n) && ((t = s.for(e)).autoShown = !0, t.showPopup(e));\n },\n d = e(\"../editor\").Editor;\n e(\"../config\").defineOptions(d.prototype, \"editor\", {\n enableBasicAutocompletion: {\n set: function (e) {\n e ? (this.completers || (this.completers = Array.isArray(e) ? e : p), this.commands.addCommand(s.startCommand)) : this.commands.removeCommand(s.startCommand);\n },\n value: !1\n },\n enableLiveAutocompletion: {\n set: function (e) {\n e ? (this.completers || (this.completers = Array.isArray(e) ? e : p), this.commands.on(\"afterExec\", o)) : this.commands.off(\"afterExec\", o);\n },\n value: !1\n },\n liveAutocompletionDelay: {\n initialValue: 0\n },\n liveAutocompletionThreshold: {\n initialValue: 0\n },\n enableSnippets: {\n set: function (e) {\n e ? (this.commands.addCommand(m), this.on(\"changeMode\", i), i(0, this)) : (this.commands.removeCommand(m), this.off(\"changeMode\", i));\n },\n value: !1\n }\n });\n }), ace.require([\"ace/ext/language_tools\"], function (e) {\n t && (t.exports = e);\n });\n },\n 3330: function (t, e, n) {\n t = n.nmd(t), ace.define(\"ace/ext/searchbox-css\", [\"require\", \"exports\", \"module\"], function (e, t, n) {\n n.exports = '\\n\\n/* ------------------------------------------------------------------------------------------\\n * Editor Search Form\\n * --------------------------------------------------------------------------------------- */\\n.ace_search {\\n background-color: #ddd;\\n color: #666;\\n border: 1px solid #cbcbcb;\\n border-top: 0 none;\\n overflow: hidden;\\n margin: 0;\\n padding: 4px 6px 0 4px;\\n position: absolute;\\n top: 0;\\n z-index: 99;\\n white-space: normal;\\n}\\n.ace_search.left {\\n border-left: 0 none;\\n border-radius: 0px 0px 5px 0px;\\n left: 0;\\n}\\n.ace_search.right {\\n border-radius: 0px 0px 0px 5px;\\n border-right: 0 none;\\n right: 0;\\n}\\n\\n.ace_search_form, .ace_replace_form {\\n margin: 0 20px 4px 0;\\n overflow: hidden;\\n line-height: 1.9;\\n}\\n.ace_replace_form {\\n margin-right: 0;\\n}\\n.ace_search_form.ace_nomatch {\\n outline: 1px solid red;\\n}\\n\\n.ace_search_field {\\n border-radius: 3px 0 0 3px;\\n background-color: white;\\n color: black;\\n border: 1px solid #cbcbcb;\\n border-right: 0 none;\\n outline: 0;\\n padding: 0;\\n font-size: inherit;\\n margin: 0;\\n line-height: inherit;\\n padding: 0 6px;\\n min-width: 17em;\\n vertical-align: top;\\n min-height: 1.8em;\\n box-sizing: content-box;\\n}\\n.ace_searchbtn {\\n border: 1px solid #cbcbcb;\\n line-height: inherit;\\n display: inline-block;\\n padding: 0 6px;\\n background: #fff;\\n border-right: 0 none;\\n border-left: 1px solid #dcdcdc;\\n cursor: pointer;\\n margin: 0;\\n position: relative;\\n color: #666;\\n}\\n.ace_searchbtn:last-child {\\n border-radius: 0 3px 3px 0;\\n border-right: 1px solid #cbcbcb;\\n}\\n.ace_searchbtn:disabled {\\n background: none;\\n cursor: default;\\n}\\n.ace_searchbtn:hover {\\n background-color: #eef1f6;\\n}\\n.ace_searchbtn.prev, .ace_searchbtn.next {\\n padding: 0px 0.7em\\n}\\n.ace_searchbtn.prev:after, .ace_searchbtn.next:after {\\n content: \"\";\\n border: solid 2px #888;\\n width: 0.5em;\\n height: 0.5em;\\n border-width: 2px 0 0 2px;\\n display:inline-block;\\n transform: rotate(-45deg);\\n}\\n.ace_searchbtn.next:after {\\n border-width: 0 2px 2px 0 ;\\n}\\n.ace_searchbtn_close {\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\\n border-radius: 50%;\\n border: 0 none;\\n color: #656565;\\n cursor: pointer;\\n font: 16px/16px Arial;\\n padding: 0;\\n height: 14px;\\n width: 14px;\\n top: 9px;\\n right: 7px;\\n position: absolute;\\n}\\n.ace_searchbtn_close:hover {\\n background-color: #656565;\\n background-position: 50% 100%;\\n color: white;\\n}\\n\\n.ace_button {\\n margin-left: 2px;\\n cursor: pointer;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -o-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n overflow: hidden;\\n opacity: 0.7;\\n border: 1px solid rgba(100,100,100,0.23);\\n padding: 1px;\\n box-sizing: border-box!important;\\n color: black;\\n}\\n\\n.ace_button:hover {\\n background-color: #eee;\\n opacity:1;\\n}\\n.ace_button:active {\\n background-color: #ddd;\\n}\\n\\n.ace_button.checked {\\n border-color: #3399ff;\\n opacity:1;\\n}\\n\\n.ace_search_options{\\n margin-bottom: 3px;\\n text-align: right;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -o-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n clear: both;\\n}\\n\\n.ace_search_counter {\\n float: left;\\n font-family: arial;\\n padding: 0 8px;\\n}';\n }), ace.define(\"ace/ext/searchbox\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/lang\", \"ace/lib/event\", \"ace/ext/searchbox-css\", \"ace/keyboard/hash_handler\", \"ace/lib/keys\", \"ace/config\"], function (e, t, n) {\n \"use strict\";\n\n var o = e(\"../lib/dom\"),\n r = e(\"../lib/lang\"),\n s = e(\"../lib/event\"),\n a = e(\"./searchbox-css\"),\n i = e(\"../keyboard/hash_handler\").HashHandler,\n l = e(\"../lib/keys\"),\n c = e(\"../config\").nls,\n h = (o.importCssString(a, \"ace_searchbox\", !1), d.prototype.setEditor = function (e) {\n e.searchBox = this, e.renderer.scroller.appendChild(this.element), this.editor = e;\n }, d.prototype.setSession = function (e) {\n this.searchRange = null, this.$syncOptions(!0);\n }, d.prototype.$initElements = function (e) {\n this.searchBox = e.querySelector(\".ace_search_form\"), this.replaceBox = e.querySelector(\".ace_replace_form\"), this.searchOption = e.querySelector(\"[action=searchInSelection]\"), this.replaceOption = e.querySelector(\"[action=toggleReplace]\"), this.regExpOption = e.querySelector(\"[action=toggleRegexpMode]\"), this.caseSensitiveOption = e.querySelector(\"[action=toggleCaseSensitive]\"), this.wholeWordOption = e.querySelector(\"[action=toggleWholeWords]\"), this.searchInput = this.searchBox.querySelector(\".ace_search_field\"), this.replaceInput = this.replaceBox.querySelector(\".ace_search_field\"), this.searchCounter = e.querySelector(\".ace_search_counter\");\n }, d.prototype.$init = function () {\n var e = this.element,\n i = (this.$initElements(e), this);\n s.addListener(e, \"mousedown\", function (e) {\n setTimeout(function () {\n i.activeInput.focus();\n }, 0), s.stopPropagation(e);\n }), s.addListener(e, \"click\", function (e) {\n var t = (e.target || e.srcElement).getAttribute(\"action\");\n t && i[t] ? i[t]() : i.$searchBarKb.commands[t] && i.$searchBarKb.commands[t].exec(i), s.stopPropagation(e);\n }), s.addCommandKeyListener(e, function (e, t, n) {\n n = l.keyCodeToString(n), t = i.$searchBarKb.findKeyCommand(t, n);\n t && t.exec && (t.exec(i), s.stopEvent(e));\n }), this.$onChange = r.delayedCall(function () {\n i.find(!1, !1);\n }), s.addListener(this.searchInput, \"input\", function () {\n i.$onChange.schedule(20);\n }), s.addListener(this.searchInput, \"focus\", function () {\n i.activeInput = i.searchInput, i.searchInput.value && i.highlight();\n }), s.addListener(this.replaceInput, \"focus\", function () {\n i.activeInput = i.replaceInput, i.searchInput.value && i.highlight();\n });\n }, d.prototype.setSearchRange = function (e) {\n (this.searchRange = e) ? this.searchRangeMarker = this.editor.session.addMarker(e, \"ace_active-line\") : this.searchRangeMarker && (this.editor.session.removeMarker(this.searchRangeMarker), this.searchRangeMarker = null);\n }, d.prototype.$syncOptions = function (e) {\n o.setCssClass(this.replaceOption, \"checked\", this.searchRange), o.setCssClass(this.searchOption, \"checked\", this.searchOption.checked), this.replaceOption.textContent = this.replaceOption.checked ? \"-\" : \"+\", o.setCssClass(this.regExpOption, \"checked\", this.regExpOption.checked), o.setCssClass(this.wholeWordOption, \"checked\", this.wholeWordOption.checked), o.setCssClass(this.caseSensitiveOption, \"checked\", this.caseSensitiveOption.checked);\n var t = this.editor.getReadOnly();\n this.replaceOption.style.display = t ? \"none\" : \"\", this.replaceBox.style.display = this.replaceOption.checked && !t ? \"\" : \"none\", this.find(!1, !1, e);\n }, d.prototype.highlight = function (e) {\n this.editor.session.highlight(e || this.editor.$search.$options.re), this.editor.renderer.updateBackMarkers();\n }, d.prototype.find = function (e, t, n) {\n e = !this.editor.find(this.searchInput.value, {\n skipCurrent: e,\n backwards: t,\n wrap: !0,\n regExp: this.regExpOption.checked,\n caseSensitive: this.caseSensitiveOption.checked,\n wholeWord: this.wholeWordOption.checked,\n preventScroll: n,\n range: this.searchRange\n }) && this.searchInput.value;\n o.setCssClass(this.searchBox, \"ace_nomatch\", e), this.editor._emit(\"findSearchBox\", {\n match: !e\n }), this.highlight(), this.updateCounter();\n }, d.prototype.updateCounter = function () {\n var e = this.editor,\n t = e.$search.$options.re,\n n = 0,\n i = 0;\n if (t) {\n var o,\n r,\n s = this.searchRange ? e.session.getTextRange(this.searchRange) : e.getValue(),\n a = e.session.doc.positionToIndex(e.selection.anchor);\n for (this.searchRange && (a -= e.session.doc.positionToIndex(this.searchRange.start)), t.lastIndex = 0; (r = t.exec(s)) && ((o = r.index) <= a && i++, !(999 < ++n)) && (r[0] || (t.lastIndex = o += 1, !(o >= s.length))););\n }\n this.searchCounter.textContent = c(\"$0 of $1\", [i, 999 < n ? \"999+\" : n]);\n }, d.prototype.findNext = function () {\n this.find(!0, !1);\n }, d.prototype.findPrev = function () {\n this.find(!0, !0);\n }, d.prototype.findAll = function () {\n var e = !this.editor.findAll(this.searchInput.value, {\n regExp: this.regExpOption.checked,\n caseSensitive: this.caseSensitiveOption.checked,\n wholeWord: this.wholeWordOption.checked\n }) && this.searchInput.value;\n o.setCssClass(this.searchBox, \"ace_nomatch\", e), this.editor._emit(\"findSearchBox\", {\n match: !e\n }), this.highlight(), this.hide();\n }, d.prototype.replace = function () {\n this.editor.getReadOnly() || this.editor.replace(this.replaceInput.value);\n }, d.prototype.replaceAndFindNext = function () {\n this.editor.getReadOnly() || (this.editor.replace(this.replaceInput.value), this.findNext());\n }, d.prototype.replaceAll = function () {\n this.editor.getReadOnly() || this.editor.replaceAll(this.replaceInput.value);\n }, d.prototype.hide = function () {\n this.active = !1, this.setSearchRange(null), this.editor.off(\"changeSession\", this.setSession), this.element.style.display = \"none\", this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb), this.editor.focus();\n }, d.prototype.show = function (e, t) {\n this.active = !0, this.editor.on(\"changeSession\", this.setSession), this.element.style.display = \"\", this.replaceOption.checked = t, e && (this.searchInput.value = e), this.searchInput.focus(), this.searchInput.select(), this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb), this.$syncOptions(!0);\n }, d.prototype.isFocused = function () {\n var e = document.activeElement;\n return e == this.searchInput || e == this.replaceInput;\n }, d);\n function d(e, t, n) {\n var i = o.createElement(\"div\");\n o.buildDom([\"div\", {\n class: \"ace_search right\"\n }, [\"span\", {\n action: \"hide\",\n class: \"ace_searchbtn_close\"\n }], [\"div\", {\n class: \"ace_search_form\"\n }, [\"input\", {\n class: \"ace_search_field\",\n placeholder: c(\"Search for\"),\n spellcheck: \"false\"\n }], [\"span\", {\n action: \"findPrev\",\n class: \"ace_searchbtn prev\"\n }, \"\"], [\"span\", {\n action: \"findNext\",\n class: \"ace_searchbtn next\"\n }, \"\"], [\"span\", {\n action: \"findAll\",\n class: \"ace_searchbtn\",\n title: \"Alt-Enter\"\n }, c(\"All\")]], [\"div\", {\n class: \"ace_replace_form\"\n }, [\"input\", {\n class: \"ace_search_field\",\n placeholder: c(\"Replace with\"),\n spellcheck: \"false\"\n }], [\"span\", {\n action: \"replaceAndFindNext\",\n class: \"ace_searchbtn\"\n }, c(\"Replace\")], [\"span\", {\n action: \"replaceAll\",\n class: \"ace_searchbtn\"\n }, c(\"All\")]], [\"div\", {\n class: \"ace_search_options\"\n }, [\"span\", {\n action: \"toggleReplace\",\n class: \"ace_button\",\n title: c(\"Toggle Replace mode\"),\n style: \"float:left;margin-top:-2px;padding:0 5px;\"\n }, \"+\"], [\"span\", {\n class: \"ace_search_counter\"\n }], [\"span\", {\n action: \"toggleRegexpMode\",\n class: \"ace_button\",\n title: c(\"RegExp Search\")\n }, \".*\"], [\"span\", {\n action: \"toggleCaseSensitive\",\n class: \"ace_button\",\n title: c(\"CaseSensitive Search\")\n }, \"Aa\"], [\"span\", {\n action: \"toggleWholeWords\",\n class: \"ace_button\",\n title: c(\"Whole Word Search\")\n }, \"\\\\b\"], [\"span\", {\n action: \"searchInSelection\",\n class: \"ace_button\",\n title: c(\"Search In Selection\")\n }, \"S\"]]], i), this.element = i.firstChild, this.setSession = this.setSession.bind(this), this.$init(), this.setEditor(e), o.importCssString(a, \"ace_searchbox\", e.container);\n }\n e = new i(), e.bindKeys({\n \"Ctrl-f|Command-f\": function (e) {\n var t = e.isReplace = !e.isReplace;\n e.replaceBox.style.display = t ? \"\" : \"none\", e.replaceOption.checked = !1, e.$syncOptions(), e.searchInput.focus();\n },\n \"Ctrl-H|Command-Option-F\": function (e) {\n e.editor.getReadOnly() || (e.replaceOption.checked = !0, e.$syncOptions(), e.replaceInput.focus());\n },\n \"Ctrl-G|Command-G\": function (e) {\n e.findNext();\n },\n \"Ctrl-Shift-G|Command-Shift-G\": function (e) {\n e.findPrev();\n },\n esc: function (e) {\n setTimeout(function () {\n e.hide();\n });\n },\n Return: function (e) {\n e.activeInput == e.replaceInput && e.replace(), e.findNext();\n },\n \"Shift-Return\": function (e) {\n e.activeInput == e.replaceInput && e.replace(), e.findPrev();\n },\n \"Alt-Return\": function (e) {\n e.activeInput == e.replaceInput && e.replaceAll(), e.findAll();\n },\n Tab: function (e) {\n (e.activeInput == e.replaceInput ? e.searchInput : e.replaceInput).focus();\n }\n }), e.addCommands([{\n name: \"toggleRegexpMode\",\n bindKey: {\n win: \"Alt-R|Alt-/\",\n mac: \"Ctrl-Alt-R|Ctrl-Alt-/\"\n },\n exec: function (e) {\n e.regExpOption.checked = !e.regExpOption.checked, e.$syncOptions();\n }\n }, {\n name: \"toggleCaseSensitive\",\n bindKey: {\n win: \"Alt-C|Alt-I\",\n mac: \"Ctrl-Alt-R|Ctrl-Alt-I\"\n },\n exec: function (e) {\n e.caseSensitiveOption.checked = !e.caseSensitiveOption.checked, e.$syncOptions();\n }\n }, {\n name: \"toggleWholeWords\",\n bindKey: {\n win: \"Alt-B|Alt-W\",\n mac: \"Ctrl-Alt-B|Ctrl-Alt-W\"\n },\n exec: function (e) {\n e.wholeWordOption.checked = !e.wholeWordOption.checked, e.$syncOptions();\n }\n }, {\n name: \"toggleReplace\",\n exec: function (e) {\n e.replaceOption.checked = !e.replaceOption.checked, e.$syncOptions();\n }\n }, {\n name: \"searchInSelection\",\n exec: function (e) {\n e.searchOption.checked = !e.searchRange, e.setSearchRange(e.searchOption.checked && e.editor.getSelectionRange()), e.$syncOptions();\n }\n }]), i = new i([{\n bindKey: \"Esc\",\n name: \"closeSearchBar\",\n exec: function (e) {\n e.searchBox.hide();\n }\n }]);\n h.prototype.$searchBarKb = e, h.prototype.$closeSearchBarKb = i, t.SearchBox = h, t.Search = function (e, t) {\n (e.searchBox || new h(e)).show(e.session.getTextRange(), t);\n };\n }), ace.require([\"ace/ext/searchbox\"], function (e) {\n t && (t.exports = e);\n });\n },\n 4091: function (t, e, n) {\n t = n.nmd(t), ace.define(\"ace/mode/json_highlight_rules\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/mode/text_highlight_rules\"], function (e, t, n) {\n \"use strict\";\n\n function i() {\n this.$rules = {\n start: [{\n token: \"variable\",\n regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\n }, {\n token: \"string\",\n regex: '\"',\n next: \"string\"\n }, {\n token: \"constant.numeric\",\n regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n }, {\n token: \"constant.numeric\",\n regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n }, {\n token: \"constant.language.boolean\",\n regex: \"(?:true|false)\\\\b\"\n }, {\n token: \"text\",\n regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n }, {\n token: \"comment\",\n regex: \"\\\\/\\\\/.*$\"\n }, {\n token: \"comment.start\",\n regex: \"\\\\/\\\\*\",\n next: \"comment\"\n }, {\n token: \"paren.lparen\",\n regex: \"[[({]\"\n }, {\n token: \"paren.rparen\",\n regex: \"[\\\\])}]\"\n }, {\n token: \"punctuation.operator\",\n regex: /[,]/\n }, {\n token: \"text\",\n regex: \"\\\\s+\"\n }],\n string: [{\n token: \"constant.language.escape\",\n regex: /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\n }, {\n token: \"string\",\n regex: '\"|$',\n next: \"start\"\n }, {\n defaultToken: \"string\"\n }],\n comment: [{\n token: \"comment.end\",\n regex: \"\\\\*\\\\/\",\n next: \"start\"\n }, {\n defaultToken: \"comment\"\n }]\n };\n }\n var o = e(\"../lib/oop\"),\n e = e(\"./text_highlight_rules\").TextHighlightRules;\n o.inherits(i, e), t.JsonHighlightRules = i;\n }), ace.define(\"ace/mode/matching_brace_outdent\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (e, t, n) {\n \"use strict\";\n\n function i() {}\n var o = e(\"../range\").Range;\n !function () {\n this.checkOutdent = function (e, t) {\n return !!/^\\s+$/.test(e) && /^\\s*\\}/.test(t);\n }, this.autoOutdent = function (e, t) {\n var n,\n i = e.getLine(t).match(/^(\\s*\\})/);\n return i && (i = i[1].length, n = e.findMatchingBracket({\n row: t,\n column: i\n })) && n.row != t ? (n = this.$getIndent(e.getLine(n.row)), void e.replace(new o(t, 0, t, i - 1), n)) : 0;\n }, this.$getIndent = function (e) {\n return e.match(/^\\s*/)[0];\n };\n }.call(i.prototype), t.MatchingBraceOutdent = i;\n }), ace.define(\"ace/mode/folding/cstyle\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/range\", \"ace/mode/folding/fold_mode\"], function (e, t, n) {\n \"use strict\";\n\n var i = e(\"../../lib/oop\"),\n h = e(\"../../range\").Range,\n e = e(\"./fold_mode\").FoldMode,\n t = t.FoldMode = function (e) {\n e && (this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + e.start)), this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + e.end)));\n };\n i.inherits(t, e), function () {\n this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/, this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/, this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/, this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/, this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/, this._getFoldWidgetBase = this.getFoldWidget, this.getFoldWidget = function (e, t, n) {\n var i = e.getLine(n);\n return !this.singleLineBlockCommentRe.test(i) || this.startRegionRe.test(i) || this.tripleStarBlockCommentRe.test(i) ? !(e = this._getFoldWidgetBase(e, t, n)) && this.startRegionRe.test(i) ? \"start\" : e : \"\";\n }, this.getFoldWidgetRange = function (e, t, n, i) {\n var o,\n r,\n s,\n a = e.getLine(n);\n return this.startRegionRe.test(a) ? this.getCommentRegionBlock(e, a, n) : (r = a.match(this.foldingStartMarker)) ? (s = r.index, r[1] ? this.openingBracketBlock(e, r[1], n, s) : ((o = e.getCommentFoldRange(n, s + r[0].length, 1)) && !o.isMultiLine() && (i ? o = this.getSectionRange(e, n) : \"all\" != t && (o = null)), o)) : \"markbegin\" !== t && (r = a.match(this.foldingStopMarker)) ? (s = r.index + r[0].length, r[1] ? this.closingBracketBlock(e, r[1], n, s) : e.getCommentFoldRange(n, s, -1)) : void 0;\n }, this.getSectionRange = function (e, t) {\n for (var n = (a = e.getLine(t)).search(/\\S/), i = t, o = a.length, r = t += 1, s = e.getLength(); ++t < s;) {\n var a,\n l = (a = e.getLine(t)).search(/\\S/);\n if (-1 !== l) {\n if (l < n) break;\n var c = this.getFoldWidgetRange(e, \"all\", t);\n if (c) {\n if (c.start.row <= i) break;\n if (c.isMultiLine()) t = c.end.row;else if (n == l) break;\n }\n r = t;\n }\n }\n return new h(i, o, r, e.getLine(r).length);\n }, this.getCommentRegionBlock = function (e, t, n) {\n for (var i = t.search(/\\s*$/), o = e.getLength(), r = n, s = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/, a = 1; ++n < o;) {\n t = e.getLine(n);\n var l = s.exec(t);\n if (l && (l[1] ? a-- : a++, !a)) break;\n }\n if (r < n) return new h(r, i, n, t.length);\n };\n }.call(t.prototype);\n }), ace.define(\"ace/mode/json\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/mode/text\", \"ace/mode/json_highlight_rules\", \"ace/mode/matching_brace_outdent\", \"ace/mode/folding/cstyle\", \"ace/worker/worker_client\"], function (e, t, n) {\n \"use strict\";\n\n function i() {\n this.HighlightRules = s, this.$outdent = new a(), this.$behaviour = this.$defaultBehaviour, this.foldingRules = new l();\n }\n var o = e(\"../lib/oop\"),\n r = e(\"./text\").Mode,\n s = e(\"./json_highlight_rules\").JsonHighlightRules,\n a = e(\"./matching_brace_outdent\").MatchingBraceOutdent,\n l = e(\"./folding/cstyle\").FoldMode,\n c = e(\"../worker/worker_client\").WorkerClient;\n o.inherits(i, r), function () {\n this.lineCommentStart = \"//\", this.blockComment = {\n start: \"/*\",\n end: \"*/\"\n }, this.getNextLineIndent = function (e, t, n) {\n var i = this.$getIndent(t);\n return \"start\" == e && t.match(/^.*[\\{\\(\\[]\\s*$/) && (i += n), i;\n }, this.checkOutdent = function (e, t, n) {\n return this.$outdent.checkOutdent(t, n);\n }, this.autoOutdent = function (e, t, n) {\n this.$outdent.autoOutdent(t, n);\n }, this.createWorker = function (t) {\n var e = new c([\"ace\"], \"ace/mode/json_worker\", \"JsonWorker\");\n return e.attachToDocument(t.getDocument()), e.on(\"annotate\", function (e) {\n t.setAnnotations(e.data);\n }), e.on(\"terminate\", function () {\n t.clearAnnotations();\n }), e;\n }, this.$id = \"ace/mode/json\";\n }.call(i.prototype), t.Mode = i;\n }), ace.require([\"ace/mode/json\"], function (e) {\n t && (t.exports = e);\n });\n },\n 8903: function (e, t, g) {\n \"use strict\";\n\n var s = g(5689),\n l = g(3969),\n p = g(5255),\n c = g(4293),\n m = g(3508),\n f = g(3368),\n C = g(742),\n y = g(9394),\n v = g(3724),\n e = ((e.exports = w).prototype.validate = function (e, t) {\n var n;\n if (\"string\" == typeof e) {\n if (!(n = this.getSchema(e))) throw new Error('no schema with key or ref \"' + e + '\"');\n } else {\n e = this._addSchema(e);\n n = e.validate || this._compile(e);\n }\n e = n(t);\n !0 !== n.$async && (this.errors = n.errors);\n return e;\n }, w.prototype.compile = function (e, t) {\n e = this._addSchema(e, void 0, t);\n return e.validate || this._compile(e);\n }, w.prototype.addSchema = function (e, t, n, i) {\n if (Array.isArray(e)) for (var o = 0; o < e.length; o++) this.addSchema(e[o], void 0, n, i);else {\n var r = this._getId(e);\n if (void 0 !== r && \"string\" != typeof r) throw new Error(\"schema id must be string\");\n h(this, t = l.normalizeId(t || r)), this._schemas[t] = this._addSchema(e, n, i, !0);\n }\n return this;\n }, w.prototype.addMetaSchema = function (e, t, n) {\n return this.addSchema(e, t, n, !0), this;\n }, w.prototype.validateSchema = function (e, t) {\n var n = e.$schema;\n if (void 0 !== n && \"string\" != typeof n) throw new Error(\"$schema must be a string\");\n if (!(n = n || this._opts.defaultMeta || function (e) {\n var t = e._opts.meta;\n return e._opts.defaultMeta = \"object\" == typeof t ? e._getId(t) || t : e.getSchema(I) ? I : void 0, e._opts.defaultMeta;\n }(this))) return this.logger.warn(\"meta-schema not available\"), !(this.errors = null);\n n = this.validate(n, e);\n if (!n && t) {\n e = \"schema is invalid: \" + this.errorsText();\n if (\"log\" != this._opts.validateSchema) throw new Error(e);\n this.logger.error(e);\n }\n return n;\n }, w.prototype.getSchema = function (e) {\n var t = n(this, e);\n switch (typeof t) {\n case \"object\":\n return t.validate || this._compile(t);\n case \"string\":\n return this.getSchema(t);\n case \"undefined\":\n return function (e, t) {\n var n = l.schema.call(e, {\n schema: {}\n }, t);\n {\n var i, o, r;\n if (n) return i = n.schema, o = n.root, n = n.baseId, r = s.call(e, i, o, void 0, n), e._fragments[t] = new c({\n ref: t,\n fragment: !0,\n schema: i,\n root: o,\n baseId: n,\n validate: r\n }), r;\n }\n }(this, e);\n }\n }, w.prototype.removeSchema = function (e) {\n if (e instanceof RegExp) i(this, this._schemas, e), i(this, this._refs, e);else switch (typeof e) {\n case \"undefined\":\n return i(this, this._schemas), i(this, this._refs), this._cache.clear(), this;\n case \"string\":\n var t = n(this, e);\n return t && this._cache.del(t.cacheKey), delete this._schemas[e], delete this._refs[e], this;\n case \"object\":\n t = this._opts.serialize, t = t ? t(e) : e, t = (this._cache.del(t), this._getId(e));\n t && (t = l.normalizeId(t), delete this._schemas[t], delete this._refs[t]);\n }\n return this;\n }, w.prototype.addFormat = function (e, t) {\n \"string\" == typeof t && (t = new RegExp(t));\n return this._formats[e] = t, this;\n }, w.prototype.errorsText = function (e, t) {\n if (!(e = e || this.errors)) return \"No errors\";\n for (var n = void 0 === (t = t || {}).separator ? \", \" : t.separator, i = void 0 === t.dataVar ? \"data\" : t.dataVar, o = \"\", r = 0; r < e.length; r++) {\n var s = e[r];\n s && (o += i + s.dataPath + \" \" + s.message + n);\n }\n return o.slice(0, -n.length);\n }, w.prototype._addSchema = function (e, t, n, i) {\n if (\"object\" != typeof e && \"boolean\" != typeof e) throw new Error(\"schema should be object or boolean\");\n var o = this._opts.serialize,\n o = o ? o(e) : e,\n r = this._cache.get(o);\n if (r) return r;\n i = i || !1 !== this._opts.addUsedSchema;\n r = l.normalizeId(this._getId(e));\n r && i && h(this, r);\n var s,\n t = !1 !== this._opts.validateSchema && !t;\n t && !(s = r && r == l.normalizeId(e.$schema)) && this.validateSchema(e, !0);\n var a = l.ids.call(this, e),\n a = new c({\n id: r,\n schema: e,\n localRefs: a,\n cacheKey: o,\n meta: n\n });\n \"#\" != r[0] && i && (this._refs[r] = a);\n this._cache.put(o, a), t && s && this.validateSchema(e, !0);\n return a;\n }, w.prototype._compile = function (n, e) {\n if (n.compiling) return (n.validate = o).schema = n.schema, o.errors = null, o.root = e || o, !0 === n.schema.$async && (o.$async = !0), o;\n var t, i;\n n.compiling = !0, n.meta && (t = this._opts, this._opts = this._metaOpts);\n try {\n i = s.call(this, n.schema, e, n.localRefs);\n } catch (e) {\n throw delete n.validate, e;\n } finally {\n n.compiling = !1, n.meta && (this._opts = t);\n }\n return n.validate = i, n.refs = i.refs, n.refVal = i.refVal, n.root = i.root, i;\n function o() {\n var e = n.validate,\n t = e.apply(this, arguments);\n return o.errors = e.errors, t;\n }\n }, w.prototype.compileAsync = g(9677), g(7931)),\n e = (w.prototype.addKeyword = e.add, w.prototype.getKeyword = e.get, w.prototype.removeKeyword = e.remove, w.prototype.validateKeyword = e.validate, g(5359)),\n I = (w.ValidationError = e.Validation, w.MissingRefError = e.MissingRef, w.$dataMetaSchema = y, \"http://json-schema.org/draft-07/schema\"),\n b = [\"removeAdditional\", \"useDefaults\", \"coerceTypes\", \"strictDefaults\"],\n A = [\"/properties\"];\n function w(e) {\n if (!(this instanceof w)) return new w(e);\n e = this._opts = v.copy(e) || {};\n var t = this,\n n = t._opts.logger;\n if (!1 === n) t.logger = {\n log: E,\n warn: E,\n error: E\n };else {\n if (!(\"object\" == typeof (n = void 0 === n ? console : n) && n.log && n.warn && n.error)) throw new Error(\"logger must implement log, warn and error methods\");\n t.logger = n;\n }\n if (this._schemas = {}, this._refs = {}, this._fragments = {}, this._formats = f(e.format), this._cache = e.cache || new p(), this._loadingSchemas = {}, this._compilations = [], this.RULES = C(), this._getId = function (e) {\n switch (e.schemaId) {\n case \"auto\":\n return k;\n case \"id\":\n return S;\n default:\n return x;\n }\n }(e), e.loopRequired = e.loopRequired || 1 / 0, \"property\" == e.errorDataPath && (e._errorDataPathProperty = !0), void 0 === e.serialize && (e.serialize = m), this._metaOpts = function (e) {\n for (var t = v.copy(e._opts), n = 0; n < b.length; n++) delete t[b[n]];\n return t;\n }(this), e.formats) {\n var i,\n o = this;\n for (i in o._opts.formats) {\n var r = o._opts.formats[i];\n o.addFormat(i, r);\n }\n }\n if (e.keywords) {\n var s,\n a = this;\n for (s in a._opts.keywords) {\n var l = a._opts.keywords[s];\n a.addKeyword(s, l);\n }\n }\n var c,\n t = this,\n h = (t._opts.$data && (c = g(894), t.addMetaSchema(c, c.$id, !0)), !1 !== t._opts.meta && (c = g(6680), t._opts.$data && (c = y(c, A)), t.addMetaSchema(c, I, !0), t._refs[\"http://json-schema.org/schema\"] = I), \"object\" == typeof e.meta && this.addMetaSchema(e.meta), e.nullable && this.addKeyword(\"nullable\", {\n metaSchema: {\n type: \"boolean\"\n }\n }), this),\n d = h._opts.schemas;\n if (d) if (Array.isArray(d)) h.addSchema(d);else for (var u in d) h.addSchema(d[u], u);\n }\n function n(e, t) {\n return t = l.normalizeId(t), e._schemas[t] || e._refs[t] || e._fragments[t];\n }\n function i(e, t, n) {\n for (var i in t) {\n var o = t[i];\n o.meta || n && !n.test(i) || (e._cache.del(o.cacheKey), delete t[i]);\n }\n }\n function S(e) {\n return e.$id && this.logger.warn(\"schema $id ignored\", e.$id), e.id;\n }\n function x(e) {\n return e.id && this.logger.warn(\"schema id ignored\", e.id), e.$id;\n }\n function k(e) {\n if (e.$id && e.id && e.$id != e.id) throw new Error(\"schema $id is different from id\");\n return e.$id || e.id;\n }\n function h(e, t) {\n if (e._schemas[t] || e._refs[t]) throw new Error('schema with key or id \"' + t + '\" already exists');\n }\n function E() {}\n },\n 5255: function (e) {\n \"use strict\";\n\n e = e.exports = function () {\n this._cache = {};\n };\n e.prototype.put = function (e, t) {\n this._cache[e] = t;\n }, e.prototype.get = function (e) {\n return this._cache[e];\n }, e.prototype.del = function (e) {\n delete this._cache[e];\n }, e.prototype.clear = function () {\n this._cache = {};\n };\n },\n 9677: function (e, t, n) {\n \"use strict\";\n\n var i = n(5359).MissingRef;\n function o(t, s, n) {\n var a = this;\n if (\"function\" != typeof this._opts.loadSchema) throw new Error(\"options.loadSchema should be a function\");\n \"function\" == typeof s && (n = s, s = void 0);\n var e = l(t).then(function () {\n var e = a._addSchema(t, void 0, s);\n return e.validate || function o(r) {\n try {\n return a._compile(r);\n } catch (e) {\n if (e instanceof i) return t(e);\n throw e;\n }\n function t(e) {\n var t = e.missingSchema;\n if (i(t)) throw new Error(\"Schema \" + t + \" is loaded but \" + e.missingRef + \" cannot be resolved\");\n e = a._loadingSchemas[t];\n return e || (e = a._loadingSchemas[t] = a._opts.loadSchema(t)).then(n, n), e.then(function (e) {\n if (!i(t)) return l(e).then(function () {\n i(t) || a.addSchema(e, t, void 0, s);\n });\n }).then(function () {\n return o(r);\n });\n function n() {\n delete a._loadingSchemas[t];\n }\n function i(e) {\n return a._refs[e] || a._schemas[e];\n }\n }\n }(e);\n });\n return n && e.then(function (e) {\n n(null, e);\n }, n), e;\n function l(e) {\n e = e.$schema;\n return e && !a.getSchema(e) ? o.call(a, {\n $ref: e\n }, !0) : Promise.resolve();\n }\n }\n e.exports = o;\n },\n 5359: function (e, t, n) {\n \"use strict\";\n\n var i = n(3969);\n function o(e, t, n) {\n this.message = n || o.message(e, t), this.missingRef = i.url(e, t), this.missingSchema = i.normalizeId(i.fullPath(this.missingRef));\n }\n function r(e) {\n return e.prototype = Object.create(Error.prototype), e.prototype.constructor = e;\n }\n e.exports = {\n Validation: r(function (e) {\n this.message = \"validation failed\", this.errors = e, this.ajv = this.validation = !0;\n }),\n MissingRef: r(o)\n }, o.message = function (e, t) {\n return \"can't resolve reference \" + t + \" from id \" + e;\n };\n },\n 3368: function (e, t, n) {\n \"use strict\";\n\n var i = n(3724),\n o = /^(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)$/,\n r = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n s = /^(\\d\\d):(\\d\\d):(\\d\\d)(\\.\\d+)?(z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\n n = /^(?=.{1,253}\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\\.?$/i,\n a = /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,\n l = /^(?:(?:[^\\x00-\\x20\"'<>%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i,\n c = /^(?:(?:http[s\\u017F]?|ftp):\\/\\/)(?:(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+(?::(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?@)?(?:(?!10(?:\\.[0-9]{1,3}){3})(?!127(?:\\.[0-9]{1,3}){3})(?!169\\.254(?:\\.[0-9]{1,3}){2})(?!192\\.168(?:\\.[0-9]{1,3}){2})(?!172\\.(?:1[6-9]|2[0-9]|3[01])(?:\\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-)*(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)(?:\\.(?:(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-)*(?:[0-9a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)*(?:\\.(?:(?:[a-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\\/(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?$/i,\n h = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,\n d = /^(?:\\/(?:[^~/]|~0|~1)*)*$/,\n u = /^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,\n g = /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/;\n function p(e) {\n return i.copy(p[e = \"full\" == e ? \"full\" : \"fast\"]);\n }\n function m(e) {\n var t,\n n,\n e = e.match(o);\n return !!e && (t = +e[1], n = +e[2], e = +e[3], 1 <= n) && n <= 12 && 1 <= e && e <= (2 != n || (e = t) % 4 != 0 || e % 100 == 0 && e % 400 != 0 ? r[n] : 29);\n }\n function f(e, t) {\n var n,\n i,\n o,\n e = e.match(s);\n return !!e && (n = e[1], i = e[2], o = e[3], e = e[5], n <= 23 && i <= 59 && o <= 59 || 23 == n && 59 == i && 60 == o) && (!t || e);\n }\n (e.exports = p).fast = {\n date: /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/,\n time: /^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\n \"date-time\": /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s](?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i,\n uri: /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/)?[^\\s]*$/i,\n \"uri-reference\": /^(?:(?:[a-z][a-z0-9+\\-.]*:)?\\/?\\/)?(?:[^\\\\\\s#][^\\s#]*)?(?:#[^\\\\\\s]*)?$/i,\n \"uri-template\": l,\n url: c,\n email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\n hostname: n,\n ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\n regex: I,\n uuid: h,\n \"json-pointer\": d,\n \"json-pointer-uri-fragment\": u,\n \"relative-json-pointer\": g\n }, p.full = {\n date: m,\n time: f,\n \"date-time\": function (e) {\n e = e.split(C);\n return 2 == e.length && m(e[0]) && f(e[1], !0);\n },\n uri: function (e) {\n return y.test(e) && a.test(e);\n },\n \"uri-reference\": /^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'\"()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\\?(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,\n \"uri-template\": l,\n url: c,\n email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\n hostname: n,\n ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n ipv6: /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i,\n regex: I,\n uuid: h,\n \"json-pointer\": d,\n \"json-pointer-uri-fragment\": u,\n \"relative-json-pointer\": g\n };\n var C = /t|\\s/i;\n var y = /\\/|:/;\n var v = /[^\\\\]\\\\Z/;\n function I(e) {\n if (v.test(e)) return !1;\n try {\n return new RegExp(e), !0;\n } catch (e) {\n return !1;\n }\n }\n },\n 5689: function (e, t, n) {\n \"use strict\";\n\n var E = n(3969),\n T = n(3724),\n R = n(5359),\n _ = n(3508),\n $ = n(1869),\n L = T.ucs2length,\n N = n(2303),\n B = R.Validation;\n function M(e, s, a, t) {\n var l = this,\n c = this._opts,\n h = [void 0],\n d = {},\n u = [],\n n = {},\n g = [],\n i = {},\n p = [],\n o = (s = s || {\n schema: e,\n refVal: h,\n refs: d\n }, function (e, t, n) {\n var i = W.call(this, e, t, n);\n return 0 <= i ? {\n index: i,\n compiling: !0\n } : (i = this._compilations.length, this._compilations[i] = {\n schema: e,\n root: t,\n baseId: n\n }, {\n index: i,\n compiling: !1\n });\n }.call(this, e, s, t)),\n r = this._compilations[o.index];\n if (o.compiling) return r.callValidate = v;\n var m = this._formats,\n f = this.RULES;\n try {\n var C = I(e, s, a, t),\n y = (r.validate = C, r.callValidate);\n return y && (y.schema = C.schema, y.errors = null, y.refs = C.refs, y.refVal = C.refVal, y.root = C.root, y.$async = C.$async, c.sourceCode) && (y.source = C.source), C;\n } finally {\n !function (e, t, n) {\n e = W.call(this, e, t, n);\n 0 <= e && this._compilations.splice(e, 1);\n }.call(this, e, s, t);\n }\n function v() {\n var e = r.validate,\n t = e.apply(this, arguments);\n return v.errors = e.errors, t;\n }\n function I(e, t, n, i) {\n var o = !t || t.schema == e;\n if (t.schema != s.schema) return M.call(l, e, t, n, i);\n n = !0 === e.$async, i = $({\n isTop: !0,\n schema: e,\n isRoot: o,\n baseId: i,\n root: t,\n schemaPath: \"\",\n errSchemaPath: \"#\",\n errorPath: '\"\"',\n MissingRefError: R.MissingRef,\n RULES: f,\n validate: $,\n util: T,\n resolve: E,\n resolveRef: b,\n usePattern: S,\n useDefault: x,\n useCustomRule: k,\n opts: c,\n formats: m,\n logger: l.logger,\n self: l\n }), i = V(h, G) + V(u, H) + V(g, P) + V(p, F) + i;\n c.processCode && (i = c.processCode(i, e));\n try {\n var r = new Function(\"self\", \"RULES\", \"formats\", \"root\", \"refVal\", \"defaults\", \"customRules\", \"equal\", \"ucs2length\", \"ValidationError\", i)(l, f, m, s, h, g, p, N, L, B);\n h[0] = r;\n } catch (e) {\n throw l.logger.error(\"Error compiling schema, function code:\", i), e;\n }\n return r.schema = e, r.errors = null, r.refs = d, r.refVal = h, r.root = o ? r : t, n && (r.$async = !0), !0 === c.sourceCode && (r.source = {\n code: i,\n patterns: u,\n defaults: g\n }), r;\n }\n function b(e, t, n) {\n t = E.url(e, t);\n var i = d[t];\n if (void 0 !== i) return w(o = h[i], r = \"refVal[\" + i + \"]\");\n if (!n && s.refs) {\n i = s.refs[t];\n if (void 0 !== i) return w(o = s.refVal[i], r = A(t, o));\n }\n var o,\n r = A(t),\n n = E.call(l, I, s, t);\n if (void 0 !== (n = void 0 === n && (i = a && a[t]) ? E.inlineRef(i, c.inlineRefs) ? i : M.call(l, i, s, a, e) : n)) return o = n, i = d[i = t], h[i] = o, w(n, r);\n delete d[t];\n }\n function A(e, t) {\n var n = h.length;\n return h[n] = t, \"refVal\" + (d[e] = n);\n }\n function w(e, t) {\n return \"object\" == typeof e || \"boolean\" == typeof e ? {\n code: t,\n schema: e,\n inline: !0\n } : {\n code: t,\n $async: e && !!e.$async\n };\n }\n function S(e) {\n var t = n[e];\n return void 0 === t && (t = n[e] = u.length, u[t] = e), \"pattern\" + t;\n }\n function x(e) {\n switch (typeof e) {\n case \"boolean\":\n case \"number\":\n return \"\" + e;\n case \"string\":\n return T.toQuotedString(e);\n case \"object\":\n var t, n;\n return null === e ? \"null\" : (t = _(e), void 0 === (n = i[t]) && (n = i[t] = g.length, g[n] = e), \"default\" + n);\n }\n }\n function k(e, t, n, i) {\n if (!1 !== l._opts.validateSchema) {\n var o = e.definition.dependencies;\n if (o && !o.every(function (e) {\n return Object.prototype.hasOwnProperty.call(n, e);\n })) throw new Error(\"parent schema must have all required keywords: \" + o.join(\",\"));\n o = e.definition.validateSchema;\n if (o) if (!o(t)) {\n o = \"keyword schema is invalid: \" + l.errorsText(o.errors);\n if (\"log\" != l._opts.validateSchema) throw new Error(o);\n l.logger.error(o);\n }\n }\n var r,\n o = e.definition.compile,\n s = e.definition.inline,\n a = e.definition.macro;\n if (o) r = o.call(l, t, n, i);else if (a) r = a.call(l, t, n, i), !1 !== c.validateSchema && l.validateSchema(r, !0);else if (s) r = s.call(l, i, e.keyword, t, n);else if (!(r = e.definition.validate)) return;\n if (void 0 === r) throw new Error('custom keyword \"' + e.keyword + '\"failed to compile');\n o = p.length;\n return {\n code: \"customRule\" + o,\n validate: p[o] = r\n };\n }\n }\n function W(e, t, n) {\n for (var i = 0; i < this._compilations.length; i++) {\n var o = this._compilations[i];\n if (o.schema == e && o.root == t && o.baseId == n) return i;\n }\n return -1;\n }\n function H(e, t) {\n return \"var pattern\" + e + \" = new RegExp(\" + T.toQuotedString(t[e]) + \");\";\n }\n function P(e) {\n return \"var default\" + e + \" = defaults[\" + e + \"];\";\n }\n function G(e, t) {\n return void 0 === t[e] ? \"\" : \"var refVal\" + e + \" = refVal[\" + e + \"];\";\n }\n function F(e) {\n return \"var customRule\" + e + \" = customRules[\" + e + \"];\";\n }\n function V(e, t) {\n if (!e.length) return \"\";\n for (var n = \"\", i = 0; i < e.length; i++) n += t(i, e);\n return n;\n }\n e.exports = M;\n },\n 3969: function (e, t, n) {\n \"use strict\";\n\n var g = n(7533),\n p = n(2303),\n m = n(3724),\n a = n(4293),\n i = n(500);\n function l(e, t, n) {\n var i,\n o,\n r,\n s = this._refs[n];\n if (\"string\" == typeof s) {\n if (!this._refs[s]) return l.call(this, e, t, s);\n s = this._refs[s];\n }\n return (s = s || this._schemas[n]) instanceof a ? u(s.schema, this._opts.inlineRefs) ? s.schema : s.validate || this._compile(s) : ((s = c.call(this, t, n)) && (i = s.schema, t = s.root, r = s.baseId), i instanceof a ? o = i.validate || e.call(this, i.schema, t, void 0, r) : void 0 !== i && (o = u(i, this._opts.inlineRefs) ? i : e.call(this, i, t, void 0, r)), o);\n }\n function c(e, t) {\n var n = g.parse(t),\n i = C(n),\n o = f(this._getId(e.schema));\n if (0 === Object.keys(e.schema).length || i !== o) {\n var i = y(i),\n r = this._refs[i];\n if (\"string\" == typeof r) return function (e, t, n) {\n t = c.call(this, e, t);\n {\n var i, o;\n if (t) return i = t.schema, o = t.baseId, e = t.root, (t = this._getId(i)) && (o = v(o, t)), s.call(this, n, o, i, e);\n }\n }.call(this, e, r, n);\n if (r instanceof a) r.validate || this._compile(r);else {\n if (!((r = this._schemas[i]) instanceof a)) return;\n if (r.validate || this._compile(r), i == y(t)) return {\n schema: r,\n root: e,\n baseId: o\n };\n }\n if (!(e = r).schema) return;\n o = f(this._getId(e.schema));\n }\n return s.call(this, n, o, e.schema, e);\n }\n (e.exports = l).normalizeId = y, l.fullPath = f, l.url = v, l.ids = function (e) {\n var t = y(this._getId(e)),\n c = {\n \"\": t\n },\n h = {\n \"\": f(t, !1)\n },\n d = {},\n u = this;\n return i(e, {\n allKeys: !0\n }, function (e, t, n, i, o, r, s) {\n if (\"\" !== t) {\n var a = u._getId(e),\n l = c[i],\n i = h[i] + \"/\" + o;\n if (void 0 !== s && (i += \"/\" + (\"number\" == typeof s ? s : m.escapeFragment(s))), \"string\" == typeof a) {\n a = l = y(l ? g.resolve(l, a) : a), o = u._refs[a];\n if ((o = \"string\" == typeof o ? u._refs[o] : o) && o.schema) {\n if (!p(e, o.schema)) throw new Error('id \"' + a + '\" resolves to more than one schema');\n } else if (a != y(i)) if (\"#\" == a[0]) {\n if (d[a] && !p(e, d[a])) throw new Error('id \"' + a + '\" resolves to more than one schema');\n d[a] = e;\n } else u._refs[a] = i;\n }\n c[t] = l, h[t] = i;\n }\n }), d;\n }, l.inlineRef = u, l.schema = c;\n var h = m.toHash([\"properties\", \"patternProperties\", \"enum\", \"dependencies\", \"definitions\"]);\n function s(e, t, n, i) {\n if (e.fragment = e.fragment || \"\", \"/\" == e.fragment.slice(0, 1)) {\n for (var o = e.fragment.split(\"/\"), r = 1; r < o.length; r++) {\n var s = o[r];\n if (s) {\n if (void 0 === (n = n[s = m.unescapeFragment(s)])) break;\n h[s] || ((s = this._getId(n)) && (t = v(t, s)), n.$ref && (s = v(t, n.$ref), s = c.call(this, i, s)) && (n = s.schema, i = s.root, t = s.baseId));\n }\n }\n return void 0 !== n && n !== i.schema ? {\n schema: n,\n root: i,\n baseId: t\n } : void 0;\n }\n }\n var d = m.toHash([\"type\", \"format\", \"pattern\", \"maxLength\", \"minLength\", \"maxProperties\", \"minProperties\", \"maxItems\", \"minItems\", \"maximum\", \"minimum\", \"uniqueItems\", \"multipleOf\", \"required\", \"enum\"]);\n function u(e, t) {\n return !1 !== t && (void 0 === t || !0 === t ? function e(t) {\n var n;\n if (Array.isArray(t)) {\n for (var i = 0; i < t.length; i++) if (\"object\" == typeof (n = t[i]) && !e(n)) return !1;\n } else for (var o in t) {\n if (\"$ref\" == o) return !1;\n if (\"object\" == typeof (n = t[o]) && !e(n)) return !1;\n }\n return !0;\n }(e) : t ? function e(t) {\n var n,\n i = 0;\n if (Array.isArray(t)) {\n for (var o = 0; o < t.length; o++) if (\"object\" == typeof (n = t[o]) && (i += e(n)), i == 1 / 0) return 1 / 0;\n } else for (var r in t) {\n if (\"$ref\" == r) return 1 / 0;\n if (d[r]) i++;else if (\"object\" == typeof (n = t[r]) && (i += e(n) + 1), i == 1 / 0) return 1 / 0;\n }\n return i;\n }(e) <= t : void 0);\n }\n function f(e, t) {\n return !1 !== t && (e = y(e)), C(g.parse(e));\n }\n function C(e) {\n return g.serialize(e).split(\"#\")[0] + \"#\";\n }\n var o = /#\\/?$/;\n function y(e) {\n return e ? e.replace(o, \"\") : \"\";\n }\n function v(e, t) {\n return t = y(t), g.resolve(e, t);\n }\n },\n 742: function (e, t, n) {\n \"use strict\";\n\n var r = n(9646),\n s = n(3724).toHash;\n e.exports = function () {\n var i = [{\n type: \"number\",\n rules: [{\n maximum: [\"exclusiveMaximum\"]\n }, {\n minimum: [\"exclusiveMinimum\"]\n }, \"multipleOf\", \"format\"]\n }, {\n type: \"string\",\n rules: [\"maxLength\", \"minLength\", \"pattern\", \"format\"]\n }, {\n type: \"array\",\n rules: [\"maxItems\", \"minItems\", \"items\", \"contains\", \"uniqueItems\"]\n }, {\n type: \"object\",\n rules: [\"maxProperties\", \"minProperties\", \"required\", \"dependencies\", \"propertyNames\", {\n properties: [\"additionalProperties\", \"patternProperties\"]\n }]\n }, {\n rules: [\"$ref\", \"const\", \"enum\", \"not\", \"anyOf\", \"oneOf\", \"allOf\", \"if\"]\n }],\n o = [\"type\", \"$comment\"];\n return i.all = s(o), i.types = s([\"number\", \"integer\", \"string\", \"array\", \"object\", \"boolean\", \"null\"]), i.forEach(function (e) {\n e.rules = e.rules.map(function (e) {\n var t, n;\n return \"object\" == typeof e && (n = e[t = Object.keys(e)[0]], e = t, n.forEach(function (e) {\n o.push(e), i.all[e] = !0;\n })), o.push(e), i.all[e] = {\n keyword: e,\n code: r[e],\n implements: n\n };\n }), i.all.$comment = {\n keyword: \"$comment\",\n code: r.$comment\n }, e.type && (i.types[e.type] = e);\n }), i.keywords = s(o.concat([\"$schema\", \"$id\", \"id\", \"$data\", \"$async\", \"title\", \"description\", \"default\", \"definitions\", \"examples\", \"readOnly\", \"writeOnly\", \"contentMediaType\", \"contentEncoding\", \"additionalItems\", \"then\", \"else\"])), i.custom = {}, i;\n };\n },\n 4293: function (e, t, n) {\n \"use strict\";\n\n var i = n(3724);\n e.exports = function (e) {\n i.copy(e, this);\n };\n },\n 6887: function (e) {\n \"use strict\";\n\n e.exports = function (e) {\n for (var t, n = 0, i = e.length, o = 0; o < i;) n++, 55296 <= (t = e.charCodeAt(o++)) && t <= 56319 && o < i && 56320 == (64512 & e.charCodeAt(o)) && o++;\n return n;\n };\n },\n 3724: function (e, t, n) {\n \"use strict\";\n\n function r(e, t, n, i) {\n var o = i ? \" !== \" : \" === \",\n r = i ? \" || \" : \" && \",\n s = i ? \"!\" : \"\",\n a = i ? \"\" : \"!\";\n switch (e) {\n case \"null\":\n return t + o + \"null\";\n case \"array\":\n return s + \"Array.isArray(\" + t + \")\";\n case \"object\":\n return \"(\" + s + t + r + \"typeof \" + t + o + '\"object\"' + r + a + \"Array.isArray(\" + t + \"))\";\n case \"integer\":\n return \"(typeof \" + t + o + '\"number\"' + r + a + \"(\" + t + \" % 1)\" + r + t + o + t + (n ? r + s + \"isFinite(\" + t + \")\" : \"\") + \")\";\n case \"number\":\n return \"(typeof \" + t + o + '\"' + e + '\"' + (n ? r + s + \"isFinite(\" + t + \")\" : \"\") + \")\";\n default:\n return \"typeof \" + t + o + '\"' + e + '\"';\n }\n }\n e.exports = {\n copy: function (e, t) {\n for (var n in t = t || {}, e) t[n] = e[n];\n return t;\n },\n checkDataType: r,\n checkDataTypes: function (e, t, n) {\n {\n if (1 === e.length) return r(e[0], t, n, !0);\n var i,\n o = \"\",\n e = a(e);\n for (i in e.array && e.object && (o = e.null ? \"(\" : \"(!\" + t + \" || \", o += \"typeof \" + t + ' !== \"object\")', delete e.null, delete e.array, delete e.object), e.number && delete e.integer, e) o += (o ? \" && \" : \"\") + r(i, t, n, !0);\n return o;\n }\n },\n coerceToTypes: function (e, t) {\n {\n if (!Array.isArray(t)) return s[t] ? [t] : \"array\" === e && \"array\" === t ? [\"array\"] : void 0;\n for (var n = [], i = 0; i < t.length; i++) {\n var o = t[i];\n (s[o] || \"array\" === e && \"array\" === o) && (n[n.length] = o);\n }\n return n.length ? n : void 0;\n }\n },\n toHash: a,\n getProperty: h,\n escapeQuotes: l,\n equal: n(2303),\n ucs2length: n(6887),\n varOccurences: function (e, t) {\n t += \"[^0-9]\";\n e = e.match(new RegExp(t, \"g\"));\n return e ? e.length : 0;\n },\n varReplace: function (e, t, n) {\n return t += \"([^0-9])\", n = n.replace(/\\$/g, \"$$$$\"), e.replace(new RegExp(t, \"g\"), n + \"$1\");\n },\n schemaHasRules: function (e, t) {\n if (\"boolean\" == typeof e) return !e;\n for (var n in e) if (t[n]) return !0;\n },\n schemaHasRulesExcept: function (e, t, n) {\n if (\"boolean\" == typeof e) return !e && \"not\" != n;\n for (var i in e) if (i != n && t[i]) return !0;\n },\n schemaUnknownRules: function (e, t) {\n if (\"boolean\" != typeof e) for (var n in e) if (!t[n]) return n;\n },\n toQuotedString: c,\n getPathExpr: function (e, t, n, i) {\n return g(e, n ? \"'/' + \" + t + (i ? \"\" : \".replace(/~/g, '~0').replace(/\\\\//g, '~1')\") : i ? \"'[' + \" + t + \" + ']'\" : \"'[\\\\'' + \" + t + \" + '\\\\']'\");\n },\n getPath: function (e, t, n) {\n n = c(n ? \"/\" + p(t) : h(t));\n return g(e, n);\n },\n getData: function (e, t, n) {\n var i, o, r;\n if (\"\" === e) return \"rootData\";\n if (\"/\" == e[0]) {\n if (!d.test(e)) throw new Error(\"Invalid JSON-pointer: \" + e);\n i = e, o = \"rootData\";\n } else {\n if (!(r = e.match(u))) throw new Error(\"Invalid JSON-pointer: \" + e);\n if (e = +r[1], \"#\" == (i = r[2])) {\n if (t <= e) throw new Error(\"Cannot access property/index \" + e + \" levels up, current level is \" + t);\n return n[t - e];\n }\n if (t < e) throw new Error(\"Cannot access data \" + e + \" levels up, current level is \" + t);\n if (o = \"data\" + (t - e || \"\"), !i) return o;\n }\n for (var s = o, a = i.split(\"/\"), l = 0; l < a.length; l++) {\n var c = a[l];\n c && (o += h(m(c)), s += \" && \" + o);\n }\n return s;\n },\n unescapeFragment: function (e) {\n return m(decodeURIComponent(e));\n },\n unescapeJsonPointer: m,\n escapeFragment: function (e) {\n return encodeURIComponent(p(e));\n },\n escapeJsonPointer: p\n };\n var s = a([\"string\", \"number\", \"integer\", \"boolean\", \"null\"]);\n function a(e) {\n for (var t = {}, n = 0; n < e.length; n++) t[e[n]] = !0;\n return t;\n }\n var i = /^[a-z$_][a-z$_0-9]*$/i,\n o = /'|\\\\/g;\n function h(e) {\n return \"number\" == typeof e ? \"[\" + e + \"]\" : i.test(e) ? \".\" + e : \"['\" + l(e) + \"']\";\n }\n function l(e) {\n return e.replace(o, \"\\\\$&\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/\\f/g, \"\\\\f\").replace(/\\t/g, \"\\\\t\");\n }\n function c(e) {\n return \"'\" + l(e) + \"'\";\n }\n var d = /^\\/(?:[^~]|~0|~1)*$/,\n u = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/;\n function g(e, t) {\n return '\"\"' == e ? t : (e + \" + \" + t).replace(/([^\\\\])' \\+ '/g, \"$1\");\n }\n function p(e) {\n return e.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n }\n function m(e) {\n return e.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n }\n },\n 9394: function (e) {\n \"use strict\";\n\n var l = [\"multipleOf\", \"maximum\", \"exclusiveMaximum\", \"minimum\", \"exclusiveMinimum\", \"maxLength\", \"minLength\", \"pattern\", \"additionalItems\", \"maxItems\", \"minItems\", \"uniqueItems\", \"maxProperties\", \"minProperties\", \"required\", \"additionalProperties\", \"enum\", \"format\", \"const\"];\n e.exports = function (e, t) {\n for (var n = 0; n < t.length; n++) {\n e = JSON.parse(JSON.stringify(e));\n for (var i = t[n].split(\"/\"), o = e, r = 1; r < i.length; r++) o = o[i[r]];\n for (r = 0; r < l.length; r++) {\n var s = l[r],\n a = o[s];\n a && (o[s] = {\n anyOf: [a, {\n $ref: \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\"\n }]\n });\n }\n }\n return e;\n };\n },\n 5868: function (e, t, n) {\n \"use strict\";\n\n n = n(6680);\n e.exports = {\n $id: \"https://github.com/ajv-validator/ajv/blob/master/lib/definition_schema.js\",\n definitions: {\n simpleTypes: n.definitions.simpleTypes\n },\n type: \"object\",\n dependencies: {\n schema: [\"validate\"],\n $data: [\"validate\"],\n statements: [\"inline\"],\n valid: {\n not: {\n required: [\"macro\"]\n }\n }\n },\n properties: {\n type: n.properties.type,\n schema: {\n type: \"boolean\"\n },\n statements: {\n type: \"boolean\"\n },\n dependencies: {\n type: \"array\",\n items: {\n type: \"string\"\n }\n },\n metaSchema: {\n type: \"object\"\n },\n modifying: {\n type: \"boolean\"\n },\n valid: {\n type: \"boolean\"\n },\n $data: {\n type: \"boolean\"\n },\n async: {\n type: \"boolean\"\n },\n errors: {\n anyOf: [{\n type: \"boolean\"\n }, {\n const: \"full\"\n }]\n }\n }\n };\n },\n 1796: function (e) {\n \"use strict\";\n\n e.exports = function (e, t, n) {\n var i,\n o,\n r,\n s,\n a,\n l = \" \",\n c = e.level,\n h = e.dataLevel,\n d = e.schema[t],\n u = e.schemaPath + e.util.getProperty(t),\n g = e.errSchemaPath + \"/\" + t,\n p = !e.opts.allErrors,\n m = \"data\" + (h || \"\"),\n f = e.opts.$data && d && d.$data,\n C = f ? (l += \" var schema\" + c + \" = \" + e.util.getData(d.$data, h, e.dataPathArr) + \"; \", \"schema\" + c) : d,\n y = \"maximum\" == t,\n v = y ? \"exclusiveMaximum\" : \"exclusiveMinimum\",\n I = e.schema[v],\n b = e.opts.$data && I && I.$data,\n A = y ? \"<\" : \">\",\n w = y ? \">\" : \"<\",\n S = void 0;\n if (!f && \"number\" != typeof d && void 0 !== d) throw new Error(t + \" must be number\");\n if (!b && void 0 !== I && \"number\" != typeof I && \"boolean\" != typeof I) throw new Error(v + \" must be number or boolean\");\n b ? (h = e.util.getData(I.$data, h, e.dataPathArr), r = \"exclIsNumber\" + c, s = \"' + \" + (a = \"op\" + c) + \" + '\", S = v, (x = x || []).push(l = l + (\" var schemaExcl\" + c + \" = \" + h + \"; \") + (\" var \" + (i = \"exclusive\" + c) + \"; var \" + (o = \"exclType\" + c) + \" = typeof \" + (h = \"schemaExcl\" + c) + \"; if (\" + o + \" != 'boolean' && \" + o + \" != 'undefined' && \" + o + \" != 'number') { \")), l = \"\", !1 !== e.createErrors ? (l += \" { keyword: '\" + (S || \"_exclusiveLimit\") + \"' , dataPath: (dataPath || '') + \" + e.errorPath + \" , schemaPath: \" + e.util.toQuotedString(g) + \" , params: {} \", !1 !== e.opts.messages && (l += \" , message: '\" + v + \" should be boolean' \"), e.opts.verbose && (l += \" , schema: validate.schema\" + u + \" , parentSchema: validate.schema\" + e.schemaPath + \" , data: \" + m + \" \"), l += \" } \") : l += \" {} \", k = l, l = x.pop(), !e.compositeRule && p ? e.async ? l += \" throw new ValidationError([\" + k + \"]); \" : l += \" validate.errors = [\" + k + \"]; return false; \" : l += \" var err = \" + k + \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \", l += \" } else if ( \", f && (l += \" (\" + C + \" !== undefined && typeof \" + C + \" != 'number') || \"), l += \" \" + o + \" == 'number' ? ( (\" + i + \" = \" + C + \" === undefined || \" + h + \" \" + A + \"= \" + C + \") ? \" + m + \" \" + w + \"= \" + h + \" : \" + m + \" \" + w + \" \" + C + \" ) : ( (\" + i + \" = \" + h + \" === true) ? \" + m + \" \" + w + \"= \" + C + \" : \" + m + \" \" + w + \" \" + C + \" ) || \" + m + \" !== \" + m + \") { var op\" + c + \" = \" + i + \" ? '\" + A + \"' : '\" + A + \"='; \", void 0 === d && (g = e.errSchemaPath + \"/\" + (S = v), C = h, f = b)) : (s = A, (r = \"number\" == typeof I) && f ? (a = \"'\" + s + \"'\", l += \" if ( \", f && (l += \" (\" + C + \" !== undefined && typeof \" + C + \" != 'number') || \"), l += \" ( \" + C + \" === undefined || \" + I + \" \" + A + \"= \" + C + \" ? \" + m + \" \" + w + \"= \" + I + \" : \" + m + \" \" + w + \" \" + C + \" ) || \" + m + \" !== \" + m + \") { \") : (r && void 0 === d ? (i = !0, g = e.errSchemaPath + \"/\" + (S = v), C = I, w += \"=\") : (r && (C = Math[y ? \"min\" : \"max\"](I, d)), I === (!r || C) ? (i = !0, g = e.errSchemaPath + \"/\" + (S = v), w += \"=\") : (i = !1, s += \"=\")), a = \"'\" + s + \"'\", l += \" if ( \", f && (l += \" (\" + C + \" !== undefined && typeof \" + C + \" != 'number') || \"), l += \" \" + m + \" \" + w + \" \" + C + \" || \" + m + \" !== \" + m + \") { \")), S = S || t;\n (x = x || []).push(l), l = \"\", !1 !== e.createErrors ? (l += \" { keyword: '\" + (S || \"_limit\") + \"' , dataPath: (dataPath || '') + \" + e.errorPath + \" , schemaPath: \" + e.util.toQuotedString(g) + \" , params: { comparison: \" + a + \", limit: \" + C + \", exclusive: \" + i + \" } \", !1 !== e.opts.messages && (l = l + \" , message: 'should be \" + s + \" \" + (f ? \"' + \" + C : C + \"'\")), e.opts.verbose && (l = (l += \" , schema: \") + (f ? \"validate.schema\" + u : \"\" + d) + \" , parentSchema: validate.schema\" + e.schemaPath + \" , data: \" + m + \" \"), l += \" } \") : l += \" {} \";\n var x,\n k = l;\n return l = x.pop(), !e.compositeRule && p ? e.async ? l += \" throw new ValidationError([\" + k + \"]); \" : l += \" validate.errors = [\" + k + \"]; return false; \" : l += \" var err = \" + k + \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \", l += \" } \", p && (l += \" else { \"), l;\n };\n },\n 2407: function (e) {\n \"use strict\";\n\n e.exports = function (e, t, n) {\n var i,\n o = \" \",\n r = e.level,\n s = e.dataLevel,\n a = e.schema[t],\n l = e.schemaPath + e.util.getProperty(t),\n c = e.errSchemaPath + \"/\" + t,\n h = !e.opts.allErrors,\n d = \"data\" + (s || \"\"),\n u = e.opts.$data && a && a.$data,\n s = u ? (o += \" var schema\" + r + \" = \" + e.util.getData(a.$data, s, e.dataPathArr) + \"; \", \"schema\" + r) : a;\n if (u || \"number\" == typeof a) return o += \"if ( \", u && (o += \" (\" + s + \" !== undefined && typeof \" + s + \" != 'number') || \"), (r = []).push(o += \" \" + d + \".length \" + (\"maxItems\" == (i = t) ? \">\" : \"<\") + \" \" + s + \") { \"), o = \"\", !1 !== e.createErrors ? (o += \" { keyword: '\" + (i || \"_limitItems\") + \"' , dataPath: (dataPath || '') + \" + e.errorPath + \" , schemaPath: \" + e.util.toQuotedString(c) + \" , params: { limit: \" + s + \" } \", !1 !== e.opts.messages && (o = (o = (o += \" , message: 'should NOT have \") + (\"maxItems\" == t ? \"more\" : \"fewer\") + \" than \") + (u ? \"' + \" + s + \" + '\" : \"\" + a) + \" items' \"), e.opts.verbose && (o = (o += \" , schema: \") + (u ? \"validate.schema\" + l : \"\" + a) + \" , parentSchema: validate.schema\" + e.schemaPath + \" , data: \" + d + \" \"), o += \" } \") : o += \" {} \", i = o, o = r.pop(), !e.compositeRule && h ? e.async ? o += \" throw new ValidationError([\" + i + \"]); \" : o += \" validate.errors = [\" + i + \"]; return false; \" : o += \" var err = \" + i + \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \", o += \"} \", h && (o += \" else { \"), o;\n throw new Error(t + \" must be number\");\n };\n },\n 1250: function (e) {\n \"use strict\";\n\n e.exports = function (e, t, n) {\n var i,\n o = \" \",\n r = e.level,\n s = e.dataLevel,\n a = e.schema[t],\n l = e.schemaPath + e.util.getProperty(t),\n c = e.errSchemaPath + \"/\" + t,\n h = !e.opts.allErrors,\n d = \"data\" + (s || \"\"),\n u = e.opts.$data && a && a.$data,\n s = u ? (o += \" var schema\" + r + \" = \" + e.util.getData(a.$data, s, e.dataPathArr) + \"; \", \"schema\" + r) : a;\n if (u || \"number\" == typeof a) return o += \"if ( \", u && (o += \" (\" + s + \" !== undefined && typeof \" + s + \" != 'number') || \"), !1 === e.opts.unicode ? o += \" \" + d + \".length \" : o += \" ucs2length(\" + d + \") \", (r = []).push(o += \" \" + (\"maxLength\" == (i = t) ? \">\" : \"<\") + \" \" + s + \") { \"), o = \"\", !1 !== e.createErrors ? (o += \" { keyword: '\" + (i || \"_limitLength\") + \"' , dataPath: (dataPath || '') + \" + e.errorPath + \" , schemaPath: \" + e.util.toQuotedString(c) + \" , params: { limit: \" + s + \" } \", !1 !== e.opts.messages && (o = (o = (o += \" , message: 'should NOT be \") + (\"maxLength\" == t ? \"longer\" : \"shorter\") + \" than \") + (u ? \"' + \" + s + \" + '\" : \"\" + a) + \" characters' \"), e.opts.verbose && (o = (o += \" , schema: \") + (u ? \"validate.schema\" + l : \"\" + a) + \" , parentSchema: validate.schema\" + e.schemaPath + \" , data: \" + d + \" \"), o += \" } \") : o += \" {} \", i = o, o = r.pop(), !e.compositeRule && h ? e.async ? o += \" throw new ValidationError([\" + i + \"]); \" : o += \" validate.errors = [\" + i + \"]; return false; \" : o += \" var err = \" + i + \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \", o += \"} \", h && (o += \" else { \"), o;\n throw new Error(t + \" must be number\");\n };\n },\n 2596: function (e) {\n \"use strict\";\n\n e.exports = function (e, t, n) {\n var i,\n o = \" \",\n r = e.level,\n s = e.dataLevel,\n a = e.schema[t],\n l = e.schemaPath + e.util.getProperty(t),\n c = e.errSchemaPath + \"/\" + t,\n h = !e.opts.allErrors,\n d = \"data\" + (s || \"\"),\n u = e.opts.$data && a && a.$data,\n s = u ? (o += \" var schema\" + r + \" = \" + e.util.getData(a.$data, s, e.dataPathArr) + \"; \", \"schema\" + r) : a;\n if (u || \"number\" == typeof a) return o += \"if ( \", u && (o += \" (\" + s + \" !== undefined && typeof \" + s + \" != 'number') || \"), (r = []).push(o += \" Object.keys(\" + d + \").length \" + (\"maxProperties\" == (i = t) ? \">\" : \"<\") + \" \" + s + \") { \"), o = \"\", !1 !== e.createErrors ? (o += \" { keyword: '\" + (i || \"_limitProperties\") + \"' , dataPath: (dataPath || '') + \" + e.errorPath + \" , schemaPath: \" + e.util.toQuotedString(c) + \" , params: { limit: \" + s + \" } \", !1 !== e.opts.messages && (o = (o = (o += \" , message: 'should NOT have \") + (\"maxProperties\" == t ? \"more\" : \"fewer\") + \" than \") + (u ? \"' + \" + s + \" + '\" : \"\" + a) + \" properties' \"), e.opts.verbose && (o = (o += \" , schema: \") + (u ? \"validate.schema\" + l : \"\" + a) + \" , parentSchema: validate.schema\" + e.schemaPath + \" , data: \" + d + \" \"), o += \" } \") : o += \" {} \", i = o, o = r.pop(), !e.compositeRule && h ? e.async ? o += \" throw new ValidationError([\" + i + \"]); \" : o += \" validate.errors = [\" + i + \"]; return false; \" : o += \" var err = \" + i + \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \", o += \"} \", h && (o += \" else { \"), o;\n throw new Error(t + \" must be number\");\n };\n },\n 9486: function (e) {\n \"use strict\";\n\n e.exports = function (e, t, n) {\n var i = \" \",\n o = e.schema[t],\n r = e.schemaPath + e.util.getProperty(t),\n s = e.errSchemaPath + \"/\" + t,\n a = !e.opts.allErrors,\n l = e.util.copy(e),\n c = \"\",\n h = (l.level++, \"valid\" + l.level),\n d = l.baseId,\n u = !0,\n g = o;\n if (g) for (var p, m = -1, f = g.length - 1; m < f;) p = g[m += 1], (e.opts.strictKeywords ? \"object\" == typeof p && 0 < Object.keys(p).length || !1 === p : e.util.schemaHasRules(p, e.RULES.all)) && (u = !1, l.schema = p, l.schemaPath = r + \"[\" + m + \"]\", l.errSchemaPath = s + \"/\" + m, i += \" \" + e.validate(l) + \" \", l.baseId = d, a) && (i += \" if (\" + h + \") { \", c += \"}\");\n return a && (i += u ? \" if (true) { \" : \" \" + c.slice(0, -1) + \" \"), i;\n };\n },\n 5347: function (e) {\n \"use strict\";\n\n e.exports = function (t, e, n) {\n var i = \" \",\n o = t.level,\n r = t.dataLevel,\n s = t.schema[e],\n a = t.schemaPath + t.util.getProperty(e),\n l = t.errSchemaPath + \"/\" + e,\n e = !t.opts.allErrors,\n r = \"data\" + (r || \"\"),\n c = \"valid\" + o,\n o = \"errs__\" + o,\n h = t.util.copy(t),\n d = \"\",\n u = (h.level++, \"valid\" + h.level);\n if (s.every(function (e) {\n return t.opts.strictKeywords ? \"object\" == typeof e && 0 < Object.keys(e).length || !1 === e : t.util.schemaHasRules(e, t.RULES.all);\n })) {\n var g = h.baseId,\n p = (i += \" var \" + o + \" = errors; var \" + c + \" = false; \", t.compositeRule),\n m = (t.compositeRule = h.compositeRule = !0, s);\n if (m) for (var f, C = -1, y = m.length - 1; C < y;) f = m[C += 1], h.schema = f, h.schemaPath = a + \"[\" + C + \"]\", h.errSchemaPath = l + \"/\" + C, i += \" \" + t.validate(h) + \" \", h.baseId = g, i += \" \" + c + \" = \" + c + \" || \" + u + \"; if (!\" + c + \") { \", d += \"}\";\n t.compositeRule = h.compositeRule = p, i += \" \" + d + \" if (!\" + c + \") { var err = \", !1 !== t.createErrors ? (i += \" { keyword: 'anyOf' , dataPath: (dataPath || '') + \" + t.errorPath + \" , schemaPath: \" + t.util.toQuotedString(l) + \" , params: {} \", !1 !== t.opts.messages && (i += \" , message: 'should match some schema in anyOf' \"), t.opts.verbose && (i += \" , schema: validate.schema\" + a + \" , parentSchema: validate.schema\" + t.schemaPath + \" , data: \" + r + \" \"), i += \" } \") : i += \" {} \", i += \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \", !t.compositeRule && e && (t.async ? i += \" throw new ValidationError(vErrors); \" : i += \" validate.errors = vErrors; return false; \"), i += \" } else { errors = \" + o + \"; if (vErrors !== null) { if (\" + o + \") vErrors.length = \" + o + \"; else vErrors = null; } \", t.opts.allErrors && (i += \" } \");\n } else e && (i += \" if (true) { \");\n return i;\n };\n },\n 923: function (e) {\n \"use strict\";\n\n e.exports = function (e, t, n) {\n var i = \" \",\n o = e.schema[t],\n t = e.errSchemaPath + \"/\" + t,\n o = (e.opts.allErrors, e.util.toQuotedString(o));\n return !0 === e.opts.$comment ? i += \" console.log(\" + o + \");\" : \"function\" == typeof e.opts.$comment && (i += \" self._opts.$comment(\" + o + \", \" + e.util.toQuotedString(t) + \", validate.root.schema);\"), i;\n };\n },\n 2617: function (e) {\n \"use strict\";\n\n e.exports = function (e, t, n) {\n var i = \" \",\n o = e.level,\n r = e.dataLevel,\n s = e.schema[t],\n a = e.schemaPath + e.util.getProperty(t),\n t = e.errSchemaPath + \"/\" + t,\n l = !e.opts.allErrors,\n c = \"data\" + (r || \"\"),\n h = \"valid\" + o,\n d = e.opts.$data && s && s.$data,\n s = (d && (i += \" var schema\" + o + \" = \" + e.util.getData(s.$data, r, e.dataPathArr) + \"; \"), d || (i += \" var schema\" + o + \" = validate.schema\" + a + \";\"), []),\n r = (s.push(i += \"var \" + h + \" = equal(\" + c + \", schema\" + o + \"); if (!\" + h + \") { \"), i = \"\", !1 !== e.createErrors ? (i += \" { keyword: 'const' , dataPath: (dataPath || '') + \" + e.errorPath + \" , schemaPath: \" + e.util.toQuotedString(t) + \" , params: { allowedValue: schema\" + o + \" } \", !1 !== e.opts.messages && (i += \" , message: 'should be equal to constant' \"), e.opts.verbose && (i += \" , schema: validate.schema\" + a + \" , parentSchema: validate.schema\" + e.schemaPath + \" , data: \" + c + \" \"), i += \" } \") : i += \" {} \", i),\n i = s.pop();\n return !e.compositeRule && l ? e.async ? i += \" throw new ValidationError([\" + r + \"]); \" : i += \" validate.errors = [\" + r + \"]; return false; \" : i += \" var err = \" + r + \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \", i += \" }\", l && (i += \" else { \"), i;\n };\n },\n 2119: function (e) {\n \"use strict\";\n\n e.exports = function (e, t, n) {\n var i = \" \",\n o = e.level,\n r = e.dataLevel,\n s = e.schema[t],\n a = e.schemaPath + e.util.getProperty(t),\n t = e.errSchemaPath + \"/\" + t,\n l = !e.opts.allErrors,\n r = \"data\" + (r || \"\"),\n c = \"valid\" + o,\n h = \"errs__\" + o,\n d = e.util.copy(e),\n u = (d.level++, \"valid\" + d.level),\n o = \"i\" + o,\n g = d.dataLevel = e.dataLevel + 1,\n p = \"data\" + g,\n m = e.baseId,\n f = e.opts.strictKeywords ? \"object\" == typeof s && 0 < Object.keys(s).length || !1 === s : e.util.schemaHasRules(s, e.RULES.all),\n o = (i += \"var \" + h + \" = errors;var \" + c + \";\", f ? (c = e.compositeRule, e.compositeRule = d.compositeRule = !0, d.schema = s, d.schemaPath = a, d.errSchemaPath = t, i += \" var \" + u + \" = false; for (var \" + o + \" = 0; \" + o + \" < \" + r + \".length; \" + o + \"++) { \", d.errorPath = e.util.getPathExpr(e.errorPath, o, e.opts.jsonPointers, !0), s = r + \"[\" + o + \"]\", d.dataPathArr[g] = o, g = e.validate(d), d.baseId = m, e.util.varOccurences(g, p) < 2 ? i += \" \" + e.util.varReplace(g, p, s) + \" \" : i += \" var \" + p + \" = \" + s + \"; \" + g + \" \", i += \" if (\" + u + \") break; } \", e.compositeRule = d.compositeRule = c, i += \" if (!\" + u + \") {\") : i += \" if (\" + r + \".length == 0) {\", []),\n m = (o.push(i), i = \"\", !1 !== e.createErrors ? (i += \" { keyword: 'contains' , dataPath: (dataPath || '') + \" + e.errorPath + \" , schemaPath: \" + e.util.toQuotedString(t) + \" , params: {} \", !1 !== e.opts.messages && (i += \" , message: 'should contain a valid item' \"), e.opts.verbose && (i += \" , schema: validate.schema\" + a + \" , parentSchema: validate.schema\" + e.schemaPath + \" , data: \" + r + \" \"), i += \" } \") : i += \" {} \", i),\n i = o.pop();\n return !e.compositeRule && l ? e.async ? i += \" throw new ValidationError([\" + m + \"]); \" : i += \" validate.errors = [\" + m + \"]; return false; \" : i += \" var err = \" + m + \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \", i += \" } else { \", f && (i += \" errors = \" + h + \"; if (vErrors !== null) { if (\" + h + \") vErrors.length = \" + h + \"; else vErrors = null; } \"), e.opts.allErrors && (i += \" } \"), i;\n };\n },\n 1793: function (e) {\n \"use strict\";\n\n e.exports = function (e, t, n) {\n var i,\n o,\n r,\n s = \" \",\n a = e.level,\n l = e.dataLevel,\n c = e.schema[t],\n h = e.schemaPath + e.util.getProperty(t),\n d = e.errSchemaPath + \"/\" + t,\n u = !e.opts.allErrors,\n g = \"data\" + (l || \"\"),\n p = \"valid\" + a,\n m = \"errs__\" + a,\n f = e.opts.$data && c && c.$data,\n C = f ? (s += \" var schema\" + a + \" = \" + e.util.getData(c.$data, l, e.dataPathArr) + \"; \", \"schema\" + a) : c,\n y = \"definition\" + a,\n v = this.definition,\n I = \"\";\n if (f && v.$data) {\n var b = \"keywordValidate\" + a,\n A = v.validateSchema;\n s += \" var \" + y + \" = RULES.custom['\" + t + \"'].definition; var \" + b + \" = \" + y + \".validate;\";\n } else {\n if (!(k = e.useCustomRule(this, c, e.schema, e))) return;\n C = \"validate.schema\" + h, b = k.code, i = v.compile, o = v.inline, r = v.macro;\n }\n var w,\n S,\n x,\n k,\n E,\n t = b + \".errors\",\n c = \"i\" + a,\n T = \"ruleErr\" + a,\n R = v.async;\n if (R && !e.async) throw new Error(\"async keyword in sync schema\");\n return o || r || (s += t + \" = null;\"), s += \"var \" + m + \" = errors;var \" + p + \";\", f && v.$data && (I += \"}\", s += \" if (\" + C + \" === undefined) { \" + p + \" = true; } else { \", A) && (I += \"}\", s += \" \" + p + \" = \" + y + \".validateSchema(\" + C + \"); if (\" + p + \") { \"), o ? v.statements ? s += \" \" + k.validate + \" \" : s += \" \" + p + \" = \" + k.validate + \"; \" : r ? (I = \"\", (f = e.util.copy(e)).level++, w = \"valid\" + f.level, f.schema = k.validate, f.schemaPath = \"\", A = e.compositeRule, e.compositeRule = f.compositeRule = !0, y = e.validate(f).replace(/validate\\.schema/g, b), e.compositeRule = f.compositeRule = A, s += \" \" + y) : ((E = E || []).push(s), s = \"\", s += \" \" + b + \".call( \", e.opts.passContext ? s += \"this\" : s += \"self\", i || !1 === v.schema ? s += \" , \" + g + \" \" : s += \" , \" + C + \" , \" + g + \" , validate.schema\" + e.schemaPath + \" \", s += \" , (dataPath || '')\", '\"\"' != e.errorPath && (s += \" + \" + e.errorPath), k = s += \" , \" + (S = l ? \"data\" + (l - 1 || \"\") : \"parentData\") + \" , \" + (x = l ? e.dataPathArr[l] : \"parentDataProperty\") + \" , rootData ) \", s = E.pop(), !1 === v.errors ? (s += \" \" + p + \" = \", R && (s += \"await \"), s += k + \"; \") : s += R ? \" var \" + (t = \"customErrors\" + a) + \" = null; try { \" + p + \" = await \" + k + \"; } catch (e) { \" + p + \" = false; if (e instanceof ValidationError) \" + t + \" = e.errors; else throw e; } \" : \" \" + t + \" = null; \" + p + \" = \" + k + \"; \"), v.modifying && (s += \" if (\" + S + \") \" + g + \" = \" + S + \"[\" + x + \"];\"), s += \"\" + I, v.valid ? u && (s += \" if (true) { \") : (s += \" if ( \", void 0 === v.valid ? s = s + \" !\" + (r ? \"\" + w : p) : s += \" \" + !v.valid + \" \", f = this.keyword, (E = E || []).push(s += \") { \"), (E = E || []).push(s = \"\"), s = \"\", !1 !== e.createErrors ? (s += \" { keyword: '\" + (f || \"custom\") + \"' , dataPath: (dataPath || '') + \" + e.errorPath + \" , schemaPath: \" + e.util.toQuotedString(d) + \" , params: { keyword: '\" + this.keyword + \"' } \", !1 !== e.opts.messages && (s += \" , message: 'should pass \\\"\" + this.keyword + \"\\\" keyword validation' \"), e.opts.verbose && (s += \" , schema: validate.schema\" + h + \" , parentSchema: validate.schema\" + e.schemaPath + \" , data: \" + g + \" \"), s += \" } \") : s += \" {} \", A = s, s = E.pop(), !e.compositeRule && u ? e.async ? s += \" throw new ValidationError([\" + A + \"]); \" : s += \" validate.errors = [\" + A + \"]; return false; \" : s += \" var err = \" + A + \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \", y = s, s = E.pop(), o ? v.errors ? \"full\" != v.errors && (s += \" for (var \" + c + \"=\" + m + \"; \" + c + \" \" + b + \") { \", w = h + \"[\" + b + \"]\", d.schema = x, d.schemaPath = a + \"[\" + b + \"]\", d.errSchemaPath = l + \"/\" + b, d.errorPath = e.util.getPathExpr(e.errorPath, b, e.opts.jsonPointers, !0), d.dataPathArr[p] = b, S = e.validate(d), d.baseId = f, e.util.varOccurences(S, m) < 2 ? i += \" \" + e.util.varReplace(S, m, w) + \" \" : i += \" var \" + m + \" = \" + w + \"; \" + S + \" \", i += \" } \", c) && (i += \" if (\" + g + \") { \", u += \"}\");\n }\n \"object\" == typeof v && (e.opts.strictKeywords ? \"object\" == typeof v && 0 < Object.keys(v).length || !1 === v : e.util.schemaHasRules(v, e.RULES.all)) && (d.schema = v, d.schemaPath = e.schemaPath + \".additionalItems\", d.errSchemaPath = e.errSchemaPath + \"/additionalItems\", i += \" \" + g + \" = true; if (\" + h + \".length > \" + s.length + \") { for (var \" + o + \" = \" + s.length + \"; \" + o + \" < \" + h + \".length; \" + o + \"++) { \", d.errorPath = e.util.getPathExpr(e.errorPath, o, e.opts.jsonPointers, !0), w = h + \"[\" + o + \"]\", d.dataPathArr[p] = o, S = e.validate(d), d.baseId = f, e.util.varOccurences(S, m) < 2 ? i += \" \" + e.util.varReplace(S, m, w) + \" \" : i += \" var \" + m + \" = \" + w + \"; \" + S + \" \", c && (i += \" if (!\" + g + \") break; \"), i += \" } } \", c) && (i += \" if (\" + g + \") { \", u += \"}\");\n } else (e.opts.strictKeywords ? \"object\" == typeof s && 0 < Object.keys(s).length || !1 === s : e.util.schemaHasRules(s, e.RULES.all)) && (d.schema = s, d.schemaPath = a, d.errSchemaPath = l, i += \" for (var \" + o + \" = 0; \" + o + \" < \" + h + \".length; \" + o + \"++) { \", d.errorPath = e.util.getPathExpr(e.errorPath, o, e.opts.jsonPointers, !0), w = h + \"[\" + o + \"]\", d.dataPathArr[p] = o, S = e.validate(d), d.baseId = f, e.util.varOccurences(S, m) < 2 ? i += \" \" + e.util.varReplace(S, m, w) + \" \" : i += \" var \" + m + \" = \" + w + \"; \" + S + \" \", c && (i += \" if (!\" + g + \") break; \"), i += \" }\");\n return c && (i += \" \" + u + \" if (\" + r + \" == errors) {\"), i;\n };\n },\n 6039: function (e) {\n \"use strict\";\n\n e.exports = function (e, t, n) {\n var i = \" \",\n o = e.level,\n r = e.dataLevel,\n s = e.schema[t],\n a = e.schemaPath + e.util.getProperty(t),\n l = e.errSchemaPath + \"/\" + t,\n c = !e.opts.allErrors,\n h = \"data\" + (r || \"\"),\n d = e.opts.$data && s && s.$data,\n r = d ? (i += \" var schema\" + o + \" = \" + e.util.getData(s.$data, r, e.dataPathArr) + \"; \", \"schema\" + o) : s;\n if (!d && \"number\" != typeof s) throw new Error(t + \" must be number\");\n i += \"var division\" + o + \";if (\", d && (i += \" \" + r + \" !== undefined && ( typeof \" + r + \" != 'number' || \"), i += \" (division\" + o + \" = \" + h + \" / \" + r + \", \", e.opts.multipleOfPrecision ? i += \" Math.abs(Math.round(division\" + o + \") - division\" + o + \") > 1e-\" + e.opts.multipleOfPrecision + \" \" : i += \" division\" + o + \" !== parseInt(division\" + o + \") \", i += \" ) \", d && (i += \" ) \");\n t = [], t.push(i += \" ) { \"), i = \"\", !1 !== e.createErrors ? (i += \" { keyword: 'multipleOf' , dataPath: (dataPath || '') + \" + e.errorPath + \" , schemaPath: \" + e.util.toQuotedString(l) + \" , params: { multipleOf: \" + r + \" } \", !1 !== e.opts.messages && (i = i + \" , message: 'should be multiple of \" + (d ? \"' + \" + r : r + \"'\")), e.opts.verbose && (i = (i += \" , schema: \") + (d ? \"validate.schema\" + a : \"\" + s) + \" , parentSchema: validate.schema\" + e.schemaPath + \" , data: \" + h + \" \"), i += \" } \") : i += \" {} \", o = i, i = t.pop();\n return !e.compositeRule && c ? e.async ? i += \" throw new ValidationError([\" + o + \"]); \" : i += \" validate.errors = [\" + o + \"]; return false; \" : i += \" var err = \" + o + \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \", i += \"} \", c && (i += \" else { \"), i;\n };\n },\n 7946: function (e) {\n \"use strict\";\n\n e.exports = function (e, t, n) {\n var i,\n o,\n r = \" \",\n s = e.level,\n a = e.dataLevel,\n l = e.schema[t],\n c = e.schemaPath + e.util.getProperty(t),\n t = e.errSchemaPath + \"/\" + t,\n h = !e.opts.allErrors,\n a = \"data\" + (a || \"\"),\n s = \"errs__\" + s,\n d = e.util.copy(e),\n u = (d.level++, \"valid\" + d.level);\n return (e.opts.strictKeywords ? \"object\" == typeof l && 0 < Object.keys(l).length || !1 === l : e.util.schemaHasRules(l, e.RULES.all)) ? (d.schema = l, d.schemaPath = c, d.errSchemaPath = t, r += \" var \" + s + \" = errors; \", l = e.compositeRule, e.compositeRule = d.compositeRule = !0, d.createErrors = !1, d.opts.allErrors && (o = d.opts.allErrors, d.opts.allErrors = !1), r += \" \" + e.validate(d) + \" \", d.createErrors = !0, o && (d.opts.allErrors = o), e.compositeRule = d.compositeRule = l, (i = i || []).push(r += \" if (\" + u + \") { \"), r = \"\", !1 !== e.createErrors ? (r += \" { keyword: 'not' , dataPath: (dataPath || '') + \" + e.errorPath + \" , schemaPath: \" + e.util.toQuotedString(t) + \" , params: {} \", !1 !== e.opts.messages && (r += \" , message: 'should NOT be valid' \"), e.opts.verbose && (r += \" , schema: validate.schema\" + c + \" , parentSchema: validate.schema\" + e.schemaPath + \" , data: \" + a + \" \"), r += \" } \") : r += \" {} \", o = r, r = i.pop(), !e.compositeRule && h ? e.async ? r += \" throw new ValidationError([\" + o + \"]); \" : r += \" validate.errors = [\" + o + \"]; return false; \" : r += \" var err = \" + o + \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \", r += \" } else { errors = \" + s + \"; if (vErrors !== null) { if (\" + s + \") vErrors.length = \" + s + \"; else vErrors = null; } \", e.opts.allErrors && (r += \" } \")) : (r += \" var err = \", !1 !== e.createErrors ? (r += \" { keyword: 'not' , dataPath: (dataPath || '') + \" + e.errorPath + \" , schemaPath: \" + e.util.toQuotedString(t) + \" , params: {} \", !1 !== e.opts.messages && (r += \" , message: 'should NOT be valid' \"), e.opts.verbose && (r += \" , schema: validate.schema\" + c + \" , parentSchema: validate.schema\" + e.schemaPath + \" , data: \" + a + \" \"), r += \" } \") : r += \" {} \", r += \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \", h && (r += \" if (false) { \")), r;\n };\n },\n 9344: function (e) {\n \"use strict\";\n\n e.exports = function (e, t, n) {\n var i = \" \",\n o = e.level,\n r = e.dataLevel,\n s = e.schema[t],\n a = e.schemaPath + e.util.getProperty(t),\n l = e.errSchemaPath + \"/\" + t,\n t = !e.opts.allErrors,\n r = \"data\" + (r || \"\"),\n c = \"valid\" + o,\n h = \"errs__\" + o,\n d = e.util.copy(e),\n u = \"\",\n g = (d.level++, \"valid\" + d.level),\n p = d.baseId,\n m = \"prevValid\" + o,\n f = \"passingSchemas\" + o,\n o = (i += \"var \" + h + \" = errors , \" + m + \" = false , \" + c + \" = false , \" + f + \" = null; \", e.compositeRule),\n C = (e.compositeRule = d.compositeRule = !0, s);\n if (C) for (var y, v = -1, I = C.length - 1; v < I;) y = C[v += 1], (e.opts.strictKeywords ? \"object\" == typeof y && 0 < Object.keys(y).length || !1 === y : e.util.schemaHasRules(y, e.RULES.all)) ? (d.schema = y, d.schemaPath = a + \"[\" + v + \"]\", d.errSchemaPath = l + \"/\" + v, i += \" \" + e.validate(d) + \" \", d.baseId = p) : i += \" var \" + g + \" = true; \", v && (i += \" if (\" + g + \" && \" + m + \") { \" + c + \" = false; \" + f + \" = [\" + f + \", \" + v + \"]; } else { \", u += \"}\"), i += \" if (\" + g + \") { \" + c + \" = \" + m + \" = true; \" + f + \" = \" + v + \"; }\";\n return e.compositeRule = d.compositeRule = o, i += u + \"if (!\" + c + \") { var err = \", !1 !== e.createErrors ? (i += \" { keyword: 'oneOf' , dataPath: (dataPath || '') + \" + e.errorPath + \" , schemaPath: \" + e.util.toQuotedString(l) + \" , params: { passingSchemas: \" + f + \" } \", !1 !== e.opts.messages && (i += \" , message: 'should match exactly one schema in oneOf' \"), e.opts.verbose && (i += \" , schema: validate.schema\" + a + \" , parentSchema: validate.schema\" + e.schemaPath + \" , data: \" + r + \" \"), i += \" } \") : i += \" {} \", i += \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \", !e.compositeRule && t && (e.async ? i += \" throw new ValidationError(vErrors); \" : i += \" validate.errors = vErrors; return false; \"), i += \"} else { errors = \" + h + \"; if (vErrors !== null) { if (\" + h + \") vErrors.length = \" + h + \"; else vErrors = null; }\", e.opts.allErrors && (i += \" } \"), i;\n };\n },\n 9737: function (e) {\n \"use strict\";\n\n e.exports = function (e, t, n) {\n var i = \" \",\n o = e.level,\n r = e.dataLevel,\n s = e.schema[t],\n a = e.schemaPath + e.util.getProperty(t),\n t = e.errSchemaPath + \"/\" + t,\n l = !e.opts.allErrors,\n c = \"data\" + (r || \"\"),\n h = e.opts.$data && s && s.$data,\n r = h ? (i += \" var schema\" + o + \" = \" + e.util.getData(s.$data, r, e.dataPathArr) + \"; \", \"schema\" + o) : s,\n o = h ? \"(new RegExp(\" + r + \"))\" : e.usePattern(s),\n d = (i += \"if ( \", h && (i += \" (\" + r + \" !== undefined && typeof \" + r + \" != 'string') || \"), []),\n o = (d.push(i += \" !\" + o + \".test(\" + c + \") ) { \"), i = \"\", !1 !== e.createErrors ? (i = (i += \" { keyword: 'pattern' , dataPath: (dataPath || '') + \" + e.errorPath + \" , schemaPath: \" + e.util.toQuotedString(t) + \" , params: { pattern: \") + (h ? \"\" + r : \"\" + e.util.toQuotedString(s)) + \" } \", !1 !== e.opts.messages && (i = (i += \" , message: 'should match pattern \\\"\") + (h ? \"' + \" + r + \" + '\" : \"\" + e.util.escapeQuotes(s)) + \"\\\"' \"), e.opts.verbose && (i = (i = (i += \" , schema: \") + (h ? \"validate.schema\" + a : \"\" + e.util.toQuotedString(s))) + \" , parentSchema: validate.schema\" + e.schemaPath + \" , data: \" + c + \" \"), i += \" } \") : i += \" {} \", i),\n i = d.pop();\n return !e.compositeRule && l ? e.async ? i += \" throw new ValidationError([\" + o + \"]); \" : i += \" validate.errors = [\" + o + \"]; return false; \" : i += \" var err = \" + o + \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \", i += \"} \", l && (i += \" else { \"), i;\n };\n },\n 2537: function (e) {\n \"use strict\";\n\n e.exports = function (e, t, W) {\n var n,\n i = \" \",\n o = e.level,\n r = e.dataLevel,\n H = e.schema[t],\n s = e.schemaPath + e.util.getProperty(t),\n a = e.errSchemaPath + \"/\" + t,\n l = !e.opts.allErrors,\n c = \"data\" + (r || \"\"),\n t = \"errs__\" + o,\n h = e.util.copy(e),\n d = \"\",\n u = (h.level++, \"valid\" + h.level),\n g = \"key\" + o,\n p = \"idx\" + o,\n m = h.dataLevel = e.dataLevel + 1,\n f = \"data\" + m,\n C = \"dataProperties\" + o,\n r = Object.keys(H || {}).filter(O),\n P = e.schema.patternProperties || {},\n y = Object.keys(P).filter(O),\n v = e.schema.additionalProperties,\n G = r.length || y.length,\n F = !1 === v,\n V = \"object\" == typeof v && Object.keys(v).length,\n I = e.opts.removeAdditional,\n b = F || V || I,\n A = e.opts.ownProperties,\n w = e.baseId,\n S = e.schema.required;\n function O(e) {\n return \"__proto__\" !== e;\n }\n if (S && (!e.opts.$data || !S.$data) && S.length < e.opts.loopRequired && (n = e.util.toHash(S)), i += \"var \" + t + \" = errors;var \" + u + \" = true;\", A && (i += \" var \" + C + \" = undefined;\"), b) {\n if (i += A ? \" \" + C + \" = \" + C + \" || Object.keys(\" + c + \"); for (var \" + p + \"=0; \" + p + \"<\" + C + \".length; \" + p + \"++) { var \" + g + \" = \" + C + \"[\" + p + \"]; \" : \" for (var \" + g + \" in \" + c + \") { \", G) {\n if (i += \" var isAdditional\" + o + \" = !(false \", r.length) if (8 < r.length) i += \" || validate.schema\" + s + \".hasOwnProperty(\" + g + \") \";else {\n var Z = r;\n if (Z) for (var D = -1, K = Z.length - 1; D < K;) x = Z[D += 1], i += \" || \" + g + \" == \" + e.util.toQuotedString(x) + \" \";\n }\n if (y.length) {\n var j = y;\n if (j) for (var z = -1, X = j.length - 1; z < X;) N = j[z += 1], i += \" || \" + e.usePattern(N) + \".test(\" + g + \") \";\n }\n i += \" ); if (isAdditional\" + o + \") { \";\n }\n \"all\" == I ? i += \" delete \" + c + \"[\" + g + \"]; \" : (E = e.errorPath, S = \"' + \" + g + \" + '\", e.opts._errorDataPathProperty && (e.errorPath = e.util.getPathExpr(e.errorPath, g, e.opts.jsonPointers)), F ? I ? i += \" delete \" + c + \"[\" + g + \"]; \" : (T = a, a = e.errSchemaPath + \"/additionalProperties\", (_ = _ || []).push(i += \" \" + u + \" = false; \"), i = \"\", !1 !== e.createErrors ? (i += \" { keyword: 'additionalProperties' , dataPath: (dataPath || '') + \" + e.errorPath + \" , schemaPath: \" + e.util.toQuotedString(a) + \" , params: { additionalProperty: '\" + S + \"' } \", !1 !== e.opts.messages && (i += \" , message: '\", e.opts._errorDataPathProperty ? i += \"is an invalid additional property\" : i += \"should NOT have additional properties\", i += \"' \"), e.opts.verbose && (i += \" , schema: false , parentSchema: validate.schema\" + e.schemaPath + \" , data: \" + c + \" \"), i += \" } \") : i += \" {} \", $ = i, i = _.pop(), !e.compositeRule && l ? e.async ? i += \" throw new ValidationError([\" + $ + \"]); \" : i += \" validate.errors = [\" + $ + \"]; return false; \" : i += \" var err = \" + $ + \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \", a = T, l && (i += \" break; \")) : V && (\"failing\" == I ? (i += \" var \" + t + \" = errors; \", b = e.compositeRule, e.compositeRule = h.compositeRule = !0, h.schema = v, h.schemaPath = e.schemaPath + \".additionalProperties\", h.errSchemaPath = e.errSchemaPath + \"/additionalProperties\", h.errorPath = e.opts._errorDataPathProperty ? e.errorPath : e.util.getPathExpr(e.errorPath, g, e.opts.jsonPointers), B = c + \"[\" + g + \"]\", h.dataPathArr[m] = g, M = e.validate(h), h.baseId = w, e.util.varOccurences(M, f) < 2 ? i += \" \" + e.util.varReplace(M, f, B) + \" \" : i += \" var \" + f + \" = \" + B + \"; \" + M + \" \", i += \" if (!\" + u + \") { errors = \" + t + \"; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete \" + c + \"[\" + g + \"]; } \", e.compositeRule = h.compositeRule = b) : (h.schema = v, h.schemaPath = e.schemaPath + \".additionalProperties\", h.errSchemaPath = e.errSchemaPath + \"/additionalProperties\", h.errorPath = e.opts._errorDataPathProperty ? e.errorPath : e.util.getPathExpr(e.errorPath, g, e.opts.jsonPointers), B = c + \"[\" + g + \"]\", h.dataPathArr[m] = g, M = e.validate(h), h.baseId = w, e.util.varOccurences(M, f) < 2 ? i += \" \" + e.util.varReplace(M, f, B) + \" \" : i += \" var \" + f + \" = \" + B + \"; \" + M + \" \", l && (i += \" if (!\" + u + \") break; \"))), e.errorPath = E), G && (i += \" } \"), i += \" } \", l && (i += \" if (\" + u + \") { \", d += \"}\");\n }\n var Y = e.opts.useDefaults && !e.compositeRule;\n if (r.length) {\n var J = r;\n if (J) for (var x, U = -1, Q = J.length - 1; U < Q;) {\n var q,\n k,\n E,\n T,\n R,\n _,\n $,\n L = H[x = J[U += 1]];\n (e.opts.strictKeywords ? \"object\" == typeof L && 0 < Object.keys(L).length || !1 === L : e.util.schemaHasRules(L, e.RULES.all)) && (B = c + (R = e.util.getProperty(x)), q = Y && void 0 !== L.default, h.schema = L, h.schemaPath = s + R, h.errSchemaPath = a + \"/\" + e.util.escapeFragment(x), h.errorPath = e.util.getPath(e.errorPath, x, e.opts.jsonPointers), h.dataPathArr[m] = e.util.toQuotedString(x), M = e.validate(h), h.baseId = w, e.util.varOccurences(M, f) < 2 ? (M = e.util.varReplace(M, f, B), k = B) : i += \" var \" + (k = f) + \" = \" + B + \"; \", q ? i += \" \" + M + \" \" : (n && n[x] ? (i += \" if ( \" + k + \" === undefined \", A && (i += \" || ! Object.prototype.hasOwnProperty.call(\" + c + \", '\" + e.util.escapeQuotes(x) + \"') \"), i += \") { \" + u + \" = false; \", E = e.errorPath, T = a, R = e.util.escapeQuotes(x), e.opts._errorDataPathProperty && (e.errorPath = e.util.getPath(E, x, e.opts.jsonPointers)), a = e.errSchemaPath + \"/required\", (_ = _ || []).push(i), i = \"\", !1 !== e.createErrors ? (i += \" { keyword: 'required' , dataPath: (dataPath || '') + \" + e.errorPath + \" , schemaPath: \" + e.util.toQuotedString(a) + \" , params: { missingProperty: '\" + R + \"' } \", !1 !== e.opts.messages && (i += \" , message: '\", e.opts._errorDataPathProperty ? i += \"is a required property\" : i += \"should have required property \\\\'\" + R + \"\\\\'\", i += \"' \"), e.opts.verbose && (i += \" , schema: validate.schema\" + s + \" , parentSchema: validate.schema\" + e.schemaPath + \" , data: \" + c + \" \"), i += \" } \") : i += \" {} \", $ = i, i = _.pop(), !e.compositeRule && l ? e.async ? i += \" throw new ValidationError([\" + $ + \"]); \" : i += \" validate.errors = [\" + $ + \"]; return false; \" : i += \" var err = \" + $ + \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \", a = T, e.errorPath = E, i += \" } else { \") : l ? (i += \" if ( \" + k + \" === undefined \", A && (i += \" || ! Object.prototype.hasOwnProperty.call(\" + c + \", '\" + e.util.escapeQuotes(x) + \"') \"), i += \") { \" + u + \" = true; } else { \") : (i += \" if (\" + k + \" !== undefined \", A && (i += \" && Object.prototype.hasOwnProperty.call(\" + c + \", '\" + e.util.escapeQuotes(x) + \"') \"), i += \" ) { \"), i += \" \" + M + \" } \")), l && (i += \" if (\" + u + \") { \", d += \"}\");\n }\n }\n if (y.length) {\n var ee = y;\n if (ee) for (var N, te = -1, ne = ee.length - 1; te < ne;) {\n var B,\n M,\n L = P[N = ee[te += 1]];\n (e.opts.strictKeywords ? \"object\" == typeof L && 0 < Object.keys(L).length || !1 === L : e.util.schemaHasRules(L, e.RULES.all)) && (h.schema = L, h.schemaPath = e.schemaPath + \".patternProperties\" + e.util.getProperty(N), h.errSchemaPath = e.errSchemaPath + \"/patternProperties/\" + e.util.escapeFragment(N), i = (i += A ? \" \" + C + \" = \" + C + \" || Object.keys(\" + c + \"); for (var \" + p + \"=0; \" + p + \"<\" + C + \".length; \" + p + \"++) { var \" + g + \" = \" + C + \"[\" + p + \"]; \" : \" for (var \" + g + \" in \" + c + \") { \") + \" if (\" + e.usePattern(N) + \".test(\" + g + \")) { \", h.errorPath = e.util.getPathExpr(e.errorPath, g, e.opts.jsonPointers), B = c + \"[\" + g + \"]\", h.dataPathArr[m] = g, M = e.validate(h), h.baseId = w, e.util.varOccurences(M, f) < 2 ? i += \" \" + e.util.varReplace(M, f, B) + \" \" : i += \" var \" + f + \" = \" + B + \"; \" + M + \" \", l && (i += \" if (!\" + u + \") break; \"), i += \" } \", l && (i += \" else \" + u + \" = true; \"), i += \" } \", l) && (i += \" if (\" + u + \") { \", d += \"}\");\n }\n }\n return l && (i += \" \" + d + \" if (\" + t + \" == errors) {\"), i;\n };\n },\n 2127: function (e) {\n \"use strict\";\n\n e.exports = function (e, t, n) {\n var i,\n o,\n r,\n s,\n a,\n l,\n c,\n h = \" \",\n d = e.level,\n u = e.dataLevel,\n g = e.schema[t],\n p = e.schemaPath + e.util.getProperty(t),\n t = e.errSchemaPath + \"/\" + t,\n m = !e.opts.allErrors,\n u = \"data\" + (u || \"\"),\n f = \"errs__\" + d,\n C = e.util.copy(e),\n y = (C.level++, \"valid\" + C.level);\n return h += \"var \" + f + \" = errors;\", (e.opts.strictKeywords ? \"object\" == typeof g && 0 < Object.keys(g).length || !1 === g : e.util.schemaHasRules(g, e.RULES.all)) && (C.schema = g, C.schemaPath = p, C.errSchemaPath = t, g = \"idx\" + d, o = \"i\" + d, r = \"' + \" + (i = \"key\" + d) + \" + '\", s = \"data\" + (C.dataLevel = e.dataLevel + 1), c = \"dataProperties\" + d, l = e.opts.ownProperties, a = e.baseId, l && (h += \" var \" + c + \" = undefined; \"), h = h + (l ? \" \" + c + \" = \" + c + \" || Object.keys(\" + u + \"); for (var \" + g + \"=0; \" + g + \"<\" + c + \".length; \" + g + \"++) { var \" + i + \" = \" + c + \"[\" + g + \"]; \" : \" for (var \" + i + \" in \" + u + \") { \") + \" var startErrs\" + d + \" = errors; \", l = i, c = e.compositeRule, e.compositeRule = C.compositeRule = !0, g = e.validate(C), C.baseId = a, e.util.varOccurences(g, s) < 2 ? h += \" \" + e.util.varReplace(g, s, l) + \" \" : h += \" var \" + s + \" = \" + l + \"; \" + g + \" \", e.compositeRule = C.compositeRule = c, h += \" if (!\" + y + \") { for (var \" + o + \"=startErrs\" + d + \"; \" + o + \"= e.opts.loopRequired,\n v = e.opts.ownProperties;\n if (t) {\n if (i += \" var missing\" + o + \"; \", s) {\n d || (i += \" var \" + r + \" = validate.schema\" + a + \"; \");\n var I = \"' + \" + (k = \"schema\" + o + \"[\" + (w = \"i\" + o) + \"]\") + \" + '\";\n e.opts._errorDataPathProperty && (e.errorPath = e.util.getPathExpr(y, k, e.opts.jsonPointers)), i += \" var \" + h + \" = true; \", d && (i += \" if (schema\" + o + \" === undefined) \" + h + \" = true; else if (!Array.isArray(schema\" + o + \")) \" + h + \" = false; else {\"), i += \" for (var \" + w + \" = 0; \" + w + \" < \" + r + \".length; \" + w + \"++) { \" + h + \" = \" + c + \"[\" + r + \"[\" + w + \"]] !== undefined \", v && (i += \" && Object.prototype.hasOwnProperty.call(\" + c + \", \" + r + \"[\" + w + \"]) \"), i += \"; if (!\" + h + \") break; } \", d && (i += \" } \");\n (x = x || []).push(i += \" if (!\" + h + \") { \"), i = \"\", !1 !== e.createErrors ? (i += \" { keyword: 'required' , dataPath: (dataPath || '') + \" + e.errorPath + \" , schemaPath: \" + e.util.toQuotedString(l) + \" , params: { missingProperty: '\" + I + \"' } \", !1 !== e.opts.messages && (i += \" , message: '\", e.opts._errorDataPathProperty ? i += \"is a required property\" : i += \"should have required property \\\\'\" + I + \"\\\\'\", i += \"' \"), e.opts.verbose && (i += \" , schema: validate.schema\" + a + \" , parentSchema: validate.schema\" + e.schemaPath + \" , data: \" + c + \" \"), i += \" } \") : i += \" {} \";\n var b = i,\n i = x.pop();\n } else {\n i += \" if ( \";\n var A = u;\n if (A) for (var w = -1, S = A.length - 1; w < S;) T = A[w += 1], w && (i += \" || \"), i += \" ( ( \" + (L = c + ($ = e.util.getProperty(T))) + \" === undefined \", v && (i += \" || ! Object.prototype.hasOwnProperty.call(\" + c + \", '\" + e.util.escapeQuotes(T) + \"') \"), i += \") && (missing\" + o + \" = \" + e.util.toQuotedString(e.opts.jsonPointers ? T : $) + \") ) \";\n i += \") { \";\n I = \"' + \" + (k = \"missing\" + o) + \" + '\";\n e.opts._errorDataPathProperty && (e.errorPath = e.opts.jsonPointers ? e.util.getPathExpr(y, k, !0) : y + \" + \" + k);\n (x = x || []).push(i), i = \"\", !1 !== e.createErrors ? (i += \" { keyword: 'required' , dataPath: (dataPath || '') + \" + e.errorPath + \" , schemaPath: \" + e.util.toQuotedString(l) + \" , params: { missingProperty: '\" + I + \"' } \", !1 !== e.opts.messages && (i += \" , message: '\", e.opts._errorDataPathProperty ? i += \"is a required property\" : i += \"should have required property \\\\'\" + I + \"\\\\'\", i += \"' \"), e.opts.verbose && (i += \" , schema: validate.schema\" + a + \" , parentSchema: validate.schema\" + e.schemaPath + \" , data: \" + c + \" \"), i += \" } \") : i += \" {} \";\n var x,\n b = i;\n i = x.pop();\n }\n !e.compositeRule && t ? e.async ? i += \" throw new ValidationError([\" + b + \"]); \" : i += \" validate.errors = [\" + b + \"]; return false; \" : i += \" var err = \" + b + \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \", i += \" } else { \";\n } else if (s) {\n d || (i += \" var \" + r + \" = validate.schema\" + a + \"; \");\n var k,\n I = \"' + \" + (k = \"schema\" + o + \"[\" + (w = \"i\" + o) + \"]\") + \" + '\";\n e.opts._errorDataPathProperty && (e.errorPath = e.util.getPathExpr(y, k, e.opts.jsonPointers)), d && (i += \" if (\" + r + \" && !Array.isArray(\" + r + \")) { var err = \", !1 !== e.createErrors ? (i += \" { keyword: 'required' , dataPath: (dataPath || '') + \" + e.errorPath + \" , schemaPath: \" + e.util.toQuotedString(l) + \" , params: { missingProperty: '\" + I + \"' } \", !1 !== e.opts.messages && (i += \" , message: '\", e.opts._errorDataPathProperty ? i += \"is a required property\" : i += \"should have required property \\\\'\" + I + \"\\\\'\", i += \"' \"), e.opts.verbose && (i += \" , schema: validate.schema\" + a + \" , parentSchema: validate.schema\" + e.schemaPath + \" , data: \" + c + \" \"), i += \" } \") : i += \" {} \", i += \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (\" + r + \" !== undefined) { \"), i += \" for (var \" + w + \" = 0; \" + w + \" < \" + r + \".length; \" + w + \"++) { if (\" + c + \"[\" + r + \"[\" + w + \"]] === undefined \", v && (i += \" || ! Object.prototype.hasOwnProperty.call(\" + c + \", \" + r + \"[\" + w + \"]) \"), i += \") { var err = \", !1 !== e.createErrors ? (i += \" { keyword: 'required' , dataPath: (dataPath || '') + \" + e.errorPath + \" , schemaPath: \" + e.util.toQuotedString(l) + \" , params: { missingProperty: '\" + I + \"' } \", !1 !== e.opts.messages && (i += \" , message: '\", e.opts._errorDataPathProperty ? i += \"is a required property\" : i += \"should have required property \\\\'\" + I + \"\\\\'\", i += \"' \"), e.opts.verbose && (i += \" , schema: validate.schema\" + a + \" , parentSchema: validate.schema\" + e.schemaPath + \" , data: \" + c + \" \"), i += \" } \") : i += \" {} \", i += \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } \", d && (i += \" } \");\n } else {\n var E = u;\n if (E) for (var T, R = -1, _ = E.length - 1; R < _;) {\n T = E[R += 1];\n var $ = e.util.getProperty(T),\n I = e.util.escapeQuotes(T),\n L = c + $;\n e.opts._errorDataPathProperty && (e.errorPath = e.util.getPath(y, T, e.opts.jsonPointers)), i += \" if ( \" + L + \" === undefined \", v && (i += \" || ! Object.prototype.hasOwnProperty.call(\" + c + \", '\" + e.util.escapeQuotes(T) + \"') \"), i += \") { var err = \", !1 !== e.createErrors ? (i += \" { keyword: 'required' , dataPath: (dataPath || '') + \" + e.errorPath + \" , schemaPath: \" + e.util.toQuotedString(l) + \" , params: { missingProperty: '\" + I + \"' } \", !1 !== e.opts.messages && (i += \" , message: '\", e.opts._errorDataPathProperty ? i += \"is a required property\" : i += \"should have required property \\\\'\" + I + \"\\\\'\", i += \"' \"), e.opts.verbose && (i += \" , schema: validate.schema\" + a + \" , parentSchema: validate.schema\" + e.schemaPath + \" , data: \" + c + \" \"), i += \" } \") : i += \" {} \", i += \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } \";\n }\n }\n e.errorPath = y;\n } else t && (i += \" if (true) {\");\n return i;\n };\n },\n 1985: function (e) {\n \"use strict\";\n\n e.exports = function (e, t, n) {\n var i,\n o = \" \",\n r = e.level,\n s = e.dataLevel,\n a = e.schema[t],\n l = e.schemaPath + e.util.getProperty(t),\n t = e.errSchemaPath + \"/\" + t,\n c = !e.opts.allErrors,\n h = \"data\" + (s || \"\"),\n d = \"valid\" + r,\n u = e.opts.$data && a && a.$data,\n s = u ? (o += \" var schema\" + r + \" = \" + e.util.getData(a.$data, s, e.dataPathArr) + \"; \", \"schema\" + r) : a;\n return (a || u) && !1 !== e.opts.uniqueItems ? (u && (o += \" var \" + d + \"; if (\" + s + \" === false || \" + s + \" === undefined) \" + d + \" = true; else if (typeof \" + s + \" != 'boolean') \" + d + \" = false; else { \"), o += \" var i = \" + h + \".length , \" + d + \" = true , j; if (i > 1) { \", r = e.schema.items && e.schema.items.type, s = Array.isArray(r), !r || \"object\" == r || \"array\" == r || s && (0 <= r.indexOf(\"object\") || 0 <= r.indexOf(\"array\")) ? o += \" outer: for (;i--;) { for (j = i; j--;) { if (equal(\" + h + \"[i], \" + h + \"[j])) { \" + d + \" = false; break outer; } } } \" : (o = (o += \" var itemIndices = {}, item; for (;i--;) { var item = \" + h + \"[i]; \") + \" if (\" + e.util[\"checkDataType\" + (s ? \"s\" : \"\")](r, \"item\", e.opts.strictNumbers, !0) + \") continue; \", s && (o += \" if (typeof item == 'string') item = '\\\"' + item; \"), o += \" if (typeof itemIndices[item] == 'number') { \" + d + \" = false; j = itemIndices[item]; break; } itemIndices[item] = i; } \"), o += \" } \", u && (o += \" } \"), (i = i || []).push(o += \" if (!\" + d + \") { \"), o = \"\", !1 !== e.createErrors ? (o += \" { keyword: 'uniqueItems' , dataPath: (dataPath || '') + \" + e.errorPath + \" , schemaPath: \" + e.util.toQuotedString(t) + \" , params: { i: i, j: j } \", !1 !== e.opts.messages && (o += \" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' \"), e.opts.verbose && (o = (o += \" , schema: \") + (u ? \"validate.schema\" + l : \"\" + a) + \" , parentSchema: validate.schema\" + e.schemaPath + \" , data: \" + h + \" \"), o += \" } \") : o += \" {} \", r = o, o = i.pop(), !e.compositeRule && c ? e.async ? o += \" throw new ValidationError([\" + r + \"]); \" : o += \" validate.errors = [\" + r + \"]; return false; \" : o += \" var err = \" + r + \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \", o += \" } \", c && (o += \" else { \")) : c && (o += \" if (true) { \"), o;\n };\n },\n 1869: function (e) {\n \"use strict\";\n\n e.exports = function (i, e, W) {\n var t = \"\",\n n = !0 === i.schema.$async,\n o = i.util.schemaHasRulesExcept(i.schema, i.RULES.all, \"$ref\"),\n r = i.self._getId(i.schema);\n if (i.opts.strictKeywords) {\n var s = i.util.schemaUnknownRules(i.schema, i.RULES.keywords);\n if (s) {\n s = \"unknown keyword: \" + s;\n if (\"log\" !== i.opts.strictKeywords) throw new Error(s);\n i.logger.warn(s);\n }\n }\n if (i.isTop && (t += \" var validate = \", n && (i.async = !0, t += \"async \"), t += \"function(data, dataPath, parentData, parentDataProperty, rootData) { 'use strict'; \", r) && (i.opts.sourceCode || i.opts.processCode) && (t += \" /*# sourceURL=\" + r + \" */ \"), \"boolean\" == typeof i.schema || !o && !i.schema.$ref) l = i.level, c = i.dataLevel, R = i.schema[e = \"false schema\"], I = i.schemaPath + i.util.getProperty(e), b = i.errSchemaPath + \"/\" + e, g = !i.opts.allErrors, h = \"data\" + (c || \"\"), u = \"valid\" + l, !1 === i.schema ? (i.isTop ? g = !0 : t += \" var \" + u + \" = false; \", (B = B || []).push(t), t = \"\", !1 !== i.createErrors ? (t += \" { keyword: 'false schema' , dataPath: (dataPath || '') + \" + i.errorPath + \" , schemaPath: \" + i.util.toQuotedString(b) + \" , params: {} \", !1 !== i.opts.messages && (t += \" , message: 'boolean schema is false' \"), i.opts.verbose && (t += \" , schema: false , parentSchema: validate.schema\" + i.schemaPath + \" , data: \" + h + \" \"), t += \" } \") : t += \" {} \", E = t, t = B.pop(), !i.compositeRule && g ? i.async ? t += \" throw new ValidationError([\" + E + \"]); \" : t += \" validate.errors = [\" + E + \"]; return false; \" : t += \" var err = \" + E + \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \") : i.isTop ? t += n ? \" return data; \" : \" validate.errors = null; return true; \" : t += \" var \" + u + \" = true; \", i.isTop && (t += \" }; return validate; \");else {\n if (i.isTop) {\n var a = i.isTop,\n l = i.level = 0,\n c = i.dataLevel = 0,\n h = \"data\";\n if (i.rootId = i.resolve.fullPath(i.self._getId(i.root.schema)), i.baseId = i.baseId || i.rootId, delete i.isTop, i.dataPathArr = [\"\"], void 0 !== i.schema.default && i.opts.useDefaults && i.opts.strictDefaults) {\n var d = \"default is ignored in the schema root\";\n if (\"log\" !== i.opts.strictDefaults) throw new Error(d);\n i.logger.warn(d);\n }\n t = (t += \" var vErrors = null; \") + \" var errors = 0; \" + \" if (rootData === undefined) rootData = data; \";\n } else {\n l = i.level, h = \"data\" + ((c = i.dataLevel) || \"\");\n if (r && (i.baseId = i.resolve.url(i.baseId, r)), n && !i.async) throw new Error(\"async schema in sync schema\");\n t += \" var errs_\" + l + \" = errors;\";\n }\n var u = \"valid\" + l,\n g = !i.opts.allErrors,\n p = \"\",\n m = \"\",\n f = i.schema.type,\n C = Array.isArray(f);\n if (f && i.opts.nullable && !0 === i.schema.nullable && (C ? -1 == f.indexOf(\"null\") && (f = f.concat(\"null\")) : \"null\" != f && (f = [f, \"null\"], C = !0)), C && 1 == f.length && (f = f[0], C = !1), i.schema.$ref && o) {\n if (\"fail\" == i.opts.extendRefs) throw new Error('$ref: validation keywords used in schema at path \"' + i.errSchemaPath + '\" (see option extendRefs)');\n !0 !== i.opts.extendRefs && (o = !1, i.logger.warn('$ref: keywords ignored in schema at path \"' + i.errSchemaPath + '\"'));\n }\n if (i.schema.$comment && i.opts.$comment && (t += \" \" + i.RULES.all.$comment.code(i, \"$comment\")), f) {\n i.opts.coerceTypes && (y = i.util.coerceToTypes(i.opts.coerceTypes, f));\n var y,\n v = i.RULES.types[f];\n if (y || C || !0 === v || v && !z(v)) {\n var I = i.schemaPath + \".type\",\n b = i.errSchemaPath + \"/type\",\n I = i.schemaPath + \".type\",\n b = i.errSchemaPath + \"/type\";\n if (t += \" if (\" + i.util[C ? \"checkDataTypes\" : \"checkDataType\"](f, h, i.opts.strictNumbers, !0) + \") { \", y) {\n var A = \"dataType\" + l,\n w = \"coerced\" + l,\n S = (t += \" var \" + A + \" = typeof \" + h + \"; var \" + w + \" = undefined; \", \"array\" == i.opts.coerceTypes && (t += \" if (\" + A + \" == 'object' && Array.isArray(\" + h + \") && \" + h + \".length == 1) { \" + h + \" = \" + h + \"[0]; \" + A + \" = typeof \" + h + \"; if (\" + i.util.checkDataType(i.schema.type, h, i.opts.strictNumbers) + \") \" + w + \" = \" + h + \"; } \"), t += \" if (\" + w + \" !== undefined) ; \", y);\n if (S) for (var x, k = -1, H = S.length - 1; k < H;) \"string\" == (x = S[k += 1]) ? t += \" else if (\" + A + \" == 'number' || \" + A + \" == 'boolean') \" + w + \" = '' + \" + h + \"; else if (\" + h + \" === null) \" + w + \" = ''; \" : \"number\" == x || \"integer\" == x ? (t += \" else if (\" + A + \" == 'boolean' || \" + h + \" === null || (\" + A + \" == 'string' && \" + h + \" && \" + h + \" == +\" + h + \" \", \"integer\" == x && (t += \" && !(\" + h + \" % 1)\"), t += \")) \" + w + \" = +\" + h + \"; \") : \"boolean\" == x ? t += \" else if (\" + h + \" === 'false' || \" + h + \" === 0 || \" + h + \" === null) \" + w + \" = false; else if (\" + h + \" === 'true' || \" + h + \" === 1) \" + w + \" = true; \" : \"null\" == x ? t += \" else if (\" + h + \" === '' || \" + h + \" === 0 || \" + h + \" === false) \" + w + \" = null; \" : \"array\" == i.opts.coerceTypes && \"array\" == x && (t += \" else if (\" + A + \" == 'string' || \" + A + \" == 'number' || \" + A + \" == 'boolean' || \" + h + \" == null) \" + w + \" = [\" + h + \"]; \");\n (B = B || []).push(t += \" else { \"), t = \"\", !1 !== i.createErrors ? (t = (t += \" { keyword: 'type' , dataPath: (dataPath || '') + \" + i.errorPath + \" , schemaPath: \" + i.util.toQuotedString(b) + \" , params: { type: '\") + (C ? \"\" + f.join(\",\") : \"\" + f) + \"' } \", !1 !== i.opts.messages && (t = (t += \" , message: 'should be \") + (C ? \"\" + f.join(\",\") : \"\" + f) + \"' \"), i.opts.verbose && (t += \" , schema: validate.schema\" + I + \" , parentSchema: validate.schema\" + i.schemaPath + \" , data: \" + h + \" \"), t += \" } \") : t += \" {} \";\n var E = t,\n s = (t = B.pop(), !i.compositeRule && g ? i.async ? t += \" throw new ValidationError([\" + E + \"]); \" : t += \" validate.errors = [\" + E + \"]; return false; \" : t += \" var err = \" + E + \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \", c ? \"data\" + (c - 1 || \"\") : \"parentData\");\n t = t + (\" } if (\" + w + \" !== undefined) { \") + (\" \" + h + \" = \" + w + \"; \"), c || (t += \"if (\" + s + \" !== undefined)\"), t += \" \" + s + \"[\" + (c ? i.dataPathArr[c] : \"parentDataProperty\") + \"] = \" + w + \"; } \";\n } else {\n E = ((B = B || []).push(t), t = \"\", !1 !== i.createErrors ? (t = (t += \" { keyword: 'type' , dataPath: (dataPath || '') + \" + i.errorPath + \" , schemaPath: \" + i.util.toQuotedString(b) + \" , params: { type: '\") + (C ? \"\" + f.join(\",\") : \"\" + f) + \"' } \", !1 !== i.opts.messages && (t = (t += \" , message: 'should be \") + (C ? \"\" + f.join(\",\") : \"\" + f) + \"' \"), i.opts.verbose && (t += \" , schema: validate.schema\" + I + \" , parentSchema: validate.schema\" + i.schemaPath + \" , data: \" + h + \" \"), t += \" } \") : t += \" {} \", t);\n t = B.pop(), !i.compositeRule && g ? i.async ? t += \" throw new ValidationError([\" + E + \"]); \" : t += \" validate.errors = [\" + E + \"]; return false; \" : t += \" var err = \" + E + \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \";\n }\n t += \" } \";\n }\n }\n if (i.schema.$ref && !o) t += \" \" + i.RULES.all.$ref.code(i, \"$ref\") + \" \", g && (t = (t += \" } if (errors === \") + (a ? \"0\" : \"errs_\" + l) + \") { \", m += \"}\");else {\n var T = i.RULES;\n if (T) for (var P = -1, G = T.length - 1; P < G;) if (z(v = T[P += 1])) {\n if (v.type && (t += \" if (\" + i.util.checkDataType(v.type, h, i.opts.strictNumbers) + \") { \"), i.opts.useDefaults) if (\"object\" == v.type && i.schema.properties) {\n var R = i.schema.properties,\n _ = Object.keys(R);\n if (_) for (var F, V = -1, O = _.length - 1; V < O;) if (void 0 !== (N = R[F = _[V += 1]]).default) {\n var $ = h + i.util.getProperty(F);\n if (i.compositeRule) {\n if (i.opts.strictDefaults) {\n d = \"default is ignored for: \" + $;\n if (\"log\" !== i.opts.strictDefaults) throw new Error(d);\n i.logger.warn(d);\n }\n } else t += \" if (\" + $ + \" === undefined \", \"empty\" == i.opts.useDefaults && (t += \" || \" + $ + \" === null || \" + $ + \" === '' \"), t += \" ) \" + $ + \" = \", \"shared\" == i.opts.useDefaults ? t += \" \" + i.useDefault(N.default) + \" \" : t += \" \" + JSON.stringify(N.default) + \" \", t += \"; \";\n }\n } else if (\"array\" == v.type && Array.isArray(i.schema.items)) {\n var L = i.schema.items;\n if (L) for (var N, k = -1, Z = L.length - 1; k < Z;) if (void 0 !== (N = L[k += 1]).default) {\n $ = h + \"[\" + k + \"]\";\n if (i.compositeRule) {\n if (i.opts.strictDefaults) {\n d = \"default is ignored for: \" + $;\n if (\"log\" !== i.opts.strictDefaults) throw new Error(d);\n i.logger.warn(d);\n }\n } else t += \" if (\" + $ + \" === undefined \", \"empty\" == i.opts.useDefaults && (t += \" || \" + $ + \" === null || \" + $ + \" === '' \"), t += \" ) \" + $ + \" = \", \"shared\" == i.opts.useDefaults ? t += \" \" + i.useDefault(N.default) + \" \" : t += \" \" + JSON.stringify(N.default) + \" \", t += \"; \";\n }\n }\n var B,\n D = v.rules;\n if (D) for (var M, K = -1, j = D.length - 1; K < j;) X(M = D[K += 1]) && (M = M.code(i, M.keyword, v.type)) && (t += \" \" + M + \" \", g) && (p += \"}\");\n g && (t += \" \" + p + \" \", p = \"\"), v.type && (t += \" } \", f) && f === v.type && !y && (t += \" else { \", I = i.schemaPath + \".type\", b = i.errSchemaPath + \"/type\", (B = B || []).push(t), t = \"\", !1 !== i.createErrors ? (t = (t += \" { keyword: 'type' , dataPath: (dataPath || '') + \" + i.errorPath + \" , schemaPath: \" + i.util.toQuotedString(b) + \" , params: { type: '\") + (C ? \"\" + f.join(\",\") : \"\" + f) + \"' } \", !1 !== i.opts.messages && (t = (t += \" , message: 'should be \") + (C ? \"\" + f.join(\",\") : \"\" + f) + \"' \"), i.opts.verbose && (t += \" , schema: validate.schema\" + I + \" , parentSchema: validate.schema\" + i.schemaPath + \" , data: \" + h + \" \"), t += \" } \") : t += \" {} \", E = t, t = B.pop(), !i.compositeRule && g ? i.async ? t += \" throw new ValidationError([\" + E + \"]); \" : t += \" validate.errors = [\" + E + \"]; return false; \" : t += \" var err = \" + E + \"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \", t += \" } \"), g && (t = (t += \" if (errors === \") + (a ? \"0\" : \"errs_\" + l) + \") { \", m += \"}\");\n }\n }\n g && (t += \" \" + m + \" \"), a ? t = t + (n ? \" if (errors === 0) return data; else throw new ValidationError(vErrors); \" : \" validate.errors = vErrors; return errors === 0; \") + \" }; return validate;\" : t += \" var \" + u + \" = errors === errs_\" + l + \";\";\n }\n return t;\n function z(e) {\n for (var t = e.rules, n = 0; n < t.length; n++) if (X(t[n])) return 1;\n }\n function X(e) {\n return void 0 !== i.schema[e.keyword] || e.implements && function (e) {\n for (var t = e.implements, n = 0; n < t.length; n++) if (void 0 !== i.schema[t[n]]) return 1;\n }(e);\n }\n };\n },\n 7931: function (e, t, n) {\n \"use strict\";\n\n var a = /^[a-z_$][a-z0-9_$-]*$/i,\n l = n(1793),\n i = n(5868);\n function o(e, t) {\n o.errors = null;\n var n = this._validateKeyword = this._validateKeyword || this.compile(i, !0);\n if (n(e)) return !0;\n if (o.errors = n.errors, t) throw new Error(\"custom keyword definition is invalid: \" + this.errorsText(n.errors));\n return !1;\n }\n e.exports = {\n add: function (e, t) {\n var s = this.RULES;\n if (s.keywords[e]) throw new Error(\"Keyword \" + e + \" is already defined\");\n if (!a.test(e)) throw new Error(\"Keyword \" + e + \" is not a valid identifier\");\n if (t) {\n this.validateKeyword(t, !0);\n var n = t.type;\n if (Array.isArray(n)) for (var i = 0; i < n.length; i++) r(e, n[i], t);else r(e, n, t);\n var o = t.metaSchema;\n o && (t.$data && this._opts.$data && (o = {\n anyOf: [o, {\n $ref: \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\"\n }]\n }), t.validateSchema = this.compile(o, !0));\n }\n function r(e, t, n) {\n for (var i, o = 0; o < s.length; o++) {\n var r = s[o];\n if (r.type == t) {\n i = r;\n break;\n }\n }\n i || s.push(i = {\n type: t,\n rules: []\n });\n n = {\n keyword: e,\n definition: n,\n custom: !0,\n code: l,\n implements: n.implements\n };\n i.rules.push(n), s.custom[e] = n;\n }\n return s.keywords[e] = s.all[e] = !0, this;\n },\n get: function (e) {\n var t = this.RULES.custom[e];\n return t ? t.definition : this.RULES.keywords[e] || !1;\n },\n remove: function (e) {\n var t = this.RULES;\n delete t.keywords[e], delete t.all[e], delete t.custom[e];\n for (var n = 0; n < t.length; n++) for (var i = t[n].rules, o = 0; o < i.length; o++) if (i[o].keyword == e) {\n i.splice(o, 1);\n break;\n }\n return this;\n },\n validate: o\n };\n },\n 2303: function (e) {\n \"use strict\";\n\n e.exports = function e(t, n) {\n if (t === n) return !0;\n if (t && n && \"object\" == typeof t && \"object\" == typeof n) {\n if (t.constructor !== n.constructor) return !1;\n var i, o, r;\n if (Array.isArray(t)) {\n if ((i = t.length) != n.length) return !1;\n for (o = i; 0 != o--;) if (!e(t[o], n[o])) return !1;\n } else {\n if (t.constructor === RegExp) return t.source === n.source && t.flags === n.flags;\n if (t.valueOf !== Object.prototype.valueOf) return t.valueOf() === n.valueOf();\n if (t.toString !== Object.prototype.toString) return t.toString() === n.toString();\n if ((i = (r = Object.keys(t)).length) !== Object.keys(n).length) return !1;\n for (o = i; 0 != o--;) if (!Object.prototype.hasOwnProperty.call(n, r[o])) return !1;\n for (o = i; 0 != o--;) {\n var s = r[o];\n if (!e(t[s], n[s])) return !1;\n }\n }\n return !0;\n }\n return t != t && n != n;\n };\n },\n 3508: function (e) {\n \"use strict\";\n\n e.exports = function (e, t) {\n var i,\n l = \"boolean\" == typeof (t = \"function\" == typeof (t = t || {}) ? {\n cmp: t\n } : t).cycles && t.cycles,\n c = t.cmp && (i = t.cmp, function (n) {\n return function (e, t) {\n e = {\n key: e,\n value: n[e]\n }, t = {\n key: t,\n value: n[t]\n };\n return i(e, t);\n };\n }),\n h = [];\n return function e(t) {\n if (void 0 !== (t = t && t.toJSON && \"function\" == typeof t.toJSON ? t.toJSON() : t)) {\n if (\"number\" == typeof t) return isFinite(t) ? \"\" + t : \"null\";\n if (\"object\" != typeof t) return JSON.stringify(t);\n if (Array.isArray(t)) {\n for (o = \"[\", r = 0; r < t.length; r++) r && (o += \",\"), o += e(t[r]) || \"null\";\n return o + \"]\";\n }\n if (null === t) return \"null\";\n if (-1 !== h.indexOf(t)) {\n if (l) return JSON.stringify(\"__cycle__\");\n throw new TypeError(\"Converting circular structure to JSON\");\n }\n for (var n = h.push(t) - 1, i = Object.keys(t).sort(c && c(t)), o = \"\", r = 0; r < i.length; r++) {\n var s = i[r],\n a = e(t[s]);\n a && (o && (o += \",\"), o += JSON.stringify(s) + \":\" + a);\n }\n return h.splice(n, 1), \"{\" + o + \"}\";\n }\n }(e);\n };\n },\n 233: function (e) {\n e.exports = function t(e, n) {\n \"use strict\";\n\n function i(e) {\n return t.insensitive && (\"\" + e).toLowerCase() || \"\" + e;\n }\n var o,\n r,\n s = /(^([+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?$|^0x[0-9a-f]+$|\\d+)/gi,\n a = /(^[ ]*|[ ]*$)/g,\n l = /(^([\\w ]+,?[\\w ]+)?[\\w ]+,?[\\w ]+\\d+:\\d+(:\\d+)?[\\w ]?|^\\d{1,4}[\\/\\-]\\d{1,4}[\\/\\-]\\d{1,4}|^\\w+, \\w+ \\d+, \\d{4})/,\n c = /^0x[0-9a-f]+$/i,\n h = /^0/,\n e = i(e).replace(a, \"\") || \"\",\n n = i(n).replace(a, \"\") || \"\",\n d = e.replace(s, \"\\0$1\\0\").replace(/\\0$/, \"\").replace(/^\\0/, \"\").split(\"\\0\"),\n u = n.replace(s, \"\\0$1\\0\").replace(/\\0$/, \"\").replace(/^\\0/, \"\").split(\"\\0\"),\n a = parseInt(e.match(c), 16) || 1 !== d.length && e.match(l) && Date.parse(e),\n s = parseInt(n.match(c), 16) || a && n.match(l) && Date.parse(n) || null;\n if (s) {\n if (a < s) return -1;\n if (s < a) return 1;\n }\n for (var g = 0, p = Math.max(d.length, u.length); g < p; g++) {\n if (o = !(d[g] || \"\").match(h) && parseFloat(d[g]) || d[g] || 0, r = !(u[g] || \"\").match(h) && parseFloat(u[g]) || u[g] || 0, isNaN(o) !== isNaN(r)) return isNaN(o) ? 1 : -1;\n if (typeof o != typeof r && (o += \"\", r += \"\"), o < r) return -1;\n if (r < o) return 1;\n }\n return 0;\n };\n },\n 5156: function (e, t) {\n !function (e) {\n \"use strict\";\n\n function w(e) {\n return null !== e && \"[object Array]\" === Object.prototype.toString.call(e);\n }\n function S(e) {\n return null !== e && \"[object Object]\" === Object.prototype.toString.call(e);\n }\n function x(e, t) {\n if (e !== t) {\n if (Object.prototype.toString.call(e) !== Object.prototype.toString.call(t)) return !1;\n if (!0 === w(e)) {\n if (e.length !== t.length) return !1;\n for (var n = 0; n < e.length; n++) if (!1 === x(e[n], t[n])) return !1;\n } else {\n if (!0 !== S(e)) return !1;\n var i,\n o,\n r = {};\n for (i in e) if (hasOwnProperty.call(e, i)) {\n if (!1 === x(e[i], t[i])) return !1;\n r[i] = !0;\n }\n for (o in t) if (hasOwnProperty.call(t, o) && !0 !== r[o]) return !1;\n }\n }\n return !0;\n }\n function k(e) {\n if (\"\" === e || !1 === e || null === e) return !0;\n if (w(e) && 0 === e.length) return !0;\n if (S(e)) {\n for (var t in e) if (e.hasOwnProperty(t)) return !1;\n return !0;\n }\n return !1;\n }\n var o = \"function\" == typeof String.prototype.trimLeft ? function (e) {\n return e.trimLeft();\n } : function (e) {\n return e.match(/^\\s*(.*)/)[1];\n },\n h = {\n 0: \"number\",\n 1: \"any\",\n 2: \"string\",\n 3: \"array\",\n 4: \"object\",\n 5: \"boolean\",\n 6: \"expression\",\n 7: \"null\",\n 8: \"Array\",\n 9: \"Array\"\n },\n s = \"UnquotedIdentifier\",\n a = \"QuotedIdentifier\",\n l = \"Rbracket\",\n c = \"Rparen\",\n d = \"Comma\",\n u = \"Colon\",\n r = \"Rbrace\",\n g = \"Number\",\n E = \"Current\",\n T = \"Expref\",\n R = \"Pipe\",\n _ = \"Flatten\",\n p = \"Star\",\n m = \"Filter\",\n f = \"Lbrace\",\n C = \"Lbracket\",\n y = \"Lparen\",\n v = \"Literal\",\n I = {\n \".\": \"Dot\",\n \"*\": p,\n \",\": d,\n \":\": u,\n \"{\": f,\n \"}\": r,\n \"]\": l,\n \"(\": y,\n \")\": c,\n \"@\": E\n },\n b = {\n \"<\": !0,\n \">\": !0,\n \"=\": !0,\n \"!\": !0\n },\n A = {\n \" \": !0,\n \"\\t\": !0,\n \"\\n\": !0\n };\n function $(e) {\n return \"0\" <= e && e <= \"9\" || \"-\" === e;\n }\n function n() {}\n n.prototype = {\n tokenize: function (e) {\n var t,\n n,\n i = [];\n for (this._current = 0; this._current < e.length;) if (\"a\" <= (r = e[this._current]) && r <= \"z\" || \"A\" <= r && r <= \"Z\" || \"_\" === r) o = this._current, t = this._consumeUnquotedIdentifier(e), i.push({\n type: s,\n value: t,\n start: o\n });else if (void 0 !== I[e[this._current]]) i.push({\n type: I[e[this._current]],\n value: e[this._current],\n start: this._current\n }), this._current++;else if ($(e[this._current])) n = this._consumeNumber(e), i.push(n);else if (\"[\" === e[this._current]) n = this._consumeLBracket(e), i.push(n);else if ('\"' === e[this._current]) o = this._current, t = this._consumeQuotedIdentifier(e), i.push({\n type: a,\n value: t,\n start: o\n });else if (\"'\" === e[this._current]) o = this._current, t = this._consumeRawStringLiteral(e), i.push({\n type: v,\n value: t,\n start: o\n });else if (\"`\" === e[this._current]) {\n var o = this._current,\n r = this._consumeLiteral(e);\n i.push({\n type: v,\n value: r,\n start: o\n });\n } else if (void 0 !== b[e[this._current]]) i.push(this._consumeOperator(e));else if (void 0 !== A[e[this._current]]) this._current++;else if (\"&\" === e[this._current]) o = this._current, this._current++, \"&\" === e[this._current] ? (this._current++, i.push({\n type: \"And\",\n value: \"&&\",\n start: o\n })) : i.push({\n type: T,\n value: \"&\",\n start: o\n });else {\n if (\"|\" !== e[this._current]) throw (r = new Error(\"Unknown character:\" + e[this._current])).name = \"LexerError\", r;\n o = this._current, this._current++, \"|\" === e[this._current] ? (this._current++, i.push({\n type: \"Or\",\n value: \"||\",\n start: o\n })) : i.push({\n type: R,\n value: \"|\",\n start: o\n });\n }\n return i;\n },\n _consumeUnquotedIdentifier: function (e) {\n var t,\n n = this._current;\n for (this._current++; this._current < e.length && (\"a\" <= (t = e[this._current]) && t <= \"z\" || \"A\" <= t && t <= \"Z\" || \"0\" <= t && t <= \"9\" || \"_\" === t);) this._current++;\n return e.slice(n, this._current);\n },\n _consumeQuotedIdentifier: function (e) {\n for (var t = this._current, n = (this._current++, e.length); '\"' !== e[this._current] && this._current < n;) {\n var i = this._current;\n \"\\\\\" !== e[i] || \"\\\\\" !== e[i + 1] && '\"' !== e[i + 1] ? i++ : i += 2, this._current = i;\n }\n return this._current++, JSON.parse(e.slice(t, this._current));\n },\n _consumeRawStringLiteral: function (e) {\n for (var t = this._current, n = (this._current++, e.length); \"'\" !== e[this._current] && this._current < n;) {\n var i = this._current;\n \"\\\\\" !== e[i] || \"\\\\\" !== e[i + 1] && \"'\" !== e[i + 1] ? i++ : i += 2, this._current = i;\n }\n return this._current++, e.slice(t + 1, this._current - 1).replace(\"\\\\'\", \"'\");\n },\n _consumeNumber: function (e) {\n for (var t = this._current, n = (this._current++, e.length); $(e[this._current]) && this._current < n;) this._current++;\n var i = parseInt(e.slice(t, this._current));\n return {\n type: g,\n value: i,\n start: t\n };\n },\n _consumeLBracket: function (e) {\n var t = this._current;\n return this._current++, \"?\" === e[this._current] ? (this._current++, {\n type: m,\n value: \"[?\",\n start: t\n }) : \"]\" === e[this._current] ? (this._current++, {\n type: _,\n value: \"[]\",\n start: t\n }) : {\n type: C,\n value: \"[\",\n start: t\n };\n },\n _consumeOperator: function (e) {\n var t = this._current,\n n = e[t];\n return this._current++, \"!\" === n ? \"=\" === e[this._current] ? (this._current++, {\n type: \"NE\",\n value: \"!=\",\n start: t\n }) : {\n type: \"Not\",\n value: \"!\",\n start: t\n } : \"<\" === n ? \"=\" === e[this._current] ? (this._current++, {\n type: \"LTE\",\n value: \"<=\",\n start: t\n }) : {\n type: \"LT\",\n value: \"<\",\n start: t\n } : \">\" === n ? \"=\" === e[this._current] ? (this._current++, {\n type: \"GTE\",\n value: \">=\",\n start: t\n }) : {\n type: \"GT\",\n value: \">\",\n start: t\n } : \"=\" === n && \"=\" === e[this._current] ? (this._current++, {\n type: \"EQ\",\n value: \"==\",\n start: t\n }) : void 0;\n },\n _consumeLiteral: function (e) {\n this._current++;\n for (var t = this._current, n = e.length; \"`\" !== e[this._current] && this._current < n;) {\n var i = this._current;\n \"\\\\\" !== e[i] || \"\\\\\" !== e[i + 1] && \"`\" !== e[i + 1] ? i++ : i += 2, this._current = i;\n }\n t = (t = o(e.slice(t, this._current))).replace(\"\\\\`\", \"`\"), t = this._looksLikeJSON(t) ? JSON.parse(t) : JSON.parse('\"' + t + '\"');\n return this._current++, t;\n },\n _looksLikeJSON: function (e) {\n if (\"\" === e) return !1;\n if (0 <= '[{\"'.indexOf(e[0])) return !0;\n if (0 <= [\"true\", \"false\", \"null\"].indexOf(e)) return !0;\n if (!(0 <= \"-0123456789\".indexOf(e[0]))) return !1;\n try {\n return JSON.parse(e), !0;\n } catch (e) {\n return !1;\n }\n }\n };\n var L = {};\n function N() {}\n function B(e) {\n this.runtime = e;\n }\n function M(e) {\n this._interpreter = e, this.functionTable = {\n abs: {\n _func: this._functionAbs,\n _signature: [{\n types: [0]\n }]\n },\n avg: {\n _func: this._functionAvg,\n _signature: [{\n types: [8]\n }]\n },\n ceil: {\n _func: this._functionCeil,\n _signature: [{\n types: [0]\n }]\n },\n contains: {\n _func: this._functionContains,\n _signature: [{\n types: [2, 3]\n }, {\n types: [1]\n }]\n },\n ends_with: {\n _func: this._functionEndsWith,\n _signature: [{\n types: [2]\n }, {\n types: [2]\n }]\n },\n floor: {\n _func: this._functionFloor,\n _signature: [{\n types: [0]\n }]\n },\n length: {\n _func: this._functionLength,\n _signature: [{\n types: [2, 3, 4]\n }]\n },\n map: {\n _func: this._functionMap,\n _signature: [{\n types: [6]\n }, {\n types: [3]\n }]\n },\n max: {\n _func: this._functionMax,\n _signature: [{\n types: [8, 9]\n }]\n },\n merge: {\n _func: this._functionMerge,\n _signature: [{\n types: [4],\n variadic: !0\n }]\n },\n max_by: {\n _func: this._functionMaxBy,\n _signature: [{\n types: [3]\n }, {\n types: [6]\n }]\n },\n sum: {\n _func: this._functionSum,\n _signature: [{\n types: [8]\n }]\n },\n starts_with: {\n _func: this._functionStartsWith,\n _signature: [{\n types: [2]\n }, {\n types: [2]\n }]\n },\n min: {\n _func: this._functionMin,\n _signature: [{\n types: [8, 9]\n }]\n },\n min_by: {\n _func: this._functionMinBy,\n _signature: [{\n types: [3]\n }, {\n types: [6]\n }]\n },\n type: {\n _func: this._functionType,\n _signature: [{\n types: [1]\n }]\n },\n keys: {\n _func: this._functionKeys,\n _signature: [{\n types: [4]\n }]\n },\n values: {\n _func: this._functionValues,\n _signature: [{\n types: [4]\n }]\n },\n sort: {\n _func: this._functionSort,\n _signature: [{\n types: [9, 8]\n }]\n },\n sort_by: {\n _func: this._functionSortBy,\n _signature: [{\n types: [3]\n }, {\n types: [6]\n }]\n },\n join: {\n _func: this._functionJoin,\n _signature: [{\n types: [2]\n }, {\n types: [9]\n }]\n },\n reverse: {\n _func: this._functionReverse,\n _signature: [{\n types: [2, 3]\n }]\n },\n to_array: {\n _func: this._functionToArray,\n _signature: [{\n types: [1]\n }]\n },\n to_string: {\n _func: this._functionToString,\n _signature: [{\n types: [1]\n }]\n },\n to_number: {\n _func: this._functionToNumber,\n _signature: [{\n types: [1]\n }]\n },\n not_null: {\n _func: this._functionNotNull,\n _signature: [{\n types: [1],\n variadic: !0\n }]\n }\n };\n }\n L.EOF = 0, L[s] = 0, L[a] = 0, L[l] = 0, L[c] = 0, L[d] = 0, L[r] = 0, L[g] = 0, L[E] = 0, L[T] = 0, L.Pipe = 1, L.Or = 2, L.And = 3, L.EQ = 5, L.GT = 5, L.LT = 5, L.GTE = 5, L.LTE = 5, L.NE = 5, L[_] = 9, L.Star = 20, L[m] = 21, L.Dot = 40, L.Not = 45, L[f] = 50, L[C] = 55, L[y] = 60, N.prototype = {\n parse: function (e) {\n this._loadTokens(e), this.index = 0;\n var t,\n e = this.expression(0);\n if (\"EOF\" !== this._lookahead(0)) throw t = this._lookaheadToken(0), (t = new Error(\"Unexpected token type: \" + t.type + \", value: \" + t.value)).name = \"ParserError\", t;\n return e;\n },\n _loadTokens: function (e) {\n var t = new n().tokenize(e);\n t.push({\n type: \"EOF\",\n value: \"\",\n start: e.length\n }), this.tokens = t;\n },\n expression: function (e) {\n for (var t = this._lookaheadToken(0), n = (this._advance(), this.nud(t)), i = this._lookahead(0); e < L[i];) this._advance(), n = this.led(i, n), i = this._lookahead(0);\n return n;\n },\n _lookahead: function (e) {\n return this.tokens[this.index + e].type;\n },\n _lookaheadToken: function (e) {\n return this.tokens[this.index + e];\n },\n _advance: function () {\n this.index++;\n },\n nud: function (e) {\n var t, n;\n switch (e.type) {\n case v:\n return {\n type: \"Literal\",\n value: e.value\n };\n case s:\n return {\n type: \"Field\",\n name: e.value\n };\n case a:\n var i = {\n type: \"Field\",\n name: e.value\n };\n if (this._lookahead(0) === y) throw new Error(\"Quoted identifier not allowed for function names.\");\n return i;\n case \"Not\":\n return {\n type: \"NotExpression\",\n children: [t = this.expression(L.Not)]\n };\n case p:\n return t = null, {\n type: \"ValueProjection\",\n children: [{\n type: \"Identity\"\n }, t = this._lookahead(0) === l ? {\n type: \"Identity\"\n } : this._parseProjectionRHS(L.Star)]\n };\n case m:\n return this.led(e.type, {\n type: \"Identity\"\n });\n case f:\n return this._parseMultiselectHash();\n case _:\n return {\n type: \"Projection\",\n children: [{\n type: _,\n children: [{\n type: \"Identity\"\n }]\n }, t = this._parseProjectionRHS(L.Flatten)]\n };\n case C:\n return this._lookahead(0) === g || this._lookahead(0) === u ? (t = this._parseIndexExpression(), this._projectIfSlice({\n type: \"Identity\"\n }, t)) : this._lookahead(0) === p && this._lookahead(1) === l ? (this._advance(), this._advance(), {\n type: \"Projection\",\n children: [{\n type: \"Identity\"\n }, t = this._parseProjectionRHS(L.Star)]\n }) : this._parseMultiselectList();\n case E:\n return {\n type: E\n };\n case T:\n return {\n type: \"ExpressionReference\",\n children: [n = this.expression(L.Expref)]\n };\n case y:\n for (var o = []; this._lookahead(0) !== c;) this._lookahead(0) === E ? (n = {\n type: E\n }, this._advance()) : n = this.expression(0), o.push(n);\n return this._match(c), o[0];\n default:\n this._errorToken(e);\n }\n },\n led: function (e, t) {\n var n;\n switch (e) {\n case \"Dot\":\n var i = L.Dot;\n return this._lookahead(0) !== p ? {\n type: \"Subexpression\",\n children: [t, n = this._parseDotRHS(i)]\n } : (this._advance(), {\n type: \"ValueProjection\",\n children: [t, n = this._parseProjectionRHS(i)]\n });\n case R:\n return n = this.expression(L.Pipe), {\n type: R,\n children: [t, n]\n };\n case \"Or\":\n return {\n type: \"OrExpression\",\n children: [t, n = this.expression(L.Or)]\n };\n case \"And\":\n return {\n type: \"AndExpression\",\n children: [t, n = this.expression(L.And)]\n };\n case y:\n for (var o, i = t.name, r = []; this._lookahead(0) !== c;) this._lookahead(0) === E ? (o = {\n type: E\n }, this._advance()) : o = this.expression(0), this._lookahead(0) === d && this._match(d), r.push(o);\n return this._match(c), {\n type: \"Function\",\n name: i,\n children: r\n };\n case m:\n i = this.expression(0);\n return this._match(l), {\n type: \"FilterProjection\",\n children: [t, n = this._lookahead(0) === _ ? {\n type: \"Identity\"\n } : this._parseProjectionRHS(L.Filter), i]\n };\n case _:\n return {\n type: \"Projection\",\n children: [{\n type: _,\n children: [t]\n }, this._parseProjectionRHS(L.Flatten)]\n };\n case \"EQ\":\n case \"NE\":\n case \"GT\":\n case \"GTE\":\n case \"LT\":\n case \"LTE\":\n return this._parseComparator(t, e);\n case C:\n i = this._lookaheadToken(0);\n return i.type === g || i.type === u ? (n = this._parseIndexExpression(), this._projectIfSlice(t, n)) : (this._match(p), this._match(l), {\n type: \"Projection\",\n children: [t, n = this._parseProjectionRHS(L.Star)]\n });\n default:\n this._errorToken(this._lookaheadToken(0));\n }\n },\n _match: function (e) {\n var t;\n if (this._lookahead(0) !== e) throw t = this._lookaheadToken(0), (e = new Error(\"Expected \" + e + \", got: \" + t.type)).name = \"ParserError\", e;\n this._advance();\n },\n _errorToken: function (e) {\n e = new Error(\"Invalid token (\" + e.type + '): \"' + e.value + '\"');\n throw e.name = \"ParserError\", e;\n },\n _parseIndexExpression: function () {\n var e;\n return this._lookahead(0) === u || this._lookahead(1) === u ? this._parseSliceExpression() : (e = {\n type: \"Index\",\n value: this._lookaheadToken(0).value\n }, this._advance(), this._match(l), e);\n },\n _projectIfSlice: function (e, t) {\n e = {\n type: \"IndexExpression\",\n children: [e, t]\n };\n return \"Slice\" === t.type ? {\n type: \"Projection\",\n children: [e, this._parseProjectionRHS(L.Star)]\n } : e;\n },\n _parseSliceExpression: function () {\n for (var e, t = [null, null, null], n = 0, i = this._lookahead(0); i !== l && n < 3;) {\n if (i === u) n++;else {\n if (i !== g) throw e = this._lookahead(0), (e = new Error(\"Syntax error, unexpected token: \" + e.value + \"(\" + e.type + \")\")).name = \"Parsererror\", e;\n t[n] = this._lookaheadToken(0).value;\n }\n this._advance(), i = this._lookahead(0);\n }\n return this._match(l), {\n type: \"Slice\",\n children: t\n };\n },\n _parseComparator: function (e, t) {\n return {\n type: \"Comparator\",\n name: t,\n children: [e, this.expression(L[t])]\n };\n },\n _parseDotRHS: function (e) {\n var t = this._lookahead(0);\n return 0 <= [s, a, p].indexOf(t) ? this.expression(e) : t === C ? (this._match(C), this._parseMultiselectList()) : t === f ? (this._match(f), this._parseMultiselectHash()) : void 0;\n },\n _parseProjectionRHS: function (e) {\n var t, n;\n if (L[this._lookahead(0)] < 10) t = {\n type: \"Identity\"\n };else if (this._lookahead(0) === C) t = this.expression(e);else if (this._lookahead(0) === m) t = this.expression(e);else {\n if (\"Dot\" !== this._lookahead(0)) throw n = this._lookaheadToken(0), (n = new Error(\"Sytanx error, unexpected token: \" + n.value + \"(\" + n.type + \")\")).name = \"ParserError\", n;\n this._match(\"Dot\"), t = this._parseDotRHS(e);\n }\n return t;\n },\n _parseMultiselectList: function () {\n for (var e = []; this._lookahead(0) !== l;) {\n var t = this.expression(0);\n if (e.push(t), this._lookahead(0) === d && (this._match(d), this._lookahead(0) === l)) throw new Error(\"Unexpected token Rbracket\");\n }\n return this._match(l), {\n type: \"MultiSelectList\",\n children: e\n };\n },\n _parseMultiselectHash: function () {\n for (var e, t, n = [], i = [s, a];;) {\n if (e = this._lookaheadToken(0), i.indexOf(e.type) < 0) throw new Error(\"Expecting an identifier token, got: \" + e.type);\n if (e = e.value, this._advance(), this._match(u), t = this.expression(0), n.push({\n type: \"KeyValuePair\",\n name: e,\n value: t\n }), this._lookahead(0) === d) this._match(d);else if (this._lookahead(0) === r) {\n this._match(r);\n break;\n }\n }\n return {\n type: \"MultiSelectHash\",\n children: n\n };\n }\n }, B.prototype = {\n search: function (e, t) {\n return this.visit(e, t);\n },\n visit: function (e, t) {\n var n, i, o, r, s, a;\n switch (e.type) {\n case \"Field\":\n return null !== t && S(t) ? void 0 === (l = t[e.name]) ? null : l : null;\n case \"Subexpression\":\n for (u = this.visit(e.children[0], t), f = 1; f < e.children.length; f++) if (null === (u = this.visit(e.children[1], u))) return null;\n return u;\n case \"IndexExpression\":\n return s = this.visit(e.children[0], t), this.visit(e.children[1], s);\n case \"Index\":\n return w(t) ? void 0 === (u = t[l = (l = e.value) < 0 ? t.length + l : l]) ? null : u : null;\n case \"Slice\":\n if (!w(t)) return null;\n var l = e.children.slice(0),\n l = this.computeSliceParams(t.length, l),\n c = l[0],\n h = l[1],\n d = l[2],\n u = [];\n if (0 < d) for (f = c; f < h; f += d) u.push(t[f]);else for (f = c; h < f; f += d) u.push(t[f]);\n return u;\n case \"Projection\":\n var g = this.visit(e.children[0], t);\n if (!w(g)) return null;\n for (p = [], f = 0; f < g.length; f++) null !== (i = this.visit(e.children[1], g[f])) && p.push(i);\n return p;\n case \"ValueProjection\":\n if (!S(g = this.visit(e.children[0], t))) return null;\n for (var p = [], m = function (e) {\n for (var t = Object.keys(e), n = [], i = 0; i < t.length; i++) n.push(e[t[i]]);\n return n;\n }(g), f = 0; f < m.length; f++) null !== (i = this.visit(e.children[1], m[f])) && p.push(i);\n return p;\n case \"FilterProjection\":\n if (!w(g = this.visit(e.children[0], t))) return null;\n var C = [],\n y = [];\n for (f = 0; f < g.length; f++) k(n = this.visit(e.children[2], g[f])) || C.push(g[f]);\n for (var v = 0; v < C.length; v++) null !== (i = this.visit(e.children[1], C[v])) && y.push(i);\n return y;\n case \"Comparator\":\n switch (o = this.visit(e.children[0], t), r = this.visit(e.children[1], t), e.name) {\n case \"EQ\":\n u = x(o, r);\n break;\n case \"NE\":\n u = !x(o, r);\n break;\n case \"GT\":\n u = r < o;\n break;\n case \"GTE\":\n u = r <= o;\n break;\n case \"LT\":\n u = o < r;\n break;\n case \"LTE\":\n u = o <= r;\n break;\n default:\n throw new Error(\"Unknown comparator: \" + e.name);\n }\n return u;\n case _:\n var I = this.visit(e.children[0], t);\n if (!w(I)) return null;\n var b = [];\n for (f = 0; f < I.length; f++) w(i = I[f]) ? b.push.apply(b, i) : b.push(i);\n return b;\n case \"Identity\":\n return t;\n case \"MultiSelectList\":\n if (null === t) return null;\n for (p = [], f = 0; f < e.children.length; f++) p.push(this.visit(e.children[f], t));\n return p;\n case \"MultiSelectHash\":\n if (null === t) return null;\n for (p = {}, f = 0; f < e.children.length; f++) p[(a = e.children[f]).name] = this.visit(a.value, t);\n return p;\n case \"OrExpression\":\n return n = k(n = this.visit(e.children[0], t)) ? this.visit(e.children[1], t) : n;\n case \"AndExpression\":\n return !0 === k(o = this.visit(e.children[0], t)) ? o : this.visit(e.children[1], t);\n case \"NotExpression\":\n return k(o = this.visit(e.children[0], t));\n case \"Literal\":\n return e.value;\n case R:\n return s = this.visit(e.children[0], t), this.visit(e.children[1], s);\n case E:\n return t;\n case \"Function\":\n var A = [];\n for (f = 0; f < e.children.length; f++) A.push(this.visit(e.children[f], t));\n return this.runtime.callFunction(e.name, A);\n case \"ExpressionReference\":\n l = e.children[0];\n return l.jmespathType = T, l;\n default:\n throw new Error(\"Unknown node type: \" + e.type);\n }\n },\n computeSliceParams: function (e, t) {\n var n = t[0],\n i = t[1],\n t = t[2],\n o = [null, null, null];\n if (null === t) t = 1;else if (0 === t) throw (r = new Error(\"Invalid slice, step cannot be 0\")).name = \"RuntimeError\", r;\n var r = t < 0,\n n = null === n ? r ? e - 1 : 0 : this.capSliceRange(e, n, t),\n i = null === i ? r ? -1 : e : this.capSliceRange(e, i, t);\n return o[0] = n, o[1] = i, o[2] = t, o;\n },\n capSliceRange: function (e, t, n) {\n return t < 0 ? (t += e) < 0 && (t = n < 0 ? -1 : 0) : e <= t && (t = n < 0 ? e - 1 : e), t;\n }\n }, M.prototype = {\n callFunction: function (e, t) {\n var n = this.functionTable[e];\n if (void 0 === n) throw new Error(\"Unknown function: \" + e + \"()\");\n return this._validateArgs(e, t, n._signature), n._func.call(this, t);\n },\n _validateArgs: function (e, t, n) {\n var i;\n if (n[n.length - 1].variadic) {\n if (t.length < n.length) throw i = 1 === n.length ? \" argument\" : \" arguments\", new Error(\"ArgumentError: \" + e + \"() takes at least\" + n.length + i + \" but received \" + t.length);\n } else if (t.length !== n.length) throw i = 1 === n.length ? \" argument\" : \" arguments\", new Error(\"ArgumentError: \" + e + \"() takes \" + n.length + i + \" but received \" + t.length);\n for (var o = 0; o < n.length; o++) {\n for (var r, s = !1, a = n[o].types, l = this._getTypeName(t[o]), c = 0; c < a.length; c++) if (this._typeMatches(l, a[c], t[o])) {\n s = !0;\n break;\n }\n if (!s) throw r = a.map(function (e) {\n return h[e];\n }).join(\",\"), new Error(\"TypeError: \" + e + \"() expected argument \" + (o + 1) + \" to be type \" + r + \" but received type \" + h[l] + \" instead.\");\n }\n },\n _typeMatches: function (e, t, n) {\n if (1 === t) return !0;\n if (9 !== t && 8 !== t && 3 !== t) return e === t;\n if (3 === t) return 3 === e;\n if (3 === e) {\n var i;\n 8 === t ? i = 0 : 9 === t && (i = 2);\n for (var o = 0; o < n.length; o++) if (!this._typeMatches(this._getTypeName(n[o]), i, n[o])) return !1;\n return !0;\n }\n },\n _getTypeName: function (e) {\n switch (Object.prototype.toString.call(e)) {\n case \"[object String]\":\n return 2;\n case \"[object Number]\":\n return 0;\n case \"[object Array]\":\n return 3;\n case \"[object Boolean]\":\n return 5;\n case \"[object Null]\":\n return 7;\n case \"[object Object]\":\n return e.jmespathType === T ? 6 : 4;\n }\n },\n _functionStartsWith: function (e) {\n return 0 === e[0].lastIndexOf(e[1]);\n },\n _functionEndsWith: function (e) {\n var t = e[0],\n e = e[1];\n return -1 !== t.indexOf(e, t.length - e.length);\n },\n _functionReverse: function (e) {\n var t;\n if (2 !== this._getTypeName(e[0])) return (t = e[0].slice(0)).reverse(), t;\n for (var n = e[0], i = \"\", o = n.length - 1; 0 <= o; o--) i += n[o];\n return i;\n },\n _functionAbs: function (e) {\n return Math.abs(e[0]);\n },\n _functionCeil: function (e) {\n return Math.ceil(e[0]);\n },\n _functionAvg: function (e) {\n for (var t = 0, n = e[0], i = 0; i < n.length; i++) t += n[i];\n return t / n.length;\n },\n _functionContains: function (e) {\n return 0 <= e[0].indexOf(e[1]);\n },\n _functionFloor: function (e) {\n return Math.floor(e[0]);\n },\n _functionLength: function (e) {\n return (S(e[0]) ? Object.keys(e[0]) : e[0]).length;\n },\n _functionMap: function (e) {\n for (var t = [], n = this._interpreter, i = e[0], o = e[1], r = 0; r < o.length; r++) t.push(n.visit(i, o[r]));\n return t;\n },\n _functionMerge: function (e) {\n for (var t = {}, n = 0; n < e.length; n++) {\n var i,\n o = e[n];\n for (i in o) t[i] = o[i];\n }\n return t;\n },\n _functionMax: function (e) {\n if (0 < e[0].length) {\n if (0 === this._getTypeName(e[0][0])) return Math.max.apply(Math, e[0]);\n for (var t = e[0], n = t[0], i = 1; i < t.length; i++) n.localeCompare(t[i]) < 0 && (n = t[i]);\n return n;\n }\n return null;\n },\n _functionMin: function (e) {\n if (0 < e[0].length) {\n if (0 === this._getTypeName(e[0][0])) return Math.min.apply(Math, e[0]);\n for (var t = e[0], n = t[0], i = 1; i < t.length; i++) t[i].localeCompare(n) < 0 && (n = t[i]);\n return n;\n }\n return null;\n },\n _functionSum: function (e) {\n for (var t = 0, n = e[0], i = 0; i < n.length; i++) t += n[i];\n return t;\n },\n _functionType: function (e) {\n switch (this._getTypeName(e[0])) {\n case 0:\n return \"number\";\n case 2:\n return \"string\";\n case 3:\n return \"array\";\n case 4:\n return \"object\";\n case 5:\n return \"boolean\";\n case 6:\n return \"expref\";\n case 7:\n return \"null\";\n }\n },\n _functionKeys: function (e) {\n return Object.keys(e[0]);\n },\n _functionValues: function (e) {\n for (var t = e[0], n = Object.keys(t), i = [], o = 0; o < n.length; o++) i.push(t[n[o]]);\n return i;\n },\n _functionJoin: function (e) {\n var t = e[0];\n return e[1].join(t);\n },\n _functionToArray: function (e) {\n return 3 === this._getTypeName(e[0]) ? e[0] : [e[0]];\n },\n _functionToString: function (e) {\n return 2 === this._getTypeName(e[0]) ? e[0] : JSON.stringify(e[0]);\n },\n _functionToNumber: function (e) {\n var t = this._getTypeName(e[0]);\n return 0 === t ? e[0] : 2 !== t || (t = +e[0], isNaN(t)) ? null : t;\n },\n _functionNotNull: function (e) {\n for (var t = 0; t < e.length; t++) if (7 !== this._getTypeName(e[t])) return e[t];\n return null;\n },\n _functionSort: function (e) {\n e = e[0].slice(0);\n return e.sort(), e;\n },\n _functionSortBy: function (e) {\n var t = e[0].slice(0);\n if (0 !== t.length) {\n var o = this._interpreter,\n r = e[1],\n s = this._getTypeName(o.visit(r, t[0]));\n if ([0, 2].indexOf(s) < 0) throw new Error(\"TypeError\");\n for (var a = this, n = [], i = 0; i < t.length; i++) n.push([i, t[i]]);\n n.sort(function (e, t) {\n var n = o.visit(r, e[1]),\n i = o.visit(r, t[1]);\n if (a._getTypeName(n) !== s) throw new Error(\"TypeError: expected \" + s + \", received \" + a._getTypeName(n));\n if (a._getTypeName(i) !== s) throw new Error(\"TypeError: expected \" + s + \", received \" + a._getTypeName(i));\n return i < n ? 1 : n < i ? -1 : e[0] - t[0];\n });\n for (var l = 0; l < n.length; l++) t[l] = n[l][1];\n }\n return t;\n },\n _functionMaxBy: function (e) {\n for (var t, n, i = e[1], o = e[0], r = this.createKeyFunction(i, [0, 2]), s = -1 / 0, a = 0; a < o.length; a++) s < (n = r(o[a])) && (s = n, t = o[a]);\n return t;\n },\n _functionMinBy: function (e) {\n for (var t, n, i = e[1], o = e[0], r = this.createKeyFunction(i, [0, 2]), s = 1 / 0, a = 0; a < o.length; a++) (n = r(o[a])) < s && (s = n, t = o[a]);\n return t;\n },\n createKeyFunction: function (n, i) {\n var o = this,\n r = this._interpreter;\n return function (e) {\n var t,\n e = r.visit(n, e);\n if (i.indexOf(o._getTypeName(e)) < 0) throw t = \"TypeError: expected one of \" + i + \", received \" + o._getTypeName(e), new Error(t);\n return e;\n };\n }\n }, e.tokenize = function (e) {\n return new n().tokenize(e);\n }, e.compile = function (e) {\n return new N().parse(e);\n }, e.search = function (e, t) {\n var n = new N(),\n i = new B(o = new M()),\n o = (o._interpreter = i, n.parse(t));\n return i.search(o, e);\n }, e.strictDeepEqual = x;\n }(t);\n },\n 500: function (e) {\n \"use strict\";\n\n var m = e.exports = function (e, t, n) {\n \"function\" == typeof t && (n = t, t = {}), function e(t, n, i, o, r, s, a, l, c, h) {\n if (o && \"object\" == typeof o && !Array.isArray(o)) {\n for (var d in n(o, r, s, a, l, c, h), o) {\n var u = o[d];\n if (Array.isArray(u)) {\n if (d in m.arrayKeywords) for (var g = 0; g < u.length; g++) e(t, n, i, u[g], r + \"/\" + d + \"/\" + g, s, r, d, o, g);\n } else if (d in m.propsKeywords) {\n if (u && \"object\" == typeof u) for (var p in u) e(t, n, i, u[p], r + \"/\" + d + \"/\" + f(p), s, r, d, o, p);\n } else (d in m.keywords || t.allKeys && !(d in m.skipKeywords)) && e(t, n, i, u, r + \"/\" + d, s, r, d, o);\n }\n i(o, r, s, a, l, c, h);\n }\n }(t, \"function\" == typeof (n = t.cb || n) ? n : n.pre || function () {}, n.post || function () {}, e, \"\", e);\n };\n function f(e) {\n return e.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n }\n m.keywords = {\n additionalItems: !0,\n items: !0,\n contains: !0,\n additionalProperties: !0,\n propertyNames: !0,\n not: !0\n }, m.arrayKeywords = {\n items: !0,\n allOf: !0,\n anyOf: !0,\n oneOf: !0\n }, m.propsKeywords = {\n definitions: !0,\n properties: !0,\n patternProperties: !0,\n dependencies: !0\n }, m.skipKeywords = {\n default: !0,\n enum: !0,\n const: !0,\n required: !0,\n maximum: !0,\n minimum: !0,\n exclusiveMaximum: !0,\n exclusiveMinimum: !0,\n multipleOf: !0,\n maxLength: !0,\n minLength: !0,\n pattern: !0,\n format: !0,\n maxItems: !0,\n minItems: !0,\n uniqueItems: !0,\n maxProperties: !0,\n minProperties: !0\n };\n },\n 7026: function (e, t) {\n \"use strict\";\n\n var b = {\n b: \"\\b\",\n f: \"\\f\",\n n: \"\\n\",\n r: \"\\r\",\n t: \"\\t\",\n '\"': '\"',\n \"/\": \"/\",\n \"\\\\\": \"\\\\\"\n },\n A = \"a\".charCodeAt(),\n n = (t.parse = function (o, e, t) {\n var i = {},\n n = 0,\n r = 0,\n s = 0,\n a = t && t.bigint && \"undefined\" != typeof BigInt;\n return {\n data: l(\"\", !0),\n pointers: i\n };\n function l(e, t) {\n c(), m(e, \"value\");\n var n,\n i = u();\n switch (i) {\n case \"t\":\n d(\"rue\"), n = !0;\n break;\n case \"f\":\n d(\"alse\"), n = !1;\n break;\n case \"n\":\n d(\"ull\"), n = null;\n break;\n case '\"':\n n = h();\n break;\n case \"[\":\n n = function (e) {\n c();\n var t = [],\n n = 0;\n if (\"]\" != u()) for (g();;) {\n t.push(l(e + \"/\" + n)), c();\n var i = u();\n if (\"]\" == i) break;\n \",\" != i && v(), c(), n++;\n }\n return t;\n }(e);\n break;\n case \"{\":\n n = function (e) {\n c();\n var t = {};\n if (\"}\" != u()) for (g();;) {\n var n = C(),\n i = ('\"' != u() && v(), h()),\n o = e + \"/\" + w(i),\n n = (f(o, \"key\", n), m(o, \"keyEnd\"), c(), \":\" != u() && v(), c(), t[i] = l(o), c(), u());\n if (\"}\" == n) break;\n \",\" != n && v(), c();\n }\n return t;\n }(e);\n break;\n default:\n g(), 0 <= \"-0123456789\".indexOf(i) ? n = function () {\n var e = \"\",\n t = !0;\n \"-\" == o[s] && (e += u());\n e += (\"0\" == o[s] ? u : p)(), \".\" == o[s] && (e += u() + p(), t = !1);\n \"e\" != o[s] && \"E\" != o[s] || (e += u(), \"+\" != o[s] && \"-\" != o[s] || (e += u()), e += p(), t = !1);\n var n = +e;\n return a && t && (n > Number.MAX_SAFE_INTEGER || n < Number.MIN_SAFE_INTEGER) ? BigInt(e) : n;\n }() : y();\n }\n return m(e, \"valueEnd\"), c(), t && s < o.length && y(), n;\n }\n function c() {\n e: for (; s < o.length;) {\n switch (o[s]) {\n case \" \":\n r++;\n break;\n case \"\\t\":\n r += 4;\n break;\n case \"\\r\":\n r = 0;\n break;\n case \"\\n\":\n r = 0, n++;\n break;\n default:\n break e;\n }\n s++;\n }\n }\n function h() {\n for (var e, t = \"\"; '\"' != (e = u());) \"\\\\\" == e ? (e = u()) in b ? t += b[e] : \"u\" == e ? t += function () {\n var e = 4,\n t = 0;\n for (; e--;) {\n t <<= 4;\n var n = u().toLowerCase();\n \"a\" <= n && n <= \"f\" ? t += n.charCodeAt() - A + 10 : \"0\" <= n && n <= \"9\" ? t += +n : v();\n }\n return String.fromCharCode(t);\n }() : v() : t += e;\n return t;\n }\n function d(e) {\n for (var t = 0; t < e.length; t++) u() !== e[t] && v();\n }\n function u() {\n I();\n var e = o[s];\n return s++, r++, e;\n }\n function g() {\n s--, r--;\n }\n function p() {\n for (var e = \"\"; \"0\" <= o[s] && o[s] <= \"9\";) e += u();\n if (e.length) return e;\n I(), y();\n }\n function m(e, t) {\n f(e, t, C());\n }\n function f(e, t, n) {\n i[e] = i[e] || {}, i[e][t] = n;\n }\n function C() {\n return {\n line: n,\n column: r,\n pos: s\n };\n }\n function y() {\n throw new SyntaxError(\"Unexpected token \" + o[s] + \" in JSON at position \" + s);\n }\n function v() {\n g(), y();\n }\n function I() {\n if (s >= o.length) throw new SyntaxError(\"Unexpected end of JSON input\");\n }\n }, t.stringify = function (e, t, n) {\n if (v(e)) {\n var i = 0;\n switch (typeof (u = \"object\" == typeof n ? n.space : n)) {\n case \"number\":\n var o = 10 < u ? 10 : u < 0 ? 0 : Math.floor(u),\n u = o && y(o, \" \"),\n r = o,\n s = o;\n break;\n case \"string\":\n u = u.slice(0, 10);\n for (var a = s = r = 0; a < u.length; a++) {\n switch (u[a]) {\n case \" \":\n s++;\n break;\n case \"\\t\":\n s += 4;\n break;\n case \"\\r\":\n s = 0;\n break;\n case \"\\n\":\n s = 0, i++;\n break;\n default:\n throw new Error(\"whitespace characters not allowed in JSON\");\n }\n r++;\n }\n break;\n default:\n u = void 0;\n }\n var l = \"\",\n c = {},\n h = 0,\n d = 0,\n g = 0,\n p = n && n.es6 && \"function\" == typeof Map;\n return function l(c, h, d) {\n C(d, \"value\");\n switch (typeof c) {\n case \"number\":\n case \"bigint\":\n case \"boolean\":\n m(\"\" + c);\n break;\n case \"string\":\n m(I(c));\n break;\n case \"object\":\n null === c ? m(\"null\") : \"function\" == typeof c.toJSON ? m(I(c.toJSON())) : Array.isArray(c) ? e() : p ? c.constructor.BYTES_PER_ELEMENT ? e() : c instanceof Map ? n() : c instanceof Set ? n(!0) : t() : t();\n }\n C(d, \"valueEnd\");\n function e() {\n if (c.length) {\n m(\"[\");\n for (var e = h + 1, t = 0; t < c.length; t++) {\n t && m(\",\"), f(e);\n var n = v(c[t]) ? c[t] : null,\n i = d + \"/\" + t;\n l(n, e, i);\n }\n f(h), m(\"]\");\n } else m(\"[]\");\n }\n function t() {\n var e = Object.keys(c);\n if (e.length) {\n m(\"{\");\n for (var t = h + 1, n = 0; n < e.length; n++) {\n var i,\n o = e[n],\n r = c[o];\n v(r) && (n && m(\",\"), i = d + \"/\" + w(o), f(t), C(i, \"key\"), m(I(o)), C(i, \"keyEnd\"), m(\":\"), u && m(\" \"), l(r, t, i));\n }\n f(h), m(\"}\");\n } else m(\"{}\");\n }\n function n(e) {\n if (c.size) {\n m(\"{\");\n for (var t = h + 1, n = !0, i = c.entries(), o = i.next(); !o.done;) {\n var r,\n s = o.value,\n a = s[0],\n s = !!e || s[1];\n v(s) && (n || m(\",\"), n = !1, r = d + \"/\" + w(a), f(t), C(r, \"key\"), m(I(a)), C(r, \"keyEnd\"), m(\":\"), u && m(\" \"), l(s, t, r)), o = i.next();\n }\n f(h), m(\"}\");\n } else m(\"{}\");\n }\n }(e, 0, \"\"), {\n json: l,\n pointers: c\n };\n }\n function m(e) {\n d += e.length, g += e.length, l += e;\n }\n function f(e) {\n if (u) {\n for (l += \"\\n\" + y(e, u), h++, d = 0; e--;) i ? (h += i, d = s) : d += s, g += r;\n g += 1;\n }\n }\n function C(e, t) {\n c[e] = c[e] || {}, c[e][t] = {\n line: h,\n column: d,\n pos: g\n };\n }\n function y(e, t) {\n return Array(e + 1).join(t);\n }\n }, [\"number\", \"bigint\", \"boolean\", \"string\", \"object\"]);\n function v(e) {\n return 0 <= n.indexOf(typeof e);\n }\n var i = /\"|\\\\/g,\n o = /[\\b]/g,\n r = /\\f/g,\n s = /\\n/g,\n a = /\\r/g,\n l = /\\t/g;\n function I(e) {\n return '\"' + (e = e.replace(i, \"\\\\$&\").replace(r, \"\\\\f\").replace(o, \"\\\\b\").replace(s, \"\\\\n\").replace(a, \"\\\\r\").replace(l, \"\\\\t\")) + '\"';\n }\n var c = /~/g,\n h = /\\//g;\n function w(e) {\n return e.replace(c, \"~0\").replace(h, \"~1\");\n }\n },\n 483: function (e, t) {\n var n, i;\n !function () {\n \"use strict\";\n\n i = [], void 0 !== (i = \"function\" == typeof (n = function () {\n \"use strict\";\n\n function C(e) {\n if (typeof Node === \"object\") return e instanceof Node;else return e && typeof e === \"object\" && typeof e.nodeType === \"number\";\n }\n function y(e) {\n return typeof e === \"string\";\n }\n function v() {\n var r = [];\n return {\n watch: r.push.bind(r),\n trigger: function (e, t) {\n var n = true;\n var i = {\n detail: t,\n preventDefault: function e() {\n n = false;\n }\n };\n for (var o = 0; o < r.length; o++) r[o](e, i);\n return n;\n }\n };\n }\n function o(e) {\n return window.getComputedStyle(e).display === \"none\";\n }\n function r(e) {\n this.elem = e;\n }\n function I(e, t) {\n return r.make(e(\"parent\")).clazz(\"pico-overlay\").clazz(e(\"overlayClass\", \"\")).stylize({\n display: \"none\",\n position: \"fixed\",\n top: \"0px\",\n left: \"0px\",\n height: \"100%\",\n width: \"100%\",\n zIndex: 1e4\n }).stylize(e(\"overlayStyles\", {\n opacity: .5,\n background: \"#000\"\n })).onClick(function () {\n if (e(\"overlayClose\", true)) t();\n });\n }\n r.make = function (e, t) {\n if (typeof e === \"string\") e = document.querySelector(e);\n var n = document.createElement(t || \"div\");\n (e || document.body).appendChild(n);\n return new r(n);\n }, r.prototype = {\n child: function (e) {\n return r.make(this.elem, e);\n },\n stylize: function (e) {\n e = e || {};\n if (typeof e.opacity !== \"undefined\") e.filter = \"alpha(opacity=\" + e.opacity * 100 + \")\";\n for (var t in e) if (e.hasOwnProperty(t)) this.elem.style[t] = e[t];\n return this;\n },\n clazz: function (e) {\n this.elem.className += \" \" + e;\n return this;\n },\n html: function (e) {\n if (C(e)) this.elem.appendChild(e);else this.elem.innerHTML = e;\n return this;\n },\n onClick: function (e) {\n this.elem.addEventListener(\"click\", e);\n return this;\n },\n destroy: function () {\n this.elem.parentNode.removeChild(this.elem);\n },\n hide: function () {\n this.elem.style.display = \"none\";\n },\n show: function () {\n this.elem.style.display = \"block\";\n },\n attr: function (e, t) {\n if (t !== undefined) this.elem.setAttribute(e, t);\n return this;\n },\n anyAncestor: function (e) {\n var t = this.elem;\n while (t) if (e(new r(t))) return true;else t = t.parentNode;\n return false;\n },\n isVisible: function () {\n return !o(this.elem);\n }\n };\n var s = 1;\n function b(e, n) {\n var t = e(\"width\", \"auto\");\n if (typeof t === \"number\") t = \"\" + t + \"px\";\n var i = e(\"modalId\", \"pico-\" + s++);\n var o = r.make(e(\"parent\")).clazz(\"pico-content\").clazz(e(\"modalClass\", \"\")).stylize({\n display: \"none\",\n position: \"fixed\",\n zIndex: 10001,\n left: \"50%\",\n top: \"38.1966%\",\n maxHeight: \"90%\",\n boxSizing: \"border-box\",\n width: t,\n \"-ms-transform\": \"translate(-50%,-38.1966%)\",\n \"-moz-transform\": \"translate(-50%,-38.1966%)\",\n \"-webkit-transform\": \"translate(-50%,-38.1966%)\",\n \"-o-transform\": \"translate(-50%,-38.1966%)\",\n transform: \"translate(-50%,-38.1966%)\"\n }).stylize(e(\"modalStyles\", {\n overflow: \"auto\",\n backgroundColor: \"white\",\n padding: \"20px\",\n borderRadius: \"5px\"\n })).html(e(\"content\")).attr(\"id\", i).attr(\"role\", \"dialog\").attr(\"aria-labelledby\", e(\"ariaLabelledBy\")).attr(\"aria-describedby\", e(\"ariaDescribedBy\", i)).onClick(function (e) {\n var t = new r(e.target).anyAncestor(function (e) {\n return /\\bpico-close\\b/.test(e.elem.className);\n });\n if (t) n();\n });\n return o;\n }\n function A(e, t) {\n if (t(\"closeButton\", true)) return e.child(\"button\").html(t(\"closeHtml\", \"×\")).clazz(\"pico-close\").clazz(t(\"closeClass\", \"\")).stylize(t(\"closeStyles\", {\n borderRadius: \"2px\",\n border: 0,\n padding: 0,\n cursor: \"pointer\",\n height: \"15px\",\n width: \"15px\",\n position: \"absolute\",\n top: \"5px\",\n right: \"5px\",\n fontSize: \"16px\",\n textAlign: \"center\",\n lineHeight: \"15px\",\n background: \"#CCC\"\n })).attr(\"aria-label\", t(\"close-label\", \"Close\"));\n }\n function w(e) {\n return function () {\n return e().elem;\n };\n }\n var S = v(),\n c = v();\n function x(r, s) {\n function t(e, t) {\n var n = e.msMatchesSelector || e.webkitMatchesSelector || e.matches;\n return n.call(e, t);\n }\n function i(e) {\n if (o(e) || t(e, \":disabled\") || e.hasAttribute(\"contenteditable\")) return false;else return e.hasAttribute(\"tabindex\") || t(e, \"input,select,textarea,button,a[href],area[href],iframe\");\n }\n function a(e) {\n var t = e.getElementsByTagName(\"*\");\n for (var n = 0; n < t.length; n++) if (i(t[n])) return t[n];\n }\n function l(e) {\n var t = e.getElementsByTagName(\"*\");\n for (var n = t.length; n--;) if (i(t[n])) return t[n];\n }\n var n;\n r.beforeShow(function e() {\n n = document.activeElement;\n });\n r.afterShow(function e() {\n if (s()) {\n var t = a(r.modalElem());\n if (t) t.focus();\n }\n });\n r.afterClose(function e() {\n if (s() && n) n.focus();\n n = null;\n });\n c.watch(function e(t) {\n if (s() && r.isVisible()) {\n var n = a(r.modalElem());\n var i = l(r.modalElem());\n var o = t.shiftKey ? n : i;\n if (o === document.activeElement) {\n (t.shiftKey ? i : n).focus();\n t.preventDefault();\n }\n }\n });\n }\n function k(e, t) {\n var n;\n var i = new r(document.body);\n e.beforeShow(function () {\n n = i.elem.style.overflow;\n if (t()) i.stylize({\n overflow: \"hidden\"\n });\n });\n e.afterClose(function () {\n i.stylize({\n overflow: n\n });\n });\n }\n return document.documentElement.addEventListener(\"keydown\", function e(t) {\n var n = t.which || t.keyCode;\n if (n === 27) S.trigger();else if (n === 9) c.trigger(t);\n }), function e(i) {\n if (y(i) || C(i)) i = {\n content: i\n };\n var o = v();\n var t = v();\n var n = v();\n var r = v();\n var s = v();\n function a(e, t) {\n var n = i[e];\n if (typeof n === \"function\") n = n(t);\n return n === undefined ? t : n;\n }\n var l = f.bind(window, \"modal\");\n var c = f.bind(window, \"overlay\");\n var h = f.bind(window, \"close\");\n var d;\n function u(e) {\n c().hide();\n l().hide();\n s.trigger(d, e);\n }\n function g(e) {\n if (r.trigger(d, e)) u(e);\n }\n function p(e) {\n return function () {\n e.apply(this, arguments);\n return d;\n };\n }\n var m;\n function f(e, t) {\n if (!m) {\n var n = b(a, g);\n m = {\n modal: n,\n overlay: I(a, g),\n close: A(n, a)\n };\n o.trigger(d, t);\n }\n return m[e];\n }\n d = {\n modalElem: w(l),\n closeElem: w(h),\n overlayElem: w(c),\n buildDom: p(f.bind(null, null)),\n isVisible: function () {\n return !!(m && l && l().isVisible());\n },\n show: function (e) {\n if (t.trigger(d, e)) {\n c().show();\n h();\n l().show();\n n.trigger(d, e);\n }\n return this;\n },\n close: p(g),\n forceClose: p(u),\n destroy: function () {\n l().destroy();\n c().destroy();\n c = l = h = undefined;\n },\n options: function (t) {\n Object.keys(t).map(function (e) {\n i[e] = t[e];\n });\n },\n afterCreate: p(o.watch),\n beforeShow: p(t.watch),\n afterShow: p(n.watch),\n beforeClose: p(r.watch),\n afterClose: p(s.watch)\n };\n x(d, a.bind(null, \"focus\", true));\n k(d, a.bind(null, \"bodyOverflow\", true));\n S.watch(function e() {\n if (a(\"escCloses\", true) && d.isVisible()) d.close();\n });\n return d;\n };\n }) ? n.apply(t, i) : n) && (e.exports = i);\n }();\n },\n 7533: function (e, t) {\n /** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */\n !function (e) {\n \"use strict\";\n\n function he() {\n for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n];\n if (t.length > 1) {\n t[0] = t[0].slice(0, -1);\n var i = t.length - 1;\n for (var o = 1; o < i; ++o) t[o] = t[o].slice(1, -1);\n t[i] = t[i].slice(1);\n return t.join(\"\");\n } else return t[0];\n }\n function de(e) {\n return \"(?:\" + e + \")\";\n }\n function i(e) {\n return e === undefined ? \"undefined\" : e === null ? \"null\" : Object.prototype.toString.call(e).split(\" \").pop().split(\"]\").shift().toLowerCase();\n }\n function p(e) {\n return e.toUpperCase();\n }\n function b(e) {\n return e !== undefined && e !== null ? e instanceof Array ? e : typeof e.length !== \"number\" || e.split || e.setInterval || e.call ? [e] : Array.prototype.slice.call(e) : [];\n }\n function x(e, t) {\n var n = e;\n if (t) for (var i in t) n[i] = t[i];\n return n;\n }\n function t(e) {\n var t = \"[A-Za-z]\",\n W = \"[\\\\x0D]\",\n n = \"[0-9]\",\n H = \"[\\\\x22]\",\n i = he(n, \"[A-Fa-f]\"),\n P = \"[\\\\x0A]\",\n G = \"[\\\\x20]\",\n o = de(de(\"%[EFef]\" + i + \"%\" + i + i + \"%\" + i + i) + \"|\" + de(\"%[89A-Fa-f]\" + i + \"%\" + i + i) + \"|\" + de(\"%\" + i + i)),\n r = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n s = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n a = he(r, s),\n l = e ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\",\n c = e ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\",\n h = he(t, n, \"[\\\\-\\\\.\\\\_\\\\~]\", l),\n d = de(t + he(t, n, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n u = de(de(o + \"|\" + he(h, s, \"[\\\\:]\")) + \"*\"),\n F = de(de(\"25[0-5]\") + \"|\" + de(\"2[0-4]\" + n) + \"|\" + de(\"1\" + n + n) + \"|\" + de(\"[1-9]\" + n) + \"|\" + n),\n g = de(de(\"25[0-5]\") + \"|\" + de(\"2[0-4]\" + n) + \"|\" + de(\"1\" + n + n) + \"|\" + de(\"0?[1-9]\" + n) + \"|0?0?\" + n),\n p = de(g + \"\\\\.\" + g + \"\\\\.\" + g + \"\\\\.\" + g),\n m = de(i + \"{1,4}\"),\n f = de(de(m + \"\\\\:\" + m) + \"|\" + p),\n C = de(de(m + \"\\\\:\") + \"{6}\" + f),\n y = de(\"\\\\:\\\\:\" + de(m + \"\\\\:\") + \"{5}\" + f),\n v = de(de(m) + \"?\\\\:\\\\:\" + de(m + \"\\\\:\") + \"{4}\" + f),\n V = de(de(de(m + \"\\\\:\") + \"{0,1}\" + m) + \"?\\\\:\\\\:\" + de(m + \"\\\\:\") + \"{3}\" + f),\n O = de(de(de(m + \"\\\\:\") + \"{0,2}\" + m) + \"?\\\\:\\\\:\" + de(m + \"\\\\:\") + \"{2}\" + f),\n Z = de(de(de(m + \"\\\\:\") + \"{0,3}\" + m) + \"?\\\\:\\\\:\" + m + \"\\\\:\" + f),\n D = de(de(de(m + \"\\\\:\") + \"{0,4}\" + m) + \"?\\\\:\\\\:\" + f),\n K = de(de(de(m + \"\\\\:\") + \"{0,5}\" + m) + \"?\\\\:\\\\:\" + m),\n j = de(de(de(m + \"\\\\:\") + \"{0,6}\" + m) + \"?\\\\:\\\\:\"),\n I = de([C, y, v, V, O, Z, D, K, j].join(\"|\")),\n b = de(de(h + \"|\" + o) + \"+\"),\n z = de(I + \"\\\\%25\" + b),\n X = de(I + de(\"\\\\%25|\\\\%(?!\" + i + \"{2})\") + b),\n Y = de(\"[vV]\" + i + \"+\\\\.\" + he(h, s, \"[\\\\:]\") + \"+\"),\n J = de(\"\\\\[\" + de(X + \"|\" + I + \"|\" + Y) + \"\\\\]\"),\n A = de(de(o + \"|\" + he(h, s)) + \"*\"),\n w = de(J + \"|\" + p + \"(?!\" + A + \")\" + \"|\" + A),\n S = de(n + \"*\"),\n x = de(de(u + \"@\") + \"?\" + w + de(\"\\\\:\" + S) + \"?\"),\n k = de(o + \"|\" + he(h, s, \"[\\\\:\\\\@]\")),\n U = de(k + \"*\"),\n E = de(k + \"+\"),\n Q = de(de(o + \"|\" + he(h, s, \"[\\\\@]\")) + \"+\"),\n T = de(de(\"\\\\/\" + U) + \"*\"),\n R = de(\"\\\\/\" + de(E + T) + \"?\"),\n _ = de(Q + T),\n $ = de(E + T),\n L = \"(?!\" + k + \")\",\n q = de(T + \"|\" + R + \"|\" + _ + \"|\" + $ + \"|\" + L),\n N = de(de(k + \"|\" + he(\"[\\\\/\\\\?]\", c)) + \"*\"),\n B = de(de(k + \"|[\\\\/\\\\?]\") + \"*\"),\n M = de(de(\"\\\\/\\\\/\" + x + T) + \"|\" + R + \"|\" + $ + \"|\" + L),\n ee = de(d + \"\\\\:\" + M + de(\"\\\\?\" + N) + \"?\" + de(\"\\\\#\" + B) + \"?\"),\n te = de(de(\"\\\\/\\\\/\" + x + T) + \"|\" + R + \"|\" + _ + \"|\" + L),\n ne = de(te + de(\"\\\\?\" + N) + \"?\" + de(\"\\\\#\" + B) + \"?\"),\n ie = de(ee + \"|\" + ne),\n oe = de(d + \"\\\\:\" + M + de(\"\\\\?\" + N) + \"?\"),\n re = \"^(\" + d + \")\\\\:\" + de(de(\"\\\\/\\\\/(\" + de(\"(\" + u + \")@\") + \"?(\" + w + \")\" + de(\"\\\\:(\" + S + \")\") + \"?)\") + \"?(\" + T + \"|\" + R + \"|\" + $ + \"|\" + L + \")\") + de(\"\\\\?(\" + N + \")\") + \"?\" + de(\"\\\\#(\" + B + \")\") + \"?$\",\n se = \"^(){0}\" + de(de(\"\\\\/\\\\/(\" + de(\"(\" + u + \")@\") + \"?(\" + w + \")\" + de(\"\\\\:(\" + S + \")\") + \"?)\") + \"?(\" + T + \"|\" + R + \"|\" + _ + \"|\" + L + \")\") + de(\"\\\\?(\" + N + \")\") + \"?\" + de(\"\\\\#(\" + B + \")\") + \"?$\",\n ae = \"^(\" + d + \")\\\\:\" + de(de(\"\\\\/\\\\/(\" + de(\"(\" + u + \")@\") + \"?(\" + w + \")\" + de(\"\\\\:(\" + S + \")\") + \"?)\") + \"?(\" + T + \"|\" + R + \"|\" + $ + \"|\" + L + \")\") + de(\"\\\\?(\" + N + \")\") + \"?$\",\n le = \"^\" + de(\"\\\\#(\" + B + \")\") + \"?$\",\n ce = \"^\" + de(\"(\" + u + \")@\") + \"?(\" + w + \")\" + de(\"\\\\:(\" + S + \")\") + \"?$\";\n return {\n NOT_SCHEME: new RegExp(he(\"[^]\", t, n, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n NOT_USERINFO: new RegExp(he(\"[^\\\\%\\\\:]\", h, s), \"g\"),\n NOT_HOST: new RegExp(he(\"[^\\\\%\\\\[\\\\]\\\\:]\", h, s), \"g\"),\n NOT_PATH: new RegExp(he(\"[^\\\\%\\\\/\\\\:\\\\@]\", h, s), \"g\"),\n NOT_PATH_NOSCHEME: new RegExp(he(\"[^\\\\%\\\\/\\\\@]\", h, s), \"g\"),\n NOT_QUERY: new RegExp(he(\"[^\\\\%]\", h, s, \"[\\\\:\\\\@\\\\/\\\\?]\", c), \"g\"),\n NOT_FRAGMENT: new RegExp(he(\"[^\\\\%]\", h, s, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n ESCAPE: new RegExp(he(\"[^]\", h, s), \"g\"),\n UNRESERVED: new RegExp(h, \"g\"),\n OTHER_CHARS: new RegExp(he(\"[^\\\\%]\", h, a), \"g\"),\n PCT_ENCODED: new RegExp(o, \"g\"),\n IPV4ADDRESS: new RegExp(\"^(\" + p + \")$\"),\n IPV6ADDRESS: new RegExp(\"^\\\\[?(\" + I + \")\" + de(de(\"\\\\%25|\\\\%(?!\" + i + \"{2})\") + \"(\" + b + \")\") + \"?\\\\]?$\")\n };\n }\n var a = t(false),\n l = t(true),\n A = function () {\n function n(e, t) {\n var n = [];\n var i = true;\n var o = false;\n var r = undefined;\n try {\n for (var s = e[Symbol.iterator](), a; !(i = (a = s.next()).done); i = true) {\n n.push(a.value);\n if (t && n.length === t) break;\n }\n } catch (e) {\n o = true;\n r = e;\n } finally {\n try {\n if (!i && s[\"return\"]) s[\"return\"]();\n } finally {\n if (o) throw r;\n }\n }\n return n;\n }\n return function (e, t) {\n if (Array.isArray(e)) return e;else if (Symbol.iterator in Object(e)) return n(e, t);else throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n };\n }(),\n k = function (e) {\n if (Array.isArray(e)) {\n for (var t = 0, n = Array(e.length); t < e.length; t++) n[t] = e[t];\n return n;\n } else return Array.from(e);\n },\n B = 2147483647,\n M = 36,\n W = 1,\n H = 26,\n E = 38,\n T = 700,\n P = 72,\n G = 128,\n F = \"-\",\n R = /^xn--/,\n _ = /[^\\0-\\x7E]/,\n $ = /[\\x2E\\u3002\\uFF0E\\uFF61]/g,\n L = {\n overflow: \"Overflow: input needs wider integers to process\",\n \"not-basic\": \"Illegal input >= 0x80 (not a basic code point)\",\n \"invalid-input\": \"Invalid input\"\n },\n r = M - W,\n V = Math.floor,\n O = String.fromCharCode;\n function Z(e) {\n throw new RangeError(L[e]);\n }\n function N(e, t) {\n var n = [];\n var i = e.length;\n while (i--) n[i] = t(e[i]);\n return n;\n }\n function D(e, t) {\n var n = e.split(\"@\");\n var i = \"\";\n if (n.length > 1) {\n i = n[0] + \"@\";\n e = n[1];\n }\n e = e.replace($, \".\");\n var o = e.split(\".\");\n var r = N(o, t).join(\".\");\n return i + r;\n }\n function K(e) {\n var t = [];\n var n = 0;\n var i = e.length;\n while (n < i) {\n var o = e.charCodeAt(n++);\n if (o >= 55296 && o <= 56319 && n < i) {\n var r = e.charCodeAt(n++);\n if ((r & 64512) == 56320) t.push(((o & 1023) << 10) + (r & 1023) + 65536);else {\n t.push(o);\n n--;\n }\n } else t.push(o);\n }\n return t;\n }\n var j,\n z = function e(t) {\n if (t - 48 < 10) return t - 22;\n if (t - 65 < 26) return t - 65;\n if (t - 97 < 26) return t - 97;\n return M;\n },\n X = function e(t, n) {\n return t + 22 + 75 * (t < 26) - ((n != 0) << 5);\n },\n Y = function e(t, n, i) {\n var o = 0;\n t = i ? V(t / T) : t >> 1;\n t += V(t / n);\n for (; t > r * H >> 1; o += M) t = V(t / r);\n return V(o + (r + 1) * t / (t + E));\n },\n J = function e(t) {\n var n = [];\n var i = t.length;\n var o = 0;\n var r = G;\n var s = P;\n var a = t.lastIndexOf(F);\n if (a < 0) a = 0;\n for (var l = 0; l < a; ++l) {\n if (t.charCodeAt(l) >= 128) Z(\"not-basic\");\n n.push(t.charCodeAt(l));\n }\n for (var c = a > 0 ? a + 1 : 0; c < i;) {\n var h = o;\n for (var d = 1, u = M;; u += M) {\n if (c >= i) Z(\"invalid-input\");\n var g = z(t.charCodeAt(c++));\n if (g >= M || g > V((B - o) / d)) Z(\"overflow\");\n o += g * d;\n var p = u <= s ? W : u >= s + H ? H : u - s;\n if (g < p) break;\n var m = M - p;\n if (d > V(B / m)) Z(\"overflow\");\n d *= m;\n }\n var f = n.length + 1;\n s = Y(o - h, f, h == 0);\n if (V(o / f) > B - r) Z(\"overflow\");\n r += V(o / f);\n o %= f;\n n.splice(o++, 0, r);\n }\n return String.fromCodePoint.apply(String, n);\n },\n U = function e(t) {\n var n = [];\n t = K(t);\n var i = t.length;\n var o = G;\n var r = 0;\n var s = P;\n var a = true;\n var l = false;\n var c = undefined;\n try {\n for (var h = t[Symbol.iterator](), d; !(a = (d = h.next()).done); a = true) {\n var u = d.value;\n if (u < 128) n.push(O(u));\n }\n } catch (e) {\n l = true;\n c = e;\n } finally {\n try {\n if (!a && h.return) h.return();\n } finally {\n if (l) throw c;\n }\n }\n var g = n.length;\n var p = g;\n if (g) n.push(F);\n while (p < i) {\n var m = B;\n var f = true;\n var C = false;\n var y = undefined;\n try {\n for (var v = t[Symbol.iterator](), I; !(f = (I = v.next()).done); f = true) {\n var b = I.value;\n if (b >= o && b < m) m = b;\n }\n } catch (e) {\n C = true;\n y = e;\n } finally {\n try {\n if (!f && v.return) v.return();\n } finally {\n if (C) throw y;\n }\n }\n var A = p + 1;\n if (m - o > V((B - r) / A)) Z(\"overflow\");\n r += (m - o) * A;\n o = m;\n var w = true;\n var S = false;\n var x = undefined;\n try {\n for (var k = t[Symbol.iterator](), E; !(w = (E = k.next()).done); w = true) {\n var T = E.value;\n if (T < o && ++r > B) Z(\"overflow\");\n if (T == o) {\n var R = r;\n for (var _ = M;; _ += M) {\n var $ = _ <= s ? W : _ >= s + H ? H : _ - s;\n if (R < $) break;\n var L = R - $;\n var N = M - $;\n n.push(O(X($ + L % N, 0)));\n R = V(L / N);\n }\n n.push(O(X(R, 0)));\n s = Y(r, A, p == g);\n r = 0;\n ++p;\n }\n }\n } catch (e) {\n S = true;\n x = e;\n } finally {\n try {\n if (!w && k.return) k.return();\n } finally {\n if (S) throw x;\n }\n }\n ++r;\n ++o;\n }\n return n.join(\"\");\n },\n Q,\n q,\n C = {\n version: \"2.1.0\",\n ucs2: {\n decode: K,\n encode: function e(t) {\n return String.fromCodePoint.apply(String, k(t));\n }\n },\n decode: J,\n encode: U,\n toASCII: function e(t) {\n return D(t, function (e) {\n return _.test(e) ? \"xn--\" + U(e) : e;\n });\n },\n toUnicode: function e(t) {\n return D(t, function (e) {\n return R.test(e) ? J(e.slice(4).toLowerCase()) : e;\n });\n }\n },\n h = {};\n function m(e) {\n var t = e.charCodeAt(0);\n var n = void 0;\n if (t < 16) n = \"%0\" + t.toString(16).toUpperCase();else if (t < 128) n = \"%\" + t.toString(16).toUpperCase();else if (t < 2048) n = \"%\" + (t >> 6 | 192).toString(16).toUpperCase() + \"%\" + (t & 63 | 128).toString(16).toUpperCase();else n = \"%\" + (t >> 12 | 224).toString(16).toUpperCase() + \"%\" + (t >> 6 & 63 | 128).toString(16).toUpperCase() + \"%\" + (t & 63 | 128).toString(16).toUpperCase();\n return n;\n }\n function c(e) {\n var t = \"\";\n var n = 0;\n var i = e.length;\n while (n < i) {\n var o = parseInt(e.substr(n + 1, 2), 16);\n if (o < 128) {\n t += String.fromCharCode(o);\n n += 3;\n } else if (o >= 194 && o < 224) {\n if (i - n >= 6) {\n var r = parseInt(e.substr(n + 4, 2), 16);\n t += String.fromCharCode((o & 31) << 6 | r & 63);\n } else t += e.substr(n, 6);\n n += 6;\n } else if (o >= 224) {\n if (i - n >= 9) {\n var s = parseInt(e.substr(n + 4, 2), 16);\n var a = parseInt(e.substr(n + 7, 2), 16);\n t += String.fromCharCode((o & 15) << 12 | (s & 63) << 6 | a & 63);\n } else t += e.substr(n, 9);\n n += 9;\n } else {\n t += e.substr(n, 3);\n n += 3;\n }\n }\n return t;\n }\n function d(e, n) {\n function t(e) {\n var t = c(e);\n return !t.match(n.UNRESERVED) ? e : t;\n }\n if (e.scheme) e.scheme = String(e.scheme).replace(n.PCT_ENCODED, t).toLowerCase().replace(n.NOT_SCHEME, \"\");\n if (e.userinfo !== undefined) e.userinfo = String(e.userinfo).replace(n.PCT_ENCODED, t).replace(n.NOT_USERINFO, m).replace(n.PCT_ENCODED, p);\n if (e.host !== undefined) e.host = String(e.host).replace(n.PCT_ENCODED, t).toLowerCase().replace(n.NOT_HOST, m).replace(n.PCT_ENCODED, p);\n if (e.path !== undefined) e.path = String(e.path).replace(n.PCT_ENCODED, t).replace(e.scheme ? n.NOT_PATH : n.NOT_PATH_NOSCHEME, m).replace(n.PCT_ENCODED, p);\n if (e.query !== undefined) e.query = String(e.query).replace(n.PCT_ENCODED, t).replace(n.NOT_QUERY, m).replace(n.PCT_ENCODED, p);\n if (e.fragment !== undefined) e.fragment = String(e.fragment).replace(n.PCT_ENCODED, t).replace(n.NOT_FRAGMENT, m).replace(n.PCT_ENCODED, p);\n return e;\n }\n function w(e) {\n return e.replace(/^0*(.*)/, \"$1\") || \"0\";\n }\n function S(e, t) {\n var n = e.match(t.IPV4ADDRESS) || [];\n var i = A(n, 2),\n o = i[1];\n if (o) return o.split(\".\").map(w).join(\".\");else return e;\n }\n function ee(e, t) {\n var n = e.match(t.IPV6ADDRESS) || [];\n var i = A(n, 3),\n o = i[1],\n r = i[2];\n if (o) {\n var s = o.toLowerCase().split(\"::\").reverse(),\n a = A(s, 2),\n l = a[0],\n c = a[1];\n var h = c ? c.split(\":\").map(w) : [];\n var d = l.split(\":\").map(w);\n var u = t.IPV4ADDRESS.test(d[d.length - 1]);\n var g = u ? 7 : 8;\n var p = d.length - g;\n var m = Array(g);\n for (var f = 0; f < g; ++f) m[f] = h[f] || d[p + f] || \"\";\n if (u) m[g - 1] = S(m[g - 1], t);\n var C = m.reduce(function (e, t, n) {\n if (!t || t === \"0\") {\n var i = e[e.length - 1];\n if (i && i.index + i.length === n) i.length++;else e.push({\n index: n,\n length: 1\n });\n }\n return e;\n }, []);\n var y = C.sort(function (e, t) {\n return t.length - e.length;\n })[0];\n var v = void 0;\n if (y && y.length > 1) {\n var I = m.slice(0, y.index);\n var b = m.slice(y.index + y.length);\n v = I.join(\":\") + \"::\" + b.join(\":\");\n } else v = m.join(\":\");\n if (r) v += \"%\" + r;\n return v;\n } else return e;\n }\n var te = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i,\n ne = \"\".match(/(){0}/)[1] === undefined;\n function s(e) {\n var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var n = {};\n var i = t.iri !== false ? l : a;\n if (t.reference === \"suffix\") e = (t.scheme ? t.scheme + \":\" : \"\") + \"//\" + e;\n var o = e.match(te);\n if (o) {\n if (ne) {\n n.scheme = o[1];\n n.userinfo = o[3];\n n.host = o[4];\n n.port = parseInt(o[5], 10);\n n.path = o[6] || \"\";\n n.query = o[7];\n n.fragment = o[8];\n if (isNaN(n.port)) n.port = o[5];\n } else {\n n.scheme = o[1] || undefined;\n n.userinfo = e.indexOf(\"@\") !== -1 ? o[3] : undefined;\n n.host = e.indexOf(\"//\") !== -1 ? o[4] : undefined;\n n.port = parseInt(o[5], 10);\n n.path = o[6] || \"\";\n n.query = e.indexOf(\"?\") !== -1 ? o[7] : undefined;\n n.fragment = e.indexOf(\"#\") !== -1 ? o[8] : undefined;\n if (isNaN(n.port)) n.port = e.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? o[4] : undefined;\n }\n if (n.host) n.host = ee(S(n.host, i), i);\n if (n.scheme === undefined && n.userinfo === undefined && n.host === undefined && n.port === undefined && !n.path && n.query === undefined) n.reference = \"same-document\";else if (n.scheme === undefined) n.reference = \"relative\";else if (n.fragment === undefined) n.reference = \"absolute\";else n.reference = \"uri\";\n if (t.reference && t.reference !== \"suffix\" && t.reference !== n.reference) n.error = n.error || \"URI is not a \" + t.reference + \" reference.\";\n var r = h[(t.scheme || n.scheme || \"\").toLowerCase()];\n if (!t.unicodeSupport && (!r || !r.unicodeSupport)) {\n if (n.host && (t.domainHost || r && r.domainHost)) try {\n n.host = C.toASCII(n.host.replace(i.PCT_ENCODED, c).toLowerCase());\n } catch (e) {\n n.error = n.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n }\n d(n, a);\n } else d(n, i);\n if (r && r.parse) r.parse(n, t);\n } else n.error = n.error || \"URI can not be parsed.\";\n return n;\n }\n function ie(e, t) {\n var n = t.iri !== false ? l : a;\n var i = [];\n if (e.userinfo !== undefined) {\n i.push(e.userinfo);\n i.push(\"@\");\n }\n if (e.host !== undefined) i.push(ee(S(String(e.host), n), n).replace(n.IPV6ADDRESS, function (e, t, n) {\n return \"[\" + t + (n ? \"%25\" + n : \"\") + \"]\";\n }));\n if (typeof e.port === \"number\" || typeof e.port === \"string\") {\n i.push(\":\");\n i.push(String(e.port));\n }\n return i.length ? i.join(\"\") : undefined;\n }\n var oe = /^\\.\\.?\\//,\n re = /^\\/\\.(\\/|$)/,\n se = /^\\/\\.\\.(\\/|$)/,\n ae = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\n function u(e) {\n var t = [];\n while (e.length) if (e.match(oe)) e = e.replace(oe, \"\");else if (e.match(re)) e = e.replace(re, \"/\");else if (e.match(se)) {\n e = e.replace(se, \"/\");\n t.pop();\n } else if (e === \".\" || e === \"..\") e = \"\";else {\n var n = e.match(ae);\n if (n) {\n var i = n[0];\n e = e.slice(i.length);\n t.push(i);\n } else throw new Error(\"Unexpected dot segment condition\");\n }\n return t.join(\"\");\n }\n function g(t) {\n var n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var e = n.iri ? l : a;\n var i = [];\n var o = h[(n.scheme || t.scheme || \"\").toLowerCase()];\n if (o && o.serialize) o.serialize(t, n);\n if (t.host) if (e.IPV6ADDRESS.test(t.host)) ;else if (n.domainHost || o && o.domainHost) try {\n t.host = !n.iri ? C.toASCII(t.host.replace(e.PCT_ENCODED, c).toLowerCase()) : C.toUnicode(t.host);\n } catch (e) {\n t.error = t.error || \"Host's domain name can not be converted to \" + (!n.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n }\n d(t, e);\n if (n.reference !== \"suffix\" && t.scheme) {\n i.push(t.scheme);\n i.push(\":\");\n }\n var r = ie(t, n);\n if (r !== undefined) {\n if (n.reference !== \"suffix\") i.push(\"//\");\n i.push(r);\n if (t.path && t.path.charAt(0) !== \"/\") i.push(\"/\");\n }\n if (t.path !== undefined) {\n var s = t.path;\n if (!n.absolutePath && (!o || !o.absolutePath)) s = u(s);\n if (r === undefined) s = s.replace(/^\\/\\//, \"/%2F\");\n i.push(s);\n }\n if (t.query !== undefined) {\n i.push(\"?\");\n i.push(t.query);\n }\n if (t.fragment !== undefined) {\n i.push(\"#\");\n i.push(t.fragment);\n }\n return i.join(\"\");\n }\n function le(e, t) {\n var n = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var i = arguments[3];\n var o = {};\n if (!i) {\n e = s(g(e, n), n);\n t = s(g(t, n), n);\n }\n n = n || {};\n if (!n.tolerant && t.scheme) {\n o.scheme = t.scheme;\n o.userinfo = t.userinfo;\n o.host = t.host;\n o.port = t.port;\n o.path = u(t.path || \"\");\n o.query = t.query;\n } else {\n if (t.userinfo !== undefined || t.host !== undefined || t.port !== undefined) {\n o.userinfo = t.userinfo;\n o.host = t.host;\n o.port = t.port;\n o.path = u(t.path || \"\");\n o.query = t.query;\n } else {\n if (!t.path) {\n o.path = e.path;\n if (t.query !== undefined) o.query = t.query;else o.query = e.query;\n } else {\n if (t.path.charAt(0) === \"/\") o.path = u(t.path);else {\n if ((e.userinfo !== undefined || e.host !== undefined || e.port !== undefined) && !e.path) o.path = \"/\" + t.path;else if (!e.path) o.path = t.path;else o.path = e.path.slice(0, e.path.lastIndexOf(\"/\") + 1) + t.path;\n o.path = u(o.path);\n }\n o.query = t.query;\n }\n o.userinfo = e.userinfo;\n o.host = e.host;\n o.port = e.port;\n }\n o.scheme = e.scheme;\n }\n o.fragment = t.fragment;\n return o;\n }\n function ce(e, t, n) {\n var i = x({\n scheme: \"null\"\n }, n);\n return g(le(s(e, i), s(t, i), i, true), i);\n }\n function ue(e, t) {\n if (typeof e === \"string\") e = g(s(e, t), t);else if (i(e) === \"object\") e = s(g(e, t), t);\n return e;\n }\n function ge(e, t, n) {\n if (typeof e === \"string\") e = g(s(e, n), n);else if (i(e) === \"object\") e = g(e, n);\n if (typeof t === \"string\") t = g(s(t, n), n);else if (i(t) === \"object\") t = g(t, n);\n return e === t;\n }\n function pe(e, t) {\n return e && e.toString().replace(!t || !t.iri ? a.ESCAPE : l.ESCAPE, m);\n }\n function y(e, t) {\n return e && e.toString().replace(!t || !t.iri ? a.PCT_ENCODED : l.PCT_ENCODED, c);\n }\n var n = {\n scheme: \"http\",\n domainHost: true,\n parse: function e(t, n) {\n if (!t.host) t.error = t.error || \"HTTP URIs must have a host.\";\n return t;\n },\n serialize: function e(t, n) {\n var i = String(t.scheme).toLowerCase() === \"https\";\n if (t.port === (i ? 443 : 80) || t.port === \"\") t.port = undefined;\n if (!t.path) t.path = \"/\";\n return t;\n }\n },\n me = {\n scheme: \"https\",\n domainHost: n.domainHost,\n parse: n.parse,\n serialize: n.serialize\n };\n function fe(e) {\n return typeof e.secure === \"boolean\" ? e.secure : String(e.scheme).toLowerCase() === \"wss\";\n }\n var o = {\n scheme: \"ws\",\n domainHost: true,\n parse: function e(t, n) {\n var i = t;\n i.secure = fe(i);\n i.resourceName = (i.path || \"/\") + (i.query ? \"?\" + i.query : \"\");\n i.path = undefined;\n i.query = undefined;\n return i;\n },\n serialize: function e(t, n) {\n if (t.port === (fe(t) ? 443 : 80) || t.port === \"\") t.port = undefined;\n if (typeof t.secure === \"boolean\") {\n t.scheme = t.secure ? \"wss\" : \"ws\";\n t.secure = undefined;\n }\n if (t.resourceName) {\n var i = t.resourceName.split(\"?\"),\n o = A(i, 2),\n r = o[0],\n s = o[1];\n t.path = r && r !== \"/\" ? r : undefined;\n t.query = s;\n t.resourceName = undefined;\n }\n t.fragment = undefined;\n return t;\n }\n },\n Ce = {\n scheme: \"wss\",\n domainHost: o.domainHost,\n parse: o.parse,\n serialize: o.serialize\n },\n ye = {},\n ve,\n Ie = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (true ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\",\n f = \"[0-9A-Fa-f]\",\n be = de(de(\"%[EFef]\" + f + \"%\" + f + f + \"%\" + f + f) + \"|\" + de(\"%[89A-Fa-f]\" + f + \"%\" + f + f) + \"|\" + de(\"%\" + f + f)),\n Ae = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\",\n we,\n Se = he(\"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\", '[\\\\\"\\\\\\\\]'),\n xe = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\",\n ke = new RegExp(Ie, \"g\"),\n v = new RegExp(be, \"g\"),\n Ee = new RegExp(he(\"[^]\", Ae, \"[\\\\.]\", '[\\\\\"]', Se), \"g\"),\n Te = new RegExp(he(\"[^]\", Ie, xe), \"g\"),\n Re = Te;\n function I(e) {\n var t = c(e);\n return !t.match(ke) ? e : t;\n }\n var _e = {\n scheme: \"mailto\",\n parse: function e(t, n) {\n var i = t;\n var o = i.to = i.path ? i.path.split(\",\") : [];\n i.path = undefined;\n if (i.query) {\n var r = false;\n var s = {};\n var a = i.query.split(\"&\");\n for (var l = 0, c = a.length; l < c; ++l) {\n var h = a[l].split(\"=\");\n switch (h[0]) {\n case \"to\":\n var d = h[1].split(\",\");\n for (var u = 0, g = d.length; u < g; ++u) o.push(d[u]);\n break;\n case \"subject\":\n i.subject = y(h[1], n);\n break;\n case \"body\":\n i.body = y(h[1], n);\n break;\n default:\n r = true;\n s[y(h[0], n)] = y(h[1], n);\n break;\n }\n }\n if (r) i.headers = s;\n }\n i.query = undefined;\n for (var p = 0, m = o.length; p < m; ++p) {\n var f = o[p].split(\"@\");\n f[0] = y(f[0]);\n if (!n.unicodeSupport) try {\n f[1] = C.toASCII(y(f[1], n).toLowerCase());\n } catch (e) {\n i.error = i.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n } else f[1] = y(f[1], n).toLowerCase();\n o[p] = f.join(\"@\");\n }\n return i;\n },\n serialize: function e(t, n) {\n var i = t;\n var o = b(t.to);\n if (o) {\n for (var r = 0, s = o.length; r < s; ++r) {\n var a = String(o[r]);\n var l = a.lastIndexOf(\"@\");\n var c = a.slice(0, l).replace(v, I).replace(v, p).replace(Ee, m);\n var h = a.slice(l + 1);\n try {\n h = !n.iri ? C.toASCII(y(h, n).toLowerCase()) : C.toUnicode(h);\n } catch (e) {\n i.error = i.error || \"Email address's domain name can not be converted to \" + (!n.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n }\n o[r] = c + \"@\" + h;\n }\n i.path = o.join(\",\");\n }\n var d = t.headers = t.headers || {};\n if (t.subject) d[\"subject\"] = t.subject;\n if (t.body) d[\"body\"] = t.body;\n var u = [];\n for (var g in d) if (d[g] !== ye[g]) u.push(g.replace(v, I).replace(v, p).replace(Te, m) + \"=\" + d[g].replace(v, I).replace(v, p).replace(Re, m));\n if (u.length) i.query = u.join(\"&\");\n return i;\n }\n },\n $e = /^([^\\:]+)\\:(.*)/,\n Le = {\n scheme: \"urn\",\n parse: function e(t, n) {\n var i = t.path && t.path.match($e);\n var o = t;\n if (i) {\n var r = n.scheme || o.scheme || \"urn\";\n var s = i[1].toLowerCase();\n var a = i[2];\n var l = r + \":\" + (n.nid || s);\n var c = h[l];\n o.nid = s;\n o.nss = a;\n o.path = undefined;\n if (c) o = c.parse(o, n);\n } else o.error = o.error || \"URN can not be parsed.\";\n return o;\n },\n serialize: function e(t, n) {\n var i = n.scheme || t.scheme || \"urn\";\n var o = t.nid;\n var r = i + \":\" + (n.nid || o);\n var s = h[r];\n if (s) t = s.serialize(t, n);\n var a = t;\n var l = t.nss;\n a.path = (o || n.nid) + \":\" + l;\n return a;\n }\n },\n Ne = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/,\n Be = {\n scheme: \"urn:uuid\",\n parse: function e(t, n) {\n var i = t;\n i.uuid = i.nss;\n i.nss = undefined;\n if (!n.tolerant && (!i.uuid || !i.uuid.match(Ne))) i.error = i.error || \"UUID is not valid.\";\n return i;\n },\n serialize: function e(t, n) {\n var i = t;\n i.nss = (t.uuid || \"\").toLowerCase();\n return i;\n }\n };\n h[n.scheme] = n, h[me.scheme] = me, h[o.scheme] = o, h[Ce.scheme] = Ce, h[_e.scheme] = _e, h[Le.scheme] = Le, h[Be.scheme] = Be, e.SCHEMES = h, e.pctEncChar = m, e.pctDecChars = c, e.parse = s, e.removeDotSegments = u, e.serialize = g, e.resolveComponents = le, e.resolve = ce, e.normalize = ue, e.equal = ge, e.escapeComponent = pe, e.unescapeComponent = y, Object.defineProperty(e, \"__esModule\", {\n value: true\n });\n }(t);\n },\n 4049: function (e) {\n e.exports = function () {\n \"use strict\";\n\n var s = function (e, t) {\n if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\");\n },\n e = function () {\n function i(e, t) {\n for (var n = 0; n < t.length; n++) {\n var i = t[n];\n i.enumerable = i.enumerable || false;\n i.configurable = true;\n if (\"value\" in i) i.writable = true;\n Object.defineProperty(e, i.key, i);\n }\n }\n return function (e, t, n) {\n if (t) i(e.prototype, t);\n if (n) i(e, n);\n return e;\n };\n }(),\n m = function () {\n function n(e, t) {\n var n = [];\n var i = true;\n var o = false;\n var r = undefined;\n try {\n for (var s = e[Symbol.iterator](), a; !(i = (a = s.next()).done); i = true) {\n n.push(a.value);\n if (t && n.length === t) break;\n }\n } catch (e) {\n o = true;\n r = e;\n } finally {\n try {\n if (!i && s[\"return\"]) s[\"return\"]();\n } finally {\n if (o) throw r;\n }\n }\n return n;\n }\n return function (e, t) {\n if (Array.isArray(e)) return e;else if (Symbol.iterator in Object(e)) return n(e, t);else throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n };\n }(),\n o = (String.prototype.startsWith = String.prototype.startsWith || function (e) {\n return this.indexOf(e) === 0;\n }, String.prototype.padStart = String.prototype.padStart || function (e, t) {\n var n = this;\n while (n.length < e) n = t + n;\n return n;\n }, {\n cb: \"0f8ff\",\n tqw: \"aebd7\",\n q: \"-ffff\",\n qmrn: \"7fffd4\",\n zr: \"0ffff\",\n bg: \"5f5dc\",\n bsq: \"e4c4\",\n bck: \"---\",\n nch: \"ebcd\",\n b: \"--ff\",\n bvt: \"8a2be2\",\n brwn: \"a52a2a\",\n brw: \"deb887\",\n ctb: \"5f9ea0\",\n hrt: \"7fff-\",\n chcT: \"d2691e\",\n cr: \"7f50\",\n rnw: \"6495ed\",\n crns: \"8dc\",\n crms: \"dc143c\",\n cn: \"-ffff\",\n Db: \"--8b\",\n Dcn: \"-8b8b\",\n Dgnr: \"b8860b\",\n Dgr: \"a9a9a9\",\n Dgrn: \"-64-\",\n Dkhk: \"bdb76b\",\n Dmgn: \"8b-8b\",\n Dvgr: \"556b2f\",\n Drng: \"8c-\",\n Drch: \"9932cc\",\n Dr: \"8b--\",\n Dsmn: \"e9967a\",\n Dsgr: \"8fbc8f\",\n DsTb: \"483d8b\",\n DsTg: \"2f4f4f\",\n Dtrq: \"-ced1\",\n Dvt: \"94-d3\",\n ppnk: \"1493\",\n pskb: \"-bfff\",\n mgr: \"696969\",\n grb: \"1e90ff\",\n rbrc: \"b22222\",\n rwht: \"af0\",\n stg: \"228b22\",\n chs: \"-ff\",\n gnsb: \"dcdcdc\",\n st: \"8f8ff\",\n g: \"d7-\",\n gnr: \"daa520\",\n gr: \"808080\",\n grn: \"-8-0\",\n grnw: \"adff2f\",\n hnw: \"0fff0\",\n htpn: \"69b4\",\n nnr: \"cd5c5c\",\n ng: \"4b-82\",\n vr: \"0\",\n khk: \"0e68c\",\n vnr: \"e6e6fa\",\n nrb: \"0f5\",\n wngr: \"7cfc-\",\n mnch: \"acd\",\n Lb: \"add8e6\",\n Lcr: \"08080\",\n Lcn: \"e0ffff\",\n Lgnr: \"afad2\",\n Lgr: \"d3d3d3\",\n Lgrn: \"90ee90\",\n Lpnk: \"b6c1\",\n Lsmn: \"a07a\",\n Lsgr: \"20b2aa\",\n Lskb: \"87cefa\",\n LsTg: \"778899\",\n Lstb: \"b0c4de\",\n Lw: \"e0\",\n m: \"-ff-\",\n mgrn: \"32cd32\",\n nn: \"af0e6\",\n mgnt: \"-ff\",\n mrn: \"8--0\",\n mqm: \"66cdaa\",\n mmb: \"--cd\",\n mmrc: \"ba55d3\",\n mmpr: \"9370db\",\n msg: \"3cb371\",\n mmsT: \"7b68ee\",\n \"\": \"-fa9a\",\n mtr: \"48d1cc\",\n mmvt: \"c71585\",\n mnLb: \"191970\",\n ntc: \"5fffa\",\n mstr: \"e4e1\",\n mccs: \"e4b5\",\n vjw: \"dead\",\n nv: \"--80\",\n c: \"df5e6\",\n v: \"808-0\",\n vrb: \"6b8e23\",\n rng: \"a5-\",\n rngr: \"45-\",\n rch: \"da70d6\",\n pgnr: \"eee8aa\",\n pgrn: \"98fb98\",\n ptrq: \"afeeee\",\n pvtr: \"db7093\",\n ppwh: \"efd5\",\n pchp: \"dab9\",\n pr: \"cd853f\",\n pnk: \"c0cb\",\n pm: \"dda0dd\",\n pwrb: \"b0e0e6\",\n prp: \"8-080\",\n cc: \"663399\",\n r: \"--\",\n sbr: \"bc8f8f\",\n rb: \"4169e1\",\n sbrw: \"8b4513\",\n smn: \"a8072\",\n nbr: \"4a460\",\n sgrn: \"2e8b57\",\n ssh: \"5ee\",\n snn: \"a0522d\",\n svr: \"c0c0c0\",\n skb: \"87ceeb\",\n sTb: \"6a5acd\",\n sTgr: \"708090\",\n snw: \"afa\",\n n: \"-ff7f\",\n stb: \"4682b4\",\n tn: \"d2b48c\",\n t: \"-8080\",\n thst: \"d8bfd8\",\n tmT: \"6347\",\n trqs: \"40e0d0\",\n vt: \"ee82ee\",\n whT: \"5deb3\",\n wht: \"\",\n hts: \"5f5f5\",\n w: \"-\",\n wgrn: \"9acd32\"\n });\n function a(e) {\n var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n var n = t > 0 ? e.toFixed(t).replace(/0+$/, \"\").replace(/\\.$/, \"\") : e.toString();\n return n || \"0\";\n }\n var r = function () {\n function p(e, t, n, i) {\n s(this, p);\n var g = this;\n function o(e) {\n if (e.startsWith(\"hsl\")) {\n var t = e.match(/([\\-\\d\\.e]+)/g).map(Number),\n n = m(t, 4),\n i = n[0],\n o = n[1],\n r = n[2],\n s = n[3];\n if (s === undefined) s = 1;\n i /= 360;\n o /= 100;\n r /= 100;\n g.hsla = [i, o, r, s];\n } else if (e.startsWith(\"rgb\")) {\n var a = e.match(/([\\-\\d\\.e]+)/g).map(Number),\n l = m(a, 4),\n c = l[0],\n h = l[1],\n d = l[2],\n u = l[3];\n if (u === undefined) u = 1;\n g.rgba = [c, h, d, u];\n } else if (e.startsWith(\"#\")) g.rgba = p.hexToRgb(e);else g.rgba = p.nameToRgb(e) || p.hexToRgb(e);\n }\n if (e === undefined) ;else if (Array.isArray(e)) this.rgba = e;else if (n === undefined) {\n var r = e && \"\" + e;\n if (r) o(r.toLowerCase());\n } else this.rgba = [e, t, n, i === undefined ? 1 : i];\n }\n e(p, [{\n key: \"printRGB\",\n value: function e(t) {\n var n = t ? this.rgba : this.rgba.slice(0, 3),\n i = n.map(function (e, t) {\n return a(e, t === 3 ? 3 : 0);\n });\n return t ? \"rgba(\" + i + \")\" : \"rgb(\" + i + \")\";\n }\n }, {\n key: \"printHSL\",\n value: function e(t) {\n var n = [360, 100, 100, 1],\n i = [\"\", \"%\", \"%\", \"\"];\n var o = t ? this.hsla : this.hsla.slice(0, 3),\n r = o.map(function (e, t) {\n return a(e * n[t], t === 3 ? 3 : 1) + i[t];\n });\n return t ? \"hsla(\" + r + \")\" : \"hsl(\" + r + \")\";\n }\n }, {\n key: \"printHex\",\n value: function e(t) {\n var n = this.hex;\n return t ? n : n.substring(0, 7);\n }\n }, {\n key: \"rgba\",\n get: function e() {\n if (this._rgba) return this._rgba;\n if (!this._hsla) throw new Error(\"No color is set\");\n return this._rgba = p.hslToRgb(this._hsla);\n },\n set: function e(t) {\n if (t.length === 3) t[3] = 1;\n this._rgba = t;\n this._hsla = null;\n }\n }, {\n key: \"rgbString\",\n get: function e() {\n return this.printRGB();\n }\n }, {\n key: \"rgbaString\",\n get: function e() {\n return this.printRGB(true);\n }\n }, {\n key: \"hsla\",\n get: function e() {\n if (this._hsla) return this._hsla;\n if (!this._rgba) throw new Error(\"No color is set\");\n return this._hsla = p.rgbToHsl(this._rgba);\n },\n set: function e(t) {\n if (t.length === 3) t[3] = 1;\n this._hsla = t;\n this._rgba = null;\n }\n }, {\n key: \"hslString\",\n get: function e() {\n return this.printHSL();\n }\n }, {\n key: \"hslaString\",\n get: function e() {\n return this.printHSL(true);\n }\n }, {\n key: \"hex\",\n get: function e() {\n var t = this.rgba,\n n = t.map(function (e, t) {\n return t < 3 ? e.toString(16) : Math.round(e * 255).toString(16);\n });\n return \"#\" + n.map(function (e) {\n return e.padStart(2, \"0\");\n }).join(\"\");\n },\n set: function e(t) {\n this.rgba = p.hexToRgb(t);\n }\n }], [{\n key: \"hexToRgb\",\n value: function e(t) {\n var n = (t.startsWith(\"#\") ? t.slice(1) : t).replace(/^(\\w{3})$/, \"$1F\").replace(/^(\\w)(\\w)(\\w)(\\w)$/, \"$1$1$2$2$3$3$4$4\").replace(/^(\\w{6})$/, \"$1FF\");\n if (!n.match(/^([0-9a-fA-F]{8})$/)) throw new Error(\"Unknown hex color; \" + t);\n var i = n.match(/^(\\w\\w)(\\w\\w)(\\w\\w)(\\w\\w)$/).slice(1).map(function (e) {\n return parseInt(e, 16);\n });\n i[3] = i[3] / 255;\n return i;\n }\n }, {\n key: \"nameToRgb\",\n value: function e(t) {\n var n = t.toLowerCase().replace(\"at\", \"T\").replace(/[aeiouyldf]/g, \"\").replace(\"ght\", \"L\").replace(\"rk\", \"D\").slice(-5, 4),\n i = o[n];\n return i === undefined ? i : p.hexToRgb(i.replace(/\\-/g, \"00\").padStart(6, \"f\"));\n }\n }, {\n key: \"rgbToHsl\",\n value: function e(t) {\n var n = m(t, 4),\n i = n[0],\n o = n[1],\n r = n[2],\n s = n[3];\n i /= 255;\n o /= 255;\n r /= 255;\n var a = Math.max(i, o, r),\n l = Math.min(i, o, r);\n var c = void 0,\n h = void 0,\n d = (a + l) / 2;\n if (a === l) c = h = 0;else {\n var u = a - l;\n h = d > .5 ? u / (2 - a - l) : u / (a + l);\n switch (a) {\n case i:\n c = (o - r) / u + (o < r ? 6 : 0);\n break;\n case o:\n c = (r - i) / u + 2;\n break;\n case r:\n c = (i - o) / u + 4;\n break;\n }\n c /= 6;\n }\n return [c, h, d, s];\n }\n }, {\n key: \"hslToRgb\",\n value: function e(t) {\n var n = m(t, 4),\n i = n[0],\n o = n[1],\n r = n[2],\n s = n[3];\n var a = void 0,\n l = void 0,\n c = void 0;\n if (o === 0) a = l = c = r;else {\n var h = function e(t, n, i) {\n if (i < 0) i += 1;\n if (i > 1) i -= 1;\n if (i < 1 / 6) return t + (n - t) * 6 * i;\n if (i < 1 / 2) return n;\n if (i < 2 / 3) return t + (n - t) * (2 / 3 - i) * 6;\n return t;\n };\n var d = r < .5 ? r * (1 + o) : r + o - r * o,\n u = 2 * r - d;\n a = h(u, d, i + 1 / 3);\n l = h(u, d, i);\n c = h(u, d, i - 1 / 3);\n }\n var g = [a * 255, l * 255, c * 255].map(Math.round);\n g[3] = s;\n return g;\n }\n }]);\n return p;\n }(),\n n = function () {\n function r() {\n s(this, r);\n this._events = [];\n }\n e(r, [{\n key: \"add\",\n value: function e(t, n, i) {\n t.addEventListener(n, i, false);\n this._events.push({\n target: t,\n type: n,\n handler: i\n });\n }\n }, {\n key: \"remove\",\n value: function e(n, i, o) {\n this._events = this._events.filter(function (e) {\n var t = true;\n if (n && n !== e.target) t = false;\n if (i && i !== e.type) t = false;\n if (o && o !== e.handler) t = false;\n if (t) r._doRemove(e.target, e.type, e.handler);\n return !t;\n });\n }\n }, {\n key: \"destroy\",\n value: function e() {\n this._events.forEach(function (e) {\n return r._doRemove(e.target, e.type, e.handler);\n });\n this._events = [];\n }\n }], [{\n key: \"_doRemove\",\n value: function e(t, n, i) {\n t.removeEventListener(n, i, false);\n }\n }]);\n return r;\n }();\n function l(e) {\n var t = document.createElement(\"div\");\n t.innerHTML = e;\n return t.firstElementChild;\n }\n function c(e, h, d) {\n var u = false;\n function g(e, t, n) {\n return Math.max(t, Math.min(e, n));\n }\n function i(e, t, n) {\n if (n) u = true;\n if (!u) return;\n e.preventDefault();\n var i = h.getBoundingClientRect(),\n o = i.width,\n r = i.height,\n s = t.clientX,\n a = t.clientY;\n var l = g(s - i.left, 0, o),\n c = g(a - i.top, 0, r);\n d(l / o, c / r);\n }\n function t(e, t) {\n var n = e.buttons === undefined ? e.which : e.buttons;\n if (n === 1) i(e, e, t);else u = false;\n }\n function n(e, t) {\n if (e.touches.length === 1) i(e, e.touches[0], t);else u = false;\n }\n e.add(h, \"mousedown\", function (e) {\n t(e, true);\n });\n e.add(h, \"touchstart\", function (e) {\n n(e, true);\n });\n e.add(window, \"mousemove\", t);\n e.add(h, \"touchmove\", n);\n e.add(window, \"mouseup\", function (e) {\n u = false;\n });\n e.add(h, \"touchend\", function (e) {\n u = false;\n });\n e.add(h, \"touchcancel\", function (e) {\n u = false;\n });\n }\n var b = \"linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%) 0 0 / 2em 2em,\\n linear-gradient(45deg, lightgrey 25%, white 25%, white 75%, lightgrey 75%) 1em 1em / 2em 2em\",\n A = 360,\n h = \"keydown\",\n d = \"mousedown\",\n u = \"focusin\";\n function w(e, t) {\n return (t || document).querySelector(e);\n }\n function g(e) {\n e.preventDefault();\n e.stopPropagation();\n }\n function p(e, t, n, i, o) {\n e.add(t, h, function (e) {\n if (n.indexOf(e.key) >= 0) {\n if (o) g(e);\n i(e);\n }\n });\n }\n var t = function () {\n function t(e) {\n s(this, t);\n this.settings = {\n popup: \"right\",\n layout: \"default\",\n alpha: true,\n editor: true,\n editorFormat: \"hex\",\n cancelButton: false,\n defaultColor: \"#0cf\"\n };\n this._events = new n();\n this.onChange = null;\n this.onDone = null;\n this.onOpen = null;\n this.onClose = null;\n this.setOptions(e);\n }\n e(t, [{\n key: \"setOptions\",\n value: function e(t) {\n var n = this;\n if (!t) return;\n var i = this.settings;\n function o(e, t, n) {\n for (var i in e) {\n if (n && n.indexOf(i) >= 0) continue;\n t[i] = e[i];\n }\n }\n if (t instanceof HTMLElement) i.parent = t;else {\n if (i.parent && t.parent && i.parent !== t.parent) {\n this._events.remove(i.parent);\n this._popupInited = false;\n }\n o(t, i);\n if (t.onChange) this.onChange = t.onChange;\n if (t.onDone) this.onDone = t.onDone;\n if (t.onOpen) this.onOpen = t.onOpen;\n if (t.onClose) this.onClose = t.onClose;\n var r = t.color || t.colour;\n if (r) this._setColor(r);\n }\n var s = i.parent;\n if (s && i.popup && !this._popupInited) {\n var a = function e(t) {\n return n.openHandler(t);\n };\n this._events.add(s, \"click\", a);\n p(this._events, s, [\" \", \"Spacebar\", \"Enter\"], a);\n this._popupInited = true;\n } else if (t.parent && !i.popup) this.show();\n }\n }, {\n key: \"openHandler\",\n value: function e(t) {\n if (this.show()) {\n t && t.preventDefault();\n this.settings.parent.style.pointerEvents = \"none\";\n var n = t && t.type === h ? this._domEdit : this.domElement;\n setTimeout(function () {\n return n.focus();\n }, 100);\n if (this.onOpen) this.onOpen(this.colour);\n }\n }\n }, {\n key: \"closeHandler\",\n value: function e(t) {\n var n = t && t.type;\n var i = false;\n if (!t) i = true;else if (n === d || n === u) {\n var o = (this.__containedEvent || 0) + 100;\n if (t.timeStamp > o) i = true;\n } else {\n g(t);\n i = true;\n }\n if (i && this.hide()) {\n this.settings.parent.style.pointerEvents = \"\";\n if (n !== d) this.settings.parent.focus();\n if (this.onClose) this.onClose(this.colour);\n }\n }\n }, {\n key: \"movePopup\",\n value: function e(t, n) {\n this.closeHandler();\n this.setOptions(t);\n if (n) this.openHandler();\n }\n }, {\n key: \"setColor\",\n value: function e(t, n) {\n this._setColor(t, {\n silent: n\n });\n }\n }, {\n key: \"_setColor\",\n value: function e(t, n) {\n if (typeof t === \"string\") t = t.trim();\n if (!t) return;\n n = n || {};\n var i = void 0;\n try {\n i = new r(t);\n } catch (e) {\n if (n.failSilently) return;\n throw e;\n }\n if (!this.settings.alpha) {\n var o = i.hsla;\n o[3] = 1;\n i.hsla = o;\n }\n this.colour = this.color = i;\n this._setHSLA(null, null, null, null, n);\n }\n }, {\n key: \"setColour\",\n value: function e(t, n) {\n this.setColor(t, n);\n }\n }, {\n key: \"show\",\n value: function e() {\n var t = this.settings.parent;\n if (!t) return false;\n if (this.domElement) {\n var n = this._toggleDOM(true);\n this._setPosition();\n return n;\n }\n var i = this.settings.template || '';\n var o = l(i);\n this.domElement = o;\n this._domH = w(\".picker_hue\", o);\n this._domSL = w(\".picker_sl\", o);\n this._domA = w(\".picker_alpha\", o);\n this._domEdit = w(\".picker_editor input\", o);\n this._domSample = w(\".picker_sample\", o);\n this._domOkay = w(\".picker_done button\", o);\n this._domCancel = w(\".picker_cancel button\", o);\n o.classList.add(\"layout_\" + this.settings.layout);\n if (!this.settings.alpha) o.classList.add(\"no_alpha\");\n if (!this.settings.editor) o.classList.add(\"no_editor\");\n if (!this.settings.cancelButton) o.classList.add(\"no_cancel\");\n this._ifPopup(function () {\n return o.classList.add(\"popup\");\n });\n this._setPosition();\n if (this.colour) this._updateUI();else this._setColor(this.settings.defaultColor);\n this._bindEvents();\n return true;\n }\n }, {\n key: \"hide\",\n value: function e() {\n return this._toggleDOM(false);\n }\n }, {\n key: \"destroy\",\n value: function e() {\n this._events.destroy();\n if (this.domElement) this.settings.parent.removeChild(this.domElement);\n }\n }, {\n key: \"_bindEvents\",\n value: function e() {\n var n = this;\n var i = this,\n o = this.domElement,\n r = this._events;\n function s(e, t, n) {\n r.add(e, t, n);\n }\n s(o, \"click\", function (e) {\n return e.preventDefault();\n });\n c(r, this._domH, function (e, t) {\n return i._setHSLA(e);\n });\n c(r, this._domSL, function (e, t) {\n return i._setHSLA(null, e, 1 - t);\n });\n if (this.settings.alpha) c(r, this._domA, function (e, t) {\n return i._setHSLA(null, null, null, 1 - t);\n });\n var t = this._domEdit;\n {\n s(t, \"input\", function (e) {\n i._setColor(this.value, {\n fromEditor: true,\n failSilently: true\n });\n });\n s(t, \"focus\", function (e) {\n var t = this;\n if (t.selectionStart === t.selectionEnd) t.select();\n });\n }\n this._ifPopup(function () {\n var e = function e(t) {\n return n.closeHandler(t);\n };\n s(window, d, e);\n s(window, u, e);\n p(r, o, [\"Esc\", \"Escape\"], e);\n var t = function e(t) {\n n.__containedEvent = t.timeStamp;\n };\n s(o, d, t);\n s(o, u, t);\n s(n._domCancel, \"click\", e);\n });\n var a = function e(t) {\n n._ifPopup(function () {\n return n.closeHandler(t);\n });\n if (n.onDone) n.onDone(n.colour);\n };\n s(this._domOkay, \"click\", a);\n p(r, o, [\"Enter\"], a);\n }\n }, {\n key: \"_setPosition\",\n value: function e() {\n var n = this.settings.parent,\n i = this.domElement;\n if (n !== i.parentNode) n.appendChild(i);\n this._ifPopup(function (e) {\n if (getComputedStyle(n).position === \"static\") n.style.position = \"relative\";\n var t = e === true ? \"popup_right\" : \"popup_\" + e;\n [\"popup_top\", \"popup_bottom\", \"popup_left\", \"popup_right\"].forEach(function (e) {\n if (e === t) i.classList.add(e);else i.classList.remove(e);\n });\n i.classList.add(t);\n });\n }\n }, {\n key: \"_setHSLA\",\n value: function e(t, n, i, o, r) {\n r = r || {};\n var s = this.colour,\n a = s.hsla;\n [t, n, i, o].forEach(function (e, t) {\n if (e || e === 0) a[t] = e;\n });\n s.hsla = a;\n this._updateUI(r);\n if (this.onChange && !r.silent) this.onChange(s);\n }\n }, {\n key: \"_updateUI\",\n value: function e(t) {\n if (!this.domElement) return;\n t = t || {};\n var n = this.colour,\n i = n.hsla,\n o = \"hsl(\" + i[0] * A + \", 100%, 50%)\",\n r = n.hslString,\n s = n.hslaString;\n var a = this._domH,\n l = this._domSL,\n c = this._domA,\n h = w(\".picker_selector\", a),\n d = w(\".picker_selector\", l),\n u = w(\".picker_selector\", c);\n function g(e, t, n) {\n t.style.left = n * 100 + \"%\";\n }\n function p(e, t, n) {\n t.style.top = n * 100 + \"%\";\n }\n g(a, h, i[0]);\n this._domSL.style.backgroundColor = this._domH.style.color = o;\n g(l, d, i[1]);\n p(l, d, 1 - i[2]);\n l.style.color = r;\n p(c, u, 1 - i[3]);\n var m = r,\n f = m.replace(\"hsl\", \"hsla\").replace(\")\", \", 0)\"),\n C = \"linear-gradient(\" + [m, f] + \")\";\n this._domA.style.background = C + \", \" + b;\n if (!t.fromEditor) {\n var y = this.settings.editorFormat,\n v = this.settings.alpha;\n var I = void 0;\n switch (y) {\n case \"rgb\":\n I = n.printRGB(v);\n break;\n case \"hsl\":\n I = n.printHSL(v);\n break;\n default:\n I = n.printHex(v);\n }\n this._domEdit.value = I;\n }\n this._domSample.style.color = s;\n }\n }, {\n key: \"_ifPopup\",\n value: function e(t, n) {\n if (this.settings.parent && this.settings.popup) t && t(this.settings.popup);else n && n();\n }\n }, {\n key: \"_toggleDOM\",\n value: function e(t) {\n var n = this.domElement;\n if (!n) return false;\n var i = t ? \"\" : \"none\",\n o = n.style.display !== i;\n if (o) n.style.display = i;\n return o;\n }\n }]);\n return t;\n }(),\n i = document.createElement(\"style\");\n return i.textContent = '.picker_wrapper.no_alpha .picker_alpha{display:none}.picker_wrapper.no_editor .picker_editor{position:absolute;z-index:-1;opacity:0}.picker_wrapper.no_cancel .picker_cancel{display:none}.layout_default.picker_wrapper{display:flex;flex-flow:row wrap;justify-content:space-between;align-items:stretch;font-size:10px;width:25em;padding:.5em}.layout_default.picker_wrapper input,.layout_default.picker_wrapper button{font-size:1rem}.layout_default.picker_wrapper>*{margin:.5em}.layout_default.picker_wrapper::before{content:\"\";display:block;width:100%;height:0;order:1}.layout_default .picker_slider,.layout_default .picker_selector{padding:1em}.layout_default .picker_hue{width:100%}.layout_default .picker_sl{flex:1 1 auto}.layout_default .picker_sl::before{content:\"\";display:block;padding-bottom:100%}.layout_default .picker_editor{order:1;width:6.5rem}.layout_default .picker_editor input{width:100%;height:100%}.layout_default .picker_sample{order:1;flex:1 1 auto}.layout_default .picker_done,.layout_default .picker_cancel{order:1}.picker_wrapper{box-sizing:border-box;background:#f2f2f2;box-shadow:0 0 0 1px silver;cursor:default;font-family:sans-serif;color:#444;pointer-events:auto}.picker_wrapper:focus{outline:none}.picker_wrapper button,.picker_wrapper input{box-sizing:border-box;border:none;box-shadow:0 0 0 1px silver;outline:none}.picker_wrapper button:focus,.picker_wrapper button:active,.picker_wrapper input:focus,.picker_wrapper input:active{box-shadow:0 0 2px 1px #1e90ff}.picker_wrapper button{padding:.4em .6em;cursor:pointer;background-color:#f5f5f5;background-image:linear-gradient(0deg, gainsboro, transparent)}.picker_wrapper button:active{background-image:linear-gradient(0deg, transparent, gainsboro)}.picker_wrapper button:hover{background-color:#fff}.picker_selector{position:absolute;z-index:1;display:block;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);border:2px solid #fff;border-radius:100%;box-shadow:0 0 3px 1px #67b9ff;background:currentColor;cursor:pointer}.picker_slider .picker_selector{border-radius:2px}.picker_hue{position:relative;background-image:linear-gradient(90deg, red, yellow, lime, cyan, blue, magenta, red);box-shadow:0 0 0 1px silver}.picker_sl{position:relative;box-shadow:0 0 0 1px silver;background-image:linear-gradient(180deg, white, rgba(255, 255, 255, 0) 50%),linear-gradient(0deg, black, rgba(0, 0, 0, 0) 50%),linear-gradient(90deg, #808080, rgba(128, 128, 128, 0))}.picker_alpha,.picker_sample{position:relative;background:linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%) 0 0/2em 2em,linear-gradient(45deg, lightgrey 25%, white 25%, white 75%, lightgrey 75%) 1em 1em/2em 2em;box-shadow:0 0 0 1px silver}.picker_alpha .picker_selector,.picker_sample .picker_selector{background:none}.picker_editor input{font-family:monospace;padding:.2em .4em}.picker_sample::before{content:\"\";position:absolute;display:block;width:100%;height:100%;background:currentColor}.picker_arrow{position:absolute;z-index:-1}.picker_wrapper.popup{position:absolute;z-index:2;margin:1.5em}.picker_wrapper.popup,.picker_wrapper.popup .picker_arrow::before,.picker_wrapper.popup .picker_arrow::after{background:#f2f2f2;box-shadow:0 0 10px 1px rgba(0,0,0,.4)}.picker_wrapper.popup .picker_arrow{width:3em;height:3em;margin:0}.picker_wrapper.popup .picker_arrow::before,.picker_wrapper.popup .picker_arrow::after{content:\"\";display:block;position:absolute;top:0;left:0;z-index:-99}.picker_wrapper.popup .picker_arrow::before{width:100%;height:100%;-webkit-transform:skew(45deg);transform:skew(45deg);-webkit-transform-origin:0 100%;transform-origin:0 100%}.picker_wrapper.popup .picker_arrow::after{width:150%;height:150%;box-shadow:none}.popup.popup_top{bottom:100%;left:0}.popup.popup_top .picker_arrow{bottom:0;left:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.popup.popup_bottom{top:100%;left:0}.popup.popup_bottom .picker_arrow{top:0;left:0;-webkit-transform:rotate(90deg) scale(1, -1);transform:rotate(90deg) scale(1, -1)}.popup.popup_left{top:0;right:100%}.popup.popup_left .picker_arrow{top:0;right:0;-webkit-transform:scale(-1, 1);transform:scale(-1, 1)}.popup.popup_right{top:0;left:100%}.popup.popup_right .picker_arrow{top:0;left:0}', document.documentElement.firstElementChild.appendChild(i), t.StyleElement = i, t;\n }();\n },\n 1262: function (h, e, t) {\n \"use strict\";\n\n function o(e) {\n return (o = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (e) {\n return typeof e;\n } : function (e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n })(e);\n }\n function s(e, t) {\n for (var n = 0; n < t.length; n++) {\n var i = t[n];\n i.enumerable = i.enumerable || !1, i.configurable = !0, \"value\" in i && (i.writable = !0), Object.defineProperty(e, function (e) {\n e = function (e, t) {\n if (\"object\" !== o(e) || null === e) return e;\n var n = e[Symbol.toPrimitive];\n if (void 0 === n) return (\"string\" === t ? String : Number)(e);\n n = n.call(e, t || \"default\");\n if (\"object\" !== o(n)) return n;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }(e, \"string\");\n return \"symbol\" === o(e) ? e : String(e);\n }(i.key), i);\n }\n }\n function a(n) {\n var i = r();\n return function () {\n var e,\n t = c(n),\n t = (e = i ? (e = c(this).constructor, Reflect.construct(t, arguments, e)) : t.apply(this, arguments), this);\n if (e && (\"object\" === o(e) || \"function\" == typeof e)) return e;\n if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n if (void 0 !== t) return t;\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n };\n }\n function n(e) {\n var n = \"function\" == typeof Map ? new Map() : void 0;\n return function (e) {\n if (null === e || -1 === Function.toString.call(e).indexOf(\"[native code]\")) return e;\n if (\"function\" != typeof e) throw new TypeError(\"Super expression must either be null or a function\");\n if (void 0 !== n) {\n if (n.has(e)) return n.get(e);\n n.set(e, t);\n }\n function t() {\n return i(e, arguments, c(this).constructor);\n }\n return t.prototype = Object.create(e.prototype, {\n constructor: {\n value: t,\n enumerable: !1,\n writable: !0,\n configurable: !0\n }\n }), l(t, e);\n }(e);\n }\n function i(e, t, n) {\n return (i = r() ? Reflect.construct.bind() : function (e, t, n) {\n var i = [null];\n i.push.apply(i, t);\n t = new (Function.bind.apply(e, i))();\n return n && l(t, n.prototype), t;\n }).apply(null, arguments);\n }\n function r() {\n if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n if (Reflect.construct.sham) return !1;\n if (\"function\" == typeof Proxy) return !0;\n try {\n return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})), !0;\n } catch (e) {\n return !1;\n }\n }\n function l(e, t) {\n return (l = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (e, t) {\n return e.__proto__ = t, e;\n })(e, t);\n }\n function c(e) {\n return (c = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (e) {\n return e.__proto__ || Object.getPrototypeOf(e);\n })(e);\n }\n t.d(e, {\n K: function () {\n return fe;\n }\n });\n var C = function (e) {\n var t = r;\n if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n t.prototype = Object.create(e && e.prototype, {\n constructor: {\n value: t,\n writable: !0,\n configurable: !0\n }\n }), Object.defineProperty(t, \"prototype\", {\n writable: !1\n }), e && l(t, e);\n var n,\n i,\n o = a(r);\n function r(e, t) {\n if (this instanceof r) return (e = o.call(this, e + \" at position \" + t)).position = t, e;\n throw new TypeError(\"Cannot call a class as a function\");\n }\n return t = r, n && s(t.prototype, n), i && s(t, i), Object.defineProperty(t, \"prototype\", {\n writable: !1\n }), t;\n }(n(Error)),\n y = 92,\n v = 47,\n Z = 42,\n I = 123,\n b = 125,\n A = 91,\n w = 93,\n D = 40,\n K = 41,\n d = 32,\n S = 10,\n x = 9,\n k = 13,\n j = 8,\n z = 12,\n E = 34,\n T = 43,\n R = 45,\n u = 39,\n _ = 48,\n X = 49,\n $ = 57,\n L = 44,\n Y = 46,\n J = 58,\n U = 59,\n g = 65,\n p = 97,\n Q = 69,\n q = 101,\n m = 70,\n f = 102,\n ee = 160,\n te = 8192,\n ne = 8202,\n ie = 8239,\n oe = 8287,\n re = 12288,\n se = 8220,\n ae = 8221,\n le = 8216,\n ce = 8217,\n he = 96,\n de = 180;\n function N(e) {\n return _ <= e && e <= $ || g <= e && e <= m || p <= e && e <= f;\n }\n function B(e) {\n return _ <= e && e <= $;\n }\n var ue = /^[,:[\\]{}()\\n]$/;\n function M(e) {\n return ge.test(e) || e && H(e.charCodeAt(0));\n }\n var ge = /^[[{\\w-]$/;\n function W(e) {\n return e === d || e === S || e === x || e === k;\n }\n function H(e) {\n return P(e) || F(e);\n }\n function P(e) {\n return e === E || e === se || e === ae;\n }\n function G(e) {\n return e === E;\n }\n function F(e) {\n return e === u || e === le || e === ce || e === he || e === de;\n }\n function V(e, t, n) {\n n = 2 < arguments.length && void 0 !== n && n, t = e.lastIndexOf(t);\n return -1 !== t ? e.substring(0, t) + (n ? \"\" : e.substring(t + 1)) : e;\n }\n function O(e, t) {\n var n = e.length;\n if (!W(e.charCodeAt(n - 1))) return e + t;\n for (; W(e.charCodeAt(n - 1));) n--;\n return e.substring(0, n) + t + e.substring(n);\n }\n var pe = {\n \"\\b\": \"\\\\b\",\n \"\\f\": \"\\\\f\",\n \"\\n\": \"\\\\n\",\n \"\\r\": \"\\\\r\",\n \"\\t\": \"\\\\t\"\n },\n me = {\n '\"': '\"',\n \"\\\\\": \"\\\\\",\n \"/\": \"/\",\n b: \"\\b\",\n f: \"\\f\",\n n: \"\\n\",\n r: \"\\r\",\n t: \"\\t\"\n };\n function fe(a) {\n var l = 0,\n c = \"\";\n if (!i()) throw new C(\"Unexpected end of json string\", a.length);\n var e = r(L);\n if (e && h(), M(a[l]) && /[,\\n][ \\t\\r]*$/.test(c)) {\n e || (c = O(c, \",\"));\n for (var t = !0, n = !0; n;) t ? t = !1 : r(L) || (c = O(c, \",\")), n = i();\n n || (c = V(c, \",\")), c = \"[\\n\".concat(c, \"\\n]\");\n } else e && (c = V(c, \",\"));\n if (l >= a.length) return c;\n throw new C(\"Unexpected character \" + JSON.stringify(a[l]), l);\n function i() {\n h();\n var e = function () {\n if (a.charCodeAt(l) !== I) return !1;\n c += \"{\", l++, h();\n var e = !0;\n for (; l < a.length && a.charCodeAt(l) !== b;) {\n if (e ? e = !!0 : (r(L) || (c = O(c, \",\")), h()), !(u() || g())) {\n a.charCodeAt(l) === b || a.charCodeAt(l) === I || a.charCodeAt(l) === w || a.charCodeAt(l) === A || void 0 === a[l] ? c = V(c, \",\") : function () {\n throw new C(\"Object key expected\", l);\n }();\n break;\n }\n h();\n var t = r(J);\n t || (M(a[l]) ? c = O(c, \":\") : f()), i() || (t ? function () {\n throw new C(\"Object value expected\", l);\n } : f)();\n }\n a.charCodeAt(l) === b ? (c += \"}\", l++) : c = O(c, \"}\");\n return !0;\n }() || function () {\n if (a.charCodeAt(l) !== A) return !1;\n c += \"[\", l++, h();\n var e = !0;\n for (; l < a.length && a.charCodeAt(l) !== w;) if (e ? e = !1 : r(L) || (c = O(c, \",\")), !i()) {\n c = V(c, \",\");\n break;\n }\n a.charCodeAt(l) === w ? (c += \"]\", l++) : c = O(c, \"]\");\n return !0;\n }() || u() || function () {\n var e = l;\n if (a.charCodeAt(l) === R && (l++, m(e))) return !0;\n if (a.charCodeAt(l) === _) l++;else if (function (e) {\n return X <= e && e <= $;\n }(a.charCodeAt(l))) for (l++; B(a.charCodeAt(l));) l++;\n if (a.charCodeAt(l) === Y) {\n if (l++, m(e)) return !0;\n for (; B(a.charCodeAt(l));) l++;\n }\n if (a.charCodeAt(l) === q || a.charCodeAt(l) === Q) {\n if (l++, a.charCodeAt(l) !== R && a.charCodeAt(l) !== T || l++, m(e)) return !0;\n for (; B(a.charCodeAt(l));) l++;\n }\n if (e < l) return c += a.slice(e, l), !0;\n return !1;\n }() || s(\"true\", \"true\") || s(\"false\", \"false\") || s(\"null\", \"null\") || s(\"True\", \"true\") || s(\"False\", \"false\") || s(\"None\", \"null\") || g();\n return h(), e;\n }\n function h() {\n for (o(); function () {\n if (a.charCodeAt(l) === v && a.charCodeAt(l + 1) === Z) {\n for (; l < a.length && !function (e, t) {\n return \"*\" === e[t] && \"/\" === e[t + 1];\n }(a, l);) l++;\n l += 2;\n } else {\n if (a.charCodeAt(l) !== v || a.charCodeAt(l + 1) !== v) return !1;\n for (; l < a.length && a.charCodeAt(l) !== S;) l++;\n }\n return !0;\n }() && o(););\n }\n function o() {\n for (var e, t, n = \"\"; (e = W(a.charCodeAt(l))) || (t = a.charCodeAt(l)) === ee || te <= t && t <= ne || t === ie || t === oe || t === re;) n += e ? a[l] : \" \", l++;\n return 0 < n.length && (c += n, !0);\n }\n function r(e) {\n return a.charCodeAt(l) === e && (c += a[l], l++, !0);\n }\n function d() {\n return e = y, a.charCodeAt(l) === e && (l++, !0);\n var e;\n }\n function u() {\n var e,\n t = a.charCodeAt(l) === y;\n if (t && (l++, t = !0), H(a.charCodeAt(l))) {\n var n = F(a.charCodeAt(l)) ? F : G(a.charCodeAt(l)) ? G : P;\n for (c += '\"', l++; l < a.length && !n(a.charCodeAt(l));) {\n if (a.charCodeAt(l) === y) {\n var i = a[l + 1];\n if (void 0 !== me[i]) c += a.slice(l, l + 2), l += 2;else if (\"u\" === i) {\n if (!(N(a.charCodeAt(l + 2)) && N(a.charCodeAt(l + 3)) && N(a.charCodeAt(l + 4)) && N(a.charCodeAt(l + 5)))) {\n r = o = void 0;\n for (var o = l, r = o + 2; /\\w/.test(a[r]);) r++;\n throw o = a.slice(o, r), new C('Invalid unicode character \"'.concat(o, '\"'), l);\n }\n c += a.slice(l, l + 6), l += 6;\n } else c += i, l += 2;\n } else {\n o = a[l], i = a.charCodeAt(l);\n if (i === E && a.charCodeAt(l - 1) !== y) c += \"\\\\\" + o;else if ((e = i) === S || e === k || e === x || e === j || e === z) c += pe[o];else {\n if (!(32 <= (e = i) && e <= 1114111)) throw new C(\"Invalid character \" + JSON.stringify(o), l);\n c += o;\n }\n l++;\n }\n t && d();\n }\n H(a.charCodeAt(l)) ? (a.charCodeAt(l), c += '\"', l++) : c += '\"';\n for (h(); a.charCodeAt(l) === T;) {\n l++, h();\n var s = (c = V(c, '\"', !0)).length;\n u(), c = function (e, t, n) {\n return e.substring(0, t) + e.substring(t + n);\n }(c, s, 1);\n }\n return !0;\n }\n return !1;\n }\n function s(e, t) {\n return a.slice(l, l + e.length) === e && (c += t, l += e.length, !0);\n }\n function g() {\n for (var e, t = l; l < a.length && (e = a[l], !(ue.test(e) || e && H(e.charCodeAt(0))));) l++;\n if (t < l) {\n if (a.charCodeAt(l) === D) l++, i(), a.charCodeAt(l) === K && (l++, a.charCodeAt(l) === U) && l++;else {\n for (; W(a.charCodeAt(l - 1)) && 0 < l;) l--;\n t = a.slice(t, l);\n c += JSON.stringify(t);\n }\n return !0;\n }\n }\n function p(e) {\n if (!B(a.charCodeAt(l))) throw e = a.slice(e, l), new C(\"Invalid number '\".concat(e, \"', expecting a digit \").concat(a[l] ? \"but got '\".concat(a[l], \"'\") : \"but reached end of input\"), 2);\n }\n function m(e) {\n if (l >= a.length) return c += a.slice(e, l) + \"0\", 1;\n p(e);\n }\n function f() {\n throw new C(\"Colon expected\", l);\n }\n }\n },\n 894: function (e) {\n \"use strict\";\n\n e.exports = JSON.parse('{\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"$id\":\"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\"description\":\"Meta-schema for $data reference (JSON Schema extension proposal)\",\"type\":\"object\",\"required\":[\"$data\"],\"properties\":{\"$data\":{\"type\":\"string\",\"anyOf\":[{\"format\":\"relative-json-pointer\"},{\"format\":\"json-pointer\"}]}},\"additionalProperties\":false}');\n },\n 7171: function (e) {\n \"use strict\";\n\n e.exports = JSON.parse('{\"id\":\"http://json-schema.org/draft-04/schema#\",\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"description\":\"Core schema meta-schema\",\"definitions\":{\"schemaArray\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#\"}},\"positiveInteger\":{\"type\":\"integer\",\"minimum\":0},\"positiveIntegerDefault0\":{\"allOf\":[{\"$ref\":\"#/definitions/positiveInteger\"},{\"default\":0}]},\"simpleTypes\":{\"enum\":[\"array\",\"boolean\",\"integer\",\"null\",\"number\",\"object\",\"string\"]},\"stringArray\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"minItems\":1,\"uniqueItems\":true}},\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"$schema\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"default\":{},\"multipleOf\":{\"type\":\"number\",\"minimum\":0,\"exclusiveMinimum\":true},\"maximum\":{\"type\":\"number\"},\"exclusiveMaximum\":{\"type\":\"boolean\",\"default\":false},\"minimum\":{\"type\":\"number\"},\"exclusiveMinimum\":{\"type\":\"boolean\",\"default\":false},\"maxLength\":{\"$ref\":\"#/definitions/positiveInteger\"},\"minLength\":{\"$ref\":\"#/definitions/positiveIntegerDefault0\"},\"pattern\":{\"type\":\"string\",\"format\":\"regex\"},\"additionalItems\":{\"anyOf\":[{\"type\":\"boolean\"},{\"$ref\":\"#\"}],\"default\":{}},\"items\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/schemaArray\"}],\"default\":{}},\"maxItems\":{\"$ref\":\"#/definitions/positiveInteger\"},\"minItems\":{\"$ref\":\"#/definitions/positiveIntegerDefault0\"},\"uniqueItems\":{\"type\":\"boolean\",\"default\":false},\"maxProperties\":{\"$ref\":\"#/definitions/positiveInteger\"},\"minProperties\":{\"$ref\":\"#/definitions/positiveIntegerDefault0\"},\"required\":{\"$ref\":\"#/definitions/stringArray\"},\"additionalProperties\":{\"anyOf\":[{\"type\":\"boolean\"},{\"$ref\":\"#\"}],\"default\":{}},\"definitions\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"properties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"patternProperties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"dependencies\":{\"type\":\"object\",\"additionalProperties\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/stringArray\"}]}},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true},\"type\":{\"anyOf\":[{\"$ref\":\"#/definitions/simpleTypes\"},{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/simpleTypes\"},\"minItems\":1,\"uniqueItems\":true}]},\"format\":{\"type\":\"string\"},\"allOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"anyOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"oneOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"not\":{\"$ref\":\"#\"}},\"dependencies\":{\"exclusiveMaximum\":[\"maximum\"],\"exclusiveMinimum\":[\"minimum\"]},\"default\":{}}');\n },\n 6273: function (e) {\n \"use strict\";\n\n e.exports = JSON.parse('{\"$schema\":\"http://json-schema.org/draft-06/schema#\",\"$id\":\"http://json-schema.org/draft-06/schema#\",\"title\":\"Core schema meta-schema\",\"definitions\":{\"schemaArray\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#\"}},\"nonNegativeInteger\":{\"type\":\"integer\",\"minimum\":0},\"nonNegativeIntegerDefault0\":{\"allOf\":[{\"$ref\":\"#/definitions/nonNegativeInteger\"},{\"default\":0}]},\"simpleTypes\":{\"enum\":[\"array\",\"boolean\",\"integer\",\"null\",\"number\",\"object\",\"string\"]},\"stringArray\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"uniqueItems\":true,\"default\":[]}},\"type\":[\"object\",\"boolean\"],\"properties\":{\"$id\":{\"type\":\"string\",\"format\":\"uri-reference\"},\"$schema\":{\"type\":\"string\",\"format\":\"uri\"},\"$ref\":{\"type\":\"string\",\"format\":\"uri-reference\"},\"title\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"default\":{},\"examples\":{\"type\":\"array\",\"items\":{}},\"multipleOf\":{\"type\":\"number\",\"exclusiveMinimum\":0},\"maximum\":{\"type\":\"number\"},\"exclusiveMaximum\":{\"type\":\"number\"},\"minimum\":{\"type\":\"number\"},\"exclusiveMinimum\":{\"type\":\"number\"},\"maxLength\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minLength\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"pattern\":{\"type\":\"string\",\"format\":\"regex\"},\"additionalItems\":{\"$ref\":\"#\"},\"items\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/schemaArray\"}],\"default\":{}},\"maxItems\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minItems\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"uniqueItems\":{\"type\":\"boolean\",\"default\":false},\"contains\":{\"$ref\":\"#\"},\"maxProperties\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minProperties\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"required\":{\"$ref\":\"#/definitions/stringArray\"},\"additionalProperties\":{\"$ref\":\"#\"},\"definitions\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"properties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"patternProperties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"dependencies\":{\"type\":\"object\",\"additionalProperties\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/stringArray\"}]}},\"propertyNames\":{\"$ref\":\"#\"},\"const\":{},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true},\"type\":{\"anyOf\":[{\"$ref\":\"#/definitions/simpleTypes\"},{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/simpleTypes\"},\"minItems\":1,\"uniqueItems\":true}]},\"format\":{\"type\":\"string\"},\"allOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"anyOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"oneOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"not\":{\"$ref\":\"#\"}},\"default\":{}}');\n },\n 6680: function (e) {\n \"use strict\";\n\n e.exports = JSON.parse('{\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"$id\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"Core schema meta-schema\",\"definitions\":{\"schemaArray\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#\"}},\"nonNegativeInteger\":{\"type\":\"integer\",\"minimum\":0},\"nonNegativeIntegerDefault0\":{\"allOf\":[{\"$ref\":\"#/definitions/nonNegativeInteger\"},{\"default\":0}]},\"simpleTypes\":{\"enum\":[\"array\",\"boolean\",\"integer\",\"null\",\"number\",\"object\",\"string\"]},\"stringArray\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"uniqueItems\":true,\"default\":[]}},\"type\":[\"object\",\"boolean\"],\"properties\":{\"$id\":{\"type\":\"string\",\"format\":\"uri-reference\"},\"$schema\":{\"type\":\"string\",\"format\":\"uri\"},\"$ref\":{\"type\":\"string\",\"format\":\"uri-reference\"},\"$comment\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"default\":true,\"readOnly\":{\"type\":\"boolean\",\"default\":false},\"examples\":{\"type\":\"array\",\"items\":true},\"multipleOf\":{\"type\":\"number\",\"exclusiveMinimum\":0},\"maximum\":{\"type\":\"number\"},\"exclusiveMaximum\":{\"type\":\"number\"},\"minimum\":{\"type\":\"number\"},\"exclusiveMinimum\":{\"type\":\"number\"},\"maxLength\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minLength\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"pattern\":{\"type\":\"string\",\"format\":\"regex\"},\"additionalItems\":{\"$ref\":\"#\"},\"items\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/schemaArray\"}],\"default\":true},\"maxItems\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minItems\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"uniqueItems\":{\"type\":\"boolean\",\"default\":false},\"contains\":{\"$ref\":\"#\"},\"maxProperties\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minProperties\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"required\":{\"$ref\":\"#/definitions/stringArray\"},\"additionalProperties\":{\"$ref\":\"#\"},\"definitions\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"properties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"patternProperties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"propertyNames\":{\"format\":\"regex\"},\"default\":{}},\"dependencies\":{\"type\":\"object\",\"additionalProperties\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/stringArray\"}]}},\"propertyNames\":{\"$ref\":\"#\"},\"const\":true,\"enum\":{\"type\":\"array\",\"items\":true,\"minItems\":1,\"uniqueItems\":true},\"type\":{\"anyOf\":[{\"$ref\":\"#/definitions/simpleTypes\"},{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/simpleTypes\"},\"minItems\":1,\"uniqueItems\":true}]},\"format\":{\"type\":\"string\"},\"contentMediaType\":{\"type\":\"string\"},\"contentEncoding\":{\"type\":\"string\"},\"if\":{\"$ref\":\"#\"},\"then\":{\"$ref\":\"#\"},\"else\":{\"$ref\":\"#\"},\"allOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"anyOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"oneOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"not\":{\"$ref\":\"#\"}},\"default\":true}');\n }\n }, o = {}, i.amdD = function () {\n throw new Error(\"define cannot be used indirect\");\n }, i.n = function (e) {\n var t = e && e.__esModule ? function () {\n return e.default;\n } : function () {\n return e;\n };\n return i.d(t, {\n a: t\n }), t;\n }, i.d = function (e, t) {\n for (var n in t) i.o(t, n) && !i.o(e, n) && Object.defineProperty(e, n, {\n enumerable: !0,\n get: t[n]\n });\n }, i.o = function (e, t) {\n return Object.prototype.hasOwnProperty.call(e, t);\n }, i.r = function (e) {\n \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {\n value: \"Module\"\n }), Object.defineProperty(e, \"__esModule\", {\n value: !0\n });\n }, i.nmd = function (e) {\n return e.paths = [], e.children || (e.children = []), e;\n }, i(3161);\n function i(e) {\n var t = o[e];\n return void 0 !== t || (t = o[e] = {\n id: e,\n loaded: !1,\n exports: {}\n }, n[e].call(t.exports, t, t.exports, i), t.loaded = !0), t.exports;\n }\n var n, o;\n});\n","!\n/**\n* Highcharts JS v11.4.8 (2024-08-29)\n*\n* (c) 2009-2024 Torstein Honsi\n*\n* License: www.highcharts.com/license\n*/\nfunction (t, e) {\n \"object\" == typeof module && module.exports ? (e.default = e, module.exports = t && t.document ? e(t) : e) : \"function\" == typeof define && define.amd ? define(\"highcharts/highcharts\", function () {\n return e(t);\n }) : (t.Highcharts && t.Highcharts.error(16, !0), t.Highcharts = e(t));\n}(\"undefined\" != typeof window ? window : this, function (t) {\n \"use strict\";\n\n var e = {};\n function i(e, i, s, r) {\n !e.hasOwnProperty(i) && (e[i] = r.apply(null, s), t && \"function\" == typeof CustomEvent && t.dispatchEvent(new CustomEvent(\"HighchartsModuleLoaded\", {\n detail: {\n path: i,\n module: e[i]\n }\n })));\n }\n return i(e, \"Core/Globals.js\", [], function () {\n var e, i;\n return (i = e || (e = {})).SVG_NS = \"http://www.w3.org/2000/svg\", i.product = \"Highcharts\", i.version = \"11.4.8\", i.win = void 0 !== t ? t : {}, i.doc = i.win.document, i.svg = i.doc && i.doc.createElementNS && !!i.doc.createElementNS(i.SVG_NS, \"svg\").createSVGRect, i.userAgent = i.win.navigator && i.win.navigator.userAgent || \"\", i.isChrome = i.win.chrome, i.isFirefox = -1 !== i.userAgent.indexOf(\"Firefox\"), i.isMS = /(edge|msie|trident)/i.test(i.userAgent) && !i.win.opera, i.isSafari = !i.isChrome && -1 !== i.userAgent.indexOf(\"Safari\"), i.isTouchDevice = /(Mobile|Android|Windows Phone)/.test(i.userAgent), i.isWebKit = -1 !== i.userAgent.indexOf(\"AppleWebKit\"), i.deg2rad = 2 * Math.PI / 360, i.hasBidiBug = i.isFirefox && 4 > parseInt(i.userAgent.split(\"Firefox/\")[1], 10), i.marginNames = [\"plotTop\", \"marginRight\", \"marginBottom\", \"plotLeft\"], i.noop = function () {}, i.supportsPassiveEvents = function () {\n let t = !1;\n if (!i.isMS) {\n let e = Object.defineProperty({}, \"passive\", {\n get: function () {\n t = !0;\n }\n });\n i.win.addEventListener && i.win.removeEventListener && (i.win.addEventListener(\"testPassive\", i.noop, e), i.win.removeEventListener(\"testPassive\", i.noop, e));\n }\n return t;\n }(), i.charts = [], i.composed = [], i.dateFormats = {}, i.seriesTypes = {}, i.symbolSizes = {}, i.chartCount = 0, e;\n }), i(e, \"Core/Utilities.js\", [e[\"Core/Globals.js\"]], function (t) {\n let e;\n let {\n charts: i,\n doc: s,\n win: r\n } = t;\n function o(e, i, s, n) {\n let a = i ? \"Highcharts error\" : \"Highcharts warning\";\n 32 === e && (e = `${a}: Deprecated member`);\n let h = p(e),\n l = h ? `${a} #${e}: www.highcharts.com/errors/${e}/` : e.toString();\n if (void 0 !== n) {\n let t = \"\";\n h && (l += \"?\"), C(n, function (e, i) {\n t += `\n - ${i}: ${e}`, h && (l += encodeURI(i) + \"=\" + encodeURI(e));\n }), l += t;\n }\n M(t, \"displayError\", {\n chart: s,\n code: e,\n message: l,\n params: n\n }, function () {\n if (i) throw Error(l);\n r.console && -1 === o.messages.indexOf(l) && console.warn(l);\n }), o.messages.push(l);\n }\n function n(t, e) {\n return parseInt(t, e || 10);\n }\n function a(t) {\n return \"string\" == typeof t;\n }\n function h(t) {\n let e = Object.prototype.toString.call(t);\n return \"[object Array]\" === e || \"[object Array Iterator]\" === e;\n }\n function l(t, e) {\n return !!t && \"object\" == typeof t && (!e || !h(t));\n }\n function d(t) {\n return l(t) && \"number\" == typeof t.nodeType;\n }\n function c(t) {\n let e = t && t.constructor;\n return !!(l(t, !0) && !d(t) && e && e.name && \"Object\" !== e.name);\n }\n function p(t) {\n return \"number\" == typeof t && !isNaN(t) && t < 1 / 0 && t > -1 / 0;\n }\n function u(t) {\n return null != t;\n }\n function g(t, e, i) {\n let s;\n let r = a(e) && !u(i),\n o = (e, i) => {\n u(e) ? t.setAttribute(i, e) : r ? (s = t.getAttribute(i)) || \"class\" !== i || (s = t.getAttribute(i + \"Name\")) : t.removeAttribute(i);\n };\n return a(e) ? o(i, e) : C(e, o), s;\n }\n function f(t) {\n return h(t) ? t : [t];\n }\n function m(t, e) {\n let i;\n for (i in t || (t = {}), e) t[i] = e[i];\n return t;\n }\n function x() {\n let t = arguments,\n e = t.length;\n for (let i = 0; i < e; i++) {\n let e = t[i];\n if (null != e) return e;\n }\n }\n function y(t, e) {\n m(t.style, e);\n }\n function b(t) {\n return Math.pow(10, Math.floor(Math.log(t) / Math.LN10));\n }\n function v(t, e) {\n return t > 1e14 ? t : parseFloat(t.toPrecision(e || 14));\n }\n (o || (o = {})).messages = [], Math.easeInOutSine = function (t) {\n return -.5 * (Math.cos(Math.PI * t) - 1);\n };\n let S = Array.prototype.find ? function (t, e) {\n return t.find(e);\n } : function (t, e) {\n let i;\n let s = t.length;\n for (i = 0; i < s; i++) if (e(t[i], i)) return t[i];\n };\n function C(t, e, i) {\n for (let s in t) Object.hasOwnProperty.call(t, s) && e.call(i || t[s], t[s], s, t);\n }\n function k(t, e, i) {\n function s(e, i) {\n let s = t.removeEventListener;\n s && s.call(t, e, i, !1);\n }\n function r(i) {\n let r, o;\n t.nodeName && (e ? (r = {})[e] = !0 : r = i, C(r, function (t, e) {\n if (i[e]) for (o = i[e].length; o--;) s(e, i[e][o].fn);\n }));\n }\n let o = \"function\" == typeof t && t.prototype || t;\n if (Object.hasOwnProperty.call(o, \"hcEvents\")) {\n let t = o.hcEvents;\n if (e) {\n let o = t[e] || [];\n i ? (t[e] = o.filter(function (t) {\n return i !== t.fn;\n }), s(e, i)) : (r(t), t[e] = []);\n } else r(t), delete o.hcEvents;\n }\n }\n function M(e, i, r, o) {\n if (r = r || {}, s.createEvent && (e.dispatchEvent || e.fireEvent && e !== t)) {\n let t = s.createEvent(\"Events\");\n t.initEvent(i, !0, !0), r = m(t, r), e.dispatchEvent ? e.dispatchEvent(r) : e.fireEvent(i, r);\n } else if (e.hcEvents) {\n r.target || m(r, {\n preventDefault: function () {\n r.defaultPrevented = !0;\n },\n target: e,\n type: i\n });\n let t = [],\n s = e,\n o = !1;\n for (; s.hcEvents;) Object.hasOwnProperty.call(s, \"hcEvents\") && s.hcEvents[i] && (t.length && (o = !0), t.unshift.apply(t, s.hcEvents[i])), s = Object.getPrototypeOf(s);\n o && t.sort((t, e) => t.order - e.order), t.forEach(t => {\n !1 === t.fn.call(e, r) && r.preventDefault();\n });\n }\n o && !r.defaultPrevented && o.call(e, r);\n }\n C({\n map: \"map\",\n each: \"forEach\",\n grep: \"filter\",\n reduce: \"reduce\",\n some: \"some\"\n }, function (e, i) {\n t[i] = function (t) {\n return o(32, !1, void 0, {\n [`Highcharts.${i}`]: `use Array.${e}`\n }), Array.prototype[e].apply(t, [].slice.call(arguments, 1));\n };\n });\n let w = function () {\n let t = Math.random().toString(36).substring(2, 9) + \"-\",\n i = 0;\n return function () {\n return \"highcharts-\" + (e ? \"\" : t) + i++;\n };\n }();\n return r.jQuery && (r.jQuery.fn.highcharts = function () {\n let e = [].slice.call(arguments);\n if (this[0]) return e[0] ? (new t[a(e[0]) ? e.shift() : \"Chart\"](this[0], e[0], e[1]), this) : i[g(this[0], \"data-highcharts-chart\")];\n }), {\n addEvent: function (e, i, s, r = {}) {\n let o = \"function\" == typeof e && e.prototype || e;\n Object.hasOwnProperty.call(o, \"hcEvents\") || (o.hcEvents = {});\n let n = o.hcEvents;\n t.Point && e instanceof t.Point && e.series && e.series.chart && (e.series.chart.runTrackerClick = !0);\n let a = e.addEventListener;\n a && a.call(e, i, s, !!t.supportsPassiveEvents && {\n passive: void 0 === r.passive ? -1 !== i.indexOf(\"touch\") : r.passive,\n capture: !1\n }), n[i] || (n[i] = []);\n let h = {\n fn: s,\n order: \"number\" == typeof r.order ? r.order : 1 / 0\n };\n return n[i].push(h), n[i].sort((t, e) => t.order - e.order), function () {\n k(e, i, s);\n };\n },\n arrayMax: function (t) {\n let e = t.length,\n i = t[0];\n for (; e--;) t[e] > i && (i = t[e]);\n return i;\n },\n arrayMin: function (t) {\n let e = t.length,\n i = t[0];\n for (; e--;) t[e] < i && (i = t[e]);\n return i;\n },\n attr: g,\n clamp: function (t, e, i) {\n return t > e ? t < i ? t : i : e;\n },\n clearTimeout: function (t) {\n u(t) && clearTimeout(t);\n },\n correctFloat: v,\n createElement: function (t, e, i, r, o) {\n let n = s.createElement(t);\n return e && m(n, e), o && y(n, {\n padding: \"0\",\n border: \"none\",\n margin: \"0\"\n }), i && y(n, i), r && r.appendChild(n), n;\n },\n crisp: (t, e = 0, i) => {\n let s = e % 2 / 2,\n r = i ? -1 : 1;\n return (Math.round(t * r - s) + s) * r;\n },\n css: y,\n defined: u,\n destroyObjectProperties: function (t, e, i) {\n C(t, function (s, r) {\n s !== e && s?.destroy && s.destroy(), (s?.destroy || !i) && delete t[r];\n });\n },\n diffObjects: function (t, e, i, s) {\n let r = {};\n return function t(e, r, o, n) {\n let a = i ? r : e;\n C(e, function (i, d) {\n if (!n && s && s.indexOf(d) > -1 && r[d]) {\n i = f(i), o[d] = [];\n for (let e = 0; e < Math.max(i.length, r[d].length); e++) r[d][e] && (void 0 === i[e] ? o[d][e] = r[d][e] : (o[d][e] = {}, t(i[e], r[d][e], o[d][e], n + 1)));\n } else l(i, !0) && !i.nodeType ? (o[d] = h(i) ? [] : {}, t(i, r[d] || {}, o[d], n + 1), 0 !== Object.keys(o[d]).length || \"colorAxis\" === d && 0 === n || delete o[d]) : (e[d] !== r[d] || d in e && !(d in r)) && \"__proto__\" !== d && \"constructor\" !== d && (o[d] = a[d]);\n });\n }(t, e, r, 0), r;\n },\n discardElement: function (t) {\n t && t.parentElement && t.parentElement.removeChild(t);\n },\n erase: function (t, e) {\n let i = t.length;\n for (; i--;) if (t[i] === e) {\n t.splice(i, 1);\n break;\n }\n },\n error: o,\n extend: m,\n extendClass: function (t, e) {\n let i = function () {};\n return i.prototype = new t(), m(i.prototype, e), i;\n },\n find: S,\n fireEvent: M,\n getClosestDistance: function (t, e) {\n let i, s, r, o;\n let n = !e;\n return t.forEach(t => {\n if (t.length > 1) for (o = s = t.length - 1; o > 0; o--) (r = t[o] - t[o - 1]) < 0 && !n ? (e?.(), e = void 0) : r && (void 0 === i || r < i) && (i = r);\n }), i;\n },\n getMagnitude: b,\n getNestedProperty: function (t, e) {\n let i = t.split(\".\");\n for (; i.length && u(e);) {\n let t = i.shift();\n if (void 0 === t || \"__proto__\" === t) return;\n if (\"this\" === t) {\n let t;\n return l(e) && (t = e[\"@this\"]), t ?? e;\n }\n let s = e[t];\n if (!u(s) || \"function\" == typeof s || \"number\" == typeof s.nodeType || s === r) return;\n e = s;\n }\n return e;\n },\n getStyle: function t(e, i, s) {\n let o;\n if (\"width\" === i) {\n let i = Math.min(e.offsetWidth, e.scrollWidth),\n s = e.getBoundingClientRect && e.getBoundingClientRect().width;\n return s < i && s >= i - 1 && (i = Math.floor(s)), Math.max(0, i - (t(e, \"padding-left\", !0) || 0) - (t(e, \"padding-right\", !0) || 0));\n }\n if (\"height\" === i) return Math.max(0, Math.min(e.offsetHeight, e.scrollHeight) - (t(e, \"padding-top\", !0) || 0) - (t(e, \"padding-bottom\", !0) || 0));\n let a = r.getComputedStyle(e, void 0);\n return a && (o = a.getPropertyValue(i), x(s, \"opacity\" !== i) && (o = n(o))), o;\n },\n inArray: function (t, e, i) {\n return o(32, !1, void 0, {\n \"Highcharts.inArray\": \"use Array.indexOf\"\n }), e.indexOf(t, i);\n },\n insertItem: function (t, e) {\n let i;\n let s = t.options.index,\n r = e.length;\n for (i = t.options.isInternal ? r : 0; i < r + 1; i++) if (!e[i] || p(s) && s < x(e[i].options.index, e[i]._i) || e[i].options.isInternal) {\n e.splice(i, 0, t);\n break;\n }\n return i;\n },\n isArray: h,\n isClass: c,\n isDOMElement: d,\n isFunction: function (t) {\n return \"function\" == typeof t;\n },\n isNumber: p,\n isObject: l,\n isString: a,\n keys: function (t) {\n return o(32, !1, void 0, {\n \"Highcharts.keys\": \"use Object.keys\"\n }), Object.keys(t);\n },\n merge: function () {\n let t,\n e = arguments,\n i = {},\n s = function (t, e) {\n return \"object\" != typeof t && (t = {}), C(e, function (i, r) {\n \"__proto__\" !== r && \"constructor\" !== r && (!l(i, !0) || c(i) || d(i) ? t[r] = e[r] : t[r] = s(t[r] || {}, i));\n }), t;\n };\n !0 === e[0] && (i = e[1], e = Array.prototype.slice.call(e, 2));\n let r = e.length;\n for (t = 0; t < r; t++) i = s(i, e[t]);\n return i;\n },\n normalizeTickInterval: function (t, e, i, s, r) {\n let o,\n n = t;\n i = x(i, b(t));\n let a = t / i;\n for (!e && (e = r ? [1, 1.2, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10] : [1, 2, 2.5, 5, 10], !1 === s && (1 === i ? e = e.filter(function (t) {\n return t % 1 == 0;\n }) : i <= .1 && (e = [1 / i]))), o = 0; o < e.length && (n = e[o], (!r || !(n * i >= t)) && (r || !(a <= (e[o] + (e[o + 1] || e[o])) / 2))); o++);\n return v(n * i, -Math.round(Math.log(.001) / Math.LN10));\n },\n objectEach: C,\n offset: function (t) {\n let e = s.documentElement,\n i = t.parentElement || t.parentNode ? t.getBoundingClientRect() : {\n top: 0,\n left: 0,\n width: 0,\n height: 0\n };\n return {\n top: i.top + (r.pageYOffset || e.scrollTop) - (e.clientTop || 0),\n left: i.left + (r.pageXOffset || e.scrollLeft) - (e.clientLeft || 0),\n width: i.width,\n height: i.height\n };\n },\n pad: function (t, e, i) {\n return Array((e || 2) + 1 - String(t).replace(\"-\", \"\").length).join(i || \"0\") + t;\n },\n pick: x,\n pInt: n,\n pushUnique: function (t, e) {\n return 0 > t.indexOf(e) && !!t.push(e);\n },\n relativeLength: function (t, e, i) {\n return /%$/.test(t) ? e * parseFloat(t) / 100 + (i || 0) : parseFloat(t);\n },\n removeEvent: k,\n replaceNested: function (t, ...e) {\n let i, s;\n do for (s of (i = t, e)) t = t.replace(s[0], s[1]); while (t !== i);\n return t;\n },\n splat: f,\n stableSort: function (t, e) {\n let i, s;\n let r = t.length;\n for (s = 0; s < r; s++) t[s].safeI = s;\n for (t.sort(function (t, s) {\n return 0 === (i = e(t, s)) ? t.safeI - s.safeI : i;\n }), s = 0; s < r; s++) delete t[s].safeI;\n },\n syncTimeout: function (t, e, i) {\n return e > 0 ? setTimeout(t, e, i) : (t.call(0, i), -1);\n },\n timeUnits: {\n millisecond: 1,\n second: 1e3,\n minute: 6e4,\n hour: 36e5,\n day: 864e5,\n week: 6048e5,\n month: 24192e5,\n year: 314496e5\n },\n uniqueKey: w,\n useSerialIds: function (t) {\n return e = x(t, e);\n },\n wrap: function (t, e, i) {\n let s = t[e];\n t[e] = function () {\n let t = arguments,\n e = this;\n return i.apply(this, [function () {\n return s.apply(e, arguments.length ? arguments : t);\n }].concat([].slice.call(arguments)));\n };\n }\n };\n }), i(e, \"Core/Chart/ChartDefaults.js\", [], function () {\n return {\n alignThresholds: !1,\n panning: {\n enabled: !1,\n type: \"x\"\n },\n styledMode: !1,\n borderRadius: 0,\n colorCount: 10,\n allowMutatingData: !0,\n ignoreHiddenSeries: !0,\n spacing: [10, 10, 15, 10],\n resetZoomButton: {\n theme: {},\n position: {}\n },\n reflow: !0,\n type: \"line\",\n zooming: {\n singleTouch: !1,\n resetButton: {\n theme: {\n zIndex: 6\n },\n position: {\n align: \"right\",\n x: -10,\n y: 10\n }\n }\n },\n width: null,\n height: null,\n borderColor: \"#334eff\",\n backgroundColor: \"#ffffff\",\n plotBorderColor: \"#cccccc\"\n };\n }), i(e, \"Core/Color/Palettes.js\", [], function () {\n return {\n colors: [\"#2caffe\", \"#544fc5\", \"#00e272\", \"#fe6a35\", \"#6b8abc\", \"#d568fb\", \"#2ee0ca\", \"#fa4b42\", \"#feb56a\", \"#91e8e1\"]\n };\n }), i(e, \"Core/Time.js\", [e[\"Core/Globals.js\"], e[\"Core/Utilities.js\"]], function (t, e) {\n let {\n win: i\n } = t,\n {\n defined: s,\n error: r,\n extend: o,\n isNumber: n,\n isObject: a,\n merge: h,\n objectEach: l,\n pad: d,\n pick: c,\n splat: p,\n timeUnits: u\n } = e,\n g = t.isSafari && i.Intl && i.Intl.DateTimeFormat.prototype.formatRange,\n f = t.isSafari && i.Intl && !i.Intl.DateTimeFormat.prototype.formatRange;\n class m {\n constructor(t) {\n this.options = {}, this.useUTC = !1, this.variableTimezone = !1, this.Date = i.Date, this.getTimezoneOffset = this.timezoneOffsetFunction(), this.update(t);\n }\n get(t, e) {\n if (this.variableTimezone || this.timezoneOffset) {\n let i = e.getTime(),\n s = i - this.getTimezoneOffset(e);\n e.setTime(s);\n let r = e[\"getUTC\" + t]();\n return e.setTime(i), r;\n }\n return this.useUTC ? e[\"getUTC\" + t]() : e[\"get\" + t]();\n }\n set(t, e, i) {\n if (this.variableTimezone || this.timezoneOffset) {\n if (\"Milliseconds\" === t || \"Seconds\" === t || \"Minutes\" === t && this.getTimezoneOffset(e) % 36e5 == 0) return e[\"setUTC\" + t](i);\n let s = this.getTimezoneOffset(e),\n r = e.getTime() - s;\n e.setTime(r), e[\"setUTC\" + t](i);\n let o = this.getTimezoneOffset(e);\n return r = e.getTime() + o, e.setTime(r);\n }\n return this.useUTC || g && \"FullYear\" === t ? e[\"setUTC\" + t](i) : e[\"set\" + t](i);\n }\n update(t = {}) {\n let e = c(t.useUTC, !0);\n this.options = t = h(!0, this.options, t), this.Date = t.Date || i.Date || Date, this.useUTC = e, this.timezoneOffset = e && t.timezoneOffset || void 0, this.getTimezoneOffset = this.timezoneOffsetFunction(), this.variableTimezone = e && !!(t.getTimezoneOffset || t.timezone);\n }\n makeTime(t, e, i, s, r, o) {\n let n, a, h;\n return this.useUTC ? (n = this.Date.UTC.apply(0, arguments), a = this.getTimezoneOffset(n), n += a, a !== (h = this.getTimezoneOffset(n)) ? n += h - a : a - 36e5 !== this.getTimezoneOffset(n - 36e5) || f || (n -= 36e5)) : n = new this.Date(t, e, c(i, 1), c(s, 0), c(r, 0), c(o, 0)).getTime(), n;\n }\n timezoneOffsetFunction() {\n let t = this,\n e = this.options,\n i = e.getTimezoneOffset;\n return this.useUTC ? e.timezone ? t => {\n try {\n let i = `shortOffset,${e.timezone || \"\"}`,\n [s, r, o, a, h = 0] = (m.formatCache[i] = m.formatCache[i] || Intl.DateTimeFormat(\"en\", {\n timeZone: e.timezone,\n timeZoneName: \"shortOffset\"\n })).format(t).split(/(GMT|:)/).map(Number),\n l = -(36e5 * (o + h / 60));\n if (n(l)) return l;\n } catch (t) {\n r(34);\n }\n return 0;\n } : this.useUTC && i ? t => 6e4 * i(t.valueOf()) : () => 6e4 * (t.timezoneOffset || 0) : t => 6e4 * new Date(t.toString()).getTimezoneOffset();\n }\n dateFormat(e, i, r) {\n if (!s(i) || isNaN(i)) return t.defaultOptions.lang && t.defaultOptions.lang.invalidDate || \"\";\n e = c(e, \"%Y-%m-%d %H:%M:%S\");\n let n = this,\n a = new this.Date(i),\n h = this.get(\"Hours\", a),\n p = this.get(\"Day\", a),\n u = this.get(\"Date\", a),\n g = this.get(\"Month\", a),\n f = this.get(\"FullYear\", a),\n m = t.defaultOptions.lang,\n x = m && m.weekdays,\n y = m && m.shortWeekdays;\n return l(o({\n a: y ? y[p] : x[p].substr(0, 3),\n A: x[p],\n d: d(u),\n e: d(u, 2, \" \"),\n w: p,\n b: m.shortMonths[g],\n B: m.months[g],\n m: d(g + 1),\n o: g + 1,\n y: f.toString().substr(2, 2),\n Y: f,\n H: d(h),\n k: h,\n I: d(h % 12 || 12),\n l: h % 12 || 12,\n M: d(this.get(\"Minutes\", a)),\n p: h < 12 ? \"AM\" : \"PM\",\n P: h < 12 ? \"am\" : \"pm\",\n S: d(this.get(\"Seconds\", a)),\n L: d(Math.floor(i % 1e3), 3)\n }, t.dateFormats), function (t, s) {\n for (; -1 !== e.indexOf(\"%\" + s);) e = e.replace(\"%\" + s, \"function\" == typeof t ? t.call(n, i) : t);\n }), r ? e.substr(0, 1).toUpperCase() + e.substr(1) : e;\n }\n resolveDTLFormat(t) {\n return a(t, !0) ? t : {\n main: (t = p(t))[0],\n from: t[1],\n to: t[2]\n };\n }\n getTimeTicks(t, e, i, r) {\n let n, a, h, l;\n let d = this,\n p = d.Date,\n g = [],\n f = {},\n m = new p(e),\n x = t.unitRange,\n y = t.count || 1;\n if (r = c(r, 1), s(e)) {\n d.set(\"Milliseconds\", m, x >= u.second ? 0 : y * Math.floor(d.get(\"Milliseconds\", m) / y)), x >= u.second && d.set(\"Seconds\", m, x >= u.minute ? 0 : y * Math.floor(d.get(\"Seconds\", m) / y)), x >= u.minute && d.set(\"Minutes\", m, x >= u.hour ? 0 : y * Math.floor(d.get(\"Minutes\", m) / y)), x >= u.hour && d.set(\"Hours\", m, x >= u.day ? 0 : y * Math.floor(d.get(\"Hours\", m) / y)), x >= u.day && d.set(\"Date\", m, x >= u.month ? 1 : Math.max(1, y * Math.floor(d.get(\"Date\", m) / y))), x >= u.month && (d.set(\"Month\", m, x >= u.year ? 0 : y * Math.floor(d.get(\"Month\", m) / y)), a = d.get(\"FullYear\", m)), x >= u.year && (a -= a % y, d.set(\"FullYear\", m, a)), x === u.week && (l = d.get(\"Day\", m), d.set(\"Date\", m, d.get(\"Date\", m) - l + r + (l < r ? -7 : 0))), a = d.get(\"FullYear\", m);\n let t = d.get(\"Month\", m),\n o = d.get(\"Date\", m),\n c = d.get(\"Hours\", m);\n e = m.getTime(), (d.variableTimezone || !d.useUTC) && s(i) && (h = i - e > 4 * u.month || d.getTimezoneOffset(e) !== d.getTimezoneOffset(i));\n let p = m.getTime();\n for (n = 1; p < i;) g.push(p), x === u.year ? p = d.makeTime(a + n * y, 0) : x === u.month ? p = d.makeTime(a, t + n * y) : h && (x === u.day || x === u.week) ? p = d.makeTime(a, t, o + n * y * (x === u.day ? 1 : 7)) : h && x === u.hour && y > 1 ? p = d.makeTime(a, t, o, c + n * y) : p += x * y, n++;\n g.push(p), x <= u.hour && g.length < 1e4 && g.forEach(function (t) {\n t % 18e5 == 0 && \"000000000\" === d.dateFormat(\"%H%M%S%L\", t) && (f[t] = \"day\");\n });\n }\n return g.info = o(t, {\n higherRanks: f,\n totalRange: x * y\n }), g;\n }\n getDateFormat(t, e, i, s) {\n let r = this.dateFormat(\"%m-%d %H:%M:%S.%L\", e),\n o = \"01-01 00:00:00.000\",\n n = {\n millisecond: 15,\n second: 12,\n minute: 9,\n hour: 6,\n day: 3\n },\n a = \"millisecond\",\n h = a;\n for (a in u) {\n if (t === u.week && +this.dateFormat(\"%w\", e) === i && r.substr(6) === o.substr(6)) {\n a = \"week\";\n break;\n }\n if (u[a] > t) {\n a = h;\n break;\n }\n if (n[a] && r.substr(n[a]) !== o.substr(n[a])) break;\n \"week\" !== a && (h = a);\n }\n return this.resolveDTLFormat(s[a]).main;\n }\n }\n return m.formatCache = {}, m;\n }), i(e, \"Core/Defaults.js\", [e[\"Core/Chart/ChartDefaults.js\"], e[\"Core/Globals.js\"], e[\"Core/Color/Palettes.js\"], e[\"Core/Time.js\"], e[\"Core/Utilities.js\"]], function (t, e, i, s, r) {\n let {\n isTouchDevice: o\n } = e,\n {\n fireEvent: n,\n merge: a\n } = r,\n h = {\n colors: i.colors,\n symbols: [\"circle\", \"diamond\", \"square\", \"triangle\", \"triangle-down\"],\n lang: {\n loading: \"Loading...\",\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n weekdays: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n decimalPoint: \".\",\n numericSymbols: [\"k\", \"M\", \"G\", \"T\", \"P\", \"E\"],\n resetZoom: \"Reset zoom\",\n resetZoomTitle: \"Reset zoom level 1:1\",\n thousandsSep: \" \"\n },\n global: {\n buttonTheme: {\n fill: \"#f7f7f7\",\n padding: 8,\n r: 2,\n stroke: \"#cccccc\",\n \"stroke-width\": 1,\n style: {\n color: \"#333333\",\n cursor: \"pointer\",\n fontSize: \"0.8em\",\n fontWeight: \"normal\"\n },\n states: {\n hover: {\n fill: \"#e6e6e6\"\n },\n select: {\n fill: \"#e6e9ff\",\n style: {\n color: \"#000000\",\n fontWeight: \"bold\"\n }\n },\n disabled: {\n style: {\n color: \"#cccccc\"\n }\n }\n }\n }\n },\n time: {\n Date: void 0,\n getTimezoneOffset: void 0,\n timezone: void 0,\n timezoneOffset: 0,\n useUTC: !0\n },\n chart: t,\n title: {\n style: {\n color: \"#333333\",\n fontWeight: \"bold\"\n },\n text: \"Chart title\",\n align: \"center\",\n margin: 15,\n widthAdjust: -44\n },\n subtitle: {\n style: {\n color: \"#666666\",\n fontSize: \"0.8em\"\n },\n text: \"\",\n align: \"center\",\n widthAdjust: -44\n },\n caption: {\n margin: 15,\n style: {\n color: \"#666666\",\n fontSize: \"0.8em\"\n },\n text: \"\",\n align: \"left\",\n verticalAlign: \"bottom\"\n },\n plotOptions: {},\n legend: {\n enabled: !0,\n align: \"center\",\n alignColumns: !0,\n className: \"highcharts-no-tooltip\",\n events: {},\n layout: \"horizontal\",\n itemMarginBottom: 2,\n itemMarginTop: 2,\n labelFormatter: function () {\n return this.name;\n },\n borderColor: \"#999999\",\n borderRadius: 0,\n navigation: {\n style: {\n fontSize: \"0.8em\"\n },\n activeColor: \"#0022ff\",\n inactiveColor: \"#cccccc\"\n },\n itemStyle: {\n color: \"#333333\",\n cursor: \"pointer\",\n fontSize: \"0.8em\",\n textDecoration: \"none\",\n textOverflow: \"ellipsis\"\n },\n itemHoverStyle: {\n color: \"#000000\"\n },\n itemHiddenStyle: {\n color: \"#666666\",\n textDecoration: \"line-through\"\n },\n shadow: !1,\n itemCheckboxStyle: {\n position: \"absolute\",\n width: \"13px\",\n height: \"13px\"\n },\n squareSymbol: !0,\n symbolPadding: 5,\n verticalAlign: \"bottom\",\n x: 0,\n y: 0,\n title: {\n style: {\n fontSize: \"0.8em\",\n fontWeight: \"bold\"\n }\n }\n },\n loading: {\n labelStyle: {\n fontWeight: \"bold\",\n position: \"relative\",\n top: \"45%\"\n },\n style: {\n position: \"absolute\",\n backgroundColor: \"#ffffff\",\n opacity: .5,\n textAlign: \"center\"\n }\n },\n tooltip: {\n enabled: !0,\n animation: {\n duration: 300,\n easing: t => Math.sqrt(1 - Math.pow(t - 1, 2))\n },\n borderRadius: 3,\n dateTimeLabelFormats: {\n millisecond: \"%A, %e %b, %H:%M:%S.%L\",\n second: \"%A, %e %b, %H:%M:%S\",\n minute: \"%A, %e %b, %H:%M\",\n hour: \"%A, %e %b, %H:%M\",\n day: \"%A, %e %b %Y\",\n week: \"Week from %A, %e %b %Y\",\n month: \"%B %Y\",\n year: \"%Y\"\n },\n footerFormat: \"\",\n headerShape: \"callout\",\n hideDelay: 500,\n padding: 8,\n shape: \"callout\",\n shared: !1,\n snap: o ? 25 : 10,\n headerFormat: '{point.key} ',\n pointFormat: '● {series.name}: {point.y} ',\n backgroundColor: \"#ffffff\",\n borderWidth: void 0,\n shadow: !0,\n stickOnContact: !1,\n style: {\n color: \"#333333\",\n cursor: \"default\",\n fontSize: \"0.8em\"\n },\n useHTML: !1\n },\n credits: {\n enabled: !0,\n href: \"https://www.highcharts.com?credits\",\n position: {\n align: \"right\",\n x: -10,\n verticalAlign: \"bottom\",\n y: -5\n },\n style: {\n cursor: \"pointer\",\n color: \"#999999\",\n fontSize: \"0.6em\"\n },\n text: \"Highcharts.com\"\n }\n };\n h.chart.styledMode = !1;\n let l = new s(h.time);\n return {\n defaultOptions: h,\n defaultTime: l,\n getOptions: function () {\n return h;\n },\n setOptions: function (t) {\n return n(e, \"setOptions\", {\n options: t\n }), a(!0, h, t), (t.time || t.global) && (e.time ? e.time.update(a(h.global, h.time, t.global, t.time)) : e.time = l), h;\n }\n };\n }), i(e, \"Core/Color/Color.js\", [e[\"Core/Globals.js\"], e[\"Core/Utilities.js\"]], function (t, e) {\n let {\n isNumber: i,\n merge: s,\n pInt: r\n } = e;\n class o {\n static parse(t) {\n return t ? new o(t) : o.None;\n }\n constructor(e) {\n let i, s, r, n;\n this.rgba = [NaN, NaN, NaN, NaN], this.input = e;\n let a = t.Color;\n if (a && a !== o) return new a(e);\n if (\"object\" == typeof e && void 0 !== e.stops) this.stops = e.stops.map(t => new o(t[1]));else if (\"string\" == typeof e) {\n if (this.input = e = o.names[e.toLowerCase()] || e, \"#\" === e.charAt(0)) {\n let t = e.length,\n i = parseInt(e.substr(1), 16);\n 7 === t ? s = [(16711680 & i) >> 16, (65280 & i) >> 8, 255 & i, 1] : 4 === t && (s = [(3840 & i) >> 4 | (3840 & i) >> 8, (240 & i) >> 4 | 240 & i, (15 & i) << 4 | 15 & i, 1]);\n }\n if (!s) for (r = o.parsers.length; r-- && !s;) (i = (n = o.parsers[r]).regex.exec(e)) && (s = n.parse(i));\n }\n s && (this.rgba = s);\n }\n get(t) {\n let e = this.input,\n r = this.rgba;\n if (\"object\" == typeof e && void 0 !== this.stops) {\n let i = s(e);\n return i.stops = [].slice.call(i.stops), this.stops.forEach((e, s) => {\n i.stops[s] = [i.stops[s][0], e.get(t)];\n }), i;\n }\n return r && i(r[0]) ? \"rgb\" !== t && (t || 1 !== r[3]) ? \"a\" === t ? `${r[3]}` : \"rgba(\" + r.join(\",\") + \")\" : \"rgb(\" + r[0] + \",\" + r[1] + \",\" + r[2] + \")\" : e;\n }\n brighten(t) {\n let e = this.rgba;\n if (this.stops) this.stops.forEach(function (e) {\n e.brighten(t);\n });else if (i(t) && 0 !== t) for (let i = 0; i < 3; i++) e[i] += r(255 * t), e[i] < 0 && (e[i] = 0), e[i] > 255 && (e[i] = 255);\n return this;\n }\n setOpacity(t) {\n return this.rgba[3] = t, this;\n }\n tweenTo(t, e) {\n let s = this.rgba,\n r = t.rgba;\n if (!i(s[0]) || !i(r[0])) return t.input || \"none\";\n let o = 1 !== r[3] || 1 !== s[3];\n return (o ? \"rgba(\" : \"rgb(\") + Math.round(r[0] + (s[0] - r[0]) * (1 - e)) + \",\" + Math.round(r[1] + (s[1] - r[1]) * (1 - e)) + \",\" + Math.round(r[2] + (s[2] - r[2]) * (1 - e)) + (o ? \",\" + (r[3] + (s[3] - r[3]) * (1 - e)) : \"\") + \")\";\n }\n }\n return o.names = {\n white: \"#ffffff\",\n black: \"#000000\"\n }, o.parsers = [{\n regex: /rgba\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d?(?:\\.\\d+)?)\\s*\\)/,\n parse: function (t) {\n return [r(t[1]), r(t[2]), r(t[3]), parseFloat(t[4], 10)];\n }\n }, {\n regex: /rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)/,\n parse: function (t) {\n return [r(t[1]), r(t[2]), r(t[3]), 1];\n }\n }], o.None = new o(\"\"), o;\n }), i(e, \"Core/Animation/Fx.js\", [e[\"Core/Color/Color.js\"], e[\"Core/Globals.js\"], e[\"Core/Utilities.js\"]], function (t, e, i) {\n let {\n parse: s\n } = t,\n {\n win: r\n } = e,\n {\n isNumber: o,\n objectEach: n\n } = i;\n class a {\n constructor(t, e, i) {\n this.pos = NaN, this.options = e, this.elem = t, this.prop = i;\n }\n dSetter() {\n let t = this.paths,\n e = t && t[0],\n i = t && t[1],\n s = this.now || 0,\n r = [];\n if (1 !== s && e && i) {\n if (e.length === i.length && s < 1) for (let t = 0; t < i.length; t++) {\n let n = e[t],\n a = i[t],\n h = [];\n for (let t = 0; t < a.length; t++) {\n let e = n[t],\n i = a[t];\n o(e) && o(i) && !(\"A\" === a[0] && (4 === t || 5 === t)) ? h[t] = e + s * (i - e) : h[t] = i;\n }\n r.push(h);\n } else r = i;\n } else r = this.toD || [];\n this.elem.attr(\"d\", r, void 0, !0);\n }\n update() {\n let t = this.elem,\n e = this.prop,\n i = this.now,\n s = this.options.step;\n this[e + \"Setter\"] ? this[e + \"Setter\"]() : t.attr ? t.element && t.attr(e, i, null, !0) : t.style[e] = i + this.unit, s && s.call(t, i, this);\n }\n run(t, e, i) {\n let s = this,\n o = s.options,\n n = function (t) {\n return !n.stopped && s.step(t);\n },\n h = r.requestAnimationFrame || function (t) {\n setTimeout(t, 13);\n },\n l = function () {\n for (let t = 0; t < a.timers.length; t++) a.timers[t]() || a.timers.splice(t--, 1);\n a.timers.length && h(l);\n };\n t !== e || this.elem[\"forceAnimate:\" + this.prop] ? (this.startTime = +new Date(), this.start = t, this.end = e, this.unit = i, this.now = this.start, this.pos = 0, n.elem = this.elem, n.prop = this.prop, n() && 1 === a.timers.push(n) && h(l)) : (delete o.curAnim[this.prop], o.complete && 0 === Object.keys(o.curAnim).length && o.complete.call(this.elem));\n }\n step(t) {\n let e, i;\n let s = +new Date(),\n r = this.options,\n o = this.elem,\n a = r.complete,\n h = r.duration,\n l = r.curAnim;\n return o.attr && !o.element ? e = !1 : t || s >= h + this.startTime ? (this.now = this.end, this.pos = 1, this.update(), l[this.prop] = !0, i = !0, n(l, function (t) {\n !0 !== t && (i = !1);\n }), i && a && a.call(o), e = !1) : (this.pos = r.easing((s - this.startTime) / h), this.now = this.start + (this.end - this.start) * this.pos, this.update(), e = !0), e;\n }\n initPath(t, e, i) {\n let s = t.startX,\n r = t.endX,\n n = i.slice(),\n a = t.isArea,\n h = a ? 2 : 1,\n l = e && i.length > e.length && i.hasStackedCliffs,\n d,\n c,\n p,\n u,\n g = e && e.slice();\n if (!g || l) return [n, n];\n function f(t, e) {\n for (; t.length < c;) {\n let i = t[0],\n s = e[c - t.length];\n if (s && \"M\" === i[0] && (\"C\" === s[0] ? t[0] = [\"C\", i[1], i[2], i[1], i[2], i[1], i[2]] : t[0] = [\"L\", i[1], i[2]]), t.unshift(i), a) {\n let e = t.pop();\n t.push(t[t.length - 1], e);\n }\n }\n }\n function m(t) {\n for (; t.length < c;) {\n let e = t[Math.floor(t.length / h) - 1].slice();\n if (\"C\" === e[0] && (e[1] = e[5], e[2] = e[6]), a) {\n let i = t[Math.floor(t.length / h)].slice();\n t.splice(t.length / 2, 0, e, i);\n } else t.push(e);\n }\n }\n if (s && r && r.length) {\n for (p = 0; p < s.length; p++) {\n if (s[p] === r[0]) {\n d = p;\n break;\n }\n if (s[0] === r[r.length - s.length + p]) {\n d = p, u = !0;\n break;\n }\n if (s[s.length - 1] === r[r.length - s.length + p]) {\n d = s.length - p;\n break;\n }\n }\n void 0 === d && (g = []);\n }\n return g.length && o(d) && (c = n.length + d * h, u ? (f(g, n), m(n)) : (f(n, g), m(g))), [g, n];\n }\n fillSetter() {\n a.prototype.strokeSetter.apply(this, arguments);\n }\n strokeSetter() {\n this.elem.attr(this.prop, s(this.start).tweenTo(s(this.end), this.pos), void 0, !0);\n }\n }\n return a.timers = [], a;\n }), i(e, \"Core/Animation/AnimationUtilities.js\", [e[\"Core/Animation/Fx.js\"], e[\"Core/Utilities.js\"]], function (t, e) {\n let {\n defined: i,\n getStyle: s,\n isArray: r,\n isNumber: o,\n isObject: n,\n merge: a,\n objectEach: h,\n pick: l\n } = e;\n function d(t) {\n return n(t) ? a({\n duration: 500,\n defer: 0\n }, t) : {\n duration: t ? 500 : 0,\n defer: 0\n };\n }\n function c(e, i) {\n let s = t.timers.length;\n for (; s--;) t.timers[s].elem !== e || i && i !== t.timers[s].prop || (t.timers[s].stopped = !0);\n }\n return {\n animate: function (e, i, l) {\n let d,\n p = \"\",\n u,\n g,\n f;\n n(l) || (f = arguments, l = {\n duration: f[2],\n easing: f[3],\n complete: f[4]\n }), o(l.duration) || (l.duration = 400), l.easing = \"function\" == typeof l.easing ? l.easing : Math[l.easing] || Math.easeInOutSine, l.curAnim = a(i), h(i, function (o, n) {\n c(e, n), g = new t(e, l, n), u = void 0, \"d\" === n && r(i.d) ? (g.paths = g.initPath(e, e.pathArray, i.d), g.toD = i.d, d = 0, u = 1) : e.attr ? d = e.attr(n) : (d = parseFloat(s(e, n)) || 0, \"opacity\" !== n && (p = \"px\")), u || (u = o), \"string\" == typeof u && u.match(\"px\") && (u = u.replace(/px/g, \"\")), g.run(d, u, p);\n });\n },\n animObject: d,\n getDeferredAnimation: function (t, e, s) {\n let r = d(e),\n o = s ? [s] : t.series,\n a = 0,\n h = 0;\n return o.forEach(t => {\n let s = d(t.options.animation);\n a = n(e) && i(e.defer) ? r.defer : Math.max(a, s.duration + s.defer), h = Math.min(r.duration, s.duration);\n }), t.renderer.forExport && (a = 0), {\n defer: Math.max(0, a - h),\n duration: Math.min(a, h)\n };\n },\n setAnimation: function (t, e) {\n e.renderer.globalAnimation = l(t, e.options.chart.animation, !0);\n },\n stop: c\n };\n }), i(e, \"Core/Renderer/HTML/AST.js\", [e[\"Core/Globals.js\"], e[\"Core/Utilities.js\"]], function (t, e) {\n let {\n SVG_NS: i,\n win: s\n } = t,\n {\n attr: r,\n createElement: o,\n css: n,\n error: a,\n isFunction: h,\n isString: l,\n objectEach: d,\n splat: c\n } = e,\n {\n trustedTypes: p\n } = s,\n u = p && h(p.createPolicy) && p.createPolicy(\"highcharts\", {\n createHTML: t => t\n }),\n g = u ? u.createHTML(\"\") : \"\",\n f = function () {\n try {\n return !!new DOMParser().parseFromString(g, \"text/html\");\n } catch (t) {\n return !1;\n }\n }();\n class m {\n static filterUserAttributes(t) {\n return d(t, (e, i) => {\n let s = !0;\n -1 === m.allowedAttributes.indexOf(i) && (s = !1), -1 !== [\"background\", \"dynsrc\", \"href\", \"lowsrc\", \"src\"].indexOf(i) && (s = l(e) && m.allowedReferences.some(t => 0 === e.indexOf(t))), s || (a(33, !1, void 0, {\n \"Invalid attribute in config\": `${i}`\n }), delete t[i]), l(e) && t[i] && (t[i] = e.replace(/ {\n let i = e.split(\":\").map(t => t.trim()),\n s = i.shift();\n return s && i.length && (t[s.replace(/-([a-z])/g, t => t[1].toUpperCase())] = i.join(\":\")), t;\n }, {});\n }\n static setElementHTML(t, e) {\n t.innerHTML = m.emptyHTML, e && new m(e).addToDOM(t);\n }\n constructor(t) {\n this.nodes = \"string\" == typeof t ? this.parseMarkup(t) : t;\n }\n addToDOM(e) {\n return function e(s, o) {\n let h;\n return c(s).forEach(function (s) {\n let l;\n let c = s.tagName,\n p = s.textContent ? t.doc.createTextNode(s.textContent) : void 0,\n u = m.bypassHTMLFiltering;\n if (c) {\n if (\"#text\" === c) l = p;else if (-1 !== m.allowedTags.indexOf(c) || u) {\n let a = \"svg\" === c ? i : o.namespaceURI || i,\n h = t.doc.createElementNS(a, c),\n g = s.attributes || {};\n d(s, function (t, e) {\n \"tagName\" !== e && \"attributes\" !== e && \"children\" !== e && \"style\" !== e && \"textContent\" !== e && (g[e] = t);\n }), r(h, u ? g : m.filterUserAttributes(g)), s.style && n(h, s.style), p && h.appendChild(p), e(s.children || [], h), l = h;\n } else a(33, !1, void 0, {\n \"Invalid tagName in config\": c\n });\n }\n l && o.appendChild(l), h = l;\n }), h;\n }(this.nodes, e);\n }\n parseMarkup(t) {\n let e;\n let i = [];\n if (t = t.trim().replace(/ style=([\"'])/g, \" data-style=$1\"), f) e = new DOMParser().parseFromString(u ? u.createHTML(t) : t, \"text/html\");else {\n let i = o(\"div\");\n i.innerHTML = t, e = {\n body: i\n };\n }\n let s = (t, e) => {\n let i = t.nodeName.toLowerCase(),\n r = {\n tagName: i\n };\n \"#text\" === i && (r.textContent = t.textContent || \"\");\n let o = t.attributes;\n if (o) {\n let t = {};\n [].forEach.call(o, e => {\n \"data-style\" === e.name ? r.style = m.parseStyle(e.value) : t[e.name] = e.value;\n }), r.attributes = t;\n }\n if (t.childNodes.length) {\n let e = [];\n [].forEach.call(t.childNodes, t => {\n s(t, e);\n }), e.length && (r.children = e);\n }\n e.push(r);\n };\n return [].forEach.call(e.body.childNodes, t => s(t, i)), i;\n }\n }\n return m.allowedAttributes = [\"alt\", \"aria-controls\", \"aria-describedby\", \"aria-expanded\", \"aria-haspopup\", \"aria-hidden\", \"aria-label\", \"aria-labelledby\", \"aria-live\", \"aria-pressed\", \"aria-readonly\", \"aria-roledescription\", \"aria-selected\", \"class\", \"clip-path\", \"color\", \"colspan\", \"cx\", \"cy\", \"d\", \"dx\", \"dy\", \"disabled\", \"fill\", \"filterUnits\", \"flood-color\", \"flood-opacity\", \"height\", \"href\", \"id\", \"in\", \"in2\", \"markerHeight\", \"markerWidth\", \"offset\", \"opacity\", \"operator\", \"orient\", \"padding\", \"paddingLeft\", \"paddingRight\", \"patternUnits\", \"r\", \"radius\", \"refX\", \"refY\", \"role\", \"scope\", \"slope\", \"src\", \"startOffset\", \"stdDeviation\", \"stroke\", \"stroke-linecap\", \"stroke-width\", \"style\", \"tableValues\", \"result\", \"rowspan\", \"summary\", \"target\", \"tabindex\", \"text-align\", \"text-anchor\", \"textAnchor\", \"textLength\", \"title\", \"type\", \"valign\", \"width\", \"x\", \"x1\", \"x2\", \"xlink:href\", \"y\", \"y1\", \"y2\", \"zIndex\"], m.allowedReferences = [\"https://\", \"http://\", \"mailto:\", \"/\", \"../\", \"./\", \"#\"], m.allowedTags = [\"a\", \"abbr\", \"b\", \"br\", \"button\", \"caption\", \"circle\", \"clipPath\", \"code\", \"dd\", \"defs\", \"div\", \"dl\", \"dt\", \"em\", \"feComponentTransfer\", \"feComposite\", \"feDropShadow\", \"feFlood\", \"feFuncA\", \"feFuncB\", \"feFuncG\", \"feFuncR\", \"feGaussianBlur\", \"feMorphology\", \"feOffset\", \"feMerge\", \"feMergeNode\", \"filter\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"hr\", \"i\", \"img\", \"li\", \"linearGradient\", \"marker\", \"ol\", \"p\", \"path\", \"pattern\", \"pre\", \"rect\", \"small\", \"span\", \"stop\", \"strong\", \"style\", \"sub\", \"sup\", \"svg\", \"table\", \"text\", \"textPath\", \"thead\", \"title\", \"tbody\", \"tspan\", \"td\", \"th\", \"tr\", \"u\", \"ul\", \"#text\"], m.emptyHTML = g, m.bypassHTMLFiltering = !1, m;\n }), i(e, \"Core/Templating.js\", [e[\"Core/Defaults.js\"], e[\"Core/Utilities.js\"]], function (t, e) {\n let {\n defaultOptions: i,\n defaultTime: s\n } = t,\n {\n extend: r,\n getNestedProperty: o,\n isArray: n,\n isNumber: a,\n isObject: h,\n pick: l,\n pInt: d\n } = e,\n c = {\n add: (t, e) => t + e,\n divide: (t, e) => 0 !== e ? t / e : \"\",\n eq: (t, e) => t == e,\n each: function (t) {\n let e = arguments[arguments.length - 1];\n return !!n(t) && t.map((i, s) => p(e.body, r(h(i) ? i : {\n \"@this\": i\n }, {\n \"@index\": s,\n \"@first\": 0 === s,\n \"@last\": s === t.length - 1\n }))).join(\"\");\n },\n ge: (t, e) => t >= e,\n gt: (t, e) => t > e,\n if: t => !!t,\n le: (t, e) => t <= e,\n lt: (t, e) => t < e,\n multiply: (t, e) => t * e,\n ne: (t, e) => t != e,\n subtract: (t, e) => t - e,\n unless: t => !t\n };\n function p(t = \"\", e, r) {\n let n = /\\{([\\w\\:\\.\\,;\\-\\/<>%@\"'’= #\\(\\)]+)\\}/g,\n a = /\\(([\\w\\:\\.\\,;\\-\\/<>%@\"'= ]+)\\)/g,\n h = [],\n d = /f$/,\n g = /\\.(\\d)/,\n f = i.lang,\n m = r && r.time || s,\n x = r && r.numberFormatter || u,\n y = (t = \"\") => {\n let i;\n return \"true\" === t || \"false\" !== t && ((i = Number(t)).toString() === t ? i : o(t, e));\n },\n b,\n v,\n S = 0,\n C;\n for (; null !== (b = n.exec(t));) {\n let i = a.exec(b[1]);\n i && (b = i, C = !0), v && v.isBlock || (v = {\n ctx: e,\n expression: b[1],\n find: b[0],\n isBlock: \"#\" === b[1].charAt(0),\n start: b.index,\n startInner: b.index + b[0].length,\n length: b[0].length\n });\n let s = b[1].split(\" \")[0].replace(\"#\", \"\");\n c[s] && (v.isBlock && s === v.fn && S++, v.fn || (v.fn = s));\n let r = \"else\" === b[1];\n if (v.isBlock && v.fn && (b[1] === `/${v.fn}` || r)) {\n if (S) !r && S--;else {\n let e = v.startInner,\n i = t.substr(e, b.index - e);\n void 0 === v.body ? (v.body = i, v.startInner = b.index + b[0].length) : v.elseBody = i, v.find += i + b[0], r || (h.push(v), v = void 0);\n }\n } else v.isBlock || h.push(v);\n if (i && !v?.isBlock) break;\n }\n return h.forEach(i => {\n let s, o;\n let {\n body: n,\n elseBody: a,\n expression: h,\n fn: u\n } = i;\n if (u) {\n let t = [i],\n l = h.split(\" \");\n for (o = c[u].length; o--;) t.unshift(y(l[o + 1]));\n s = c[u].apply(e, t), i.isBlock && \"boolean\" == typeof s && (s = p(s ? n : a, e, r));\n } else {\n let t = h.split(\":\");\n if (s = y(t.shift() || \"\"), t.length && \"number\" == typeof s) {\n let e = t.join(\":\");\n if (d.test(e)) {\n let t = parseInt((e.match(g) || [\"\", \"-1\"])[1], 10);\n null !== s && (s = x(s, t, f.decimalPoint, e.indexOf(\",\") > -1 ? f.thousandsSep : \"\"));\n } else s = m.dateFormat(e, s);\n }\n }\n t = t.replace(i.find, l(s, \"\"));\n }), C ? p(t, e, r) : t;\n }\n function u(t, e, s, r) {\n let o, n;\n t = +t || 0, e = +e;\n let h = i.lang,\n c = (t.toString().split(\".\")[1] || \"\").split(\"e\")[0].length,\n p = t.toString().split(\"e\"),\n u = e;\n -1 === e ? e = Math.min(c, 20) : a(e) ? e && p[1] && p[1] < 0 && ((n = e + +p[1]) >= 0 ? (p[0] = (+p[0]).toExponential(n).split(\"e\")[0], e = n) : (p[0] = p[0].split(\".\")[0] || 0, t = e < 20 ? (p[0] * Math.pow(10, p[1])).toFixed(e) : 0, p[1] = 0)) : e = 2;\n let g = (Math.abs(p[1] ? p[0] : t) + Math.pow(10, -Math.max(e, c) - 1)).toFixed(e),\n f = String(d(g)),\n m = f.length > 3 ? f.length % 3 : 0;\n return s = l(s, h.decimalPoint), r = l(r, h.thousandsSep), o = (t < 0 ? \"-\" : \"\") + (m ? f.substr(0, m) + r : \"\"), 0 > +p[1] && !u ? o = \"0\" : o += f.substr(m).replace(/(\\d{3})(?=\\d)/g, \"$1\" + r), e ? o += s + g.slice(-e) : 0 == +o && (o = \"0\"), p[1] && 0 != +o && (o += \"e\" + p[1]), o;\n }\n return {\n dateFormat: function (t, e, i) {\n return s.dateFormat(t, e, i);\n },\n format: p,\n helpers: c,\n numberFormat: u\n };\n }), i(e, \"Core/Renderer/RendererRegistry.js\", [e[\"Core/Globals.js\"]], function (t) {\n var e, i;\n let s;\n return (i = e || (e = {})).rendererTypes = {}, i.getRendererType = function (t = s) {\n return i.rendererTypes[t] || i.rendererTypes[s];\n }, i.registerRendererType = function (e, r, o) {\n i.rendererTypes[e] = r, (!s || o) && (s = e, t.Renderer = r);\n }, e;\n }), i(e, \"Core/Renderer/RendererUtilities.js\", [e[\"Core/Utilities.js\"]], function (t) {\n var e;\n let {\n clamp: i,\n pick: s,\n pushUnique: r,\n stableSort: o\n } = t;\n return (e || (e = {})).distribute = function t(e, n, a) {\n let h = e,\n l = h.reducedLen || n,\n d = (t, e) => t.target - e.target,\n c = [],\n p = e.length,\n u = [],\n g = c.push,\n f,\n m,\n x,\n y = !0,\n b,\n v,\n S = 0,\n C;\n for (f = p; f--;) S += e[f].size;\n if (S > l) {\n for (o(e, (t, e) => (e.rank || 0) - (t.rank || 0)), x = (C = e[0].rank === e[e.length - 1].rank) ? p / 2 : -1, m = C ? x : p - 1; x && S > l;) b = e[f = Math.floor(m)], r(u, f) && (S -= b.size), m += x, C && m >= e.length && (x /= 2, m = x);\n u.sort((t, e) => e - t).forEach(t => g.apply(c, e.splice(t, 1)));\n }\n for (o(e, d), e = e.map(t => ({\n size: t.size,\n targets: [t.target],\n align: s(t.align, .5)\n })); y;) {\n for (f = e.length; f--;) b = e[f], v = (Math.min.apply(0, b.targets) + Math.max.apply(0, b.targets)) / 2, b.pos = i(v - b.size * b.align, 0, n - b.size);\n for (f = e.length, y = !1; f--;) f > 0 && e[f - 1].pos + e[f - 1].size > e[f].pos && (e[f - 1].size += e[f].size, e[f - 1].targets = e[f - 1].targets.concat(e[f].targets), e[f - 1].align = .5, e[f - 1].pos + e[f - 1].size > n && (e[f - 1].pos = n - e[f - 1].size), e.splice(f, 1), y = !0);\n }\n return g.apply(h, c), f = 0, e.some(e => {\n let i = 0;\n return (e.targets || []).some(() => (h[f].pos = e.pos + i, void 0 !== a && Math.abs(h[f].pos - h[f].target) > a) ? (h.slice(0, f + 1).forEach(t => delete t.pos), h.reducedLen = (h.reducedLen || n) - .1 * n, h.reducedLen > .1 * n && t(h, n, a), !0) : (i += h[f].size, f++, !1));\n }), o(h, d), h;\n }, e;\n }), i(e, \"Core/Renderer/SVG/SVGElement.js\", [e[\"Core/Animation/AnimationUtilities.js\"], e[\"Core/Color/Color.js\"], e[\"Core/Globals.js\"], e[\"Core/Utilities.js\"]], function (t, e, i, s) {\n let {\n animate: r,\n animObject: o,\n stop: n\n } = t,\n {\n deg2rad: a,\n doc: h,\n svg: l,\n SVG_NS: d,\n win: c\n } = i,\n {\n addEvent: p,\n attr: u,\n createElement: g,\n crisp: f,\n css: m,\n defined: x,\n erase: y,\n extend: b,\n fireEvent: v,\n isArray: S,\n isFunction: C,\n isObject: k,\n isString: M,\n merge: w,\n objectEach: T,\n pick: A,\n pInt: P,\n pushUnique: L,\n replaceNested: O,\n syncTimeout: D,\n uniqueKey: E\n } = s;\n class I {\n _defaultGetter(t) {\n let e = A(this[t + \"Value\"], this[t], this.element ? this.element.getAttribute(t) : null, 0);\n return /^-?[\\d\\.]+$/.test(e) && (e = parseFloat(e)), e;\n }\n _defaultSetter(t, e, i) {\n i.setAttribute(e, t);\n }\n add(t) {\n let e;\n let i = this.renderer,\n s = this.element;\n return t && (this.parentGroup = t), void 0 !== this.textStr && \"text\" === this.element.nodeName && i.buildText(this), this.added = !0, (!t || t.handleZ || this.zIndex) && (e = this.zIndexSetter()), e || (t ? t.element : i.box).appendChild(s), this.onAdd && this.onAdd(), this;\n }\n addClass(t, e) {\n let i = e ? \"\" : this.attr(\"class\") || \"\";\n return (t = (t || \"\").split(/ /g).reduce(function (t, e) {\n return -1 === i.indexOf(e) && t.push(e), t;\n }, i ? [i] : []).join(\" \")) !== i && this.attr(\"class\", t), this;\n }\n afterSetters() {\n this.doTransform && (this.updateTransform(), this.doTransform = !1);\n }\n align(t, e, i, s = !0) {\n let r, o, n, a;\n let h = {},\n l = this.renderer,\n d = l.alignedObjects,\n c = !!t;\n t ? (this.alignOptions = t, this.alignByTranslate = e, this.alignTo = i) : (t = this.alignOptions || {}, e = this.alignByTranslate, i = this.alignTo);\n let p = !i || M(i) ? i || \"renderer\" : void 0;\n p && (c && L(d, this), i = void 0);\n let u = A(i, l[p], l),\n g = t.align,\n f = t.verticalAlign;\n return r = (u.x || 0) + (t.x || 0), o = (u.y || 0) + (t.y || 0), \"right\" === g ? n = 1 : \"center\" === g && (n = 2), n && (r += ((u.width || 0) - (t.width || 0)) / n), h[e ? \"translateX\" : \"x\"] = Math.round(r), \"bottom\" === f ? a = 1 : \"middle\" === f && (a = 2), a && (o += ((u.height || 0) - (t.height || 0)) / a), h[e ? \"translateY\" : \"y\"] = Math.round(o), s && (this[this.placed ? \"animate\" : \"attr\"](h), this.placed = !0), this.alignAttr = h, this;\n }\n alignSetter(t) {\n let e = {\n left: \"start\",\n center: \"middle\",\n right: \"end\"\n };\n e[t] && (this.alignValue = t, this.element.setAttribute(\"text-anchor\", e[t]));\n }\n animate(t, e, i) {\n let s = o(A(e, this.renderer.globalAnimation, !0)),\n n = s.defer;\n return h.hidden && (s.duration = 0), 0 !== s.duration ? (i && (s.complete = i), D(() => {\n this.element && r(this, t, s);\n }, n)) : (this.attr(t, void 0, i || s.complete), T(t, function (t, e) {\n s.step && s.step.call(this, t, {\n prop: e,\n pos: 1,\n elem: this\n });\n }, this)), this;\n }\n applyTextOutline(t) {\n let e = this.element;\n -1 !== t.indexOf(\"contrast\") && (t = t.replace(/contrast/g, this.renderer.getContrast(e.style.fill)));\n let s = t.split(\" \"),\n r = s[s.length - 1],\n o = s[0];\n if (o && \"none\" !== o && i.svg) {\n this.fakeTS = !0, o = o.replace(/(^[\\d\\.]+)(.*?)$/g, function (t, e, i) {\n return 2 * Number(e) + i;\n }), this.removeTextOutline();\n let t = h.createElementNS(d, \"tspan\");\n u(t, {\n class: \"highcharts-text-outline\",\n fill: r,\n stroke: r,\n \"stroke-width\": o,\n \"stroke-linejoin\": \"round\"\n });\n let i = e.querySelector(\"textPath\") || e;\n [].forEach.call(i.childNodes, e => {\n let i = e.cloneNode(!0);\n i.removeAttribute && [\"fill\", \"stroke\", \"stroke-width\", \"stroke\"].forEach(t => i.removeAttribute(t)), t.appendChild(i);\n });\n let s = 0;\n [].forEach.call(i.querySelectorAll(\"text tspan\"), t => {\n s += Number(t.getAttribute(\"dy\"));\n });\n let n = h.createElementNS(d, \"tspan\");\n n.textContent = \"\", u(n, {\n x: Number(e.getAttribute(\"x\")),\n dy: -s\n }), t.appendChild(n), i.insertBefore(t, i.firstChild);\n }\n }\n attr(t, e, i, s) {\n let {\n element: r\n } = this,\n o = I.symbolCustomAttribs,\n a,\n h,\n l = this,\n d;\n return \"string\" == typeof t && void 0 !== e && (a = t, (t = {})[a] = e), \"string\" == typeof t ? l = (this[t + \"Getter\"] || this._defaultGetter).call(this, t, r) : (T(t, function (e, i) {\n d = !1, s || n(this, i), this.symbolName && -1 !== o.indexOf(i) && (h || (this.symbolAttr(t), h = !0), d = !0), this.rotation && (\"x\" === i || \"y\" === i) && (this.doTransform = !0), d || (this[i + \"Setter\"] || this._defaultSetter).call(this, e, i, r);\n }, this), this.afterSetters()), i && i.call(this), l;\n }\n clip(t) {\n if (t && !t.clipPath) {\n let e = E() + \"-\",\n i = this.renderer.createElement(\"clipPath\").attr({\n id: e\n }).add(this.renderer.defs);\n b(t, {\n clipPath: i,\n id: e,\n count: 0\n }), t.add(i);\n }\n return this.attr(\"clip-path\", t ? `url(${this.renderer.url}#${t.id})` : \"none\");\n }\n crisp(t, e) {\n e = Math.round(e || t.strokeWidth || 0);\n let i = t.x || this.x || 0,\n s = t.y || this.y || 0,\n r = (t.width || this.width || 0) + i,\n o = (t.height || this.height || 0) + s,\n n = f(i, e),\n a = f(s, e);\n return b(t, {\n x: n,\n y: a,\n width: f(r, e) - n,\n height: f(o, e) - a\n }), x(t.strokeWidth) && (t.strokeWidth = e), t;\n }\n complexColor(t, i, s) {\n let r = this.renderer,\n o,\n n,\n a,\n h,\n l,\n d,\n c,\n p,\n u,\n g,\n f = [],\n m;\n v(this.renderer, \"complexColor\", {\n args: arguments\n }, function () {\n if (t.radialGradient ? n = \"radialGradient\" : t.linearGradient && (n = \"linearGradient\"), n) {\n if (a = t[n], l = r.gradients, d = t.stops, u = s.radialReference, S(a) && (t[n] = a = {\n x1: a[0],\n y1: a[1],\n x2: a[2],\n y2: a[3],\n gradientUnits: \"userSpaceOnUse\"\n }), \"radialGradient\" === n && u && !x(a.gradientUnits) && (h = a, a = w(a, r.getRadialAttr(u, h), {\n gradientUnits: \"userSpaceOnUse\"\n })), T(a, function (t, e) {\n \"id\" !== e && f.push(e, t);\n }), T(d, function (t) {\n f.push(t);\n }), l[f = f.join(\",\")]) g = l[f].attr(\"id\");else {\n a.id = g = E();\n let t = l[f] = r.createElement(n).attr(a).add(r.defs);\n t.radAttr = h, t.stops = [], d.forEach(function (i) {\n 0 === i[1].indexOf(\"rgba\") ? (c = (o = e.parse(i[1])).get(\"rgb\"), p = o.get(\"a\")) : (c = i[1], p = 1);\n let s = r.createElement(\"stop\").attr({\n offset: i[0],\n \"stop-color\": c,\n \"stop-opacity\": p\n }).add(t);\n t.stops.push(s);\n });\n }\n m = \"url(\" + r.url + \"#\" + g + \")\", s.setAttribute(i, m), s.gradient = f, t.toString = function () {\n return m;\n };\n }\n });\n }\n css(t) {\n let e = this.styles,\n i = {},\n s = this.element,\n r,\n o = !e;\n if (e && T(t, function (t, s) {\n e && e[s] !== t && (i[s] = t, o = !0);\n }), o) {\n e && (t = b(e, i)), null === t.width || \"auto\" === t.width ? delete this.textWidth : \"text\" === s.nodeName.toLowerCase() && t.width && (r = this.textWidth = P(t.width)), b(this.styles, t), r && !l && this.renderer.forExport && delete t.width;\n let o = w(t);\n s.namespaceURI === this.SVG_NS && ([\"textOutline\", \"textOverflow\", \"width\"].forEach(t => o && delete o[t]), o.color && (o.fill = o.color)), m(s, o);\n }\n return this.added && (\"text\" === this.element.nodeName && this.renderer.buildText(this), t.textOutline && this.applyTextOutline(t.textOutline)), this;\n }\n dashstyleSetter(t) {\n let e,\n i = this[\"stroke-width\"];\n if (\"inherit\" === i && (i = 1), t = t && t.toLowerCase()) {\n let s = t.replace(\"shortdashdotdot\", \"3,1,1,1,1,1,\").replace(\"shortdashdot\", \"3,1,1,1\").replace(\"shortdot\", \"1,1,\").replace(\"shortdash\", \"3,1,\").replace(\"longdash\", \"8,3,\").replace(/dot/g, \"1,3,\").replace(\"dash\", \"4,3,\").replace(/,$/, \"\").split(\",\");\n for (e = s.length; e--;) s[e] = \"\" + P(s[e]) * A(i, NaN);\n t = s.join(\",\").replace(/NaN/g, \"none\"), this.element.setAttribute(\"stroke-dasharray\", t);\n }\n }\n destroy() {\n let t = this,\n e = t.element || {},\n i = t.renderer,\n s = e.ownerSVGElement,\n r = \"SPAN\" === e.nodeName && t.parentGroup || void 0,\n o,\n a;\n if (e.onclick = e.onmouseout = e.onmouseover = e.onmousemove = e.point = null, n(t), t.clipPath && s) {\n let e = t.clipPath;\n [].forEach.call(s.querySelectorAll(\"[clip-path],[CLIP-PATH]\"), function (t) {\n t.getAttribute(\"clip-path\").indexOf(e.element.id) > -1 && t.removeAttribute(\"clip-path\");\n }), t.clipPath = e.destroy();\n }\n if (t.connector = t.connector?.destroy(), t.stops) {\n for (a = 0; a < t.stops.length; a++) t.stops[a].destroy();\n t.stops.length = 0, t.stops = void 0;\n }\n for (t.safeRemoveChild(e); r && r.div && 0 === r.div.childNodes.length;) o = r.parentGroup, t.safeRemoveChild(r.div), delete r.div, r = o;\n t.alignOptions && y(i.alignedObjects, t), T(t, function (e, i) {\n t[i] && t[i].parentGroup === t && t[i].destroy && t[i].destroy(), delete t[i];\n });\n }\n dSetter(t, e, i) {\n S(t) && (\"string\" == typeof t[0] && (t = this.renderer.pathToSegments(t)), this.pathArray = t, t = t.reduce((t, e, i) => e && e.join ? (i ? t + \" \" : \"\") + e.join(\" \") : (e || \"\").toString(), \"\")), /(NaN| {2}|^$)/.test(t) && (t = \"M 0 0\"), this[e] !== t && (i.setAttribute(e, t), this[e] = t);\n }\n fillSetter(t, e, i) {\n \"string\" == typeof t ? i.setAttribute(e, t) : t && this.complexColor(t, e, i);\n }\n hrefSetter(t, e, i) {\n i.setAttributeNS(\"http://www.w3.org/1999/xlink\", e, t);\n }\n getBBox(t, e) {\n let i, s, r, o;\n let {\n alignValue: n,\n element: a,\n renderer: h,\n styles: l,\n textStr: d\n } = this,\n {\n cache: c,\n cacheKeys: p\n } = h,\n u = a.namespaceURI === this.SVG_NS,\n g = A(e, this.rotation, 0),\n f = h.styledMode ? a && I.prototype.getStyle.call(a, \"font-size\") : l.fontSize;\n if (x(d) && (-1 === (o = d.toString()).indexOf(\"<\") && (o = o.replace(/\\d/g, \"0\")), o += [\"\", h.rootFontSize, f, g, this.textWidth, n, l.textOverflow, l.fontWeight].join(\",\")), o && !t && (i = c[o]), !i || i.polygon) {\n if (u || h.forExport) {\n try {\n r = this.fakeTS && function (t) {\n let e = a.querySelector(\".highcharts-text-outline\");\n e && m(e, {\n display: t\n });\n }, C(r) && r(\"none\"), i = a.getBBox ? b({}, a.getBBox()) : {\n width: a.offsetWidth,\n height: a.offsetHeight,\n x: 0,\n y: 0\n }, C(r) && r(\"\");\n } catch (t) {}\n (!i || i.width < 0) && (i = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n } else i = this.htmlGetBBox();\n s = i.height, u && (i.height = s = {\n \"11px,17\": 14,\n \"13px,20\": 16\n }[`${f || \"\"},${Math.round(s)}`] || s), g && (i = this.getRotatedBox(i, g));\n let t = {\n bBox: i\n };\n v(this, \"afterGetBBox\", t), i = t.bBox;\n }\n if (o && (\"\" === d || i.height > 0)) {\n for (; p.length > 250;) delete c[p.shift()];\n c[o] || p.push(o), c[o] = i;\n }\n return i;\n }\n getRotatedBox(t, e) {\n let {\n x: i,\n y: s,\n width: r,\n height: o\n } = t,\n {\n alignValue: n,\n translateY: h,\n rotationOriginX: l = 0,\n rotationOriginY: d = 0\n } = this,\n c = {\n right: 1,\n center: .5\n }[n || 0] || 0,\n p = Number(this.element.getAttribute(\"y\") || 0) - (h ? 0 : s),\n u = e * a,\n g = (e - 90) * a,\n f = Math.cos(u),\n m = Math.sin(u),\n x = r * f,\n y = r * m,\n b = Math.cos(g),\n v = Math.sin(g),\n [[S, C], [k, M]] = [l, d].map(t => [t - t * f, t * m]),\n w = i + c * (r - x) + S + M + p * b,\n T = w + x,\n A = T - o * b,\n P = A - x,\n L = s + p - c * y - C + k + p * v,\n O = L + y,\n D = O - o * v,\n E = D - y,\n I = Math.min(w, T, A, P),\n j = Math.min(L, O, D, E),\n B = Math.max(w, T, A, P) - I,\n R = Math.max(L, O, D, E) - j;\n return {\n x: I,\n y: j,\n width: B,\n height: R,\n polygon: [[w, L], [T, O], [A, D], [P, E]]\n };\n }\n getStyle(t) {\n return c.getComputedStyle(this.element || this, \"\").getPropertyValue(t);\n }\n hasClass(t) {\n return -1 !== (\"\" + this.attr(\"class\")).split(\" \").indexOf(t);\n }\n hide() {\n return this.attr({\n visibility: \"hidden\"\n });\n }\n htmlGetBBox() {\n return {\n height: 0,\n width: 0,\n x: 0,\n y: 0\n };\n }\n constructor(t, e) {\n this.onEvents = {}, this.opacity = 1, this.SVG_NS = d, this.element = \"span\" === e || \"body\" === e ? g(e) : h.createElementNS(this.SVG_NS, e), this.renderer = t, this.styles = {}, v(this, \"afterInit\");\n }\n on(t, e) {\n let {\n onEvents: i\n } = this;\n return i[t] && i[t](), i[t] = p(this.element, t, e), this;\n }\n opacitySetter(t, e, i) {\n let s = Number(Number(t).toFixed(3));\n this.opacity = s, i.setAttribute(e, s);\n }\n reAlign() {\n this.alignOptions?.width && \"left\" !== this.alignOptions.align && (this.alignOptions.width = this.getBBox().width, this.placed = !1, this.align());\n }\n removeClass(t) {\n return this.attr(\"class\", (\"\" + this.attr(\"class\")).replace(M(t) ? RegExp(`(^| )${t}( |$)`) : t, \" \").replace(/ +/g, \" \").trim());\n }\n removeTextOutline() {\n let t = this.element.querySelector(\"tspan.highcharts-text-outline\");\n t && this.safeRemoveChild(t);\n }\n safeRemoveChild(t) {\n let e = t.parentNode;\n e && e.removeChild(t);\n }\n setRadialReference(t) {\n let e = this.element.gradient && this.renderer.gradients[this.element.gradient];\n return this.element.radialReference = t, e && e.radAttr && e.animate(this.renderer.getRadialAttr(t, e.radAttr)), this;\n }\n shadow(t) {\n let {\n renderer: e\n } = this,\n i = w(this.parentGroup?.rotation === 90 ? {\n offsetX: -1,\n offsetY: -1\n } : {}, k(t) ? t : {}),\n s = e.shadowDefinition(i);\n return this.attr({\n filter: t ? `url(${e.url}#${s})` : \"none\"\n });\n }\n show(t = !0) {\n return this.attr({\n visibility: t ? \"inherit\" : \"visible\"\n });\n }\n \"stroke-widthSetter\"(t, e, i) {\n this[e] = t, i.setAttribute(e, t);\n }\n strokeWidth() {\n if (!this.renderer.styledMode) return this[\"stroke-width\"] || 0;\n let t = this.getStyle(\"stroke-width\"),\n e = 0,\n i;\n return /px$/.test(t) ? e = P(t) : \"\" !== t && (u(i = h.createElementNS(d, \"rect\"), {\n width: t,\n \"stroke-width\": 0\n }), this.element.parentNode.appendChild(i), e = i.getBBox().width, i.parentNode.removeChild(i)), e;\n }\n symbolAttr(t) {\n let e = this;\n I.symbolCustomAttribs.forEach(function (i) {\n e[i] = A(t[i], e[i]);\n }), e.attr({\n d: e.renderer.symbols[e.symbolName](e.x, e.y, e.width, e.height, e)\n });\n }\n textSetter(t) {\n t !== this.textStr && (delete this.textPxLength, this.textStr = t, this.added && this.renderer.buildText(this), this.reAlign());\n }\n titleSetter(t) {\n let e = this.element,\n i = e.getElementsByTagName(\"title\")[0] || h.createElementNS(this.SVG_NS, \"title\");\n e.insertBefore ? e.insertBefore(i, e.firstChild) : e.appendChild(i), i.textContent = O(A(t, \"\"), [/<[^>]*>/g, \"\"]).replace(/</g, \"<\").replace(/>/g, \">\");\n }\n toFront() {\n let t = this.element;\n return t.parentNode.appendChild(t), this;\n }\n translate(t, e) {\n return this.attr({\n translateX: t,\n translateY: e\n });\n }\n updateTransform(t = \"transform\") {\n let {\n element: e,\n matrix: i,\n rotation: s = 0,\n rotationOriginX: r,\n rotationOriginY: o,\n scaleX: n,\n scaleY: a,\n translateX: h = 0,\n translateY: l = 0\n } = this,\n d = [\"translate(\" + h + \",\" + l + \")\"];\n x(i) && d.push(\"matrix(\" + i.join(\",\") + \")\"), s && (d.push(\"rotate(\" + s + \" \" + A(r, e.getAttribute(\"x\"), 0) + \" \" + A(o, e.getAttribute(\"y\") || 0) + \")\"), this.text?.element.tagName === \"SPAN\" && this.text.attr({\n rotation: s,\n rotationOriginX: (r || 0) - this.padding,\n rotationOriginY: (o || 0) - this.padding\n })), (x(n) || x(a)) && d.push(\"scale(\" + A(n, 1) + \" \" + A(a, 1) + \")\"), d.length && !(this.text || this).textPath && e.setAttribute(t, d.join(\" \"));\n }\n visibilitySetter(t, e, i) {\n \"inherit\" === t ? i.removeAttribute(e) : this[e] !== t && i.setAttribute(e, t), this[e] = t;\n }\n xGetter(t) {\n return \"circle\" === this.element.nodeName && (\"x\" === t ? t = \"cx\" : \"y\" === t && (t = \"cy\")), this._defaultGetter(t);\n }\n zIndexSetter(t, e) {\n let i = this.renderer,\n s = this.parentGroup,\n r = (s || i).element || i.box,\n o = this.element,\n n = r === i.box,\n a,\n h,\n l,\n d = !1,\n c,\n p = this.added,\n u;\n if (x(t) ? (o.setAttribute(\"data-z-index\", t), t = +t, this[e] === t && (p = !1)) : x(this[e]) && o.removeAttribute(\"data-z-index\"), this[e] = t, p) {\n for ((t = this.zIndex) && s && (s.handleZ = !0), u = (a = r.childNodes).length - 1; u >= 0 && !d; u--) c = !x(l = (h = a[u]).getAttribute(\"data-z-index\")), h !== o && (t < 0 && c && !n && !u ? (r.insertBefore(o, a[u]), d = !0) : (P(l) <= t || c && (!x(t) || t >= 0)) && (r.insertBefore(o, a[u + 1]), d = !0));\n d || (r.insertBefore(o, a[n ? 3 : 0]), d = !0);\n }\n return d;\n }\n }\n return I.symbolCustomAttribs = [\"anchorX\", \"anchorY\", \"clockwise\", \"end\", \"height\", \"innerR\", \"r\", \"start\", \"width\", \"x\", \"y\"], I.prototype.strokeSetter = I.prototype.fillSetter, I.prototype.yGetter = I.prototype.xGetter, I.prototype.matrixSetter = I.prototype.rotationOriginXSetter = I.prototype.rotationOriginYSetter = I.prototype.rotationSetter = I.prototype.scaleXSetter = I.prototype.scaleYSetter = I.prototype.translateXSetter = I.prototype.translateYSetter = I.prototype.verticalAlignSetter = function (t, e) {\n this[e] = t, this.doTransform = !0;\n }, I;\n }), i(e, \"Core/Renderer/SVG/SVGLabel.js\", [e[\"Core/Renderer/SVG/SVGElement.js\"], e[\"Core/Utilities.js\"]], function (t, e) {\n let {\n defined: i,\n extend: s,\n isNumber: r,\n merge: o,\n pick: n,\n removeEvent: a\n } = e;\n class h extends t {\n constructor(t, e, i, s, r, o, n, a, l, d) {\n let c;\n super(t, \"g\"), this.paddingLeftSetter = this.paddingSetter, this.paddingRightSetter = this.paddingSetter, this.doUpdate = !1, this.textStr = e, this.x = i, this.y = s, this.anchorX = o, this.anchorY = n, this.baseline = l, this.className = d, this.addClass(\"button\" === d ? \"highcharts-no-tooltip\" : \"highcharts-label\"), d && this.addClass(\"highcharts-\" + d), this.text = t.text(void 0, 0, 0, a).attr({\n zIndex: 1\n }), \"string\" == typeof r && ((c = /^url\\((.*?)\\)$/.test(r)) || this.renderer.symbols[r]) && (this.symbolKey = r), this.bBox = h.emptyBBox, this.padding = 3, this.baselineOffset = 0, this.needsBox = t.styledMode || c, this.deferredAttr = {}, this.alignFactor = 0;\n }\n alignSetter(t) {\n let e = {\n left: 0,\n center: .5,\n right: 1\n }[t];\n e !== this.alignFactor && (this.alignFactor = e, this.bBox && r(this.xSetting) && this.attr({\n x: this.xSetting\n }));\n }\n anchorXSetter(t, e) {\n this.anchorX = t, this.boxAttr(e, Math.round(t) - this.getCrispAdjust() - this.xSetting);\n }\n anchorYSetter(t, e) {\n this.anchorY = t, this.boxAttr(e, t - this.ySetting);\n }\n boxAttr(t, e) {\n this.box ? this.box.attr(t, e) : this.deferredAttr[t] = e;\n }\n css(e) {\n if (e) {\n let t = {};\n e = o(e), h.textProps.forEach(i => {\n void 0 !== e[i] && (t[i] = e[i], delete e[i]);\n }), this.text.css(t), \"fontSize\" in t || \"fontWeight\" in t ? this.updateTextPadding() : (\"width\" in t || \"textOverflow\" in t) && this.updateBoxSize();\n }\n return t.prototype.css.call(this, e);\n }\n destroy() {\n a(this.element, \"mouseenter\"), a(this.element, \"mouseleave\"), this.text && this.text.destroy(), this.box && (this.box = this.box.destroy()), t.prototype.destroy.call(this);\n }\n fillSetter(t, e) {\n t && (this.needsBox = !0), this.fill = t, this.boxAttr(e, t);\n }\n getBBox(t, e) {\n this.textStr && 0 === this.bBox.width && 0 === this.bBox.height && this.updateBoxSize();\n let {\n padding: i,\n height: s = 0,\n translateX: r = 0,\n translateY: o = 0,\n width: a = 0\n } = this,\n h = n(this.paddingLeft, i),\n l = e ?? (this.rotation || 0),\n d = {\n width: a,\n height: s,\n x: r + this.bBox.x - h,\n y: o + this.bBox.y - i + this.baselineOffset\n };\n return l && (d = this.getRotatedBox(d, l)), d;\n }\n getCrispAdjust() {\n return (this.renderer.styledMode && this.box ? this.box.strokeWidth() : this[\"stroke-width\"] ? parseInt(this[\"stroke-width\"], 10) : 0) % 2 / 2;\n }\n heightSetter(t) {\n this.heightSetting = t, this.doUpdate = !0;\n }\n afterSetters() {\n super.afterSetters(), this.doUpdate && (this.updateBoxSize(), this.doUpdate = !1);\n }\n onAdd() {\n this.text.add(this), this.attr({\n text: n(this.textStr, \"\"),\n x: this.x || 0,\n y: this.y || 0\n }), this.box && i(this.anchorX) && this.attr({\n anchorX: this.anchorX,\n anchorY: this.anchorY\n });\n }\n paddingSetter(t, e) {\n r(t) ? t !== this[e] && (this[e] = t, this.updateTextPadding()) : this[e] = void 0;\n }\n rSetter(t, e) {\n this.boxAttr(e, t);\n }\n strokeSetter(t, e) {\n this.stroke = t, this.boxAttr(e, t);\n }\n \"stroke-widthSetter\"(t, e) {\n t && (this.needsBox = !0), this[\"stroke-width\"] = t, this.boxAttr(e, t);\n }\n \"text-alignSetter\"(t) {\n this.textAlign = t;\n }\n textSetter(t) {\n void 0 !== t && this.text.attr({\n text: t\n }), this.updateTextPadding(), this.reAlign();\n }\n updateBoxSize() {\n let t;\n let e = this.text,\n o = {},\n n = this.padding,\n a = this.bBox = (!r(this.widthSetting) || !r(this.heightSetting) || this.textAlign) && i(e.textStr) ? e.getBBox(void 0, 0) : h.emptyBBox;\n this.width = this.getPaddedWidth(), this.height = (this.heightSetting || a.height || 0) + 2 * n;\n let l = this.renderer.fontMetrics(e);\n if (this.baselineOffset = n + Math.min((this.text.firstLineMetrics || l).b, a.height || 1 / 0), this.heightSetting && (this.baselineOffset += (this.heightSetting - l.h) / 2), this.needsBox && !e.textPath) {\n if (!this.box) {\n let t = this.box = this.symbolKey ? this.renderer.symbol(this.symbolKey) : this.renderer.rect();\n t.addClass((\"button\" === this.className ? \"\" : \"highcharts-label-box\") + (this.className ? \" highcharts-\" + this.className + \"-box\" : \"\")), t.add(this);\n }\n t = this.getCrispAdjust(), o.x = t, o.y = (this.baseline ? -this.baselineOffset : 0) + t, o.width = Math.round(this.width), o.height = Math.round(this.height), this.box.attr(s(o, this.deferredAttr)), this.deferredAttr = {};\n }\n }\n updateTextPadding() {\n let t = this.text;\n if (!t.textPath) {\n this.updateBoxSize();\n let e = this.baseline ? 0 : this.baselineOffset,\n s = n(this.paddingLeft, this.padding);\n i(this.widthSetting) && this.bBox && (\"center\" === this.textAlign || \"right\" === this.textAlign) && (s += {\n center: .5,\n right: 1\n }[this.textAlign] * (this.widthSetting - this.bBox.width)), (s !== t.x || e !== t.y) && (t.attr(\"x\", s), t.hasBoxWidthChanged && (this.bBox = t.getBBox(!0)), void 0 !== e && t.attr(\"y\", e)), t.x = s, t.y = e;\n }\n }\n widthSetter(t) {\n this.widthSetting = r(t) ? t : void 0, this.doUpdate = !0;\n }\n getPaddedWidth() {\n let t = this.padding,\n e = n(this.paddingLeft, t),\n i = n(this.paddingRight, t);\n return (this.widthSetting || this.bBox.width || 0) + e + i;\n }\n xSetter(t) {\n this.x = t, this.alignFactor && (t -= this.alignFactor * this.getPaddedWidth(), this[\"forceAnimate:x\"] = !0), this.xSetting = Math.round(t), this.attr(\"translateX\", this.xSetting);\n }\n ySetter(t) {\n this.ySetting = this.y = Math.round(t), this.attr(\"translateY\", this.ySetting);\n }\n }\n return h.emptyBBox = {\n width: 0,\n height: 0,\n x: 0,\n y: 0\n }, h.textProps = [\"color\", \"direction\", \"fontFamily\", \"fontSize\", \"fontStyle\", \"fontWeight\", \"lineHeight\", \"textAlign\", \"textDecoration\", \"textOutline\", \"textOverflow\", \"whiteSpace\", \"width\"], h;\n }), i(e, \"Core/Renderer/SVG/Symbols.js\", [e[\"Core/Utilities.js\"]], function (t) {\n let {\n defined: e,\n isNumber: i,\n pick: s\n } = t;\n function r(t, i, r, o, n) {\n let a = [];\n if (n) {\n let h = n.start || 0,\n l = s(n.r, r),\n d = s(n.r, o || r),\n c = 2e-4 / (n.borderRadius ? 1 : Math.max(l, 1)),\n p = Math.abs((n.end || 0) - h - 2 * Math.PI) < c,\n u = (n.end || 0) - (p ? c : 0),\n g = n.innerR,\n f = s(n.open, p),\n m = Math.cos(h),\n x = Math.sin(h),\n y = Math.cos(u),\n b = Math.sin(u),\n v = s(n.longArc, u - h - Math.PI < c ? 0 : 1),\n S = [\"A\", l, d, 0, v, s(n.clockwise, 1), t + l * y, i + d * b];\n S.params = {\n start: h,\n end: u,\n cx: t,\n cy: i\n }, a.push([\"M\", t + l * m, i + d * x], S), e(g) && ((S = [\"A\", g, g, 0, v, e(n.clockwise) ? 1 - n.clockwise : 0, t + g * m, i + g * x]).params = {\n start: u,\n end: h,\n cx: t,\n cy: i\n }, a.push(f ? [\"M\", t + g * y, i + g * b] : [\"L\", t + g * y, i + g * b], S)), f || a.push([\"Z\"]);\n }\n return a;\n }\n function o(t, e, i, s, r) {\n return r && r.r ? n(t, e, i, s, r) : [[\"M\", t, e], [\"L\", t + i, e], [\"L\", t + i, e + s], [\"L\", t, e + s], [\"Z\"]];\n }\n function n(t, e, i, s, r) {\n let o = r?.r || 0;\n return [[\"M\", t + o, e], [\"L\", t + i - o, e], [\"A\", o, o, 0, 0, 1, t + i, e + o], [\"L\", t + i, e + s - o], [\"A\", o, o, 0, 0, 1, t + i - o, e + s], [\"L\", t + o, e + s], [\"A\", o, o, 0, 0, 1, t, e + s - o], [\"L\", t, e + o], [\"A\", o, o, 0, 0, 1, t + o, e], [\"Z\"]];\n }\n return {\n arc: r,\n callout: function (t, e, s, r, o) {\n let a = Math.min(o && o.r || 0, s, r),\n h = a + 6,\n l = o && o.anchorX,\n d = o && o.anchorY || 0,\n c = n(t, e, s, r, {\n r: a\n });\n if (!i(l) || l < s && l > 0 && d < r && d > 0) return c;\n if (t + l > s - h) {\n if (d > e + h && d < e + r - h) c.splice(3, 1, [\"L\", t + s, d - 6], [\"L\", t + s + 6, d], [\"L\", t + s, d + 6], [\"L\", t + s, e + r - a]);else if (l < s) {\n let i = d < e + h,\n o = i ? e : e + r;\n c.splice(i ? 2 : 5, 0, [\"L\", l, d], [\"L\", t + s - a, o]);\n } else c.splice(3, 1, [\"L\", t + s, r / 2], [\"L\", l, d], [\"L\", t + s, r / 2], [\"L\", t + s, e + r - a]);\n } else if (t + l < h) {\n if (d > e + h && d < e + r - h) c.splice(7, 1, [\"L\", t, d + 6], [\"L\", t - 6, d], [\"L\", t, d - 6], [\"L\", t, e + a]);else if (l > 0) {\n let i = d < e + h,\n s = i ? e : e + r;\n c.splice(i ? 1 : 6, 0, [\"L\", l, d], [\"L\", t + a, s]);\n } else c.splice(7, 1, [\"L\", t, r / 2], [\"L\", l, d], [\"L\", t, r / 2], [\"L\", t, e + a]);\n } else d > r && l < s - h ? c.splice(5, 1, [\"L\", l + 6, e + r], [\"L\", l, e + r + 6], [\"L\", l - 6, e + r], [\"L\", t + a, e + r]) : d < 0 && l > h && c.splice(1, 1, [\"L\", l - 6, e], [\"L\", l, e - 6], [\"L\", l + 6, e], [\"L\", s - a, e]);\n return c;\n },\n circle: function (t, e, i, s) {\n return r(t + i / 2, e + s / 2, i / 2, s / 2, {\n start: .5 * Math.PI,\n end: 2.5 * Math.PI,\n open: !1\n });\n },\n diamond: function (t, e, i, s) {\n return [[\"M\", t + i / 2, e], [\"L\", t + i, e + s / 2], [\"L\", t + i / 2, e + s], [\"L\", t, e + s / 2], [\"Z\"]];\n },\n rect: o,\n roundedRect: n,\n square: o,\n triangle: function (t, e, i, s) {\n return [[\"M\", t + i / 2, e], [\"L\", t + i, e + s], [\"L\", t, e + s], [\"Z\"]];\n },\n \"triangle-down\": function (t, e, i, s) {\n return [[\"M\", t, e], [\"L\", t + i, e], [\"L\", t + i / 2, e + s], [\"Z\"]];\n }\n };\n }), i(e, \"Core/Renderer/SVG/TextBuilder.js\", [e[\"Core/Renderer/HTML/AST.js\"], e[\"Core/Globals.js\"], e[\"Core/Utilities.js\"]], function (t, e, i) {\n let {\n doc: s,\n SVG_NS: r,\n win: o\n } = e,\n {\n attr: n,\n extend: a,\n fireEvent: h,\n isString: l,\n objectEach: d,\n pick: c\n } = i;\n return class {\n constructor(t) {\n let e = t.styles;\n this.renderer = t.renderer, this.svgElement = t, this.width = t.textWidth, this.textLineHeight = e && e.lineHeight, this.textOutline = e && e.textOutline, this.ellipsis = !!(e && \"ellipsis\" === e.textOverflow), this.noWrap = !!(e && \"nowrap\" === e.whiteSpace);\n }\n buildSVG() {\n let e = this.svgElement,\n i = e.element,\n r = e.renderer,\n o = c(e.textStr, \"\").toString(),\n n = -1 !== o.indexOf(\"<\"),\n a = i.childNodes,\n h = !e.added && r.box,\n d = [o, this.ellipsis, this.noWrap, this.textLineHeight, this.textOutline, e.getStyle(\"font-size\"), this.width].join(\",\");\n if (d !== e.textCache) {\n e.textCache = d, delete e.actualWidth;\n for (let t = a.length; t--;) i.removeChild(a[t]);\n if (n || this.ellipsis || this.width || e.textPath || -1 !== o.indexOf(\" \") && (!this.noWrap || //g.test(o))) {\n if (\"\" !== o) {\n h && h.appendChild(i);\n let s = new t(o);\n this.modifyTree(s.nodes), s.addToDOM(i), this.modifyDOM(), this.ellipsis && -1 !== (i.textContent || \"\").indexOf(\"…\") && e.attr(\"title\", this.unescapeEntities(e.textStr || \"\", [\"<\", \">\"])), h && h.removeChild(i);\n }\n } else i.appendChild(s.createTextNode(this.unescapeEntities(o)));\n l(this.textOutline) && e.applyTextOutline && e.applyTextOutline(this.textOutline);\n }\n }\n modifyDOM() {\n let t;\n let e = this.svgElement,\n i = n(e.element, \"x\");\n for (e.firstLineMetrics = void 0; t = e.element.firstChild;) if (/^[\\s\\u200B]*$/.test(t.textContent || \" \")) e.element.removeChild(t);else break;\n [].forEach.call(e.element.querySelectorAll(\"tspan.highcharts-br\"), (t, s) => {\n t.nextSibling && t.previousSibling && (0 === s && 1 === t.previousSibling.nodeType && (e.firstLineMetrics = e.renderer.fontMetrics(t.previousSibling)), n(t, {\n dy: this.getLineHeight(t.nextSibling),\n x: i\n }));\n });\n let a = this.width || 0;\n if (!a) return;\n let h = (t, o) => {\n let h = t.textContent || \"\",\n l = h.replace(/([^\\^])-/g, \"$1- \").split(\" \"),\n d = !this.noWrap && (l.length > 1 || e.element.childNodes.length > 1),\n c = this.getLineHeight(o),\n p = 0,\n u = e.actualWidth;\n if (this.ellipsis) h && this.truncate(t, h, void 0, 0, Math.max(0, a - .8 * c), (t, e) => t.substring(0, e) + \"…\");else if (d) {\n let h = [],\n d = [];\n for (; o.firstChild && o.firstChild !== t;) d.push(o.firstChild), o.removeChild(o.firstChild);\n for (; l.length;) l.length && !this.noWrap && p > 0 && (h.push(t.textContent || \"\"), t.textContent = l.join(\" \").replace(/- /g, \"-\")), this.truncate(t, void 0, l, 0 === p && u || 0, a, (t, e) => l.slice(0, e).join(\" \").replace(/- /g, \"-\")), u = e.actualWidth, p++;\n d.forEach(e => {\n o.insertBefore(e, t);\n }), h.forEach(e => {\n o.insertBefore(s.createTextNode(e), t);\n let a = s.createElementNS(r, \"tspan\");\n a.textContent = \"\", n(a, {\n dy: c,\n x: i\n }), o.insertBefore(a, t);\n });\n }\n },\n l = t => {\n [].slice.call(t.childNodes).forEach(i => {\n i.nodeType === o.Node.TEXT_NODE ? h(i, t) : (-1 !== i.className.baseVal.indexOf(\"highcharts-br\") && (e.actualWidth = 0), l(i));\n });\n };\n l(e.element);\n }\n getLineHeight(t) {\n let e = t.nodeType === o.Node.TEXT_NODE ? t.parentElement : t;\n return this.textLineHeight ? parseInt(this.textLineHeight.toString(), 10) : this.renderer.fontMetrics(e || this.svgElement.element).h;\n }\n modifyTree(t) {\n let e = (i, s) => {\n let {\n attributes: r = {},\n children: o,\n style: n = {},\n tagName: h\n } = i,\n l = this.renderer.styledMode;\n if (\"b\" === h || \"strong\" === h ? l ? r.class = \"highcharts-strong\" : n.fontWeight = \"bold\" : (\"i\" === h || \"em\" === h) && (l ? r.class = \"highcharts-emphasized\" : n.fontStyle = \"italic\"), n && n.color && (n.fill = n.color), \"br\" === h) {\n r.class = \"highcharts-br\", i.textContent = \"\";\n let e = t[s + 1];\n e && e.textContent && (e.textContent = e.textContent.replace(/^ +/gm, \"\"));\n } else \"a\" === h && o && o.some(t => \"#text\" === t.tagName) && (i.children = [{\n children: o,\n tagName: \"tspan\"\n }]);\n \"#text\" !== h && \"a\" !== h && (i.tagName = \"tspan\"), a(i, {\n attributes: r,\n style: n\n }), o && o.filter(t => \"#text\" !== t.tagName).forEach(e);\n };\n t.forEach(e), h(this.svgElement, \"afterModifyTree\", {\n nodes: t\n });\n }\n truncate(t, e, i, s, r, o) {\n let n, a;\n let h = this.svgElement,\n {\n rotation: l\n } = h,\n d = [],\n c = i ? 1 : 0,\n p = (e || i || \"\").length,\n u = p,\n g = function (e, r) {\n let o = r || e,\n n = t.parentNode;\n if (n && void 0 === d[o] && n.getSubStringLength) try {\n d[o] = s + n.getSubStringLength(0, i ? o + 1 : o);\n } catch (t) {}\n return d[o];\n };\n if (h.rotation = 0, s + (a = g(t.textContent.length)) > r) {\n for (; c <= p;) u = Math.ceil((c + p) / 2), i && (n = o(i, u)), a = g(u, n && n.length - 1), c === p ? c = p + 1 : a > r ? p = u - 1 : c = u;\n 0 === p ? t.textContent = \"\" : e && p === e.length - 1 || (t.textContent = n || o(e || i, u));\n }\n i && i.splice(0, u), h.actualWidth = a, h.rotation = l;\n }\n unescapeEntities(t, e) {\n return d(this.renderer.escapes, function (i, s) {\n e && -1 !== e.indexOf(i) || (t = t.toString().replace(RegExp(i, \"g\"), s));\n }), t;\n }\n };\n }), i(e, \"Core/Renderer/SVG/SVGRenderer.js\", [e[\"Core/Renderer/HTML/AST.js\"], e[\"Core/Defaults.js\"], e[\"Core/Color/Color.js\"], e[\"Core/Globals.js\"], e[\"Core/Renderer/RendererRegistry.js\"], e[\"Core/Renderer/SVG/SVGElement.js\"], e[\"Core/Renderer/SVG/SVGLabel.js\"], e[\"Core/Renderer/SVG/Symbols.js\"], e[\"Core/Renderer/SVG/TextBuilder.js\"], e[\"Core/Utilities.js\"]], function (t, e, i, s, r, o, n, a, h, l) {\n let d;\n let {\n defaultOptions: c\n } = e,\n {\n charts: p,\n deg2rad: u,\n doc: g,\n isFirefox: f,\n isMS: m,\n isWebKit: x,\n noop: y,\n SVG_NS: b,\n symbolSizes: v,\n win: S\n } = s,\n {\n addEvent: C,\n attr: k,\n createElement: M,\n crisp: w,\n css: T,\n defined: A,\n destroyObjectProperties: P,\n extend: L,\n isArray: O,\n isNumber: D,\n isObject: E,\n isString: I,\n merge: j,\n pick: B,\n pInt: R,\n replaceNested: z,\n uniqueKey: N\n } = l;\n class W {\n constructor(t, e, i, s, r, o, n) {\n let a, h;\n let l = this.createElement(\"svg\").attr({\n version: \"1.1\",\n class: \"highcharts-root\"\n }),\n d = l.element;\n n || l.css(this.getStyle(s || {})), t.appendChild(d), k(t, \"dir\", \"ltr\"), -1 === t.innerHTML.indexOf(\"xmlns\") && k(d, \"xmlns\", this.SVG_NS), this.box = d, this.boxWrapper = l, this.alignedObjects = [], this.url = this.getReferenceURL(), this.createElement(\"desc\").add().element.appendChild(g.createTextNode(\"Created with Highcharts 11.4.8\")), this.defs = this.createElement(\"defs\").add(), this.allowHTML = o, this.forExport = r, this.styledMode = n, this.gradients = {}, this.cache = {}, this.cacheKeys = [], this.imgCount = 0, this.rootFontSize = l.getStyle(\"font-size\"), this.setSize(e, i, !1), f && t.getBoundingClientRect && ((a = function () {\n T(t, {\n left: 0,\n top: 0\n }), h = t.getBoundingClientRect(), T(t, {\n left: Math.ceil(h.left) - h.left + \"px\",\n top: Math.ceil(h.top) - h.top + \"px\"\n });\n })(), this.unSubPixelFix = C(S, \"resize\", a));\n }\n definition(e) {\n return new t([e]).addToDOM(this.defs.element);\n }\n getReferenceURL() {\n if ((f || x) && g.getElementsByTagName(\"base\").length) {\n if (!A(d)) {\n let e = N(),\n i = new t([{\n tagName: \"svg\",\n attributes: {\n width: 8,\n height: 8\n },\n children: [{\n tagName: \"defs\",\n children: [{\n tagName: \"clipPath\",\n attributes: {\n id: e\n },\n children: [{\n tagName: \"rect\",\n attributes: {\n width: 4,\n height: 4\n }\n }]\n }]\n }, {\n tagName: \"rect\",\n attributes: {\n id: \"hitme\",\n width: 8,\n height: 8,\n \"clip-path\": `url(#${e})`,\n fill: \"rgba(0,0,0,0.001)\"\n }\n }]\n }]).addToDOM(g.body);\n T(i, {\n position: \"fixed\",\n top: 0,\n left: 0,\n zIndex: 9e5\n });\n let s = g.elementFromPoint(6, 6);\n d = \"hitme\" === (s && s.id), g.body.removeChild(i);\n }\n if (d) return z(S.location.href.split(\"#\")[0], [/<[^>]*>/g, \"\"], [/([\\('\\)])/g, \"\\\\$1\"], [/ /g, \"%20\"]);\n }\n return \"\";\n }\n getStyle(t) {\n return this.style = L({\n fontFamily: \"Helvetica, Arial, sans-serif\",\n fontSize: \"1rem\"\n }, t), this.style;\n }\n setStyle(t) {\n this.boxWrapper.css(this.getStyle(t));\n }\n isHidden() {\n return !this.boxWrapper.getBBox().width;\n }\n destroy() {\n let t = this.defs;\n return this.box = null, this.boxWrapper = this.boxWrapper.destroy(), P(this.gradients || {}), this.gradients = null, this.defs = t.destroy(), this.unSubPixelFix && this.unSubPixelFix(), this.alignedObjects = null, null;\n }\n createElement(t) {\n return new this.Element(this, t);\n }\n getRadialAttr(t, e) {\n return {\n cx: t[0] - t[2] / 2 + (e.cx || 0) * t[2],\n cy: t[1] - t[2] / 2 + (e.cy || 0) * t[2],\n r: (e.r || 0) * t[2]\n };\n }\n shadowDefinition(t) {\n let e = [`highcharts-drop-shadow-${this.chartIndex}`, ...Object.keys(t).map(e => `${e}-${t[e]}`)].join(\"-\").toLowerCase().replace(/[^a-z\\d\\-]/g, \"\"),\n i = j({\n color: \"#000000\",\n offsetX: 1,\n offsetY: 1,\n opacity: .15,\n width: 5\n }, t);\n return this.defs.element.querySelector(`#${e}`) || this.definition({\n tagName: \"filter\",\n attributes: {\n id: e,\n filterUnits: i.filterUnits\n },\n children: this.getShadowFilterContent(i)\n }), e;\n }\n getShadowFilterContent(t) {\n return [{\n tagName: \"feDropShadow\",\n attributes: {\n dx: t.offsetX,\n dy: t.offsetY,\n \"flood-color\": t.color,\n \"flood-opacity\": Math.min(5 * t.opacity, 1),\n stdDeviation: t.width / 2\n }\n }];\n }\n buildText(t) {\n new h(t).buildSVG();\n }\n getContrast(t) {\n let e = i.parse(t).rgba.map(t => {\n let e = t / 255;\n return e <= .03928 ? e / 12.92 : Math.pow((e + .055) / 1.055, 2.4);\n }),\n s = .2126 * e[0] + .7152 * e[1] + .0722 * e[2];\n return 1.05 / (s + .05) > (s + .05) / .05 ? \"#FFFFFF\" : \"#000000\";\n }\n button(e, i, s, r, o = {}, n, a, h, l, d) {\n let p = this.label(e, i, s, l, void 0, void 0, d, void 0, \"button\"),\n u = this.styledMode,\n g = arguments,\n f = 0;\n o = j(c.global.buttonTheme, o), u && (delete o.fill, delete o.stroke, delete o[\"stroke-width\"]);\n let x = o.states || {},\n y = o.style || {};\n delete o.states, delete o.style;\n let b = [t.filterUserAttributes(o)],\n v = [y];\n return u || [\"hover\", \"select\", \"disabled\"].forEach((e, i) => {\n b.push(j(b[0], t.filterUserAttributes(g[i + 5] || x[e] || {}))), v.push(b[i + 1].style), delete b[i + 1].style;\n }), C(p.element, m ? \"mouseover\" : \"mouseenter\", function () {\n 3 !== f && p.setState(1);\n }), C(p.element, m ? \"mouseout\" : \"mouseleave\", function () {\n 3 !== f && p.setState(f);\n }), p.setState = (t = 0) => {\n if (1 !== t && (p.state = f = t), p.removeClass(/highcharts-button-(normal|hover|pressed|disabled)/).addClass(\"highcharts-button-\" + [\"normal\", \"hover\", \"pressed\", \"disabled\"][t]), !u) {\n p.attr(b[t]);\n let e = v[t];\n E(e) && p.css(e);\n }\n }, p.attr(b[0]), !u && (p.css(L({\n cursor: \"default\"\n }, y)), d && p.text.css({\n pointerEvents: \"none\"\n })), p.on(\"touchstart\", t => t.stopPropagation()).on(\"click\", function (t) {\n 3 !== f && r.call(p, t);\n });\n }\n crispLine(t, e) {\n let [i, s] = t;\n return A(i[1]) && i[1] === s[1] && (i[1] = s[1] = w(i[1], e)), A(i[2]) && i[2] === s[2] && (i[2] = s[2] = w(i[2], e)), t;\n }\n path(t) {\n let e = this.styledMode ? {} : {\n fill: \"none\"\n };\n return O(t) ? e.d = t : E(t) && L(e, t), this.createElement(\"path\").attr(e);\n }\n circle(t, e, i) {\n let s = E(t) ? t : void 0 === t ? {} : {\n x: t,\n y: e,\n r: i\n },\n r = this.createElement(\"circle\");\n return r.xSetter = r.ySetter = function (t, e, i) {\n i.setAttribute(\"c\" + e, t);\n }, r.attr(s);\n }\n arc(t, e, i, s, r, o) {\n let n;\n E(t) ? (e = (n = t).y, i = n.r, s = n.innerR, r = n.start, o = n.end, t = n.x) : n = {\n innerR: s,\n start: r,\n end: o\n };\n let a = this.symbol(\"arc\", t, e, i, i, n);\n return a.r = i, a;\n }\n rect(t, e, i, s, r, o) {\n let n = E(t) ? t : void 0 === t ? {} : {\n x: t,\n y: e,\n r,\n width: Math.max(i || 0, 0),\n height: Math.max(s || 0, 0)\n },\n a = this.createElement(\"rect\");\n return this.styledMode || (void 0 !== o && (n[\"stroke-width\"] = o, L(n, a.crisp(n))), n.fill = \"none\"), a.rSetter = function (t, e, i) {\n a.r = t, k(i, {\n rx: t,\n ry: t\n });\n }, a.rGetter = function () {\n return a.r || 0;\n }, a.attr(n);\n }\n roundedRect(t) {\n return this.symbol(\"roundedRect\").attr(t);\n }\n setSize(t, e, i) {\n this.width = t, this.height = e, this.boxWrapper.animate({\n width: t,\n height: e\n }, {\n step: function () {\n this.attr({\n viewBox: \"0 0 \" + this.attr(\"width\") + \" \" + this.attr(\"height\")\n });\n },\n duration: B(i, !0) ? void 0 : 0\n }), this.alignElements();\n }\n g(t) {\n let e = this.createElement(\"g\");\n return t ? e.attr({\n class: \"highcharts-\" + t\n }) : e;\n }\n image(t, e, i, s, r, o) {\n let n = {\n preserveAspectRatio: \"none\"\n };\n D(e) && (n.x = e), D(i) && (n.y = i), D(s) && (n.width = s), D(r) && (n.height = r);\n let a = this.createElement(\"image\").attr(n),\n h = function (e) {\n a.attr({\n href: t\n }), o.call(a, e);\n };\n if (o) {\n a.attr({\n href: \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\"\n });\n let e = new S.Image();\n C(e, \"load\", h), e.src = t, e.complete && h({});\n } else a.attr({\n href: t\n });\n return a;\n }\n symbol(t, e, i, s, r, o) {\n let n, a, h, l;\n let d = this,\n c = /^url\\((.*?)\\)$/,\n u = c.test(t),\n f = !u && (this.symbols[t] ? t : \"circle\"),\n m = f && this.symbols[f];\n if (m) \"number\" == typeof e && (a = m.call(this.symbols, e || 0, i || 0, s || 0, r || 0, o)), n = this.path(a), d.styledMode || n.attr(\"fill\", \"none\"), L(n, {\n symbolName: f || void 0,\n x: e,\n y: i,\n width: s,\n height: r\n }), o && L(n, o);else if (u) {\n h = t.match(c)[1];\n let s = n = this.image(h);\n s.imgwidth = B(o && o.width, v[h] && v[h].width), s.imgheight = B(o && o.height, v[h] && v[h].height), l = t => t.attr({\n width: t.width,\n height: t.height\n }), [\"width\", \"height\"].forEach(t => {\n s[`${t}Setter`] = function (t, e) {\n this[e] = t;\n let {\n alignByTranslate: i,\n element: s,\n width: r,\n height: n,\n imgwidth: a,\n imgheight: h\n } = this,\n l = \"width\" === e ? a : h,\n d = 1;\n o && \"within\" === o.backgroundSize && r && n && a && h ? (d = Math.min(r / a, n / h), k(s, {\n width: Math.round(a * d),\n height: Math.round(h * d)\n })) : s && l && s.setAttribute(e, l), !i && a && h && this.translate(((r || 0) - a * d) / 2, ((n || 0) - h * d) / 2);\n };\n }), A(e) && s.attr({\n x: e,\n y: i\n }), s.isImg = !0, s.symbolUrl = t, A(s.imgwidth) && A(s.imgheight) ? l(s) : (s.attr({\n width: 0,\n height: 0\n }), M(\"img\", {\n onload: function () {\n let t = p[d.chartIndex];\n 0 === this.width && (T(this, {\n position: \"absolute\",\n top: \"-999em\"\n }), g.body.appendChild(this)), v[h] = {\n width: this.width,\n height: this.height\n }, s.imgwidth = this.width, s.imgheight = this.height, s.element && l(s), this.parentNode && this.parentNode.removeChild(this), d.imgCount--, d.imgCount || !t || t.hasLoaded || t.onload();\n },\n src: h\n }), this.imgCount++);\n }\n return n;\n }\n clipRect(t, e, i, s) {\n return this.rect(t, e, i, s, 0);\n }\n text(t, e, i, s) {\n let r = {};\n if (s && (this.allowHTML || !this.forExport)) return this.html(t, e, i);\n r.x = Math.round(e || 0), i && (r.y = Math.round(i)), A(t) && (r.text = t);\n let o = this.createElement(\"text\").attr(r);\n return s && (!this.forExport || this.allowHTML) || (o.xSetter = function (t, e, i) {\n let s = i.getElementsByTagName(\"tspan\"),\n r = i.getAttribute(e);\n for (let i = 0, o; i < s.length; i++) (o = s[i]).getAttribute(e) === r && o.setAttribute(e, t);\n i.setAttribute(e, t);\n }), o;\n }\n fontMetrics(t) {\n let e = R(o.prototype.getStyle.call(t, \"font-size\") || 0),\n i = e < 24 ? e + 3 : Math.round(1.2 * e),\n s = Math.round(.8 * i);\n return {\n h: i,\n b: s,\n f: e\n };\n }\n rotCorr(t, e, i) {\n let s = t;\n return e && i && (s = Math.max(s * Math.cos(e * u), 4)), {\n x: -t / 3 * Math.sin(e * u),\n y: s\n };\n }\n pathToSegments(t) {\n let e = [],\n i = [],\n s = {\n A: 8,\n C: 7,\n H: 2,\n L: 3,\n M: 3,\n Q: 5,\n S: 5,\n T: 3,\n V: 2\n };\n for (let r = 0; r < t.length; r++) I(i[0]) && D(t[r]) && i.length === s[i[0].toUpperCase()] && t.splice(r, 0, i[0].replace(\"M\", \"L\").replace(\"m\", \"l\")), \"string\" == typeof t[r] && (i.length && e.push(i.slice(0)), i.length = 0), i.push(t[r]);\n return e.push(i.slice(0)), e;\n }\n label(t, e, i, s, r, o, a, h, l) {\n return new n(this, t, e, i, s, r, o, a, h, l);\n }\n alignElements() {\n this.alignedObjects.forEach(t => t.align());\n }\n }\n return L(W.prototype, {\n Element: o,\n SVG_NS: b,\n escapes: {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n \"'\": \"'\",\n '\"': \""\"\n },\n symbols: a,\n draw: y\n }), r.registerRendererType(\"svg\", W, !0), W;\n }), i(e, \"Core/Renderer/HTML/HTMLElement.js\", [e[\"Core/Renderer/HTML/AST.js\"], e[\"Core/Globals.js\"], e[\"Core/Renderer/SVG/SVGElement.js\"], e[\"Core/Utilities.js\"]], function (t, e, i, s) {\n let {\n composed: r\n } = e,\n {\n attr: o,\n css: n,\n createElement: a,\n defined: h,\n extend: l,\n pInt: d,\n pushUnique: c\n } = s;\n function p(t, e, s) {\n let r = this.div?.style || s.style;\n i.prototype[`${e}Setter`].call(this, t, e, s), r && (r[e] = t);\n }\n let u = (t, e) => {\n if (!t.div) {\n let s = o(t.element, \"class\"),\n r = t.css,\n n = a(\"div\", s ? {\n className: s\n } : void 0, {\n position: \"absolute\",\n left: `${t.translateX || 0}px`,\n top: `${t.translateY || 0}px`,\n ...t.styles,\n display: t.display,\n opacity: t.opacity,\n visibility: t.visibility\n }, t.parentGroup?.div || e);\n t.classSetter = (t, e, i) => {\n i.setAttribute(\"class\", t), n.className = t;\n }, t.translateXSetter = t.translateYSetter = (e, i) => {\n t[i] = e, n.style[\"translateX\" === i ? \"left\" : \"top\"] = `${e}px`, t.doTransform = !0;\n }, t.opacitySetter = t.visibilitySetter = p, t.css = e => (r.call(t, e), e.cursor && (n.style.cursor = e.cursor), e.pointerEvents && (n.style.pointerEvents = e.pointerEvents), t), t.on = function () {\n return i.prototype.on.apply({\n element: n,\n onEvents: t.onEvents\n }, arguments), t;\n }, t.div = n;\n }\n return t.div;\n };\n class g extends i {\n static compose(t) {\n c(r, this.compose) && (t.prototype.html = function (t, e, i) {\n return new g(this, \"span\").attr({\n text: t,\n x: Math.round(e),\n y: Math.round(i)\n });\n });\n }\n constructor(t, e) {\n super(t, e), this.css({\n position: \"absolute\",\n ...(t.styledMode ? {} : {\n fontFamily: t.style.fontFamily,\n fontSize: t.style.fontSize\n })\n }), this.element.style.whiteSpace = \"nowrap\";\n }\n getSpanCorrection(t, e, i) {\n this.xCorr = -t * i, this.yCorr = -e;\n }\n css(t) {\n let e;\n let {\n element: i\n } = this,\n s = \"SPAN\" === i.tagName && t && \"width\" in t,\n r = s && t.width;\n return s && (delete t.width, this.textWidth = d(r) || void 0, e = !0), t?.textOverflow === \"ellipsis\" && (t.whiteSpace = \"nowrap\", t.overflow = \"hidden\"), l(this.styles, t), n(i, t), e && this.updateTransform(), this;\n }\n htmlGetBBox() {\n let {\n element: t\n } = this;\n return {\n x: t.offsetLeft,\n y: t.offsetTop,\n width: t.offsetWidth,\n height: t.offsetHeight\n };\n }\n updateTransform() {\n if (!this.added) {\n this.alignOnAdd = !0;\n return;\n }\n let {\n element: t,\n renderer: e,\n rotation: i,\n rotationOriginX: s,\n rotationOriginY: r,\n styles: o,\n textAlign: a = \"left\",\n textWidth: l,\n translateX: d = 0,\n translateY: c = 0,\n x: p = 0,\n y: u = 0\n } = this,\n g = {\n left: 0,\n center: .5,\n right: 1\n }[a],\n f = o.whiteSpace;\n if (n(t, {\n marginLeft: `${d}px`,\n marginTop: `${c}px`\n }), \"SPAN\" === t.tagName) {\n let o = [i, a, t.innerHTML, l, this.textAlign].join(\",\"),\n d = -(this.parentGroup?.padding * 1) || 0,\n c,\n m = !1;\n if (l !== this.oldTextWidth) {\n let e = this.textPxLength ? this.textPxLength : (n(t, {\n width: \"\",\n whiteSpace: f || \"nowrap\"\n }), t.offsetWidth),\n s = l || 0;\n (s > this.oldTextWidth || e > s) && (/[ \\-]/.test(t.textContent || t.innerText) || \"ellipsis\" === t.style.textOverflow) && (n(t, {\n width: e > s || i ? l + \"px\" : \"auto\",\n display: \"block\",\n whiteSpace: f || \"normal\"\n }), this.oldTextWidth = l, m = !0);\n }\n this.hasBoxWidthChanged = m, o !== this.cTT && (c = e.fontMetrics(t).b, h(i) && (i !== (this.oldRotation || 0) || a !== this.oldAlign) && this.setSpanRotation(i, d, d), this.getSpanCorrection(!h(i) && this.textPxLength || t.offsetWidth, c, g));\n let {\n xCorr: x = 0,\n yCorr: y = 0\n } = this,\n b = (s ?? p) - x - p - d,\n v = (r ?? u) - y - u - d;\n n(t, {\n left: `${p + x}px`,\n top: `${u + y}px`,\n transformOrigin: `${b}px ${v}px`\n }), this.cTT = o, this.oldRotation = i, this.oldAlign = a;\n }\n }\n setSpanRotation(t, e, i) {\n n(this.element, {\n transform: `rotate(${t}deg)`,\n transformOrigin: `${e}% ${i}px`\n });\n }\n add(t) {\n let e;\n let i = this.renderer.box.parentNode,\n s = [];\n if (this.parentGroup = t, t && !(e = t.div)) {\n let r = t;\n for (; r;) s.push(r), r = r.parentGroup;\n for (let t of s.reverse()) e = u(t, i);\n }\n return (e || i).appendChild(this.element), this.added = !0, this.alignOnAdd && this.updateTransform(), this;\n }\n textSetter(e) {\n e !== this.textStr && (delete this.bBox, delete this.oldTextWidth, t.setElementHTML(this.element, e ?? \"\"), this.textStr = e, this.doTransform = !0);\n }\n alignSetter(t) {\n this.alignValue = this.textAlign = t, this.doTransform = !0;\n }\n xSetter(t, e) {\n this[e] = t, this.doTransform = !0;\n }\n }\n let f = g.prototype;\n return f.visibilitySetter = f.opacitySetter = p, f.ySetter = f.rotationSetter = f.rotationOriginXSetter = f.rotationOriginYSetter = f.xSetter, g;\n }), i(e, \"Core/Axis/AxisDefaults.js\", [], function () {\n var t, e;\n return (e = t || (t = {})).xAxis = {\n alignTicks: !0,\n allowDecimals: void 0,\n panningEnabled: !0,\n zIndex: 2,\n zoomEnabled: !0,\n dateTimeLabelFormats: {\n millisecond: {\n main: \"%H:%M:%S.%L\",\n range: !1\n },\n second: {\n main: \"%H:%M:%S\",\n range: !1\n },\n minute: {\n main: \"%H:%M\",\n range: !1\n },\n hour: {\n main: \"%H:%M\",\n range: !1\n },\n day: {\n main: \"%e %b\"\n },\n week: {\n main: \"%e %b\"\n },\n month: {\n main: \"%b '%y\"\n },\n year: {\n main: \"%Y\"\n }\n },\n endOnTick: !1,\n gridLineDashStyle: \"Solid\",\n gridZIndex: 1,\n labels: {\n autoRotationLimit: 80,\n distance: 15,\n enabled: !0,\n indentation: 10,\n overflow: \"justify\",\n reserveSpace: void 0,\n rotation: void 0,\n staggerLines: 0,\n step: 0,\n useHTML: !1,\n zIndex: 7,\n style: {\n color: \"#333333\",\n cursor: \"default\",\n fontSize: \"0.8em\"\n }\n },\n maxPadding: .01,\n minorGridLineDashStyle: \"Solid\",\n minorTickLength: 2,\n minorTickPosition: \"outside\",\n minorTicksPerMajor: 5,\n minPadding: .01,\n offset: void 0,\n reversed: void 0,\n reversedStacks: !1,\n showEmpty: !0,\n showFirstLabel: !0,\n showLastLabel: !0,\n startOfWeek: 1,\n startOnTick: !1,\n tickLength: 10,\n tickPixelInterval: 100,\n tickmarkPlacement: \"between\",\n tickPosition: \"outside\",\n title: {\n align: \"middle\",\n useHTML: !1,\n x: 0,\n y: 0,\n style: {\n color: \"#666666\",\n fontSize: \"0.8em\"\n }\n },\n visible: !0,\n minorGridLineColor: \"#f2f2f2\",\n minorGridLineWidth: 1,\n minorTickColor: \"#999999\",\n lineColor: \"#333333\",\n lineWidth: 1,\n gridLineColor: \"#e6e6e6\",\n gridLineWidth: void 0,\n tickColor: \"#333333\"\n }, e.yAxis = {\n reversedStacks: !0,\n endOnTick: !0,\n maxPadding: .05,\n minPadding: .05,\n tickPixelInterval: 72,\n showLastLabel: !0,\n labels: {\n x: void 0\n },\n startOnTick: !0,\n title: {\n text: \"Values\"\n },\n stackLabels: {\n animation: {},\n allowOverlap: !1,\n enabled: !1,\n crop: !0,\n overflow: \"justify\",\n formatter: function () {\n let {\n numberFormatter: t\n } = this.axis.chart;\n return t(this.total || 0, -1);\n },\n style: {\n color: \"#000000\",\n fontSize: \"0.7em\",\n fontWeight: \"bold\",\n textOutline: \"1px contrast\"\n }\n },\n gridLineWidth: 1,\n lineWidth: 0\n }, t;\n }), i(e, \"Core/Foundation.js\", [e[\"Core/Utilities.js\"]], function (t) {\n var e;\n let {\n addEvent: i,\n isFunction: s,\n objectEach: r,\n removeEvent: o\n } = t;\n return (e || (e = {})).registerEventOptions = function (t, e) {\n t.eventOptions = t.eventOptions || {}, r(e.events, function (e, r) {\n t.eventOptions[r] !== e && (t.eventOptions[r] && (o(t, r, t.eventOptions[r]), delete t.eventOptions[r]), s(e) && (t.eventOptions[r] = e, i(t, r, e, {\n order: 0\n })));\n });\n }, e;\n }), i(e, \"Core/Axis/Tick.js\", [e[\"Core/Templating.js\"], e[\"Core/Globals.js\"], e[\"Core/Utilities.js\"]], function (t, e, i) {\n let {\n deg2rad: s\n } = e,\n {\n clamp: r,\n correctFloat: o,\n defined: n,\n destroyObjectProperties: a,\n extend: h,\n fireEvent: l,\n isNumber: d,\n merge: c,\n objectEach: p,\n pick: u\n } = i;\n return class {\n constructor(t, e, i, s, r) {\n this.isNew = !0, this.isNewLabel = !0, this.axis = t, this.pos = e, this.type = i || \"\", this.parameters = r || {}, this.tickmarkOffset = this.parameters.tickmarkOffset, this.options = this.parameters.options, l(this, \"init\"), i || s || this.addLabel();\n }\n addLabel() {\n let e = this,\n i = e.axis,\n s = i.options,\n r = i.chart,\n a = i.categories,\n c = i.logarithmic,\n p = i.names,\n g = e.pos,\n f = u(e.options && e.options.labels, s.labels),\n m = i.tickPositions,\n x = g === m[0],\n y = g === m[m.length - 1],\n b = (!f.step || 1 === f.step) && 1 === i.tickInterval,\n v = m.info,\n S = e.label,\n C,\n k,\n M,\n w = this.parameters.category || (a ? u(a[g], p[g], g) : g);\n c && d(w) && (w = o(c.lin2log(w))), i.dateTime && (v ? C = (k = r.time.resolveDTLFormat(s.dateTimeLabelFormats[!s.grid && v.higherRanks[g] || v.unitName])).main : d(w) && (C = i.dateTime.getXDateFormat(w, s.dateTimeLabelFormats || {}))), e.isFirst = x, e.isLast = y;\n let T = {\n axis: i,\n chart: r,\n dateTimeLabelFormat: C,\n isFirst: x,\n isLast: y,\n pos: g,\n tick: e,\n tickPositionInfo: v,\n value: w\n };\n l(this, \"labelFormat\", T);\n let A = e => f.formatter ? f.formatter.call(e, e) : f.format ? (e.text = i.defaultLabelFormatter.call(e), t.format(f.format, e, r)) : i.defaultLabelFormatter.call(e),\n P = A.call(T, T),\n L = k && k.list;\n L ? e.shortenLabel = function () {\n for (M = 0; M < L.length; M++) if (h(T, {\n dateTimeLabelFormat: L[M]\n }), S.attr({\n text: A.call(T, T)\n }), S.getBBox().width < i.getSlotWidth(e) - 2 * (f.padding || 0)) return;\n S.attr({\n text: \"\"\n });\n } : e.shortenLabel = void 0, b && i._addedPlotLB && e.moveLabel(P, f), n(S) || e.movedLabel ? S && S.textStr !== P && !b && (!S.textWidth || f.style.width || S.styles.width || S.css({\n width: null\n }), S.attr({\n text: P\n }), S.textPxLength = S.getBBox().width) : (e.label = S = e.createLabel(P, f), e.rotation = 0);\n }\n createLabel(t, e, i) {\n let s = this.axis,\n r = s.chart,\n o = n(t) && e.enabled ? r.renderer.text(t, i?.x, i?.y, e.useHTML).add(s.labelGroup) : void 0;\n return o && (r.styledMode || o.css(c(e.style)), o.textPxLength = o.getBBox().width), o;\n }\n destroy() {\n a(this, this.axis);\n }\n getPosition(t, e, i, s) {\n let n = this.axis,\n a = n.chart,\n h = s && a.oldChartHeight || a.chartHeight,\n d = {\n x: t ? o(n.translate(e + i, void 0, void 0, s) + n.transB) : n.left + n.offset + (n.opposite ? (s && a.oldChartWidth || a.chartWidth) - n.right - n.left : 0),\n y: t ? h - n.bottom + n.offset - (n.opposite ? n.height : 0) : o(h - n.translate(e + i, void 0, void 0, s) - n.transB)\n };\n return d.y = r(d.y, -1e9, 1e9), l(this, \"afterGetPosition\", {\n pos: d\n }), d;\n }\n getLabelPosition(t, e, i, r, o, a, h, d) {\n let c, p;\n let g = this.axis,\n f = g.transA,\n m = g.isLinked && g.linkedParent ? g.linkedParent.reversed : g.reversed,\n x = g.staggerLines,\n y = g.tickRotCorr || {\n x: 0,\n y: 0\n },\n b = r || g.reserveSpaceDefault ? 0 : -g.labelOffset * (\"center\" === g.labelAlign ? .5 : 1),\n v = o.distance,\n S = {};\n return c = 0 === g.side ? i.rotation ? -v : -i.getBBox().height : 2 === g.side ? y.y + v : Math.cos(i.rotation * s) * (y.y - i.getBBox(!1, 0).height / 2), n(o.y) && (c = 0 === g.side && g.horiz ? o.y + c : o.y), t = t + u(o.x, [0, 1, 0, -1][g.side] * v) + b + y.x - (a && r ? a * f * (m ? -1 : 1) : 0), e = e + c - (a && !r ? a * f * (m ? 1 : -1) : 0), x && (p = h / (d || 1) % x, g.opposite && (p = x - p - 1), e += p * (g.labelOffset / x)), S.x = t, S.y = Math.round(e), l(this, \"afterGetLabelPosition\", {\n pos: S,\n tickmarkOffset: a,\n index: h\n }), S;\n }\n getLabelSize() {\n return this.label ? this.label.getBBox()[this.axis.horiz ? \"height\" : \"width\"] : 0;\n }\n getMarkPath(t, e, i, s, r = !1, o) {\n return o.crispLine([[\"M\", t, e], [\"L\", t + (r ? 0 : -i), e + (r ? i : 0)]], s);\n }\n handleOverflow(t) {\n let e = this.axis,\n i = e.options.labels,\n r = t.x,\n o = e.chart.chartWidth,\n n = e.chart.spacing,\n a = u(e.labelLeft, Math.min(e.pos, n[3])),\n h = u(e.labelRight, Math.max(e.isRadial ? 0 : e.pos + e.len, o - n[1])),\n l = this.label,\n d = this.rotation,\n c = {\n left: 0,\n center: .5,\n right: 1\n }[e.labelAlign || l.attr(\"align\")],\n p = l.getBBox().width,\n g = e.getSlotWidth(this),\n f = {},\n m = g,\n x = 1,\n y,\n b,\n v;\n d || \"justify\" !== i.overflow ? d < 0 && r - c * p < a ? v = Math.round(r / Math.cos(d * s) - a) : d > 0 && r + c * p > h && (v = Math.round((o - r) / Math.cos(d * s))) : (y = r - c * p, b = r + (1 - c) * p, y < a ? m = t.x + m * (1 - c) - a : b > h && (m = h - t.x + m * c, x = -1), (m = Math.min(g, m)) < g && \"center\" === e.labelAlign && (t.x += x * (g - m - c * (g - Math.min(p, m)))), (p > m || e.autoRotation && (l.styles || {}).width) && (v = m)), v && (this.shortenLabel ? this.shortenLabel() : (f.width = Math.floor(v) + \"px\", (i.style || {}).textOverflow || (f.textOverflow = \"ellipsis\"), l.css(f)));\n }\n moveLabel(t, e) {\n let i = this,\n s = i.label,\n r = i.axis,\n o = !1,\n n;\n s && s.textStr === t ? (i.movedLabel = s, o = !0, delete i.label) : p(r.ticks, function (e) {\n o || e.isNew || e === i || !e.label || e.label.textStr !== t || (i.movedLabel = e.label, o = !0, e.labelPos = i.movedLabel.xy, delete e.label);\n }), !o && (i.labelPos || s) && (n = i.labelPos || s.xy, i.movedLabel = i.createLabel(t, e, n), i.movedLabel && i.movedLabel.attr({\n opacity: 0\n }));\n }\n render(t, e, i) {\n let s = this.axis,\n r = s.horiz,\n n = this.pos,\n a = u(this.tickmarkOffset, s.tickmarkOffset),\n h = this.getPosition(r, n, a, e),\n d = h.x,\n c = h.y,\n p = s.pos,\n g = p + s.len,\n f = r ? d : c;\n !s.chart.polar && this.isNew && (o(f) < p || f > g) && (i = 0);\n let m = u(i, this.label && this.label.newOpacity, 1);\n i = u(i, 1), this.isActive = !0, this.renderGridLine(e, i), this.renderMark(h, i), this.renderLabel(h, e, m, t), this.isNew = !1, l(this, \"afterRender\");\n }\n renderGridLine(t, e) {\n let i = this.axis,\n s = i.options,\n r = {},\n o = this.pos,\n n = this.type,\n a = u(this.tickmarkOffset, i.tickmarkOffset),\n h = i.chart.renderer,\n l = this.gridLine,\n d,\n c = s.gridLineWidth,\n p = s.gridLineColor,\n g = s.gridLineDashStyle;\n \"minor\" === this.type && (c = s.minorGridLineWidth, p = s.minorGridLineColor, g = s.minorGridLineDashStyle), l || (i.chart.styledMode || (r.stroke = p, r[\"stroke-width\"] = c || 0, r.dashstyle = g), n || (r.zIndex = 1), t && (e = 0), this.gridLine = l = h.path().attr(r).addClass(\"highcharts-\" + (n ? n + \"-\" : \"\") + \"grid-line\").add(i.gridGroup)), l && (d = i.getPlotLinePath({\n value: o + a,\n lineWidth: l.strokeWidth(),\n force: \"pass\",\n old: t,\n acrossPanes: !1\n })) && l[t || this.isNew ? \"attr\" : \"animate\"]({\n d: d,\n opacity: e\n });\n }\n renderMark(t, e) {\n let i = this.axis,\n s = i.options,\n r = i.chart.renderer,\n o = this.type,\n n = i.tickSize(o ? o + \"Tick\" : \"tick\"),\n a = t.x,\n h = t.y,\n l = u(s[\"minor\" !== o ? \"tickWidth\" : \"minorTickWidth\"], !o && i.isXAxis ? 1 : 0),\n d = s[\"minor\" !== o ? \"tickColor\" : \"minorTickColor\"],\n c = this.mark,\n p = !c;\n n && (i.opposite && (n[0] = -n[0]), c || (this.mark = c = r.path().addClass(\"highcharts-\" + (o ? o + \"-\" : \"\") + \"tick\").add(i.axisGroup), i.chart.styledMode || c.attr({\n stroke: d,\n \"stroke-width\": l\n })), c[p ? \"attr\" : \"animate\"]({\n d: this.getMarkPath(a, h, n[0], c.strokeWidth(), i.horiz, r),\n opacity: e\n }));\n }\n renderLabel(t, e, i, s) {\n let r = this.axis,\n o = r.horiz,\n n = r.options,\n a = this.label,\n h = n.labels,\n l = h.step,\n c = u(this.tickmarkOffset, r.tickmarkOffset),\n p = t.x,\n g = t.y,\n f = !0;\n a && d(p) && (a.xy = t = this.getLabelPosition(p, g, a, o, h, c, s, l), (!this.isFirst || this.isLast || n.showFirstLabel) && (!this.isLast || this.isFirst || n.showLastLabel) ? !o || h.step || h.rotation || e || 0 === i || this.handleOverflow(t) : f = !1, l && s % l && (f = !1), f && d(t.y) ? (t.opacity = i, a[this.isNewLabel ? \"attr\" : \"animate\"](t).show(!0), this.isNewLabel = !1) : (a.hide(), this.isNewLabel = !0));\n }\n replaceMovedLabel() {\n let t = this.label,\n e = this.axis;\n t && !this.isNew && (t.animate({\n opacity: 0\n }, void 0, t.destroy), delete this.label), e.isDirty = !0, this.label = this.movedLabel, delete this.movedLabel;\n }\n };\n }), i(e, \"Core/Axis/Axis.js\", [e[\"Core/Animation/AnimationUtilities.js\"], e[\"Core/Axis/AxisDefaults.js\"], e[\"Core/Color/Color.js\"], e[\"Core/Defaults.js\"], e[\"Core/Foundation.js\"], e[\"Core/Globals.js\"], e[\"Core/Axis/Tick.js\"], e[\"Core/Utilities.js\"]], function (t, e, i, s, r, o, n, a) {\n let {\n animObject: h\n } = t,\n {\n xAxis: l,\n yAxis: d\n } = e,\n {\n defaultOptions: c\n } = s,\n {\n registerEventOptions: p\n } = r,\n {\n deg2rad: u\n } = o,\n {\n arrayMax: g,\n arrayMin: f,\n clamp: m,\n correctFloat: x,\n defined: y,\n destroyObjectProperties: b,\n erase: v,\n error: S,\n extend: C,\n fireEvent: k,\n getClosestDistance: M,\n insertItem: w,\n isArray: T,\n isNumber: A,\n isString: P,\n merge: L,\n normalizeTickInterval: O,\n objectEach: D,\n pick: E,\n relativeLength: I,\n removeEvent: j,\n splat: B,\n syncTimeout: R\n } = a,\n z = (t, e) => O(e, void 0, void 0, E(t.options.allowDecimals, e < .5 || void 0 !== t.tickAmount), !!t.tickAmount);\n C(c, {\n xAxis: l,\n yAxis: L(l, d)\n });\n class N {\n constructor(t, e, i) {\n this.init(t, e, i);\n }\n init(t, e, i = this.coll) {\n let s = \"xAxis\" === i,\n r = this.isZAxis || (t.inverted ? !s : s);\n this.chart = t, this.horiz = r, this.isXAxis = s, this.coll = i, k(this, \"init\", {\n userOptions: e\n }), this.opposite = E(e.opposite, this.opposite), this.side = E(e.side, this.side, r ? this.opposite ? 0 : 2 : this.opposite ? 1 : 3), this.setOptions(e);\n let o = this.options,\n n = o.labels;\n this.type ?? (this.type = o.type || \"linear\"), this.uniqueNames ?? (this.uniqueNames = o.uniqueNames ?? !0), k(this, \"afterSetType\"), this.userOptions = e, this.minPixelPadding = 0, this.reversed = E(o.reversed, this.reversed), this.visible = o.visible, this.zoomEnabled = o.zoomEnabled, this.hasNames = \"category\" === this.type || !0 === o.categories, this.categories = T(o.categories) && o.categories || (this.hasNames ? [] : void 0), this.names || (this.names = [], this.names.keys = {}), this.plotLinesAndBandsGroups = {}, this.positiveValuesOnly = !!this.logarithmic, this.isLinked = y(o.linkedTo), this.ticks = {}, this.labelEdge = [], this.minorTicks = {}, this.plotLinesAndBands = [], this.alternateBands = {}, this.len ?? (this.len = 0), this.minRange = this.userMinRange = o.minRange || o.maxZoom, this.range = o.range, this.offset = o.offset || 0, this.max = void 0, this.min = void 0;\n let a = E(o.crosshair, B(t.options.tooltip.crosshairs)[s ? 0 : 1]);\n this.crosshair = !0 === a ? {} : a, -1 === t.axes.indexOf(this) && (s ? t.axes.splice(t.xAxis.length, 0, this) : t.axes.push(this), w(this, t[this.coll])), t.orderItems(this.coll), this.series = this.series || [], t.inverted && !this.isZAxis && s && !y(this.reversed) && (this.reversed = !0), this.labelRotation = A(n.rotation) ? n.rotation : void 0, p(this, o), k(this, \"afterInit\");\n }\n setOptions(t) {\n let e = this.horiz ? {\n labels: {\n autoRotation: [-45],\n padding: 4\n },\n margin: 15\n } : {\n labels: {\n padding: 1\n },\n title: {\n rotation: 90 * this.side\n }\n };\n this.options = L(e, c[this.coll], t), k(this, \"afterSetOptions\", {\n userOptions: t\n });\n }\n defaultLabelFormatter() {\n let t = this.axis,\n {\n numberFormatter: e\n } = this.chart,\n i = A(this.value) ? this.value : NaN,\n s = t.chart.time,\n r = t.categories,\n o = this.dateTimeLabelFormat,\n n = c.lang,\n a = n.numericSymbols,\n h = n.numericSymbolMagnitude || 1e3,\n l = t.logarithmic ? Math.abs(i) : t.tickInterval,\n d = a && a.length,\n p,\n u;\n if (r) u = `${this.value}`;else if (o) u = s.dateFormat(o, i);else if (d && a && l >= 1e3) for (; d-- && void 0 === u;) l >= (p = Math.pow(h, d + 1)) && 10 * i % p == 0 && null !== a[d] && 0 !== i && (u = e(i / p, -1) + a[d]);\n return void 0 === u && (u = Math.abs(i) >= 1e4 ? e(i, -1) : e(i, -1, void 0, \"\")), u;\n }\n getSeriesExtremes() {\n let t;\n let e = this;\n k(this, \"getSeriesExtremes\", null, function () {\n e.hasVisibleSeries = !1, e.dataMin = e.dataMax = e.threshold = void 0, e.softThreshold = !e.isXAxis, e.series.forEach(i => {\n if (i.reserveSpace()) {\n let s = i.options,\n r,\n o = s.threshold,\n n,\n a;\n if (e.hasVisibleSeries = !0, e.positiveValuesOnly && 0 >= (o || 0) && (o = void 0), e.isXAxis) (r = i.xData) && r.length && (r = e.logarithmic ? r.filter(t => t > 0) : r, n = (t = i.getXExtremes(r)).min, a = t.max, A(n) || n instanceof Date || (r = r.filter(A), n = (t = i.getXExtremes(r)).min, a = t.max), r.length && (e.dataMin = Math.min(E(e.dataMin, n), n), e.dataMax = Math.max(E(e.dataMax, a), a)));else {\n let t = i.applyExtremes();\n A(t.dataMin) && (n = t.dataMin, e.dataMin = Math.min(E(e.dataMin, n), n)), A(t.dataMax) && (a = t.dataMax, e.dataMax = Math.max(E(e.dataMax, a), a)), y(o) && (e.threshold = o), (!s.softThreshold || e.positiveValuesOnly) && (e.softThreshold = !1);\n }\n }\n });\n }), k(this, \"afterGetSeriesExtremes\");\n }\n translate(t, e, i, s, r, o) {\n let n = this.linkedParent || this,\n a = s && n.old ? n.old.min : n.min;\n if (!A(a)) return NaN;\n let h = n.minPixelPadding,\n l = (n.isOrdinal || n.brokenAxis?.hasBreaks || n.logarithmic && r) && n.lin2val,\n d = 1,\n c = 0,\n p = s && n.old ? n.old.transA : n.transA,\n u = 0;\n return p || (p = n.transA), i && (d *= -1, c = n.len), n.reversed && (d *= -1, c -= d * (n.sector || n.len)), e ? (u = (t = t * d + c - h) / p + a, l && (u = n.lin2val(u))) : (l && (t = n.val2lin(t)), u = d * (t - a) * p + c + d * h + (A(o) ? p * o : 0), n.isRadial || (u = x(u))), u;\n }\n toPixels(t, e) {\n return this.translate(t, !1, !this.horiz, void 0, !0) + (e ? 0 : this.pos);\n }\n toValue(t, e) {\n return this.translate(t - (e ? 0 : this.pos), !0, !this.horiz, void 0, !0);\n }\n getPlotLinePath(t) {\n let e = this,\n i = e.chart,\n s = e.left,\n r = e.top,\n o = t.old,\n n = t.value,\n a = t.lineWidth,\n h = o && i.oldChartHeight || i.chartHeight,\n l = o && i.oldChartWidth || i.chartWidth,\n d = e.transB,\n c = t.translatedValue,\n p = t.force,\n u,\n g,\n f,\n x,\n y;\n function b(t, e, i) {\n return \"pass\" !== p && (t < e || t > i) && (p ? t = m(t, e, i) : y = !0), t;\n }\n let v = {\n value: n,\n lineWidth: a,\n old: o,\n force: p,\n acrossPanes: t.acrossPanes,\n translatedValue: c\n };\n return k(this, \"getPlotLinePath\", v, function (t) {\n u = f = (c = m(c = E(c, e.translate(n, void 0, void 0, o)), -1e9, 1e9)) + d, g = x = h - c - d, A(c) ? e.horiz ? (g = r, x = h - e.bottom + (e.options.isInternal ? 0 : i.scrollablePixelsY || 0), u = f = b(u, s, s + e.width)) : (u = s, f = l - e.right + (i.scrollablePixelsX || 0), g = x = b(g, r, r + e.height)) : (y = !0, p = !1), t.path = y && !p ? void 0 : i.renderer.crispLine([[\"M\", u, g], [\"L\", f, x]], a || 1);\n }), v.path;\n }\n getLinearTickPositions(t, e, i) {\n let s, r, o;\n let n = x(Math.floor(e / t) * t),\n a = x(Math.ceil(i / t) * t),\n h = [];\n if (x(n + t) === n && (o = 20), this.single) return [e];\n for (s = n; s <= a && (h.push(s), (s = x(s + t, o)) !== r);) r = s;\n return h;\n }\n getMinorTickInterval() {\n let {\n minorTicks: t,\n minorTickInterval: e\n } = this.options;\n return !0 === t ? E(e, \"auto\") : !1 !== t ? e : void 0;\n }\n getMinorTickPositions() {\n let t = this.options,\n e = this.tickPositions,\n i = this.minorTickInterval,\n s = this.pointRangePadding || 0,\n r = (this.min || 0) - s,\n o = (this.max || 0) + s,\n n = o - r,\n a = [],\n h;\n if (n && n / i < this.len / 3) {\n let s = this.logarithmic;\n if (s) this.paddedTicks.forEach(function (t, e, r) {\n e && a.push.apply(a, s.getLogTickPositions(i, r[e - 1], r[e], !0));\n });else if (this.dateTime && \"auto\" === this.getMinorTickInterval()) a = a.concat(this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(i), r, o, t.startOfWeek));else for (h = r + (e[0] - r) % i; h <= o && h !== a[0]; h += i) a.push(h);\n }\n return 0 !== a.length && this.trimTicks(a), a;\n }\n adjustForMinRange() {\n let t = this.options,\n e = this.logarithmic,\n {\n max: i,\n min: s,\n minRange: r\n } = this,\n o,\n n,\n a,\n h;\n this.isXAxis && void 0 === r && !e && (r = y(t.min) || y(t.max) || y(t.floor) || y(t.ceiling) ? null : Math.min(5 * (M(this.series.map(t => (t.xIncrement ? t.xData?.slice(0, 2) : t.xData) || [])) || 0), this.dataMax - this.dataMin)), A(i) && A(s) && A(r) && i - s < r && (n = this.dataMax - this.dataMin >= r, o = (r - i + s) / 2, a = [s - o, E(t.min, s - o)], n && (a[2] = e ? e.log2lin(this.dataMin) : this.dataMin), h = [(s = g(a)) + r, E(t.max, s + r)], n && (h[2] = e ? e.log2lin(this.dataMax) : this.dataMax), (i = f(h)) - s < r && (a[0] = i - r, a[1] = E(t.min, i - r), s = g(a))), this.minRange = r, this.min = s, this.max = i;\n }\n getClosest() {\n let t, e;\n if (this.categories) e = 1;else {\n let i = [];\n this.series.forEach(function (t) {\n let s = t.closestPointRange;\n t.xData?.length === 1 ? i.push(t.xData[0]) : !t.noSharedTooltip && y(s) && t.reserveSpace() && (e = y(e) ? Math.min(e, s) : s);\n }), i.length && (i.sort((t, e) => t - e), t = M([i]));\n }\n return t && e ? Math.min(t, e) : t || e;\n }\n nameToX(t) {\n let e = T(this.options.categories),\n i = e ? this.categories : this.names,\n s = t.options.x,\n r;\n return t.series.requireSorting = !1, y(s) || (s = this.uniqueNames && i ? e ? i.indexOf(t.name) : E(i.keys[t.name], -1) : t.series.autoIncrement()), -1 === s ? !e && i && (r = i.length) : r = s, void 0 !== r ? (this.names[r] = t.name, this.names.keys[t.name] = r) : t.x && (r = t.x), r;\n }\n updateNames() {\n let t = this,\n e = this.names;\n e.length > 0 && (Object.keys(e.keys).forEach(function (t) {\n delete e.keys[t];\n }), e.length = 0, this.minRange = this.userMinRange, (this.series || []).forEach(e => {\n e.xIncrement = null, (!e.points || e.isDirtyData) && (t.max = Math.max(t.max, e.xData.length - 1), e.processData(), e.generatePoints()), e.data.forEach(function (i, s) {\n let r;\n i?.options && void 0 !== i.name && void 0 !== (r = t.nameToX(i)) && r !== i.x && (i.x = r, e.xData[s] = r);\n });\n }));\n }\n setAxisTranslation() {\n let t = this,\n e = t.max - t.min,\n i = t.linkedParent,\n s = !!t.categories,\n r = t.isXAxis,\n o = t.axisPointRange || 0,\n n,\n a = 0,\n h = 0,\n l,\n d = t.transA;\n (r || s || o) && (n = t.getClosest(), i ? (a = i.minPointOffset, h = i.pointRangePadding) : t.series.forEach(function (e) {\n let i = s ? 1 : r ? E(e.options.pointRange, n, 0) : t.axisPointRange || 0,\n l = e.options.pointPlacement;\n if (o = Math.max(o, i), !t.single || s) {\n let t = e.is(\"xrange\") ? !r : r;\n a = Math.max(a, t && P(l) ? 0 : i / 2), h = Math.max(h, t && \"on\" === l ? 0 : i);\n }\n }), l = t.ordinal && t.ordinal.slope && n ? t.ordinal.slope / n : 1, t.minPointOffset = a *= l, t.pointRangePadding = h *= l, t.pointRange = Math.min(o, t.single && s ? 1 : e), r && n && (t.closestPointRange = n)), t.translationSlope = t.transA = d = t.staticScale || t.len / (e + h || 1), t.transB = t.horiz ? t.left : t.bottom, t.minPixelPadding = d * a, k(this, \"afterSetAxisTranslation\");\n }\n minFromRange() {\n let {\n max: t,\n min: e\n } = this;\n return A(t) && A(e) && t - e || void 0;\n }\n setTickInterval(t) {\n let {\n categories: e,\n chart: i,\n dataMax: s,\n dataMin: r,\n dateTime: o,\n isXAxis: n,\n logarithmic: a,\n options: h,\n softThreshold: l\n } = this,\n d = A(this.threshold) ? this.threshold : void 0,\n c = this.minRange || 0,\n {\n ceiling: p,\n floor: u,\n linkedTo: g,\n softMax: f,\n softMin: m\n } = h,\n b = A(g) && i[this.coll]?.[g],\n v = h.tickPixelInterval,\n C = h.maxPadding,\n M = h.minPadding,\n w = 0,\n T,\n P = A(h.tickInterval) && h.tickInterval >= 0 ? h.tickInterval : void 0,\n L,\n O,\n D,\n I;\n if (o || e || b || this.getTickAmount(), D = E(this.userMin, h.min), I = E(this.userMax, h.max), b ? (this.linkedParent = b, T = b.getExtremes(), this.min = E(T.min, T.dataMin), this.max = E(T.max, T.dataMax), this.type !== b.type && S(11, !0, i)) : (l && y(d) && A(s) && A(r) && (r >= d ? (L = d, M = 0) : s <= d && (O = d, C = 0)), this.min = E(D, L, r), this.max = E(I, O, s)), A(this.max) && A(this.min) && (a && (this.positiveValuesOnly && !t && 0 >= Math.min(this.min, E(r, this.min)) && S(10, !0, i), this.min = x(a.log2lin(this.min), 16), this.max = x(a.log2lin(this.max), 16)), this.range && A(r) && (this.userMin = this.min = D = Math.max(r, this.minFromRange() || 0), this.userMax = I = this.max, this.range = void 0)), k(this, \"foundExtremes\"), this.adjustForMinRange(), A(this.min) && A(this.max)) {\n if (!A(this.userMin) && A(m) && m < this.min && (this.min = D = m), !A(this.userMax) && A(f) && f > this.max && (this.max = I = f), e || this.axisPointRange || this.stacking?.usePercentage || b || !(w = this.max - this.min) || (!y(D) && M && (this.min -= w * M), y(I) || !C || (this.max += w * C)), !A(this.userMin) && A(u) && (this.min = Math.max(this.min, u)), !A(this.userMax) && A(p) && (this.max = Math.min(this.max, p)), l && A(r) && A(s)) {\n let t = d || 0;\n !y(D) && this.min < t && r >= t ? this.min = h.minRange ? Math.min(t, this.max - c) : t : !y(I) && this.max > t && s <= t && (this.max = h.minRange ? Math.max(t, this.min + c) : t);\n }\n !i.polar && this.min > this.max && (y(h.min) ? this.max = this.min : y(h.max) && (this.min = this.max)), w = this.max - this.min;\n }\n if (this.min !== this.max && A(this.min) && A(this.max) ? b && !P && v === b.options.tickPixelInterval ? this.tickInterval = P = b.tickInterval : this.tickInterval = E(P, this.tickAmount ? w / Math.max(this.tickAmount - 1, 1) : void 0, e ? 1 : w * v / Math.max(this.len, v)) : this.tickInterval = 1, n && !t) {\n let t = this.min !== this.old?.min || this.max !== this.old?.max;\n this.series.forEach(function (e) {\n e.forceCrop = e.forceCropping?.(), e.processData(t);\n }), k(this, \"postProcessData\", {\n hasExtremesChanged: t\n });\n }\n this.setAxisTranslation(), k(this, \"initialAxisTranslation\"), this.pointRange && !P && (this.tickInterval = Math.max(this.pointRange, this.tickInterval));\n let j = E(h.minTickInterval, o && !this.series.some(t => t.noSharedTooltip) ? this.closestPointRange : 0);\n !P && this.tickInterval < j && (this.tickInterval = j), o || a || P || (this.tickInterval = z(this, this.tickInterval)), this.tickAmount || (this.tickInterval = this.unsquish()), this.setTickPositions();\n }\n setTickPositions() {\n let t = this.options,\n e = t.tickPositions,\n i = t.tickPositioner,\n s = this.getMinorTickInterval(),\n r = !this.isPanning,\n o = r && t.startOnTick,\n n = r && t.endOnTick,\n a = [],\n h;\n if (this.tickmarkOffset = this.categories && \"between\" === t.tickmarkPlacement && 1 === this.tickInterval ? .5 : 0, this.single = this.min === this.max && y(this.min) && !this.tickAmount && (this.min % 1 == 0 || !1 !== t.allowDecimals), e) a = e.slice();else if (A(this.min) && A(this.max)) {\n if (!this.ordinal?.positions && (this.max - this.min) / this.tickInterval > Math.max(2 * this.len, 200)) a = [this.min, this.max], S(19, !1, this.chart);else if (this.dateTime) a = this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(this.tickInterval, t.units), this.min, this.max, t.startOfWeek, this.ordinal?.positions, this.closestPointRange, !0);else if (this.logarithmic) a = this.logarithmic.getLogTickPositions(this.tickInterval, this.min, this.max);else {\n let t = this.tickInterval,\n e = t;\n for (; e <= 2 * t;) if (a = this.getLinearTickPositions(this.tickInterval, this.min, this.max), this.tickAmount && a.length > this.tickAmount) this.tickInterval = z(this, e *= 1.1);else break;\n }\n a.length > this.len && (a = [a[0], a[a.length - 1]])[0] === a[1] && (a.length = 1), i && (this.tickPositions = a, (h = i.apply(this, [this.min, this.max])) && (a = h));\n }\n this.tickPositions = a, this.minorTickInterval = \"auto\" === s && this.tickInterval ? this.tickInterval / t.minorTicksPerMajor : s, this.paddedTicks = a.slice(0), this.trimTicks(a, o, n), !this.isLinked && A(this.min) && A(this.max) && (this.single && a.length < 2 && !this.categories && !this.series.some(t => t.is(\"heatmap\") && \"between\" === t.options.pointPlacement) && (this.min -= .5, this.max += .5), e || h || this.adjustTickAmount()), k(this, \"afterSetTickPositions\");\n }\n trimTicks(t, e, i) {\n let s = t[0],\n r = t[t.length - 1],\n o = !this.isOrdinal && this.minPointOffset || 0;\n if (k(this, \"trimTicks\"), !this.isLinked) {\n if (e && s !== -1 / 0) this.min = s;else for (; this.min - o > t[0];) t.shift();\n if (i) this.max = r;else for (; this.max + o < t[t.length - 1];) t.pop();\n 0 === t.length && y(s) && !this.options.tickPositions && t.push((r + s) / 2);\n }\n }\n alignToOthers() {\n let t;\n let e = this,\n i = e.chart,\n s = [this],\n r = e.options,\n o = i.options.chart,\n n = \"yAxis\" === this.coll && o.alignThresholds,\n a = [];\n if (e.thresholdAlignment = void 0, (!1 !== o.alignTicks && r.alignTicks || n) && !1 !== r.startOnTick && !1 !== r.endOnTick && !e.logarithmic) {\n let r = t => {\n let {\n horiz: e,\n options: i\n } = t;\n return [e ? i.left : i.top, i.width, i.height, i.pane].join(\",\");\n },\n o = r(this);\n i[this.coll].forEach(function (i) {\n let {\n series: n\n } = i;\n n.length && n.some(t => t.visible) && i !== e && r(i) === o && (t = !0, s.push(i));\n });\n }\n if (t && n) {\n s.forEach(t => {\n let i = t.getThresholdAlignment(e);\n A(i) && a.push(i);\n });\n let t = a.length > 1 ? a.reduce((t, e) => t += e, 0) / a.length : void 0;\n s.forEach(e => {\n e.thresholdAlignment = t;\n });\n }\n return t;\n }\n getThresholdAlignment(t) {\n if ((!A(this.dataMin) || this !== t && this.series.some(t => t.isDirty || t.isDirtyData)) && this.getSeriesExtremes(), A(this.threshold)) {\n let t = m((this.threshold - (this.dataMin || 0)) / ((this.dataMax || 0) - (this.dataMin || 0)), 0, 1);\n return this.options.reversed && (t = 1 - t), t;\n }\n }\n getTickAmount() {\n let t = this.options,\n e = t.tickPixelInterval,\n i = t.tickAmount;\n y(t.tickInterval) || i || !(this.len < e) || this.isRadial || this.logarithmic || !t.startOnTick || !t.endOnTick || (i = 2), !i && this.alignToOthers() && (i = Math.ceil(this.len / e) + 1), i < 4 && (this.finalTickAmt = i, i = 5), this.tickAmount = i;\n }\n adjustTickAmount() {\n let t = this,\n {\n finalTickAmt: e,\n max: i,\n min: s,\n options: r,\n tickPositions: o,\n tickAmount: n,\n thresholdAlignment: a\n } = t,\n h = o?.length,\n l = E(t.threshold, t.softThreshold ? 0 : null),\n d,\n c,\n p = t.tickInterval,\n u,\n g = () => o.push(x(o[o.length - 1] + p)),\n f = () => o.unshift(x(o[0] - p));\n if (A(a) && (u = a < .5 ? Math.ceil(a * (n - 1)) : Math.floor(a * (n - 1)), r.reversed && (u = n - 1 - u)), t.hasData() && A(s) && A(i)) {\n let a = () => {\n t.transA *= (h - 1) / (n - 1), t.min = r.startOnTick ? o[0] : Math.min(s, o[0]), t.max = r.endOnTick ? o[o.length - 1] : Math.max(i, o[o.length - 1]);\n };\n if (A(u) && A(t.threshold)) {\n for (; o[u] !== l || o.length !== n || o[0] > s || o[o.length - 1] < i;) {\n for (o.length = 0, o.push(t.threshold); o.length < n;) void 0 === o[u] || o[u] > t.threshold ? f() : g();\n if (p > 8 * t.tickInterval) break;\n p *= 2;\n }\n a();\n } else if (h < n) {\n for (; o.length < n;) o.length % 2 || s === l ? g() : f();\n a();\n }\n if (y(e)) {\n for (c = d = o.length; c--;) (3 === e && c % 2 == 1 || e <= 2 && c > 0 && c < d - 1) && o.splice(c, 1);\n t.finalTickAmt = void 0;\n }\n }\n }\n setScale() {\n let {\n coll: t,\n stacking: e\n } = this,\n i = !1,\n s = !1;\n this.series.forEach(t => {\n i = i || t.isDirtyData || t.isDirty, s = s || t.xAxis && t.xAxis.isDirty || !1;\n }), this.setAxisSize();\n let r = this.len !== (this.old && this.old.len);\n r || i || s || this.isLinked || this.forceRedraw || this.userMin !== (this.old && this.old.userMin) || this.userMax !== (this.old && this.old.userMax) || this.alignToOthers() ? (e && \"yAxis\" === t && e.buildStacks(), this.forceRedraw = !1, this.userMinRange || (this.minRange = void 0), this.getSeriesExtremes(), this.setTickInterval(), e && \"xAxis\" === t && e.buildStacks(), this.isDirty || (this.isDirty = r || this.min !== this.old?.min || this.max !== this.old?.max)) : e && e.cleanStacks(), i && delete this.allExtremes, k(this, \"afterSetScale\");\n }\n setExtremes(t, e, i = !0, s, r) {\n this.series.forEach(t => {\n delete t.kdTree;\n }), k(this, \"setExtremes\", r = C(r, {\n min: t,\n max: e\n }), t => {\n this.userMin = t.min, this.userMax = t.max, this.eventArgs = t, i && this.chart.redraw(s);\n });\n }\n setAxisSize() {\n let t = this.chart,\n e = this.options,\n i = e.offsets || [0, 0, 0, 0],\n s = this.horiz,\n r = this.width = Math.round(I(E(e.width, t.plotWidth - i[3] + i[1]), t.plotWidth)),\n o = this.height = Math.round(I(E(e.height, t.plotHeight - i[0] + i[2]), t.plotHeight)),\n n = this.top = Math.round(I(E(e.top, t.plotTop + i[0]), t.plotHeight, t.plotTop)),\n a = this.left = Math.round(I(E(e.left, t.plotLeft + i[3]), t.plotWidth, t.plotLeft));\n this.bottom = t.chartHeight - o - n, this.right = t.chartWidth - r - a, this.len = Math.max(s ? r : o, 0), this.pos = s ? a : n;\n }\n getExtremes() {\n let t = this.logarithmic;\n return {\n min: t ? x(t.lin2log(this.min)) : this.min,\n max: t ? x(t.lin2log(this.max)) : this.max,\n dataMin: this.dataMin,\n dataMax: this.dataMax,\n userMin: this.userMin,\n userMax: this.userMax\n };\n }\n getThreshold(t) {\n let e = this.logarithmic,\n i = e ? e.lin2log(this.min) : this.min,\n s = e ? e.lin2log(this.max) : this.max;\n return null === t || t === -1 / 0 ? t = i : t === 1 / 0 ? t = s : i > t ? t = i : s < t && (t = s), this.translate(t, 0, 1, 0, 1);\n }\n autoLabelAlign(t) {\n let e = (E(t, 0) - 90 * this.side + 720) % 360,\n i = {\n align: \"center\"\n };\n return k(this, \"autoLabelAlign\", i, function (t) {\n e > 15 && e < 165 ? t.align = \"right\" : e > 195 && e < 345 && (t.align = \"left\");\n }), i.align;\n }\n tickSize(t) {\n let e = this.options,\n i = E(e[\"tick\" === t ? \"tickWidth\" : \"minorTickWidth\"], \"tick\" === t && this.isXAxis && !this.categories ? 1 : 0),\n s = e[\"tick\" === t ? \"tickLength\" : \"minorTickLength\"],\n r;\n i && s && (\"inside\" === e[t + \"Position\"] && (s = -s), r = [s, i]);\n let o = {\n tickSize: r\n };\n return k(this, \"afterTickSize\", o), o.tickSize;\n }\n labelMetrics() {\n let t = this.chart.renderer,\n e = this.ticks,\n i = e[Object.keys(e)[0]] || {};\n return this.chart.renderer.fontMetrics(i.label || i.movedLabel || t.box);\n }\n unsquish() {\n let t = this.options.labels,\n e = t.padding || 0,\n i = this.horiz,\n s = this.tickInterval,\n r = this.len / (((this.categories ? 1 : 0) + this.max - this.min) / s),\n o = t.rotation,\n n = x(.8 * this.labelMetrics().h),\n a = Math.max(this.max - this.min, 0),\n h = function (t) {\n let i = (t + 2 * e) / (r || 1);\n return (i = i > 1 ? Math.ceil(i) : 1) * s > a && t !== 1 / 0 && r !== 1 / 0 && a && (i = Math.ceil(a / s)), x(i * s);\n },\n l = s,\n d,\n c = Number.MAX_VALUE,\n p;\n if (i) {\n if (!t.staggerLines && (A(o) ? p = [o] : r < t.autoRotationLimit && (p = t.autoRotation)), p) {\n let t, e;\n for (let i of p) (i === o || i && i >= -90 && i <= 90) && (e = (t = h(Math.abs(n / Math.sin(u * i)))) + Math.abs(i / 360)) < c && (c = e, d = i, l = t);\n }\n } else l = h(.75 * n);\n return this.autoRotation = p, this.labelRotation = E(d, A(o) ? o : 0), t.step ? s : l;\n }\n getSlotWidth(t) {\n let e = this.chart,\n i = this.horiz,\n s = this.options.labels,\n r = Math.max(this.tickPositions.length - (this.categories ? 0 : 1), 1),\n o = e.margin[3];\n if (t && A(t.slotWidth)) return t.slotWidth;\n if (i && s.step < 2) return s.rotation ? 0 : (this.staggerLines || 1) * this.len / r;\n if (!i) {\n let t = s.style.width;\n if (void 0 !== t) return parseInt(String(t), 10);\n if (o) return o - e.spacing[3];\n }\n return .33 * e.chartWidth;\n }\n renderUnsquish() {\n let t = this.chart,\n e = t.renderer,\n i = this.tickPositions,\n s = this.ticks,\n r = this.options.labels,\n o = r.style,\n n = this.horiz,\n a = this.getSlotWidth(),\n h = Math.max(1, Math.round(a - (n ? 2 * (r.padding || 0) : r.distance || 0))),\n l = {},\n d = this.labelMetrics(),\n c = o.textOverflow,\n p,\n u,\n g = 0,\n f,\n m;\n if (P(r.rotation) || (l.rotation = r.rotation || 0), i.forEach(function (t) {\n let e = s[t];\n e.movedLabel && e.replaceMovedLabel(), e && e.label && e.label.textPxLength > g && (g = e.label.textPxLength);\n }), this.maxLabelLength = g, this.autoRotation) g > h && g > d.h ? l.rotation = this.labelRotation : this.labelRotation = 0;else if (a && (p = h, !c)) for (u = \"clip\", m = i.length; !n && m--;) (f = s[i[m]].label) && (\"ellipsis\" === f.styles.textOverflow ? f.css({\n textOverflow: \"clip\"\n }) : f.textPxLength > a && f.css({\n width: a + \"px\"\n }), f.getBBox().height > this.len / i.length - (d.h - d.f) && (f.specificTextOverflow = \"ellipsis\"));\n l.rotation && (p = g > .5 * t.chartHeight ? .33 * t.chartHeight : g, c || (u = \"ellipsis\")), this.labelAlign = r.align || this.autoLabelAlign(this.labelRotation), this.labelAlign && (l.align = this.labelAlign), i.forEach(function (t) {\n let e = s[t],\n i = e && e.label,\n r = o.width,\n n = {};\n i && (i.attr(l), e.shortenLabel ? e.shortenLabel() : p && !r && \"nowrap\" !== o.whiteSpace && (p < i.textPxLength || \"SPAN\" === i.element.tagName) ? (n.width = p + \"px\", c || (n.textOverflow = i.specificTextOverflow || u), i.css(n)) : !i.styles.width || n.width || r || i.css({\n width: null\n }), delete i.specificTextOverflow, e.rotation = l.rotation);\n }, this), this.tickRotCorr = e.rotCorr(d.b, this.labelRotation || 0, 0 !== this.side);\n }\n hasData() {\n return this.series.some(function (t) {\n return t.hasData();\n }) || this.options.showEmpty && y(this.min) && y(this.max);\n }\n addTitle(t) {\n let e;\n let i = this.chart.renderer,\n s = this.horiz,\n r = this.opposite,\n o = this.options.title,\n n = this.chart.styledMode;\n this.axisTitle || ((e = o.textAlign) || (e = (s ? {\n low: \"left\",\n middle: \"center\",\n high: \"right\"\n } : {\n low: r ? \"right\" : \"left\",\n middle: \"center\",\n high: r ? \"left\" : \"right\"\n })[o.align]), this.axisTitle = i.text(o.text || \"\", 0, 0, o.useHTML).attr({\n zIndex: 7,\n rotation: o.rotation || 0,\n align: e\n }).addClass(\"highcharts-axis-title\"), n || this.axisTitle.css(L(o.style)), this.axisTitle.add(this.axisGroup), this.axisTitle.isNew = !0), n || o.style.width || this.isRadial || this.axisTitle.css({\n width: this.len + \"px\"\n }), this.axisTitle[t ? \"show\" : \"hide\"](t);\n }\n generateTick(t) {\n let e = this.ticks;\n e[t] ? e[t].addLabel() : e[t] = new n(this, t);\n }\n createGroups() {\n let {\n axisParent: t,\n chart: e,\n coll: i,\n options: s\n } = this,\n r = e.renderer,\n o = (e, o, n) => r.g(e).attr({\n zIndex: n\n }).addClass(`highcharts-${i.toLowerCase()}${o} ` + (this.isRadial ? `highcharts-radial-axis${o} ` : \"\") + (s.className || \"\")).add(t);\n this.axisGroup || (this.gridGroup = o(\"grid\", \"-grid\", s.gridZIndex), this.axisGroup = o(\"axis\", \"\", s.zIndex), this.labelGroup = o(\"axis-labels\", \"-labels\", s.labels.zIndex));\n }\n getOffset() {\n let t = this,\n {\n chart: e,\n horiz: i,\n options: s,\n side: r,\n ticks: o,\n tickPositions: n,\n coll: a\n } = t,\n h = e.inverted && !t.isZAxis ? [1, 0, 3, 2][r] : r,\n l = t.hasData(),\n d = s.title,\n c = s.labels,\n p = A(s.crossing),\n u = e.axisOffset,\n g = e.clipOffset,\n f = [-1, 1, 1, -1][r],\n m,\n x = 0,\n b,\n v = 0,\n S = 0,\n C,\n M;\n if (t.showAxis = m = l || s.showEmpty, t.staggerLines = t.horiz && c.staggerLines || void 0, t.createGroups(), l || t.isLinked ? (n.forEach(function (e) {\n t.generateTick(e);\n }), t.renderUnsquish(), t.reserveSpaceDefault = 0 === r || 2 === r || {\n 1: \"left\",\n 3: \"right\"\n }[r] === t.labelAlign, E(c.reserveSpace, !p && null, \"center\" === t.labelAlign || null, t.reserveSpaceDefault) && n.forEach(function (t) {\n S = Math.max(o[t].getLabelSize(), S);\n }), t.staggerLines && (S *= t.staggerLines), t.labelOffset = S * (t.opposite ? -1 : 1)) : D(o, function (t, e) {\n t.destroy(), delete o[e];\n }), d?.text && !1 !== d.enabled && (t.addTitle(m), m && !p && !1 !== d.reserveSpace && (t.titleOffset = x = t.axisTitle.getBBox()[i ? \"height\" : \"width\"], v = y(b = d.offset) ? 0 : E(d.margin, i ? 5 : 10))), t.renderLine(), t.offset = f * E(s.offset, u[r] ? u[r] + (s.margin || 0) : 0), t.tickRotCorr = t.tickRotCorr || {\n x: 0,\n y: 0\n }, M = 0 === r ? -t.labelMetrics().h : 2 === r ? t.tickRotCorr.y : 0, C = Math.abs(S) + v, S && (C -= M, C += f * (i ? E(c.y, t.tickRotCorr.y + f * c.distance) : E(c.x, f * c.distance))), t.axisTitleMargin = E(b, C), t.getMaxLabelDimensions && (t.maxLabelDimensions = t.getMaxLabelDimensions(o, n)), \"colorAxis\" !== a && g) {\n let e = this.tickSize(\"tick\");\n u[r] = Math.max(u[r], (t.axisTitleMargin || 0) + x + f * t.offset, C, n && n.length && e ? e[0] + f * t.offset : 0);\n let i = !t.axisLine || s.offset ? 0 : t.axisLine.strokeWidth() / 2;\n g[h] = Math.max(g[h], i);\n }\n k(this, \"afterGetOffset\");\n }\n getLinePath(t) {\n let e = this.chart,\n i = this.opposite,\n s = this.offset,\n r = this.horiz,\n o = this.left + (i ? this.width : 0) + s,\n n = e.chartHeight - this.bottom - (i ? this.height : 0) + s;\n return i && (t *= -1), e.renderer.crispLine([[\"M\", r ? this.left : o, r ? n : this.top], [\"L\", r ? e.chartWidth - this.right : o, r ? n : e.chartHeight - this.bottom]], t);\n }\n renderLine() {\n this.axisLine || (this.axisLine = this.chart.renderer.path().addClass(\"highcharts-axis-line\").add(this.axisGroup), this.chart.styledMode || this.axisLine.attr({\n stroke: this.options.lineColor,\n \"stroke-width\": this.options.lineWidth,\n zIndex: 7\n }));\n }\n getTitlePosition(t) {\n let e = this.horiz,\n i = this.left,\n s = this.top,\n r = this.len,\n o = this.options.title,\n n = e ? i : s,\n a = this.opposite,\n h = this.offset,\n l = o.x,\n d = o.y,\n c = this.chart.renderer.fontMetrics(t),\n p = t ? Math.max(t.getBBox(!1, 0).height - c.h - 1, 0) : 0,\n u = {\n low: n + (e ? 0 : r),\n middle: n + r / 2,\n high: n + (e ? r : 0)\n }[o.align],\n g = (e ? s + this.height : i) + (e ? 1 : -1) * (a ? -1 : 1) * (this.axisTitleMargin || 0) + [-p, p, c.f, -p][this.side],\n f = {\n x: e ? u + l : g + (a ? this.width : 0) + h + l,\n y: e ? g + d - (a ? this.height : 0) + h : u + d\n };\n return k(this, \"afterGetTitlePosition\", {\n titlePosition: f\n }), f;\n }\n renderMinorTick(t, e) {\n let i = this.minorTicks;\n i[t] || (i[t] = new n(this, t, \"minor\")), e && i[t].isNew && i[t].render(null, !0), i[t].render(null, !1, 1);\n }\n renderTick(t, e, i) {\n let s = this.isLinked,\n r = this.ticks;\n (!s || t >= this.min && t <= this.max || this.grid && this.grid.isColumn) && (r[t] || (r[t] = new n(this, t)), i && r[t].isNew && r[t].render(e, !0, -1), r[t].render(e));\n }\n render() {\n let t, e;\n let i = this,\n s = i.chart,\n r = i.logarithmic,\n a = s.renderer,\n l = i.options,\n d = i.isLinked,\n c = i.tickPositions,\n p = i.axisTitle,\n u = i.ticks,\n g = i.minorTicks,\n f = i.alternateBands,\n m = l.stackLabels,\n x = l.alternateGridColor,\n y = l.crossing,\n b = i.tickmarkOffset,\n v = i.axisLine,\n S = i.showAxis,\n C = h(a.globalAnimation);\n if (i.labelEdge.length = 0, i.overlap = !1, [u, g, f].forEach(function (t) {\n D(t, function (t) {\n t.isActive = !1;\n });\n }), A(y)) {\n let t = this.isXAxis ? s.yAxis[0] : s.xAxis[0],\n e = [1, -1, -1, 1][this.side];\n if (t) {\n let s = t.toPixels(y, !0);\n i.horiz && (s = t.len - s), i.offset = e * s;\n }\n }\n if (i.hasData() || d) {\n let a = i.chart.hasRendered && i.old && A(i.old.min);\n i.minorTickInterval && !i.categories && i.getMinorTickPositions().forEach(function (t) {\n i.renderMinorTick(t, a);\n }), c.length && (c.forEach(function (t, e) {\n i.renderTick(t, e, a);\n }), b && (0 === i.min || i.single) && (u[-1] || (u[-1] = new n(i, -1, null, !0)), u[-1].render(-1))), x && c.forEach(function (n, a) {\n e = void 0 !== c[a + 1] ? c[a + 1] + b : i.max - b, a % 2 == 0 && n < i.max && e <= i.max + (s.polar ? -b : b) && (f[n] || (f[n] = new o.PlotLineOrBand(i, {})), t = n + b, f[n].options = {\n from: r ? r.lin2log(t) : t,\n to: r ? r.lin2log(e) : e,\n color: x,\n className: \"highcharts-alternate-grid\"\n }, f[n].render(), f[n].isActive = !0);\n }), i._addedPlotLB || (i._addedPlotLB = !0, (l.plotLines || []).concat(l.plotBands || []).forEach(function (t) {\n i.addPlotBandOrLine(t);\n }));\n }\n [u, g, f].forEach(function (t) {\n let e = [],\n i = C.duration;\n D(t, function (t, i) {\n t.isActive || (t.render(i, !1, 0), t.isActive = !1, e.push(i));\n }), R(function () {\n let i = e.length;\n for (; i--;) t[e[i]] && !t[e[i]].isActive && (t[e[i]].destroy(), delete t[e[i]]);\n }, t !== f && s.hasRendered && i ? i : 0);\n }), v && (v[v.isPlaced ? \"animate\" : \"attr\"]({\n d: this.getLinePath(v.strokeWidth())\n }), v.isPlaced = !0, v[S ? \"show\" : \"hide\"](S)), p && S && (p[p.isNew ? \"attr\" : \"animate\"](i.getTitlePosition(p)), p.isNew = !1), m && m.enabled && i.stacking && i.stacking.renderStackTotals(), i.old = {\n len: i.len,\n max: i.max,\n min: i.min,\n transA: i.transA,\n userMax: i.userMax,\n userMin: i.userMin\n }, i.isDirty = !1, k(this, \"afterRender\");\n }\n redraw() {\n this.visible && (this.render(), this.plotLinesAndBands.forEach(function (t) {\n t.render();\n })), this.series.forEach(function (t) {\n t.isDirty = !0;\n });\n }\n getKeepProps() {\n return this.keepProps || N.keepProps;\n }\n destroy(t) {\n let e = this,\n i = e.plotLinesAndBands,\n s = this.eventOptions;\n if (k(this, \"destroy\", {\n keepEvents: t\n }), t || j(e), [e.ticks, e.minorTicks, e.alternateBands].forEach(function (t) {\n b(t);\n }), i) {\n let t = i.length;\n for (; t--;) i[t].destroy();\n }\n for (let t in [\"axisLine\", \"axisTitle\", \"axisGroup\", \"gridGroup\", \"labelGroup\", \"cross\", \"scrollbar\"].forEach(function (t) {\n e[t] && (e[t] = e[t].destroy());\n }), e.plotLinesAndBandsGroups) e.plotLinesAndBandsGroups[t] = e.plotLinesAndBandsGroups[t].destroy();\n D(e, function (t, i) {\n -1 === e.getKeepProps().indexOf(i) && delete e[i];\n }), this.eventOptions = s;\n }\n drawCrosshair(t, e) {\n let s = this.crosshair,\n r = E(s && s.snap, !0),\n o = this.chart,\n n,\n a,\n h,\n l = this.cross,\n d;\n if (k(this, \"drawCrosshair\", {\n e: t,\n point: e\n }), t || (t = this.cross && this.cross.e), s && !1 !== (y(e) || !r)) {\n if (r ? y(e) && (a = E(\"colorAxis\" !== this.coll ? e.crosshairPos : null, this.isXAxis ? e.plotX : this.len - e.plotY)) : a = t && (this.horiz ? t.chartX - this.pos : this.len - t.chartY + this.pos), y(a) && (d = {\n value: e && (this.isXAxis ? e.x : E(e.stackY, e.y)),\n translatedValue: a\n }, o.polar && C(d, {\n isCrosshair: !0,\n chartX: t && t.chartX,\n chartY: t && t.chartY,\n point: e\n }), n = this.getPlotLinePath(d) || null), !y(n)) {\n this.hideCrosshair();\n return;\n }\n h = this.categories && !this.isRadial, l || (this.cross = l = o.renderer.path().addClass(\"highcharts-crosshair highcharts-crosshair-\" + (h ? \"category \" : \"thin \") + (s.className || \"\")).attr({\n zIndex: E(s.zIndex, 2)\n }).add(), !o.styledMode && (l.attr({\n stroke: s.color || (h ? i.parse(\"#ccd3ff\").setOpacity(.25).get() : \"#cccccc\"),\n \"stroke-width\": E(s.width, 1)\n }).css({\n \"pointer-events\": \"none\"\n }), s.dashStyle && l.attr({\n dashstyle: s.dashStyle\n }))), l.show().attr({\n d: n\n }), h && !s.width && l.attr({\n \"stroke-width\": this.transA\n }), this.cross.e = t;\n } else this.hideCrosshair();\n k(this, \"afterDrawCrosshair\", {\n e: t,\n point: e\n });\n }\n hideCrosshair() {\n this.cross && this.cross.hide(), k(this, \"afterHideCrosshair\");\n }\n update(t, e) {\n let i = this.chart;\n t = L(this.userOptions, t), this.destroy(!0), this.init(i, t), i.isDirtyBox = !0, E(e, !0) && i.redraw();\n }\n remove(t) {\n let e = this.chart,\n i = this.coll,\n s = this.series,\n r = s.length;\n for (; r--;) s[r] && s[r].remove(!1);\n v(e.axes, this), v(e[i] || [], this), e.orderItems(i), this.destroy(), e.isDirtyBox = !0, E(t, !0) && e.redraw();\n }\n setTitle(t, e) {\n this.update({\n title: t\n }, e);\n }\n setCategories(t, e) {\n this.update({\n categories: t\n }, e);\n }\n }\n return N.keepProps = [\"coll\", \"extKey\", \"hcEvents\", \"len\", \"names\", \"series\", \"userMax\", \"userMin\"], N;\n }), i(e, \"Core/Axis/DateTimeAxis.js\", [e[\"Core/Utilities.js\"]], function (t) {\n var e;\n let {\n addEvent: i,\n getMagnitude: s,\n normalizeTickInterval: r,\n timeUnits: o\n } = t;\n return function (t) {\n function e() {\n return this.chart.time.getTimeTicks.apply(this.chart.time, arguments);\n }\n function n() {\n if (\"datetime\" !== this.type) {\n this.dateTime = void 0;\n return;\n }\n this.dateTime || (this.dateTime = new a(this));\n }\n t.compose = function (t) {\n return t.keepProps.includes(\"dateTime\") || (t.keepProps.push(\"dateTime\"), t.prototype.getTimeTicks = e, i(t, \"afterSetType\", n)), t;\n };\n class a {\n constructor(t) {\n this.axis = t;\n }\n normalizeTimeTickInterval(t, e) {\n let i = e || [[\"millisecond\", [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]], [\"second\", [1, 2, 5, 10, 15, 30]], [\"minute\", [1, 2, 5, 10, 15, 30]], [\"hour\", [1, 2, 3, 4, 6, 8, 12]], [\"day\", [1, 2]], [\"week\", [1, 2]], [\"month\", [1, 2, 3, 4, 6]], [\"year\", null]],\n n = i[i.length - 1],\n a = o[n[0]],\n h = n[1],\n l;\n for (l = 0; l < i.length && (a = o[(n = i[l])[0]], h = n[1], !i[l + 1] || !(t <= (a * h[h.length - 1] + o[i[l + 1][0]]) / 2)); l++);\n a === o.year && t < 5 * a && (h = [1, 2, 5]);\n let d = r(t / a, h, \"year\" === n[0] ? Math.max(s(t / a), 1) : 1);\n return {\n unitRange: a,\n count: d,\n unitName: n[0]\n };\n }\n getXDateFormat(t, e) {\n let {\n axis: i\n } = this,\n s = i.chart.time;\n return i.closestPointRange ? s.getDateFormat(i.closestPointRange, t, i.options.startOfWeek, e) || s.resolveDTLFormat(e.year).main : s.resolveDTLFormat(e.day).main;\n }\n }\n t.Additions = a;\n }(e || (e = {})), e;\n }), i(e, \"Core/Axis/LogarithmicAxis.js\", [e[\"Core/Utilities.js\"]], function (t) {\n var e;\n let {\n addEvent: i,\n normalizeTickInterval: s,\n pick: r\n } = t;\n return function (t) {\n function e() {\n \"logarithmic\" !== this.type ? this.logarithmic = void 0 : this.logarithmic ?? (this.logarithmic = new n(this));\n }\n function o() {\n let t = this.logarithmic;\n t && (this.lin2val = function (e) {\n return t.lin2log(e);\n }, this.val2lin = function (e) {\n return t.log2lin(e);\n });\n }\n t.compose = function (t) {\n return t.keepProps.includes(\"logarithmic\") || (t.keepProps.push(\"logarithmic\"), i(t, \"afterSetType\", e), i(t, \"afterInit\", o)), t;\n };\n class n {\n constructor(t) {\n this.axis = t;\n }\n getLogTickPositions(t, e, i, o) {\n let n = this.axis,\n a = n.len,\n h = n.options,\n l = [];\n if (o || (this.minorAutoInterval = void 0), t >= .5) t = Math.round(t), l = n.getLinearTickPositions(t, e, i);else if (t >= .08) {\n let s, r, n, a, h, d, c;\n let p = Math.floor(e);\n for (s = t > .3 ? [1, 2, 4] : t > .15 ? [1, 2, 4, 6, 8] : [1, 2, 3, 4, 5, 6, 7, 8, 9], r = p; r < i + 1 && !c; r++) for (n = 0, a = s.length; n < a && !c; n++) (h = this.log2lin(this.lin2log(r) * s[n])) > e && (!o || d <= i) && void 0 !== d && l.push(d), d > i && (c = !0), d = h;\n } else {\n let d = this.lin2log(e),\n c = this.lin2log(i),\n p = o ? n.getMinorTickInterval() : h.tickInterval,\n u = h.tickPixelInterval / (o ? 5 : 1),\n g = o ? a / n.tickPositions.length : a;\n t = s(t = r(\"auto\" === p ? null : p, this.minorAutoInterval, (c - d) * u / (g || 1))), l = n.getLinearTickPositions(t, d, c).map(this.log2lin), o || (this.minorAutoInterval = t / 5);\n }\n return o || (n.tickInterval = t), l;\n }\n lin2log(t) {\n return Math.pow(10, t);\n }\n log2lin(t) {\n return Math.log(t) / Math.LN10;\n }\n }\n t.Additions = n;\n }(e || (e = {})), e;\n }), i(e, \"Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js\", [e[\"Core/Utilities.js\"]], function (t) {\n var e;\n let {\n erase: i,\n extend: s,\n isNumber: r\n } = t;\n return function (t) {\n let e;\n function o(t) {\n return this.addPlotBandOrLine(t, \"plotBands\");\n }\n function n(t, i) {\n let s = this.userOptions,\n r = new e(this, t);\n if (this.visible && (r = r.render()), r) {\n if (this._addedPlotLB || (this._addedPlotLB = !0, (s.plotLines || []).concat(s.plotBands || []).forEach(t => {\n this.addPlotBandOrLine(t);\n })), i) {\n let e = s[i] || [];\n e.push(t), s[i] = e;\n }\n this.plotLinesAndBands.push(r);\n }\n return r;\n }\n function a(t) {\n return this.addPlotBandOrLine(t, \"plotLines\");\n }\n function h(t, e, i) {\n i = i || this.options;\n let s = this.getPlotLinePath({\n value: e,\n force: !0,\n acrossPanes: i.acrossPanes\n }),\n o = [],\n n = this.horiz,\n a = !r(this.min) || !r(this.max) || t < this.min && e < this.min || t > this.max && e > this.max,\n h = this.getPlotLinePath({\n value: t,\n force: !0,\n acrossPanes: i.acrossPanes\n }),\n l,\n d = 1,\n c;\n if (h && s) for (a && (c = h.toString() === s.toString(), d = 0), l = 0; l < h.length; l += 2) {\n let t = h[l],\n e = h[l + 1],\n i = s[l],\n r = s[l + 1];\n (\"M\" === t[0] || \"L\" === t[0]) && (\"M\" === e[0] || \"L\" === e[0]) && (\"M\" === i[0] || \"L\" === i[0]) && (\"M\" === r[0] || \"L\" === r[0]) && (n && i[1] === t[1] ? (i[1] += d, r[1] += d) : n || i[2] !== t[2] || (i[2] += d, r[2] += d), o.push([\"M\", t[1], t[2]], [\"L\", e[1], e[2]], [\"L\", r[1], r[2]], [\"L\", i[1], i[2]], [\"Z\"])), o.isFlat = c;\n }\n return o;\n }\n function l(t) {\n this.removePlotBandOrLine(t);\n }\n function d(t) {\n let e = this.plotLinesAndBands,\n s = this.options,\n r = this.userOptions;\n if (e) {\n let o = e.length;\n for (; o--;) e[o].id === t && e[o].destroy();\n [s.plotLines || [], r.plotLines || [], s.plotBands || [], r.plotBands || []].forEach(function (e) {\n for (o = e.length; o--;) (e[o] || {}).id === t && i(e, e[o]);\n });\n }\n }\n function c(t) {\n this.removePlotBandOrLine(t);\n }\n t.compose = function (t, i) {\n let r = i.prototype;\n return r.addPlotBand || (e = t, s(r, {\n addPlotBand: o,\n addPlotLine: a,\n addPlotBandOrLine: n,\n getPlotBandPath: h,\n removePlotBand: l,\n removePlotLine: c,\n removePlotBandOrLine: d\n })), i;\n };\n }(e || (e = {})), e;\n }), i(e, \"Core/Axis/PlotLineOrBand/PlotLineOrBand.js\", [e[\"Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js\"], e[\"Core/Utilities.js\"]], function (t, e) {\n let {\n addEvent: i,\n arrayMax: s,\n arrayMin: r,\n defined: o,\n destroyObjectProperties: n,\n erase: a,\n fireEvent: h,\n merge: l,\n objectEach: d,\n pick: c\n } = e;\n class p {\n static compose(e, s) {\n return i(e, \"afterInit\", function () {\n this.labelCollectors.push(() => {\n let t = [];\n for (let e of this.axes) for (let {\n label: i,\n options: s\n } of e.plotLinesAndBands) i && !s?.label?.allowOverlap && t.push(i);\n return t;\n });\n }), t.compose(p, s);\n }\n constructor(t, e) {\n this.axis = t, this.options = e, this.id = e.id;\n }\n render() {\n h(this, \"render\");\n let {\n axis: t,\n options: e\n } = this,\n {\n horiz: i,\n logarithmic: s\n } = t,\n {\n color: r,\n events: n,\n zIndex: a = 0\n } = e,\n p = {},\n u = t.chart.renderer,\n g = e.to,\n f = e.from,\n m = e.value,\n x = e.borderWidth,\n y = e.label,\n {\n label: b,\n svgElem: v\n } = this,\n S = [],\n C,\n k = o(f) && o(g),\n M = o(m),\n w = !v,\n T = {\n class: \"highcharts-plot-\" + (k ? \"band \" : \"line \") + (e.className || \"\")\n },\n A = k ? \"bands\" : \"lines\";\n if (!t.chart.styledMode && (M ? (T.stroke = r || \"#999999\", T[\"stroke-width\"] = c(e.width, 1), e.dashStyle && (T.dashstyle = e.dashStyle)) : k && (T.fill = r || \"#e6e9ff\", x && (T.stroke = e.borderColor, T[\"stroke-width\"] = x))), p.zIndex = a, A += \"-\" + a, (C = t.plotLinesAndBandsGroups[A]) || (t.plotLinesAndBandsGroups[A] = C = u.g(\"plot-\" + A).attr(p).add()), v || (this.svgElem = v = u.path().attr(T).add(C)), o(m)) S = t.getPlotLinePath({\n value: s?.log2lin(m) ?? m,\n lineWidth: v.strokeWidth(),\n acrossPanes: e.acrossPanes\n });else {\n if (!(o(f) && o(g))) return;\n S = t.getPlotBandPath(s?.log2lin(f) ?? f, s?.log2lin(g) ?? g, e);\n }\n return !this.eventsAdded && n && (d(n, (t, e) => {\n v?.on(e, t => {\n n[e].apply(this, [t]);\n });\n }), this.eventsAdded = !0), (w || !v.d) && S?.length ? v.attr({\n d: S\n }) : v && (S ? (v.show(), v.animate({\n d: S\n })) : v.d && (v.hide(), b && (this.label = b = b.destroy()))), y && (o(y.text) || o(y.formatter)) && S?.length && t.width > 0 && t.height > 0 && !S.isFlat ? (y = l({\n align: i && k ? \"center\" : void 0,\n x: i ? !k && 4 : 10,\n verticalAlign: !i && k ? \"middle\" : void 0,\n y: i ? k ? 16 : 10 : k ? 6 : -4,\n rotation: i && !k ? 90 : 0,\n ...(k ? {\n inside: !0\n } : {})\n }, y), this.renderLabel(y, S, k, a)) : b && b.hide(), this;\n }\n renderLabel(t, e, i, n) {\n let a = this.axis,\n h = a.chart.renderer,\n d = t.inside,\n c = this.label;\n c || (this.label = c = h.text(this.getLabelText(t), 0, 0, t.useHTML).attr({\n align: t.textAlign || t.align,\n rotation: t.rotation,\n class: \"highcharts-plot-\" + (i ? \"band\" : \"line\") + \"-label \" + (t.className || \"\"),\n zIndex: n\n }), a.chart.styledMode || c.css(l({\n fontSize: \"0.8em\",\n textOverflow: i && !d ? \"\" : \"ellipsis\"\n }, t.style)), c.add());\n let p = e.xBounds || [e[0][1], e[1][1], i ? e[2][1] : e[0][1]],\n u = e.yBounds || [e[0][2], e[1][2], i ? e[2][2] : e[0][2]],\n g = r(p),\n f = r(u),\n m = s(p) - g;\n c.align(t, !1, {\n x: g,\n y: f,\n width: m,\n height: s(u) - f\n }), (!c.alignValue || \"left\" === c.alignValue || o(d)) && c.css({\n width: (t.style?.width || (i && d ? m : 90 === c.rotation ? a.height - (c.alignAttr.y - a.top) : (t.clip ? a.width : a.chart.chartWidth) - (c.alignAttr.x - a.left))) + \"px\"\n }), c.show(!0);\n }\n getLabelText(t) {\n return o(t.formatter) ? t.formatter.call(this) : t.text;\n }\n destroy() {\n a(this.axis.plotLinesAndBands, this), delete this.axis, n(this);\n }\n }\n return p;\n }), i(e, \"Core/Tooltip.js\", [e[\"Core/Animation/AnimationUtilities.js\"], e[\"Core/Templating.js\"], e[\"Core/Globals.js\"], e[\"Core/Renderer/RendererUtilities.js\"], e[\"Core/Renderer/RendererRegistry.js\"], e[\"Core/Utilities.js\"]], function (t, e, i, s, r, o) {\n var n;\n let {\n animObject: a\n } = t,\n {\n format: h\n } = e,\n {\n composed: l,\n doc: d,\n isSafari: c\n } = i,\n {\n distribute: p\n } = s,\n {\n addEvent: u,\n clamp: g,\n css: f,\n discardElement: m,\n extend: x,\n fireEvent: y,\n isArray: b,\n isNumber: v,\n isString: S,\n merge: C,\n pick: k,\n pushUnique: M,\n splat: w,\n syncTimeout: T\n } = o;\n class A {\n constructor(t, e, i) {\n this.allowShared = !0, this.crosshairs = [], this.distance = 0, this.isHidden = !0, this.isSticky = !1, this.options = {}, this.outside = !1, this.chart = t, this.init(t, e), this.pointer = i;\n }\n bodyFormatter(t) {\n return t.map(function (t) {\n let e = t.series.tooltipOptions;\n return (e[(t.point.formatPrefix || \"point\") + \"Formatter\"] || t.point.tooltipFormatter).call(t.point, e[(t.point.formatPrefix || \"point\") + \"Format\"] || \"\");\n });\n }\n cleanSplit(t) {\n this.chart.series.forEach(function (e) {\n let i = e && e.tt;\n i && (!i.isActive || t ? e.tt = i.destroy() : i.isActive = !1);\n });\n }\n defaultFormatter(t) {\n let e;\n let i = this.points || w(this);\n return (e = (e = [t.tooltipFooterHeaderFormatter(i[0])]).concat(t.bodyFormatter(i))).push(t.tooltipFooterHeaderFormatter(i[0], !0)), e;\n }\n destroy() {\n this.label && (this.label = this.label.destroy()), this.split && (this.cleanSplit(!0), this.tt && (this.tt = this.tt.destroy())), this.renderer && (this.renderer = this.renderer.destroy(), m(this.container)), o.clearTimeout(this.hideTimer);\n }\n getAnchor(t, e) {\n let i;\n let {\n chart: s,\n pointer: r\n } = this,\n o = s.inverted,\n n = s.plotTop,\n a = s.plotLeft;\n if ((t = w(t))[0].series && t[0].series.yAxis && !t[0].series.yAxis.options.reversedStacks && (t = t.slice().reverse()), this.followPointer && e) void 0 === e.chartX && (e = r.normalize(e)), i = [e.chartX - a, e.chartY - n];else if (t[0].tooltipPos) i = t[0].tooltipPos;else {\n let s = 0,\n r = 0;\n t.forEach(function (t) {\n let e = t.pos(!0);\n e && (s += e[0], r += e[1]);\n }), s /= t.length, r /= t.length, this.shared && t.length > 1 && e && (o ? s = e.chartX : r = e.chartY), i = [s - a, r - n];\n }\n return i.map(Math.round);\n }\n getClassName(t, e, i) {\n let s = this.options,\n r = t.series,\n o = r.options;\n return [s.className, \"highcharts-label\", i && \"highcharts-tooltip-header\", e ? \"highcharts-tooltip-box\" : \"highcharts-tooltip\", !i && \"highcharts-color-\" + k(t.colorIndex, r.colorIndex), o && o.className].filter(S).join(\" \");\n }\n getLabel({\n anchorX: t,\n anchorY: e\n } = {\n anchorX: 0,\n anchorY: 0\n }) {\n let s = this,\n o = this.chart.styledMode,\n n = this.options,\n a = this.split && this.allowShared,\n h = this.container,\n l = this.chart.renderer;\n if (this.label) {\n let t = !this.label.hasClass(\"highcharts-label\");\n (!a && t || a && !t) && this.destroy();\n }\n if (!this.label) {\n if (this.outside) {\n let t = this.chart.options.chart.style,\n e = r.getRendererType();\n this.container = h = i.doc.createElement(\"div\"), h.className = \"highcharts-tooltip-container\", f(h, {\n position: \"absolute\",\n top: \"1px\",\n pointerEvents: \"none\",\n zIndex: Math.max(this.options.style.zIndex || 0, (t && t.zIndex || 0) + 3)\n }), this.renderer = l = new e(h, 0, 0, t, void 0, void 0, l.styledMode);\n }\n if (a ? this.label = l.g(\"tooltip\") : (this.label = l.label(\"\", t, e, n.shape, void 0, void 0, n.useHTML, void 0, \"tooltip\").attr({\n padding: n.padding,\n r: n.borderRadius\n }), o || this.label.attr({\n fill: n.backgroundColor,\n \"stroke-width\": n.borderWidth || 0\n }).css(n.style).css({\n pointerEvents: n.style.pointerEvents || (this.shouldStickOnContact() ? \"auto\" : \"none\")\n })), s.outside) {\n let t = this.label;\n [t.xSetter, t.ySetter].forEach((e, i) => {\n t[i ? \"ySetter\" : \"xSetter\"] = r => {\n e.call(t, s.distance), t[i ? \"y\" : \"x\"] = r, h && (h.style[i ? \"top\" : \"left\"] = `${r}px`);\n };\n });\n }\n this.label.attr({\n zIndex: 8\n }).shadow(n.shadow).add();\n }\n return h && !h.parentElement && i.doc.body.appendChild(h), this.label;\n }\n getPlayingField() {\n let {\n body: t,\n documentElement: e\n } = d,\n {\n chart: i,\n distance: s,\n outside: r\n } = this;\n return {\n width: r ? Math.max(t.scrollWidth, e.scrollWidth, t.offsetWidth, e.offsetWidth, e.clientWidth) - 2 * s : i.chartWidth,\n height: r ? Math.max(t.scrollHeight, e.scrollHeight, t.offsetHeight, e.offsetHeight, e.clientHeight) : i.chartHeight\n };\n }\n getPosition(t, e, i) {\n let {\n distance: s,\n chart: r,\n outside: o,\n pointer: n\n } = this,\n {\n inverted: a,\n plotLeft: h,\n plotTop: l,\n polar: d\n } = r,\n {\n plotX: c = 0,\n plotY: p = 0\n } = i,\n u = {},\n g = a && i.h || 0,\n {\n height: f,\n width: m\n } = this.getPlayingField(),\n x = n.getChartPosition(),\n y = t => t * x.scaleX,\n b = t => t * x.scaleY,\n v = i => {\n let n = \"x\" === i;\n return [i, n ? m : f, n ? t : e].concat(o ? [n ? y(t) : b(e), n ? x.left - s + y(c + h) : x.top - s + b(p + l), 0, n ? m : f] : [n ? t : e, n ? c + h : p + l, n ? h : l, n ? h + r.plotWidth : l + r.plotHeight]);\n },\n S = v(\"y\"),\n C = v(\"x\"),\n M,\n w = !!i.negative;\n !d && r.hoverSeries?.yAxis?.reversed && (w = !w);\n let T = !this.followPointer && k(i.ttBelow, !d && !a === w),\n A = function (t, e, i, r, n, a, h) {\n let l = o ? \"y\" === t ? b(s) : y(s) : s,\n d = (i - r) / 2,\n c = r < n - s,\n p = n + s + r < e,\n f = n - l - i + d,\n m = n + l - d;\n if (T && p) u[t] = m;else if (!T && c) u[t] = f;else if (c) u[t] = Math.min(h - r, f - g < 0 ? f : f - g);else {\n if (!p) return !1;\n u[t] = Math.max(a, m + g + i > e ? m : m + g);\n }\n },\n P = function (t, e, i, r, o) {\n if (o < s || o > e - s) return !1;\n o < i / 2 ? u[t] = 1 : o > e - r / 2 ? u[t] = e - r - 2 : u[t] = o - i / 2;\n },\n L = function (t) {\n [S, C] = [C, S], M = t;\n },\n O = () => {\n !1 !== A.apply(0, S) ? !1 !== P.apply(0, C) || M || (L(!0), O()) : M ? u.x = u.y = 0 : (L(!0), O());\n };\n return (a && !d || this.len > 1) && L(), O(), u;\n }\n hide(t) {\n let e = this;\n o.clearTimeout(this.hideTimer), t = k(t, this.options.hideDelay), this.isHidden || (this.hideTimer = T(function () {\n let i = e.getLabel();\n e.getLabel().animate({\n opacity: 0\n }, {\n duration: t ? 150 : t,\n complete: () => {\n i.hide(), e.container && e.container.remove();\n }\n }), e.isHidden = !0;\n }, t));\n }\n init(t, e) {\n this.chart = t, this.options = e, this.crosshairs = [], this.isHidden = !0, this.split = e.split && !t.inverted && !t.polar, this.shared = e.shared || this.split, this.outside = k(e.outside, !!(t.scrollablePixelsX || t.scrollablePixelsY));\n }\n shouldStickOnContact(t) {\n return !!(!this.followPointer && this.options.stickOnContact && (!t || this.pointer.inClass(t.target, \"highcharts-tooltip\")));\n }\n move(t, e, i, s) {\n let r = this,\n o = a(!r.isHidden && r.options.animation),\n n = r.followPointer || (r.len || 0) > 1,\n h = {\n x: t,\n y: e\n };\n n || (h.anchorX = i, h.anchorY = s), o.step = () => r.drawTracker(), r.getLabel().animate(h, o);\n }\n refresh(t, e) {\n let {\n chart: i,\n options: s,\n pointer: r,\n shared: n\n } = this,\n a = w(t),\n l = a[0],\n d = [],\n c = s.format,\n p = s.formatter || this.defaultFormatter,\n u = i.styledMode,\n f = {},\n m = this.allowShared;\n if (!s.enabled || !l.series) return;\n o.clearTimeout(this.hideTimer), this.allowShared = !(!b(t) && t.series && t.series.noSharedTooltip), m = m && !this.allowShared, this.followPointer = !this.split && l.series.tooltipOptions.followPointer;\n let x = this.getAnchor(t, e),\n v = x[0],\n C = x[1];\n n && this.allowShared ? (r.applyInactiveState(a), a.forEach(function (t) {\n t.setState(\"hover\"), d.push(t.getLabelConfig());\n }), (f = l.getLabelConfig()).points = d) : f = l.getLabelConfig(), this.len = d.length;\n let M = S(c) ? h(c, f, i) : p.call(f, this),\n T = l.series;\n if (this.distance = k(T.tooltipOptions.distance, 16), !1 === M) this.hide();else {\n if (this.split && this.allowShared) this.renderSplit(M, a);else {\n let t = v,\n o = C;\n if (e && r.isDirectTouch && (t = e.chartX - i.plotLeft, o = e.chartY - i.plotTop), i.polar || !1 === T.options.clip || a.some(e => r.isDirectTouch || e.series.shouldShowTooltip(t, o))) {\n let t = this.getLabel(m && this.tt || {});\n (!s.style.width || u) && t.css({\n width: (this.outside ? this.getPlayingField() : i.spacingBox).width + \"px\"\n }), t.attr({\n class: this.getClassName(l),\n text: M && M.join ? M.join(\"\") : M\n }), this.outside && t.attr({\n x: g(t.x || 0, 0, this.getPlayingField().width - (t.width || 0))\n }), u || t.attr({\n stroke: s.borderColor || l.color || T.color || \"#666666\"\n }), this.updatePosition({\n plotX: v,\n plotY: C,\n negative: l.negative,\n ttBelow: l.ttBelow,\n h: x[2] || 0\n });\n } else {\n this.hide();\n return;\n }\n }\n this.isHidden && this.label && this.label.attr({\n opacity: 1\n }).show(), this.isHidden = !1;\n }\n y(this, \"refresh\");\n }\n renderSplit(t, e) {\n let i = this,\n {\n chart: s,\n chart: {\n chartWidth: r,\n chartHeight: o,\n plotHeight: n,\n plotLeft: a,\n plotTop: h,\n scrollablePixelsY: l = 0,\n scrollablePixelsX: u,\n styledMode: f\n },\n distance: m,\n options: y,\n options: {\n positioner: b\n },\n pointer: v\n } = i,\n {\n scrollLeft: C = 0,\n scrollTop: M = 0\n } = s.scrollablePlotArea?.scrollingContainer || {},\n w = i.outside && \"number\" != typeof u ? d.documentElement.getBoundingClientRect() : {\n left: C,\n right: C + r,\n top: M,\n bottom: M + o\n },\n T = i.getLabel(),\n A = this.renderer || s.renderer,\n P = !!(s.xAxis[0] && s.xAxis[0].opposite),\n {\n left: L,\n top: O\n } = v.getChartPosition(),\n D = h + M,\n E = 0,\n I = n - l;\n function j(t, e, s, r, o = !0) {\n let n, a;\n return s ? (n = P ? 0 : I, a = g(t - r / 2, w.left, w.right - r - (i.outside ? L : 0))) : (n = e - D, a = g(a = o ? t - r - m : t + m, o ? a : w.left, w.right)), {\n x: a,\n y: n\n };\n }\n S(t) && (t = [!1, t]);\n let B = t.slice(0, e.length + 1).reduce(function (t, s, r) {\n if (!1 !== s && \"\" !== s) {\n let o = e[r - 1] || {\n isHeader: !0,\n plotX: e[0].plotX,\n plotY: n,\n series: {}\n },\n l = o.isHeader,\n d = l ? i : o.series,\n c = d.tt = function (t, e, s) {\n let r = t,\n {\n isHeader: o,\n series: n\n } = e;\n if (!r) {\n let t = {\n padding: y.padding,\n r: y.borderRadius\n };\n f || (t.fill = y.backgroundColor, t[\"stroke-width\"] = y.borderWidth ?? 1), r = A.label(\"\", 0, 0, y[o ? \"headerShape\" : \"shape\"], void 0, void 0, y.useHTML).addClass(i.getClassName(e, !0, o)).attr(t).add(T);\n }\n return r.isActive = !0, r.attr({\n text: s\n }), f || r.css(y.style).attr({\n stroke: y.borderColor || e.color || n.color || \"#333333\"\n }), r;\n }(d.tt, o, s.toString()),\n p = c.getBBox(),\n u = p.width + c.strokeWidth();\n l && (E = p.height, I += E, P && (D -= E));\n let {\n anchorX: x,\n anchorY: v\n } = function (t) {\n let e, i;\n let {\n isHeader: s,\n plotX: r = 0,\n plotY: o = 0,\n series: l\n } = t;\n if (s) e = Math.max(a + r, a), i = h + n / 2;else {\n let {\n xAxis: t,\n yAxis: s\n } = l;\n e = t.pos + g(r, -m, t.len + m), l.shouldShowTooltip(0, s.pos - h + o, {\n ignoreX: !0\n }) && (i = s.pos + o);\n }\n return {\n anchorX: e = g(e, w.left - m, w.right + m),\n anchorY: i\n };\n }(o);\n if (\"number\" == typeof v) {\n let e = p.height + 1,\n s = b ? b.call(i, u, e, o) : j(x, v, l, u);\n t.push({\n align: b ? 0 : void 0,\n anchorX: x,\n anchorY: v,\n boxWidth: u,\n point: o,\n rank: k(s.rank, l ? 1 : 0),\n size: e,\n target: s.y,\n tt: c,\n x: s.x\n });\n } else c.isActive = !1;\n }\n return t;\n }, []);\n !b && B.some(t => {\n let {\n outside: e\n } = i,\n s = (e ? L : 0) + t.anchorX;\n return s < w.left && s + t.boxWidth < w.right || s < L - w.left + t.boxWidth && w.right - s > s;\n }) && (B = B.map(t => {\n let {\n x: e,\n y: i\n } = j(t.anchorX, t.anchorY, t.point.isHeader, t.boxWidth, !1);\n return x(t, {\n target: i,\n x: e\n });\n })), i.cleanSplit(), p(B, I);\n let R = {\n left: L,\n right: L\n };\n B.forEach(function (t) {\n let {\n x: e,\n boxWidth: s,\n isHeader: r\n } = t;\n !r && (i.outside && L + e < R.left && (R.left = L + e), !r && i.outside && R.left + s > R.right && (R.right = L + e));\n }), B.forEach(function (t) {\n let {\n x: e,\n anchorX: s,\n anchorY: r,\n pos: o,\n point: {\n isHeader: n\n }\n } = t,\n a = {\n visibility: void 0 === o ? \"hidden\" : \"inherit\",\n x: e,\n y: (o || 0) + D,\n anchorX: s,\n anchorY: r\n };\n if (i.outside && e < s) {\n let t = L - R.left;\n t > 0 && (n || (a.x = e + t, a.anchorX = s + t), n && (a.x = (R.right - R.left) / 2, a.anchorX = s + t));\n }\n t.tt.attr(a);\n });\n let {\n container: z,\n outside: N,\n renderer: W\n } = i;\n if (N && z && W) {\n let {\n width: t,\n height: e,\n x: i,\n y: s\n } = T.getBBox();\n W.setSize(t + i, e + s, !1), z.style.left = R.left + \"px\", z.style.top = O + \"px\";\n }\n c && T.attr({\n opacity: 1 === T.opacity ? .999 : 1\n });\n }\n drawTracker() {\n if (!this.shouldStickOnContact()) {\n this.tracker && (this.tracker = this.tracker.destroy());\n return;\n }\n let t = this.chart,\n e = this.label,\n i = this.shared ? t.hoverPoints : t.hoverPoint;\n if (!e || !i) return;\n let s = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n },\n r = this.getAnchor(i),\n o = e.getBBox();\n r[0] += t.plotLeft - (e.translateX || 0), r[1] += t.plotTop - (e.translateY || 0), s.x = Math.min(0, r[0]), s.y = Math.min(0, r[1]), s.width = r[0] < 0 ? Math.max(Math.abs(r[0]), o.width - r[0]) : Math.max(Math.abs(r[0]), o.width), s.height = r[1] < 0 ? Math.max(Math.abs(r[1]), o.height - Math.abs(r[1])) : Math.max(Math.abs(r[1]), o.height), this.tracker ? this.tracker.attr(s) : (this.tracker = e.renderer.rect(s).addClass(\"highcharts-tracker\").add(e), t.styledMode || this.tracker.attr({\n fill: \"rgba(0,0,0,0)\"\n }));\n }\n styledModeFormat(t) {\n return t.replace('style=\"font-size: 0.8em\"', 'class=\"highcharts-header\"').replace(/style=\"color:{(point|series)\\.color}\"/g, 'class=\"highcharts-color-{$1.colorIndex} {series.options.className} {point.options.className}\"');\n }\n tooltipFooterHeaderFormatter(t, e) {\n let i = t.series,\n s = i.tooltipOptions,\n r = i.xAxis,\n o = r && r.dateTime,\n n = {\n isFooter: e,\n labelConfig: t\n },\n a = s.xDateFormat,\n l = s[e ? \"footerFormat\" : \"headerFormat\"];\n return y(this, \"headerFormatter\", n, function (e) {\n o && !a && v(t.key) && (a = o.getXDateFormat(t.key, s.dateTimeLabelFormats)), o && a && (t.point && t.point.tooltipDateKeys || [\"key\"]).forEach(function (t) {\n l = l.replace(\"{point.\" + t + \"}\", \"{point.\" + t + \":\" + a + \"}\");\n }), i.chart.styledMode && (l = this.styledModeFormat(l)), e.text = h(l, {\n point: t,\n series: i\n }, this.chart);\n }), n.text;\n }\n update(t) {\n this.destroy(), this.init(this.chart, C(!0, this.options, t));\n }\n updatePosition(t) {\n let {\n chart: e,\n container: i,\n distance: s,\n options: r,\n pointer: o,\n renderer: n\n } = this,\n {\n height: a = 0,\n width: h = 0\n } = this.getLabel(),\n {\n left: l,\n top: d,\n scaleX: c,\n scaleY: p\n } = o.getChartPosition(),\n u = (r.positioner || this.getPosition).call(this, h, a, t),\n g = (t.plotX || 0) + e.plotLeft,\n m = (t.plotY || 0) + e.plotTop,\n x;\n n && i && (r.positioner && (u.x += l - s, u.y += d - s), x = (r.borderWidth || 0) + 2 * s + 2, n.setSize(h + x, a + x, !1), (1 !== c || 1 !== p) && (f(i, {\n transform: `scale(${c}, ${p})`\n }), g *= c, m *= p), g += l - u.x, m += d - u.y), this.move(Math.round(u.x), Math.round(u.y || 0), g, m);\n }\n }\n return (n = A || (A = {})).compose = function (t) {\n M(l, \"Core.Tooltip\") && u(t, \"afterInit\", function () {\n let t = this.chart;\n t.options.tooltip && (t.tooltip = new n(t, t.options.tooltip, this));\n });\n }, A;\n }), i(e, \"Core/Series/Point.js\", [e[\"Core/Renderer/HTML/AST.js\"], e[\"Core/Animation/AnimationUtilities.js\"], e[\"Core/Defaults.js\"], e[\"Core/Templating.js\"], e[\"Core/Utilities.js\"]], function (t, e, i, s, r) {\n let {\n animObject: o\n } = e,\n {\n defaultOptions: n\n } = i,\n {\n format: a\n } = s,\n {\n addEvent: h,\n crisp: l,\n erase: d,\n extend: c,\n fireEvent: p,\n getNestedProperty: u,\n isArray: g,\n isFunction: f,\n isNumber: m,\n isObject: x,\n merge: y,\n pick: b,\n syncTimeout: v,\n removeEvent: S,\n uniqueKey: C\n } = r;\n class k {\n animateBeforeDestroy() {\n let t = this,\n e = {\n x: t.startXPos,\n opacity: 0\n },\n i = t.getGraphicalProps();\n i.singular.forEach(function (i) {\n t[i] = t[i].animate(\"dataLabel\" === i ? {\n x: t[i].startXPos,\n y: t[i].startYPos,\n opacity: 0\n } : e);\n }), i.plural.forEach(function (e) {\n t[e].forEach(function (e) {\n e.element && e.animate(c({\n x: t.startXPos\n }, e.startYPos ? {\n x: e.startXPos,\n y: e.startYPos\n } : {}));\n });\n });\n }\n applyOptions(t, e) {\n let i = this.series,\n s = i.options.pointValKey || i.pointValKey;\n return c(this, t = k.prototype.optionsToObject.call(this, t)), this.options = this.options ? c(this.options, t) : t, t.group && delete this.group, t.dataLabels && delete this.dataLabels, s && (this.y = k.prototype.getNestedProperty.call(this, s)), this.selected && (this.state = \"select\"), \"name\" in this && void 0 === e && i.xAxis && i.xAxis.hasNames && (this.x = i.xAxis.nameToX(this)), void 0 === this.x && i ? this.x = e ?? i.autoIncrement() : m(t.x) && i.options.relativeXValue && (this.x = i.autoIncrement(t.x)), this.isNull = this.isValid && !this.isValid(), this.formatPrefix = this.isNull ? \"null\" : \"point\", this;\n }\n destroy() {\n if (!this.destroyed) {\n let t = this,\n e = t.series,\n i = e.chart,\n s = e.options.dataSorting,\n r = i.hoverPoints,\n n = o(t.series.chart.renderer.globalAnimation),\n a = () => {\n for (let e in (t.graphic || t.graphics || t.dataLabel || t.dataLabels) && (S(t), t.destroyElements()), t) delete t[e];\n };\n t.legendItem && i.legend.destroyItem(t), r && (t.setState(), d(r, t), r.length || (i.hoverPoints = null)), t === i.hoverPoint && t.onMouseOut(), s && s.enabled ? (this.animateBeforeDestroy(), v(a, n.duration)) : a(), i.pointCount--;\n }\n this.destroyed = !0;\n }\n destroyElements(t) {\n let e = this,\n i = e.getGraphicalProps(t);\n i.singular.forEach(function (t) {\n e[t] = e[t].destroy();\n }), i.plural.forEach(function (t) {\n e[t].forEach(function (t) {\n t && t.element && t.destroy();\n }), delete e[t];\n });\n }\n firePointEvent(t, e, i) {\n let s = this,\n r = this.series.options;\n s.manageEvent(t), \"click\" === t && r.allowPointSelect && (i = function (t) {\n !s.destroyed && s.select && s.select(null, t.ctrlKey || t.metaKey || t.shiftKey);\n }), p(s, t, e, i);\n }\n getClassName() {\n return \"highcharts-point\" + (this.selected ? \" highcharts-point-select\" : \"\") + (this.negative ? \" highcharts-negative\" : \"\") + (this.isNull ? \" highcharts-null-point\" : \"\") + (void 0 !== this.colorIndex ? \" highcharts-color-\" + this.colorIndex : \"\") + (this.options.className ? \" \" + this.options.className : \"\") + (this.zone && this.zone.className ? \" \" + this.zone.className.replace(\"highcharts-negative\", \"\") : \"\");\n }\n getGraphicalProps(t) {\n let e, i;\n let s = this,\n r = [],\n o = {\n singular: [],\n plural: []\n };\n for ((t = t || {\n graphic: 1,\n dataLabel: 1\n }).graphic && r.push(\"graphic\", \"connector\"), t.dataLabel && r.push(\"dataLabel\", \"dataLabelPath\", \"dataLabelUpper\"), i = r.length; i--;) s[e = r[i]] && o.singular.push(e);\n return [\"graphic\", \"dataLabel\"].forEach(function (e) {\n let i = e + \"s\";\n t[e] && s[i] && o.plural.push(i);\n }), o;\n }\n getLabelConfig() {\n return {\n x: this.category,\n y: this.y,\n color: this.color,\n colorIndex: this.colorIndex,\n key: this.name || this.category,\n series: this.series,\n point: this,\n percentage: this.percentage,\n total: this.total || this.stackTotal\n };\n }\n getNestedProperty(t) {\n return t ? 0 === t.indexOf(\"custom.\") ? u(t, this.options) : this[t] : void 0;\n }\n getZone() {\n let t = this.series,\n e = t.zones,\n i = t.zoneAxis || \"y\",\n s,\n r = 0;\n for (s = e[0]; this[i] >= s.value;) s = e[++r];\n return this.nonZonedColor || (this.nonZonedColor = this.color), s && s.color && !this.options.color ? this.color = s.color : this.color = this.nonZonedColor, s;\n }\n hasNewShapeType() {\n return (this.graphic && (this.graphic.symbolName || this.graphic.element.nodeName)) !== this.shapeType;\n }\n constructor(t, e, i) {\n this.formatPrefix = \"point\", this.visible = !0, this.series = t, this.applyOptions(e, i), this.id ?? (this.id = C()), this.resolveColor(), t.chart.pointCount++, p(this, \"afterInit\");\n }\n isValid() {\n return (m(this.x) || this.x instanceof Date) && m(this.y);\n }\n optionsToObject(t) {\n let e = this.series,\n i = e.options.keys,\n s = i || e.pointArrayMap || [\"y\"],\n r = s.length,\n o = {},\n n,\n a = 0,\n h = 0;\n if (m(t) || null === t) o[s[0]] = t;else if (g(t)) for (!i && t.length > r && (\"string\" == (n = typeof t[0]) ? o.name = t[0] : \"number\" === n && (o.x = t[0]), a++); h < r;) i && void 0 === t[a] || (s[h].indexOf(\".\") > 0 ? k.prototype.setNestedProperty(o, t[a], s[h]) : o[s[h]] = t[a]), a++, h++;else \"object\" == typeof t && (o = t, t.dataLabels && (e.hasDataLabels = () => !0), t.marker && (e._hasPointMarkers = !0));\n return o;\n }\n pos(t, e = this.plotY) {\n if (!this.destroyed) {\n let {\n plotX: i,\n series: s\n } = this,\n {\n chart: r,\n xAxis: o,\n yAxis: n\n } = s,\n a = 0,\n h = 0;\n if (m(i) && m(e)) return t && (a = o ? o.pos : r.plotLeft, h = n ? n.pos : r.plotTop), r.inverted && o && n ? [n.len - e + h, o.len - i + a] : [i + a, e + h];\n }\n }\n resolveColor() {\n let t = this.series,\n e = t.chart.options.chart,\n i = t.chart.styledMode,\n s,\n r,\n o = e.colorCount,\n n;\n delete this.nonZonedColor, t.options.colorByPoint ? (i || (s = (r = t.options.colors || t.chart.options.colors)[t.colorCounter], o = r.length), n = t.colorCounter, t.colorCounter++, t.colorCounter === o && (t.colorCounter = 0)) : (i || (s = t.color), n = t.colorIndex), this.colorIndex = b(this.options.colorIndex, n), this.color = b(this.options.color, s);\n }\n setNestedProperty(t, e, i) {\n return i.split(\".\").reduce(function (t, i, s, r) {\n let o = r.length - 1 === s;\n return t[i] = o ? e : x(t[i], !0) ? t[i] : {}, t[i];\n }, t), t;\n }\n shouldDraw() {\n return !this.isNull;\n }\n tooltipFormatter(t) {\n let e = this.series,\n i = e.tooltipOptions,\n s = b(i.valueDecimals, \"\"),\n r = i.valuePrefix || \"\",\n o = i.valueSuffix || \"\";\n return e.chart.styledMode && (t = e.chart.tooltip.styledModeFormat(t)), (e.pointArrayMap || [\"y\"]).forEach(function (e) {\n e = \"{point.\" + e, (r || o) && (t = t.replace(RegExp(e + \"}\", \"g\"), r + e + \"}\" + o)), t = t.replace(RegExp(e + \"}\", \"g\"), e + \":,.\" + s + \"f}\");\n }), a(t, {\n point: this,\n series: this.series\n }, e.chart);\n }\n update(t, e, i, s) {\n let r;\n let o = this,\n n = o.series,\n a = o.graphic,\n h = n.chart,\n l = n.options;\n function d() {\n o.applyOptions(t);\n let s = a && o.hasMockGraphic,\n d = null === o.y ? !s : s;\n a && d && (o.graphic = a.destroy(), delete o.hasMockGraphic), x(t, !0) && (a && a.element && t && t.marker && void 0 !== t.marker.symbol && (o.graphic = a.destroy()), t?.dataLabels && o.dataLabel && (o.dataLabel = o.dataLabel.destroy())), r = o.index, n.updateParallelArrays(o, r), l.data[r] = x(l.data[r], !0) || x(t, !0) ? o.options : b(t, l.data[r]), n.isDirty = n.isDirtyData = !0, !n.fixedBox && n.hasCartesianSeries && (h.isDirtyBox = !0), \"point\" === l.legendType && (h.isDirtyLegend = !0), e && h.redraw(i);\n }\n e = b(e, !0), !1 === s ? d() : o.firePointEvent(\"update\", {\n options: t\n }, d);\n }\n remove(t, e) {\n this.series.removePoint(this.series.data.indexOf(this), t, e);\n }\n select(t, e) {\n let i = this,\n s = i.series,\n r = s.chart;\n t = b(t, !i.selected), this.selectedStaging = t, i.firePointEvent(t ? \"select\" : \"unselect\", {\n accumulate: e\n }, function () {\n i.selected = i.options.selected = t, s.options.data[s.data.indexOf(i)] = i.options, i.setState(t && \"select\"), e || r.getSelectedPoints().forEach(function (t) {\n let e = t.series;\n t.selected && t !== i && (t.selected = t.options.selected = !1, e.options.data[e.data.indexOf(t)] = t.options, t.setState(r.hoverPoints && e.options.inactiveOtherPoints ? \"inactive\" : \"\"), t.firePointEvent(\"unselect\"));\n });\n }), delete this.selectedStaging;\n }\n onMouseOver(t) {\n let {\n inverted: e,\n pointer: i\n } = this.series.chart;\n i && (t = t ? i.normalize(t) : i.getChartCoordinatesFromPoint(this, e), i.runPointActions(t, this));\n }\n onMouseOut() {\n let t = this.series.chart;\n this.firePointEvent(\"mouseOut\"), this.series.options.inactiveOtherPoints || (t.hoverPoints || []).forEach(function (t) {\n t.setState();\n }), t.hoverPoints = t.hoverPoint = null;\n }\n manageEvent(t) {\n let e = y(this.series.options.point, this.options),\n i = e.events?.[t];\n f(i) && (!this.hcEvents?.[t] || this.hcEvents?.[t]?.map(t => t.fn).indexOf(i) === -1) ? (this.importedUserEvent?.(), this.importedUserEvent = h(this, t, i)) : this.importedUserEvent && !i && this.hcEvents?.[t] && (S(this, t), delete this.hcEvents[t], Object.keys(this.hcEvents) || delete this.importedUserEvent);\n }\n setState(e, i) {\n let s = this.series,\n r = this.state,\n o = s.options.states[e || \"normal\"] || {},\n a = n.plotOptions[s.type].marker && s.options.marker,\n h = a && !1 === a.enabled,\n l = a && a.states && a.states[e || \"normal\"] || {},\n d = !1 === l.enabled,\n u = this.marker || {},\n g = s.chart,\n f = a && s.markerAttribs,\n x = s.halo,\n y,\n v,\n S,\n C = s.stateMarkerGraphic,\n k;\n if ((e = e || \"\") === this.state && !i || this.selected && \"select\" !== e || !1 === o.enabled || e && (d || h && !1 === l.enabled) || e && u.states && u.states[e] && !1 === u.states[e].enabled) return;\n if (this.state = e, f && (y = s.markerAttribs(this, e)), this.graphic && !this.hasMockGraphic) {\n if (r && this.graphic.removeClass(\"highcharts-point-\" + r), e && this.graphic.addClass(\"highcharts-point-\" + e), !g.styledMode) {\n v = s.pointAttribs(this, e), S = b(g.options.chart.animation, o.animation);\n let t = v.opacity;\n s.options.inactiveOtherPoints && m(t) && (this.dataLabels || []).forEach(function (e) {\n e && !e.hasClass(\"highcharts-data-label-hidden\") && (e.animate({\n opacity: t\n }, S), e.connector && e.connector.animate({\n opacity: t\n }, S));\n }), this.graphic.animate(v, S);\n }\n y && this.graphic.animate(y, b(g.options.chart.animation, l.animation, a.animation)), C && C.hide();\n } else e && l && (k = u.symbol || s.symbol, C && C.currentSymbol !== k && (C = C.destroy()), y && (C ? C[i ? \"animate\" : \"attr\"]({\n x: y.x,\n y: y.y\n }) : k && (s.stateMarkerGraphic = C = g.renderer.symbol(k, y.x, y.y, y.width, y.height).add(s.markerGroup), C.currentSymbol = k)), !g.styledMode && C && \"inactive\" !== this.state && C.attr(s.pointAttribs(this, e))), C && (C[e && this.isInside ? \"show\" : \"hide\"](), C.element.point = this, C.addClass(this.getClassName(), !0));\n let M = o.halo,\n w = this.graphic || C,\n T = w && w.visibility || \"inherit\";\n M && M.size && w && \"hidden\" !== T && !this.isCluster ? (x || (s.halo = x = g.renderer.path().add(w.parentGroup)), x.show()[i ? \"animate\" : \"attr\"]({\n d: this.haloPath(M.size)\n }), x.attr({\n class: \"highcharts-halo highcharts-color-\" + b(this.colorIndex, s.colorIndex) + (this.className ? \" \" + this.className : \"\"),\n visibility: T,\n zIndex: -1\n }), x.point = this, g.styledMode || x.attr(c({\n fill: this.color || s.color,\n \"fill-opacity\": M.opacity\n }, t.filterUserAttributes(M.attributes || {})))) : x?.point?.haloPath && !x.point.destroyed && x.animate({\n d: x.point.haloPath(0)\n }, null, x.hide), p(this, \"afterSetState\", {\n state: e\n });\n }\n haloPath(t) {\n let e = this.pos();\n return e ? this.series.chart.renderer.symbols.circle(l(e[0], 1) - t, e[1] - t, 2 * t, 2 * t) : [];\n }\n }\n return k;\n }), i(e, \"Core/Pointer.js\", [e[\"Core/Color/Color.js\"], e[\"Core/Globals.js\"], e[\"Core/Utilities.js\"]], function (t, e, i) {\n var s;\n let {\n parse: r\n } = t,\n {\n charts: o,\n composed: n,\n isTouchDevice: a\n } = e,\n {\n addEvent: h,\n attr: l,\n css: d,\n extend: c,\n find: p,\n fireEvent: u,\n isNumber: g,\n isObject: f,\n objectEach: m,\n offset: x,\n pick: y,\n pushUnique: b,\n splat: v\n } = i;\n class S {\n applyInactiveState(t) {\n let e = [],\n i;\n (t || []).forEach(function (t) {\n i = t.series, e.push(i), i.linkedParent && e.push(i.linkedParent), i.linkedSeries && (e = e.concat(i.linkedSeries)), i.navigatorSeries && e.push(i.navigatorSeries);\n }), this.chart.series.forEach(function (t) {\n -1 === e.indexOf(t) ? t.setState(\"inactive\", !0) : t.options.inactiveOtherPoints && t.setAllPointsToState(\"inactive\");\n });\n }\n destroy() {\n let t = this;\n this.eventsToUnbind.forEach(t => t()), this.eventsToUnbind = [], !e.chartCount && (S.unbindDocumentMouseUp && S.unbindDocumentMouseUp.forEach(t => t()), S.unbindDocumentTouchEnd && (S.unbindDocumentTouchEnd = S.unbindDocumentTouchEnd())), clearInterval(t.tooltipTimeout), m(t, function (e, i) {\n t[i] = void 0;\n });\n }\n getSelectionMarkerAttrs(t, e) {\n let i = {\n args: {\n chartX: t,\n chartY: e\n },\n attrs: {},\n shapeType: \"rect\"\n };\n return u(this, \"getSelectionMarkerAttrs\", i, i => {\n let s;\n let {\n chart: r,\n zoomHor: o,\n zoomVert: n\n } = this,\n {\n mouseDownX: a = 0,\n mouseDownY: h = 0\n } = r,\n l = i.attrs;\n l.x = r.plotLeft, l.y = r.plotTop, l.width = o ? 1 : r.plotWidth, l.height = n ? 1 : r.plotHeight, o && (s = t - a, l.width = Math.max(1, Math.abs(s)), l.x = (s > 0 ? 0 : s) + a), n && (s = e - h, l.height = Math.max(1, Math.abs(s)), l.y = (s > 0 ? 0 : s) + h);\n }), i;\n }\n drag(t) {\n let {\n chart: e\n } = this,\n {\n mouseDownX: i = 0,\n mouseDownY: s = 0\n } = e,\n {\n panning: o,\n panKey: n,\n selectionMarkerFill: a\n } = e.options.chart,\n h = e.plotLeft,\n l = e.plotTop,\n d = e.plotWidth,\n c = e.plotHeight,\n p = f(o) ? o.enabled : o,\n u = n && t[`${n}Key`],\n g = t.chartX,\n m = t.chartY,\n x,\n y = this.selectionMarker;\n if ((!y || !y.touch) && (g < h ? g = h : g > h + d && (g = h + d), m < l ? m = l : m > l + c && (m = l + c), this.hasDragged = Math.sqrt(Math.pow(i - g, 2) + Math.pow(s - m, 2)), this.hasDragged > 10)) {\n x = e.isInsidePlot(i - h, s - l, {\n visiblePlotOnly: !0\n });\n let {\n shapeType: n,\n attrs: d\n } = this.getSelectionMarkerAttrs(g, m);\n (e.hasCartesianSeries || e.mapView) && this.hasZoom && x && !u && !y && (this.selectionMarker = y = e.renderer[n](), y.attr({\n class: \"highcharts-selection-marker\",\n zIndex: 7\n }).add(), e.styledMode || y.attr({\n fill: a || r(\"#334eff\").setOpacity(.25).get()\n })), y && y.attr(d), x && !y && p && e.pan(t, o);\n }\n }\n dragStart(t) {\n let e = this.chart;\n e.mouseIsDown = t.type, e.cancelClick = !1, e.mouseDownX = t.chartX, e.mouseDownY = t.chartY;\n }\n getSelectionBox(t) {\n let e = {\n args: {\n marker: t\n },\n result: t.getBBox()\n };\n return u(this, \"getSelectionBox\", e), e.result;\n }\n drop(t) {\n let e;\n let {\n chart: i,\n selectionMarker: s\n } = this;\n for (let t of i.axes) t.isPanning && (t.isPanning = !1, (t.options.startOnTick || t.options.endOnTick || t.series.some(t => t.boosted)) && (t.forceRedraw = !0, t.setExtremes(t.userMin, t.userMax, !1), e = !0));\n if (e && i.redraw(), s && t) {\n if (this.hasDragged) {\n let e = this.getSelectionBox(s);\n i.transform({\n axes: i.axes.filter(t => t.zoomEnabled && (\"xAxis\" === t.coll && this.zoomX || \"yAxis\" === t.coll && this.zoomY)),\n selection: {\n originalEvent: t,\n xAxis: [],\n yAxis: [],\n ...e\n },\n from: e\n });\n }\n g(i.index) && (this.selectionMarker = s.destroy());\n }\n i && g(i.index) && (d(i.container, {\n cursor: i._cursor\n }), i.cancelClick = this.hasDragged > 10, i.mouseIsDown = !1, this.hasDragged = 0, this.pinchDown = []);\n }\n findNearestKDPoint(t, e, i) {\n let s;\n return t.forEach(function (t) {\n let r = !(t.noSharedTooltip && e) && 0 > t.options.findNearestPointBy.indexOf(\"y\"),\n o = t.searchPoint(i, r);\n f(o, !0) && o.series && (!f(s, !0) || function (t, i) {\n let s = t.distX - i.distX,\n r = t.dist - i.dist,\n o = i.series.group?.zIndex - t.series.group?.zIndex;\n return 0 !== s && e ? s : 0 !== r ? r : 0 !== o ? o : t.series.index > i.series.index ? -1 : 1;\n }(s, o) > 0) && (s = o);\n }), s;\n }\n getChartCoordinatesFromPoint(t, e) {\n let {\n xAxis: i,\n yAxis: s\n } = t.series,\n r = t.shapeArgs;\n if (i && s) {\n let o = t.clientX ?? t.plotX ?? 0,\n n = t.plotY || 0;\n return t.isNode && r && g(r.x) && g(r.y) && (o = r.x, n = r.y), e ? {\n chartX: s.len + s.pos - n,\n chartY: i.len + i.pos - o\n } : {\n chartX: o + i.pos,\n chartY: n + s.pos\n };\n }\n if (r && r.x && r.y) return {\n chartX: r.x,\n chartY: r.y\n };\n }\n getChartPosition() {\n if (this.chartPosition) return this.chartPosition;\n let {\n container: t\n } = this.chart,\n e = x(t);\n this.chartPosition = {\n left: e.left,\n top: e.top,\n scaleX: 1,\n scaleY: 1\n };\n let {\n offsetHeight: i,\n offsetWidth: s\n } = t;\n return s > 2 && i > 2 && (this.chartPosition.scaleX = e.width / s, this.chartPosition.scaleY = e.height / i), this.chartPosition;\n }\n getCoordinates(t) {\n let e = {\n xAxis: [],\n yAxis: []\n };\n for (let i of this.chart.axes) e[i.isXAxis ? \"xAxis\" : \"yAxis\"].push({\n axis: i,\n value: i.toValue(t[i.horiz ? \"chartX\" : \"chartY\"])\n });\n return e;\n }\n getHoverData(t, e, i, s, r, o) {\n let n = [],\n a = function (t) {\n return t.visible && !(!r && t.directTouch) && y(t.options.enableMouseTracking, !0);\n },\n h = e,\n l,\n d = {\n chartX: o ? o.chartX : void 0,\n chartY: o ? o.chartY : void 0,\n shared: r\n };\n u(this, \"beforeGetHoverData\", d), l = h && !h.stickyTracking ? [h] : i.filter(t => t.stickyTracking && (d.filter || a)(t));\n let c = s && t || !o ? t : this.findNearestKDPoint(l, r, o);\n return h = c && c.series, c && (r && !h.noSharedTooltip ? (l = i.filter(function (t) {\n return d.filter ? d.filter(t) : a(t) && !t.noSharedTooltip;\n })).forEach(function (t) {\n let e = p(t.points, function (t) {\n return t.x === c.x && !t.isNull;\n });\n f(e) && (t.boosted && t.boost && (e = t.boost.getPoint(e)), n.push(e));\n }) : n.push(c)), u(this, \"afterGetHoverData\", d = {\n hoverPoint: c\n }), {\n hoverPoint: d.hoverPoint,\n hoverSeries: h,\n hoverPoints: n\n };\n }\n getPointFromEvent(t) {\n let e = t.target,\n i;\n for (; e && !i;) i = e.point, e = e.parentNode;\n return i;\n }\n onTrackerMouseOut(t) {\n let e = this.chart,\n i = t.relatedTarget,\n s = e.hoverSeries;\n this.isDirectTouch = !1, !s || !i || s.stickyTracking || this.inClass(i, \"highcharts-tooltip\") || this.inClass(i, \"highcharts-series-\" + s.index) && this.inClass(i, \"highcharts-tracker\") || s.onMouseOut();\n }\n inClass(t, e) {\n let i = t,\n s;\n for (; i;) {\n if (s = l(i, \"class\")) {\n if (-1 !== s.indexOf(e)) return !0;\n if (-1 !== s.indexOf(\"highcharts-container\")) return !1;\n }\n i = i.parentElement;\n }\n }\n constructor(t, e) {\n this.hasDragged = 0, this.pointerCaptureEventsToUnbind = [], this.eventsToUnbind = [], this.options = e, this.chart = t, this.runChartClick = !!e.chart.events?.click, this.pinchDown = [], this.setDOMEvents(), u(this, \"afterInit\");\n }\n normalize(t, e) {\n let i = t.touches,\n s = i ? i.length ? i.item(0) : y(i.changedTouches, t.changedTouches)[0] : t;\n e || (e = this.getChartPosition());\n let r = s.pageX - e.left,\n o = s.pageY - e.top;\n return c(t, {\n chartX: Math.round(r /= e.scaleX),\n chartY: Math.round(o /= e.scaleY)\n });\n }\n onContainerClick(t) {\n let e = this.chart,\n i = e.hoverPoint,\n s = this.normalize(t),\n r = e.plotLeft,\n o = e.plotTop;\n !e.cancelClick && (i && this.inClass(s.target, \"highcharts-tracker\") ? (u(i.series, \"click\", c(s, {\n point: i\n })), e.hoverPoint && i.firePointEvent(\"click\", s)) : (c(s, this.getCoordinates(s)), e.isInsidePlot(s.chartX - r, s.chartY - o, {\n visiblePlotOnly: !0\n }) && u(e, \"click\", s)));\n }\n onContainerMouseDown(t) {\n let i = (1 & (t.buttons || t.button)) == 1;\n t = this.normalize(t), e.isFirefox && 0 !== t.button && this.onContainerMouseMove(t), (void 0 === t.button || i) && (this.zoomOption(t), i && t.preventDefault?.(), this.dragStart(t));\n }\n onContainerMouseLeave(t) {\n let {\n pointer: e\n } = o[y(S.hoverChartIndex, -1)] || {};\n t = this.normalize(t), this.onContainerMouseMove(t), e && !this.inClass(t.relatedTarget, \"highcharts-tooltip\") && (e.reset(), e.chartPosition = void 0);\n }\n onContainerMouseEnter() {\n delete this.chartPosition;\n }\n onContainerMouseMove(t) {\n let e = this.chart,\n i = e.tooltip,\n s = this.normalize(t);\n this.setHoverChartIndex(t), (\"mousedown\" === e.mouseIsDown || this.touchSelect(s)) && this.drag(s), !e.openMenu && (this.inClass(s.target, \"highcharts-tracker\") || e.isInsidePlot(s.chartX - e.plotLeft, s.chartY - e.plotTop, {\n visiblePlotOnly: !0\n })) && !(i && i.shouldStickOnContact(s)) && (this.inClass(s.target, \"highcharts-no-tooltip\") ? this.reset(!1, 0) : this.runPointActions(s));\n }\n onDocumentTouchEnd(t) {\n this.onDocumentMouseUp(t);\n }\n onContainerTouchMove(t) {\n this.touchSelect(t) ? this.onContainerMouseMove(t) : this.touch(t);\n }\n onContainerTouchStart(t) {\n this.touchSelect(t) ? this.onContainerMouseDown(t) : (this.zoomOption(t), this.touch(t, !0));\n }\n onDocumentMouseMove(t) {\n let e = this.chart,\n i = e.tooltip,\n s = this.chartPosition,\n r = this.normalize(t, s);\n !s || e.isInsidePlot(r.chartX - e.plotLeft, r.chartY - e.plotTop, {\n visiblePlotOnly: !0\n }) || i && i.shouldStickOnContact(r) || r.target !== e.container.ownerDocument && this.inClass(r.target, \"highcharts-tracker\") || this.reset();\n }\n onDocumentMouseUp(t) {\n o[y(S.hoverChartIndex, -1)]?.pointer?.drop(t);\n }\n pinch(t) {\n let e = this,\n {\n chart: i,\n hasZoom: s,\n lastTouches: r\n } = e,\n o = [].map.call(t.touches || [], t => e.normalize(t)),\n n = o.length,\n a = 1 === n && (e.inClass(t.target, \"highcharts-tracker\") && i.runTrackerClick || e.runChartClick),\n h = i.tooltip,\n l = 1 === n && y(h?.options.followTouchMove, !0);\n n > 1 ? e.initiated = !0 : l && (e.initiated = !1), s && e.initiated && !a && !1 !== t.cancelable && t.preventDefault(), \"touchstart\" === t.type ? (e.pinchDown = o, e.res = !0, i.mouseDownX = t.chartX) : l ? this.runPointActions(e.normalize(t)) : r && (u(i, \"touchpan\", {\n originalEvent: t,\n touches: o\n }, () => {\n let e = t => {\n let e = t[0],\n i = t[1] || e;\n return {\n x: e.chartX,\n y: e.chartY,\n width: i.chartX - e.chartX,\n height: i.chartY - e.chartY\n };\n };\n i.transform({\n axes: i.axes.filter(t => t.zoomEnabled && (this.zoomHor && t.horiz || this.zoomVert && !t.horiz)),\n to: e(o),\n from: e(r),\n trigger: t.type\n });\n }), e.res && (e.res = !1, this.reset(!1, 0))), e.lastTouches = o;\n }\n reset(t, e) {\n let i = this.chart,\n s = i.hoverSeries,\n r = i.hoverPoint,\n o = i.hoverPoints,\n n = i.tooltip,\n a = n && n.shared ? o : r;\n t && a && v(a).forEach(function (e) {\n e.series.isCartesian && void 0 === e.plotX && (t = !1);\n }), t ? n && a && v(a).length && (n.refresh(a), n.shared && o ? o.forEach(function (t) {\n t.setState(t.state, !0), t.series.isCartesian && (t.series.xAxis.crosshair && t.series.xAxis.drawCrosshair(null, t), t.series.yAxis.crosshair && t.series.yAxis.drawCrosshair(null, t));\n }) : r && (r.setState(r.state, !0), i.axes.forEach(function (t) {\n t.crosshair && r.series[t.coll] === t && t.drawCrosshair(null, r);\n }))) : (r && r.onMouseOut(), o && o.forEach(function (t) {\n t.setState();\n }), s && s.onMouseOut(), n && n.hide(e), this.unDocMouseMove && (this.unDocMouseMove = this.unDocMouseMove()), i.axes.forEach(function (t) {\n t.hideCrosshair();\n }), i.hoverPoints = i.hoverPoint = void 0);\n }\n runPointActions(t, e, i) {\n let s = this.chart,\n r = s.series,\n n = s.tooltip && s.tooltip.options.enabled ? s.tooltip : void 0,\n a = !!n && n.shared,\n l = e || s.hoverPoint,\n d = l && l.series || s.hoverSeries,\n c = (!t || \"touchmove\" !== t.type) && (!!e || d && d.directTouch && this.isDirectTouch),\n u = this.getHoverData(l, d, r, c, a, t);\n l = u.hoverPoint, d = u.hoverSeries;\n let g = u.hoverPoints,\n f = d && d.tooltipOptions.followPointer && !d.tooltipOptions.split,\n m = a && d && !d.noSharedTooltip;\n if (l && (i || l !== s.hoverPoint || n && n.isHidden)) {\n if ((s.hoverPoints || []).forEach(function (t) {\n -1 === g.indexOf(t) && t.setState();\n }), s.hoverSeries !== d && d.onMouseOver(), this.applyInactiveState(g), (g || []).forEach(function (t) {\n t.setState(\"hover\");\n }), s.hoverPoint && s.hoverPoint.firePointEvent(\"mouseOut\"), !l.series) return;\n s.hoverPoints = g, s.hoverPoint = l, l.firePointEvent(\"mouseOver\", void 0, () => {\n n && l && n.refresh(m ? g : l, t);\n });\n } else if (f && n && !n.isHidden) {\n let e = n.getAnchor([{}], t);\n s.isInsidePlot(e[0], e[1], {\n visiblePlotOnly: !0\n }) && n.updatePosition({\n plotX: e[0],\n plotY: e[1]\n });\n }\n this.unDocMouseMove || (this.unDocMouseMove = h(s.container.ownerDocument, \"mousemove\", t => o[S.hoverChartIndex ?? -1]?.pointer?.onDocumentMouseMove(t)), this.eventsToUnbind.push(this.unDocMouseMove)), s.axes.forEach(function (e) {\n let i;\n let r = y((e.crosshair || {}).snap, !0);\n !r || (i = s.hoverPoint) && i.series[e.coll] === e || (i = p(g, t => t.series && t.series[e.coll] === e)), i || !r ? e.drawCrosshair(t, i) : e.hideCrosshair();\n });\n }\n setDOMEvents() {\n let t = this.chart.container,\n e = t.ownerDocument;\n t.onmousedown = this.onContainerMouseDown.bind(this), t.onmousemove = this.onContainerMouseMove.bind(this), t.onclick = this.onContainerClick.bind(this), this.eventsToUnbind.push(h(t, \"mouseenter\", this.onContainerMouseEnter.bind(this)), h(t, \"mouseleave\", this.onContainerMouseLeave.bind(this))), S.unbindDocumentMouseUp || (S.unbindDocumentMouseUp = []), S.unbindDocumentMouseUp.push(h(e, \"mouseup\", this.onDocumentMouseUp.bind(this)));\n let i = this.chart.renderTo.parentElement;\n for (; i && \"BODY\" !== i.tagName;) this.eventsToUnbind.push(h(i, \"scroll\", () => {\n delete this.chartPosition;\n })), i = i.parentElement;\n this.eventsToUnbind.push(h(t, \"touchstart\", this.onContainerTouchStart.bind(this), {\n passive: !1\n }), h(t, \"touchmove\", this.onContainerTouchMove.bind(this), {\n passive: !1\n })), S.unbindDocumentTouchEnd || (S.unbindDocumentTouchEnd = h(e, \"touchend\", this.onDocumentTouchEnd.bind(this), {\n passive: !1\n })), this.setPointerCapture(), h(this.chart, \"redraw\", this.setPointerCapture.bind(this));\n }\n setPointerCapture() {\n if (!a) return;\n let t = this.pointerCaptureEventsToUnbind,\n e = this.chart,\n i = e.container,\n s = y(e.options.tooltip?.followTouchMove, !0) && e.series.some(t => t.options.findNearestPointBy.indexOf(\"y\") > -1);\n !this.hasPointerCapture && s ? (t.push(h(i, \"pointerdown\", t => {\n t.target?.hasPointerCapture(t.pointerId) && t.target?.releasePointerCapture(t.pointerId);\n }), h(i, \"pointermove\", t => {\n e.pointer?.getPointFromEvent(t)?.onMouseOver(t);\n })), e.styledMode || d(i, {\n \"touch-action\": \"none\"\n }), i.className += \" highcharts-no-touch-action\", this.hasPointerCapture = !0) : this.hasPointerCapture && !s && (t.forEach(t => t()), t.length = 0, e.styledMode || d(i, {\n \"touch-action\": y(e.options.chart.style?.[\"touch-action\"], \"manipulation\")\n }), i.className = i.className.replace(\" highcharts-no-touch-action\", \"\"), this.hasPointerCapture = !1);\n }\n setHoverChartIndex(t) {\n let i = this.chart,\n s = e.charts[y(S.hoverChartIndex, -1)];\n if (s && s !== i) {\n let e = {\n relatedTarget: i.container\n };\n t && !t?.relatedTarget && (t = {\n ...e,\n ...t\n }), s.pointer?.onContainerMouseLeave(t || e);\n }\n s && s.mouseIsDown || (S.hoverChartIndex = i.index);\n }\n touch(t, e) {\n let i;\n let {\n chart: s,\n pinchDown: r = []\n } = this;\n this.setHoverChartIndex(), 1 === (t = this.normalize(t)).touches.length ? s.isInsidePlot(t.chartX - s.plotLeft, t.chartY - s.plotTop, {\n visiblePlotOnly: !0\n }) && !s.openMenu ? (e && this.runPointActions(t), \"touchmove\" === t.type && (i = !!r[0] && Math.pow(r[0].chartX - t.chartX, 2) + Math.pow(r[0].chartY - t.chartY, 2) >= 16), y(i, !0) && this.pinch(t)) : e && this.reset() : 2 === t.touches.length && this.pinch(t);\n }\n touchSelect(t) {\n return !!(this.chart.zooming.singleTouch && t.touches && 1 === t.touches.length);\n }\n zoomOption(t) {\n let e = this.chart,\n i = e.inverted,\n s = e.zooming.type || \"\",\n r,\n o;\n /touch/.test(t.type) && (s = y(e.zooming.pinchType, s)), this.zoomX = r = /x/.test(s), this.zoomY = o = /y/.test(s), this.zoomHor = r && !i || o && i, this.zoomVert = o && !i || r && i, this.hasZoom = r || o;\n }\n }\n return (s = S || (S = {})).compose = function (t) {\n b(n, \"Core.Pointer\") && h(t, \"beforeRender\", function () {\n this.pointer = new s(this, this.options);\n });\n }, S;\n }), i(e, \"Core/Legend/LegendSymbol.js\", [e[\"Core/Utilities.js\"]], function (t) {\n var e;\n let {\n extend: i,\n merge: s,\n pick: r\n } = t;\n return function (t) {\n function e(t, e, o) {\n let n = this.legendItem = this.legendItem || {},\n {\n chart: a,\n options: h\n } = this,\n {\n baseline: l = 0,\n symbolWidth: d,\n symbolHeight: c\n } = t,\n p = this.symbol || \"circle\",\n u = c / 2,\n g = a.renderer,\n f = n.group,\n m = l - Math.round((t.fontMetrics?.b || c) * (o ? .4 : .3)),\n x = {},\n y,\n b = h.marker,\n v = 0;\n if (a.styledMode || (x[\"stroke-width\"] = Math.min(h.lineWidth || 0, 24), h.dashStyle ? x.dashstyle = h.dashStyle : \"square\" === h.linecap || (x[\"stroke-linecap\"] = \"round\")), n.line = g.path().addClass(\"highcharts-graph\").attr(x).add(f), o && (n.area = g.path().addClass(\"highcharts-area\").add(f)), x[\"stroke-linecap\"] && (v = Math.min(n.line.strokeWidth(), d) / 2), d) {\n let t = [[\"M\", v, m], [\"L\", d - v, m]];\n n.line.attr({\n d: t\n }), n.area?.attr({\n d: [...t, [\"L\", d - v, l], [\"L\", v, l]]\n });\n }\n if (b && !1 !== b.enabled && d) {\n let t = Math.min(r(b.radius, u), u);\n 0 === p.indexOf(\"url\") && (b = s(b, {\n width: c,\n height: c\n }), t = 0), n.symbol = y = g.symbol(p, d / 2 - t, m - t, 2 * t, 2 * t, i({\n context: \"legend\"\n }, b)).addClass(\"highcharts-point\").add(f), y.isMarker = !0;\n }\n }\n t.areaMarker = function (t, i) {\n e.call(this, t, i, !0);\n }, t.lineMarker = e, t.rectangle = function (t, e) {\n let i = e.legendItem || {},\n s = t.options,\n o = t.symbolHeight,\n n = s.squareSymbol,\n a = n ? o : t.symbolWidth;\n i.symbol = this.chart.renderer.rect(n ? (t.symbolWidth - o) / 2 : 0, t.baseline - o + 1, a, o, r(t.options.symbolRadius, o / 2)).addClass(\"highcharts-point\").attr({\n zIndex: 3\n }).add(i.group);\n };\n }(e || (e = {})), e;\n }), i(e, \"Core/Series/SeriesDefaults.js\", [], function () {\n return {\n lineWidth: 2,\n allowPointSelect: !1,\n crisp: !0,\n showCheckbox: !1,\n animation: {\n duration: 1e3\n },\n enableMouseTracking: !0,\n events: {},\n marker: {\n enabledThreshold: 2,\n lineColor: \"#ffffff\",\n lineWidth: 0,\n radius: 4,\n states: {\n normal: {\n animation: !0\n },\n hover: {\n animation: {\n duration: 150\n },\n enabled: !0,\n radiusPlus: 2,\n lineWidthPlus: 1\n },\n select: {\n fillColor: \"#cccccc\",\n lineColor: \"#000000\",\n lineWidth: 2\n }\n }\n },\n point: {\n events: {}\n },\n dataLabels: {\n animation: {},\n align: \"center\",\n borderWidth: 0,\n defer: !0,\n formatter: function () {\n let {\n numberFormatter: t\n } = this.series.chart;\n return \"number\" != typeof this.y ? \"\" : t(this.y, -1);\n },\n padding: 5,\n style: {\n fontSize: \"0.7em\",\n fontWeight: \"bold\",\n color: \"contrast\",\n textOutline: \"1px contrast\"\n },\n verticalAlign: \"bottom\",\n x: 0,\n y: 0\n },\n cropThreshold: 300,\n opacity: 1,\n pointRange: 0,\n softThreshold: !0,\n states: {\n normal: {\n animation: !0\n },\n hover: {\n animation: {\n duration: 150\n },\n lineWidthPlus: 1,\n marker: {},\n halo: {\n size: 10,\n opacity: .25\n }\n },\n select: {\n animation: {\n duration: 0\n }\n },\n inactive: {\n animation: {\n duration: 150\n },\n opacity: .2\n }\n },\n stickyTracking: !0,\n turboThreshold: 1e3,\n findNearestPointBy: \"x\"\n };\n }), i(e, \"Core/Series/SeriesRegistry.js\", [e[\"Core/Globals.js\"], e[\"Core/Defaults.js\"], e[\"Core/Series/Point.js\"], e[\"Core/Utilities.js\"]], function (t, e, i, s) {\n var r;\n let {\n defaultOptions: o\n } = e,\n {\n extend: n,\n extendClass: a,\n merge: h\n } = s;\n return function (e) {\n function s(t, s) {\n let r = o.plotOptions || {},\n n = s.defaultOptions,\n a = s.prototype;\n return a.type = t, a.pointClass || (a.pointClass = i), !e.seriesTypes[t] && (n && (r[t] = n), e.seriesTypes[t] = s, !0);\n }\n e.seriesTypes = t.seriesTypes, e.registerSeriesType = s, e.seriesType = function (t, r, l, d, c) {\n let p = o.plotOptions || {};\n if (r = r || \"\", p[t] = h(p[r], l), delete e.seriesTypes[t], s(t, a(e.seriesTypes[r] || function () {}, d)), e.seriesTypes[t].prototype.type = t, c) {\n class s extends i {}\n n(s.prototype, c), e.seriesTypes[t].prototype.pointClass = s;\n }\n return e.seriesTypes[t];\n };\n }(r || (r = {})), r;\n }), i(e, \"Core/Series/Series.js\", [e[\"Core/Animation/AnimationUtilities.js\"], e[\"Core/Defaults.js\"], e[\"Core/Foundation.js\"], e[\"Core/Globals.js\"], e[\"Core/Legend/LegendSymbol.js\"], e[\"Core/Series/Point.js\"], e[\"Core/Series/SeriesDefaults.js\"], e[\"Core/Series/SeriesRegistry.js\"], e[\"Core/Renderer/SVG/SVGElement.js\"], e[\"Core/Utilities.js\"]], function (t, e, i, s, r, o, n, a, h, l) {\n let {\n animObject: d,\n setAnimation: c\n } = t,\n {\n defaultOptions: p\n } = e,\n {\n registerEventOptions: u\n } = i,\n {\n svg: g,\n win: f\n } = s,\n {\n seriesTypes: m\n } = a,\n {\n arrayMax: x,\n arrayMin: y,\n clamp: b,\n correctFloat: v,\n crisp: S,\n defined: C,\n destroyObjectProperties: k,\n diffObjects: M,\n erase: w,\n error: T,\n extend: A,\n find: P,\n fireEvent: L,\n getClosestDistance: O,\n getNestedProperty: D,\n insertItem: E,\n isArray: I,\n isNumber: j,\n isString: B,\n merge: R,\n objectEach: z,\n pick: N,\n removeEvent: W,\n splat: G,\n syncTimeout: H\n } = l;\n class X {\n constructor() {\n this.zoneAxis = \"y\";\n }\n init(t, e) {\n let i;\n L(this, \"init\", {\n options: e\n });\n let s = this,\n r = t.series;\n this.eventsToUnbind = [], s.chart = t, s.options = s.setOptions(e);\n let o = s.options,\n n = !1 !== o.visible;\n s.linkedSeries = [], s.bindAxes(), A(s, {\n name: o.name,\n state: \"\",\n visible: n,\n selected: !0 === o.selected\n }), u(this, o);\n let a = o.events;\n (a && a.click || o.point && o.point.events && o.point.events.click || o.allowPointSelect) && (t.runTrackerClick = !0), s.getColor(), s.getSymbol(), s.parallelArrays.forEach(function (t) {\n s[t + \"Data\"] || (s[t + \"Data\"] = []);\n }), s.isCartesian && (t.hasCartesianSeries = !0), r.length && (i = r[r.length - 1]), s._i = N(i && i._i, -1) + 1, s.opacity = s.options.opacity, t.orderItems(\"series\", E(this, r)), o.dataSorting && o.dataSorting.enabled ? s.setDataSortingOptions() : s.points || s.data || s.setData(o.data, !1), L(this, \"afterInit\");\n }\n is(t) {\n return m[t] && this instanceof m[t];\n }\n bindAxes() {\n let t;\n let e = this,\n i = e.options,\n s = e.chart;\n L(this, \"bindAxes\", null, function () {\n (e.axisTypes || []).forEach(function (r) {\n (s[r] || []).forEach(function (s) {\n t = s.options, (N(i[r], 0) === s.index || void 0 !== i[r] && i[r] === t.id) && (E(e, s.series), e[r] = s, s.isDirty = !0);\n }), e[r] || e.optionalAxis === r || T(18, !0, s);\n });\n }), L(this, \"afterBindAxes\");\n }\n updateParallelArrays(t, e, i) {\n let s = t.series,\n r = j(e) ? function (i) {\n let r = \"y\" === i && s.toYData ? s.toYData(t) : t[i];\n s[i + \"Data\"][e] = r;\n } : function (t) {\n Array.prototype[e].apply(s[t + \"Data\"], i);\n };\n s.parallelArrays.forEach(r);\n }\n hasData() {\n return this.visible && void 0 !== this.dataMax && void 0 !== this.dataMin || this.visible && this.yData && this.yData.length > 0;\n }\n hasMarkerChanged(t, e) {\n let i = t.marker,\n s = e.marker || {};\n return i && (s.enabled && !i.enabled || s.symbol !== i.symbol || s.height !== i.height || s.width !== i.width);\n }\n autoIncrement(t) {\n let e = this.options,\n i = e.pointIntervalUnit,\n s = e.relativeXValue,\n r = this.chart.time,\n o = this.xIncrement,\n n,\n a;\n return (o = N(o, e.pointStart, 0), this.pointInterval = a = N(this.pointInterval, e.pointInterval, 1), s && j(t) && (a *= t), i && (n = new r.Date(o), \"day\" === i ? r.set(\"Date\", n, r.get(\"Date\", n) + a) : \"month\" === i ? r.set(\"Month\", n, r.get(\"Month\", n) + a) : \"year\" === i && r.set(\"FullYear\", n, r.get(\"FullYear\", n) + a), a = n.getTime() - o), s && j(t)) ? o + a : (this.xIncrement = o + a, o);\n }\n setDataSortingOptions() {\n let t = this.options;\n A(this, {\n requireSorting: !1,\n sorted: !1,\n enabledDataSorting: !0,\n allowDG: !1\n }), C(t.pointRange) || (t.pointRange = 1);\n }\n setOptions(t) {\n let e;\n let i = this.chart,\n s = i.options.plotOptions,\n r = i.userOptions || {},\n o = R(t),\n n = i.styledMode,\n a = {\n plotOptions: s,\n userOptions: o\n };\n L(this, \"setOptions\", a);\n let h = a.plotOptions[this.type],\n l = r.plotOptions || {},\n d = l.series || {},\n c = p.plotOptions[this.type] || {},\n u = l[this.type] || {};\n this.userOptions = a.userOptions;\n let g = R(h, s.series, u, o);\n this.tooltipOptions = R(p.tooltip, p.plotOptions.series?.tooltip, c?.tooltip, i.userOptions.tooltip, l.series?.tooltip, u.tooltip, o.tooltip), this.stickyTracking = N(o.stickyTracking, u.stickyTracking, d.stickyTracking, !!this.tooltipOptions.shared && !this.noSharedTooltip || g.stickyTracking), null === h.marker && delete g.marker, this.zoneAxis = g.zoneAxis || \"y\";\n let f = this.zones = (g.zones || []).map(t => ({\n ...t\n }));\n return (g.negativeColor || g.negativeFillColor) && !g.zones && (e = {\n value: g[this.zoneAxis + \"Threshold\"] || g.threshold || 0,\n className: \"highcharts-negative\"\n }, n || (e.color = g.negativeColor, e.fillColor = g.negativeFillColor), f.push(e)), f.length && C(f[f.length - 1].value) && f.push(n ? {} : {\n color: this.color,\n fillColor: this.fillColor\n }), L(this, \"afterSetOptions\", {\n options: g\n }), g;\n }\n getName() {\n return N(this.options.name, \"Series \" + (this.index + 1));\n }\n getCyclic(t, e, i) {\n let s, r;\n let o = this.chart,\n n = `${t}Index`,\n a = `${t}Counter`,\n h = i?.length || o.options.chart.colorCount;\n !e && (C(r = N(\"color\" === t ? this.options.colorIndex : void 0, this[n])) ? s = r : (o.series.length || (o[a] = 0), s = o[a] % h, o[a] += 1), i && (e = i[s])), void 0 !== s && (this[n] = s), this[t] = e;\n }\n getColor() {\n this.chart.styledMode ? this.getCyclic(\"color\") : this.options.colorByPoint ? this.color = \"#cccccc\" : this.getCyclic(\"color\", this.options.color || p.plotOptions[this.type].color, this.chart.options.colors);\n }\n getPointsCollection() {\n return (this.hasGroupedData ? this.points : this.data) || [];\n }\n getSymbol() {\n let t = this.options.marker;\n this.getCyclic(\"symbol\", t.symbol, this.chart.options.symbols);\n }\n findPointIndex(t, e) {\n let i, s, r;\n let n = t.id,\n a = t.x,\n h = this.points,\n l = this.options.dataSorting;\n if (n) {\n let t = this.chart.get(n);\n t instanceof o && (i = t);\n } else if (this.linkedParent || this.enabledDataSorting || this.options.relativeXValue) {\n let e = e => !e.touched && e.index === t.index;\n if (l && l.matchByName ? e = e => !e.touched && e.name === t.name : this.options.relativeXValue && (e = e => !e.touched && e.options.x === t.x), !(i = P(h, e))) return;\n }\n return i && void 0 !== (r = i && i.index) && (s = !0), void 0 === r && j(a) && (r = this.xData.indexOf(a, e)), -1 !== r && void 0 !== r && this.cropped && (r = r >= this.cropStart ? r - this.cropStart : r), !s && j(r) && h[r] && h[r].touched && (r = void 0), r;\n }\n updateData(t, e) {\n let i = this.options,\n s = i.dataSorting,\n r = this.points,\n o = [],\n n = this.requireSorting,\n a = t.length === r.length,\n h,\n l,\n d,\n c,\n p = !0;\n if (this.xIncrement = null, t.forEach(function (t, e) {\n let l;\n let d = C(t) && this.pointClass.prototype.optionsToObject.call({\n series: this\n }, t) || {},\n p = d.x;\n d.id || j(p) ? (-1 === (l = this.findPointIndex(d, c)) || void 0 === l ? o.push(t) : r[l] && t !== i.data[l] ? (r[l].update(t, !1, null, !1), r[l].touched = !0, n && (c = l + 1)) : r[l] && (r[l].touched = !0), (!a || e !== l || s && s.enabled || this.hasDerivedData) && (h = !0)) : o.push(t);\n }, this), h) for (l = r.length; l--;) (d = r[l]) && !d.touched && d.remove && d.remove(!1, e);else !a || s && s.enabled ? p = !1 : (t.forEach(function (t, e) {\n t === r[e].y || r[e].destroyed || r[e].update(t, !1, null, !1);\n }), o.length = 0);\n return r.forEach(function (t) {\n t && (t.touched = !1);\n }), !!p && (o.forEach(function (t) {\n this.addPoint(t, !1, null, null, !1);\n }, this), null === this.xIncrement && this.xData && this.xData.length && (this.xIncrement = x(this.xData), this.autoIncrement()), !0);\n }\n setData(t, e = !0, i, s) {\n let r = this,\n o = r.points,\n n = o && o.length || 0,\n a = r.options,\n h = r.chart,\n l = a.dataSorting,\n d = r.xAxis,\n c = a.turboThreshold,\n p = this.xData,\n u = this.yData,\n g = r.pointArrayMap,\n f = g && g.length,\n m = a.keys,\n x,\n y,\n b,\n v = 0,\n S = 1,\n C;\n h.options.chart.allowMutatingData || (a.data && delete r.options.data, r.userOptions.data && delete r.userOptions.data, C = R(!0, t));\n let k = (t = C || t || []).length;\n if (l && l.enabled && (t = this.sortData(t)), h.options.chart.allowMutatingData && !1 !== s && k && n && !r.cropped && !r.hasGroupedData && r.visible && !r.boosted && (b = this.updateData(t, i)), !b) {\n r.xIncrement = null, r.colorCounter = 0, this.parallelArrays.forEach(function (t) {\n r[t + \"Data\"].length = 0;\n });\n let e = c && k > c;\n if (e) {\n let i = r.getFirstValidPoint(t),\n s = r.getFirstValidPoint(t, k - 1, -1),\n o = t => !!(I(t) && (m || j(t[0])));\n if (j(i) && j(s)) for (x = 0; x < k; x++) p[x] = this.autoIncrement(), u[x] = t[x];else if (o(i) && o(s)) {\n if (f) {\n if (i.length === f) for (x = 0; x < k; x++) p[x] = this.autoIncrement(), u[x] = t[x];else for (x = 0; x < k; x++) y = t[x], p[x] = y[0], u[x] = y.slice(1, f + 1);\n } else if (m && (v = m.indexOf(\"x\"), S = m.indexOf(\"y\"), v = v >= 0 ? v : 0, S = S >= 0 ? S : 1), 1 === i.length && (S = 0), v === S) for (x = 0; x < k; x++) p[x] = this.autoIncrement(), u[x] = t[x][S];else for (x = 0; x < k; x++) y = t[x], p[x] = y[v], u[x] = y[S];\n } else e = !1;\n }\n if (!e) for (x = 0; x < k; x++) y = {\n series: r\n }, r.pointClass.prototype.applyOptions.apply(y, [t[x]]), r.updateParallelArrays(y, x);\n for (u && B(u[0]) && T(14, !0, h), r.data = [], r.options.data = r.userOptions.data = t, x = n; x--;) o[x]?.destroy();\n d && (d.minRange = d.userMinRange), r.isDirty = h.isDirtyBox = !0, r.isDirtyData = !!o, i = !1;\n }\n \"point\" === a.legendType && (this.processData(), this.generatePoints()), e && h.redraw(i);\n }\n sortData(t) {\n let e = this,\n i = e.options.dataSorting.sortKey || \"y\",\n s = function (t, e) {\n return C(e) && t.pointClass.prototype.optionsToObject.call({\n series: t\n }, e) || {};\n };\n return t.forEach(function (i, r) {\n t[r] = s(e, i), t[r].index = r;\n }, this), t.concat().sort((t, e) => {\n let s = D(i, t),\n r = D(i, e);\n return r < s ? -1 : r > s ? 1 : 0;\n }).forEach(function (t, e) {\n t.x = e;\n }, this), e.linkedSeries && e.linkedSeries.forEach(function (e) {\n let i = e.options,\n r = i.data;\n i.dataSorting && i.dataSorting.enabled || !r || (r.forEach(function (i, o) {\n r[o] = s(e, i), t[o] && (r[o].x = t[o].x, r[o].index = o);\n }), e.setData(r, !1));\n }), t;\n }\n getProcessedData(t) {\n let e = this,\n i = e.xAxis,\n s = e.options.cropThreshold,\n r = i?.logarithmic,\n o = e.isCartesian,\n n,\n a,\n h = 0,\n l,\n d,\n c,\n p = e.xData,\n u = e.yData,\n g = !1,\n f = p.length;\n i && (d = (l = i.getExtremes()).min, c = l.max, g = !!(i.categories && !i.names.length)), o && e.sorted && !t && (!s || f > s || e.forceCrop) && (p[f - 1] < d || p[0] > c ? (p = [], u = []) : e.yData && (p[0] < d || p[f - 1] > c) && (p = (n = this.cropData(e.xData, e.yData, d, c)).xData, u = n.yData, h = n.start, a = !0));\n let m = O([r ? p.map(r.log2lin) : p], () => e.requireSorting && !g && T(15, !1, e.chart));\n return {\n xData: p,\n yData: u,\n cropped: a,\n cropStart: h,\n closestPointRange: m\n };\n }\n processData(t) {\n let e = this.xAxis;\n if (this.isCartesian && !this.isDirty && !e.isDirty && !this.yAxis.isDirty && !t) return !1;\n let i = this.getProcessedData();\n this.cropped = i.cropped, this.cropStart = i.cropStart, this.processedXData = i.xData, this.processedYData = i.yData, this.closestPointRange = this.basePointRange = i.closestPointRange, L(this, \"afterProcessData\");\n }\n cropData(t, e, i, s) {\n let r = t.length,\n o,\n n,\n a = 0,\n h = r;\n for (o = 0; o < r; o++) if (t[o] >= i) {\n a = Math.max(0, o - 1);\n break;\n }\n for (n = o; n < r; n++) if (t[n] > s) {\n h = n + 1;\n break;\n }\n return {\n xData: t.slice(a, h),\n yData: e.slice(a, h),\n start: a,\n end: h\n };\n }\n generatePoints() {\n let t = this.options,\n e = this.processedData || t.data,\n i = this.processedXData,\n s = this.processedYData,\n r = this.pointClass,\n o = i.length,\n n = this.cropStart || 0,\n a = this.hasGroupedData,\n h = t.keys,\n l = [],\n d = t.dataGrouping && t.dataGrouping.groupAll ? n : 0,\n c,\n p,\n u,\n g,\n f = this.data;\n if (!f && !a) {\n let t = [];\n t.length = e.length, f = this.data = t;\n }\n for (h && a && (this.options.keys = !1), g = 0; g < o; g++) p = n + g, a ? ((u = new r(this, [i[g]].concat(G(s[g])))).dataGroup = this.groupMap[d + g], u.dataGroup.options && (u.options = u.dataGroup.options, A(u, u.dataGroup.options), delete u.dataLabels)) : (u = f[p]) || void 0 === e[p] || (f[p] = u = new r(this, e[p], i[g])), u && (u.index = a ? d + g : p, l[g] = u);\n if (this.options.keys = h, f && (o !== (c = f.length) || a)) for (g = 0; g < c; g++) g !== n || a || (g += o), f[g] && (f[g].destroyElements(), f[g].plotX = void 0);\n this.data = f, this.points = l, L(this, \"afterGeneratePoints\");\n }\n getXExtremes(t) {\n return {\n min: y(t),\n max: x(t)\n };\n }\n getExtremes(t, e) {\n let i = this.xAxis,\n s = this.yAxis,\n r = [],\n o = this.requireSorting && !this.is(\"column\") ? 1 : 0,\n n = !!s && s.positiveValuesOnly,\n a = e || this.getExtremesFromAll || this.options.getExtremesFromAll,\n {\n processedXData: h,\n processedYData: l\n } = this,\n d,\n c,\n p,\n u,\n g,\n f,\n m,\n b = 0,\n v = 0,\n S = 0;\n if (this.cropped && a) {\n let t = this.getProcessedData(!0);\n h = t.xData, l = t.yData;\n }\n let C = (t = t || this.stackedYData || l || []).length,\n k = h || this.xData;\n for (i && (b = (d = i.getExtremes()).min, v = d.max), f = 0; f < C; f++) if (u = k[f], c = (j(g = t[f]) || I(g)) && ((j(g) ? g > 0 : g.length) || !n), p = e || this.getExtremesFromAll || this.options.getExtremesFromAll || this.cropped || !i || (k[f + o] || u) >= b && (k[f - o] || u) <= v, c && p) {\n if (m = g.length) for (; m--;) j(g[m]) && (r[S++] = g[m]);else r[S++] = g;\n }\n let M = {\n activeYData: r,\n dataMin: y(r),\n dataMax: x(r)\n };\n return L(this, \"afterGetExtremes\", {\n dataExtremes: M\n }), M;\n }\n applyExtremes() {\n let t = this.getExtremes();\n return this.dataMin = t.dataMin, this.dataMax = t.dataMax, t;\n }\n getFirstValidPoint(t, e = 0, i = 1) {\n let s = t.length,\n r = e;\n for (; r >= 0 && r < s;) {\n if (C(t[r])) return t[r];\n r += i;\n }\n }\n translate() {\n this.processedXData || this.processData(), this.generatePoints();\n let t = this.options,\n e = t.stacking,\n i = this.xAxis,\n s = i.categories,\n r = this.enabledDataSorting,\n o = this.yAxis,\n n = this.points,\n a = n.length,\n h = this.pointPlacementToXValue(),\n l = !!h,\n d = t.threshold,\n c = t.startFromThreshold ? d : 0,\n p,\n u,\n g,\n f,\n m = Number.MAX_VALUE;\n function x(t) {\n return b(t, -1e9, 1e9);\n }\n for (p = 0; p < a; p++) {\n let t;\n let a = n[p],\n y = a.x,\n b,\n S,\n k = a.y,\n M = a.low,\n w = e && o.stacking?.stacks[(this.negStacks && k < (c ? 0 : d) ? \"-\" : \"\") + this.stackKey];\n u = i.translate(y, !1, !1, !1, !0, h), a.plotX = j(u) ? v(x(u)) : void 0, e && this.visible && w && w[y] && (f = this.getStackIndicator(f, y, this.index), !a.isNull && f.key && (S = (b = w[y]).points[f.key]), b && I(S) && (M = S[0], k = S[1], M === c && f.key === w[y].base && (M = N(j(d) ? d : o.min)), o.positiveValuesOnly && C(M) && M <= 0 && (M = void 0), a.total = a.stackTotal = N(b.total), a.percentage = C(a.y) && b.total ? a.y / b.total * 100 : void 0, a.stackY = k, this.irregularWidths || b.setOffset(this.pointXOffset || 0, this.barW || 0, void 0, void 0, void 0, this.xAxis))), a.yBottom = C(M) ? x(o.translate(M, !1, !0, !1, !0)) : void 0, this.dataModify && (k = this.dataModify.modifyValue(k, p)), j(k) && void 0 !== a.plotX && (t = j(t = o.translate(k, !1, !0, !1, !0)) ? x(t) : void 0), a.plotY = t, a.isInside = this.isPointInside(a), a.clientX = l ? v(i.translate(y, !1, !1, !1, !0, h)) : u, a.negative = (a.y || 0) < (d || 0), a.category = N(s && s[a.x], a.x), a.isNull || !1 === a.visible || (void 0 !== g && (m = Math.min(m, Math.abs(u - g))), g = u), a.zone = this.zones.length ? a.getZone() : void 0, !a.graphic && this.group && r && (a.isNew = !0);\n }\n this.closestPointRangePx = m, L(this, \"afterTranslate\");\n }\n getValidPoints(t, e, i) {\n let s = this.chart;\n return (t || this.points || []).filter(function (t) {\n let {\n plotX: r,\n plotY: o\n } = t;\n return !!((i || !t.isNull && j(o)) && (!e || s.isInsidePlot(r, o, {\n inverted: s.inverted\n }))) && !1 !== t.visible;\n });\n }\n getClipBox() {\n let {\n chart: t,\n xAxis: e,\n yAxis: i\n } = this,\n {\n x: s,\n y: r,\n width: o,\n height: n\n } = R(t.clipBox);\n return e && e.len !== t.plotSizeX && (o = e.len), i && i.len !== t.plotSizeY && (n = i.len), t.inverted && !this.invertible && ([o, n] = [n, o]), {\n x: s,\n y: r,\n width: o,\n height: n\n };\n }\n getSharedClipKey() {\n return this.sharedClipKey = (this.options.xAxis || 0) + \",\" + (this.options.yAxis || 0), this.sharedClipKey;\n }\n setClip() {\n let {\n chart: t,\n group: e,\n markerGroup: i\n } = this,\n s = t.sharedClips,\n r = t.renderer,\n o = this.getClipBox(),\n n = this.getSharedClipKey(),\n a = s[n];\n a ? a.animate(o) : s[n] = a = r.clipRect(o), e && e.clip(!1 === this.options.clip ? void 0 : a), i && i.clip();\n }\n animate(t) {\n let {\n chart: e,\n group: i,\n markerGroup: s\n } = this,\n r = e.inverted,\n o = d(this.options.animation),\n n = [this.getSharedClipKey(), o.duration, o.easing, o.defer].join(\",\"),\n a = e.sharedClips[n],\n h = e.sharedClips[n + \"m\"];\n if (t && i) {\n let t = this.getClipBox();\n if (a) a.attr(\"height\", t.height);else {\n t.width = 0, r && (t.x = e.plotHeight), a = e.renderer.clipRect(t), e.sharedClips[n] = a;\n let i = {\n x: -99,\n y: -99,\n width: r ? e.plotWidth + 199 : 99,\n height: r ? 99 : e.plotHeight + 199\n };\n h = e.renderer.clipRect(i), e.sharedClips[n + \"m\"] = h;\n }\n i.clip(a), s?.clip(h);\n } else if (a && !a.hasClass(\"highcharts-animating\")) {\n let t = this.getClipBox(),\n i = o.step;\n (s?.element.childNodes.length || e.series.length > 1) && (o.step = function (t, e) {\n i && i.apply(e, arguments), \"width\" === e.prop && h?.element && h.attr(r ? \"height\" : \"width\", t + 99);\n }), a.addClass(\"highcharts-animating\").animate(t, o);\n }\n }\n afterAnimate() {\n this.setClip(), z(this.chart.sharedClips, (t, e, i) => {\n t && !this.chart.container.querySelector(`[clip-path=\"url(#${t.id})\"]`) && (t.destroy(), delete i[e]);\n }), this.finishedAnimating = !0, L(this, \"afterAnimate\");\n }\n drawPoints(t = this.points) {\n let e, i, s, r, o, n, a;\n let h = this.chart,\n l = h.styledMode,\n {\n colorAxis: d,\n options: c\n } = this,\n p = c.marker,\n u = this[this.specialGroup || \"markerGroup\"],\n g = this.xAxis,\n f = N(p.enabled, !g || !!g.isRadial || null, this.closestPointRangePx >= p.enabledThreshold * p.radius);\n if (!1 !== p.enabled || this._hasPointMarkers) for (e = 0; e < t.length; e++) if (r = (s = (i = t[e]).graphic) ? \"animate\" : \"attr\", o = i.marker || {}, n = !!i.marker, (f && void 0 === o.enabled || o.enabled) && !i.isNull && !1 !== i.visible) {\n let t = N(o.symbol, this.symbol, \"rect\");\n a = this.markerAttribs(i, i.selected && \"select\"), this.enabledDataSorting && (i.startXPos = g.reversed ? -(a.width || 0) : g.width);\n let e = !1 !== i.isInside;\n if (!s && e && ((a.width || 0) > 0 || i.hasImage) && (i.graphic = s = h.renderer.symbol(t, a.x, a.y, a.width, a.height, n ? o : p).add(u), this.enabledDataSorting && h.hasRendered && (s.attr({\n x: i.startXPos\n }), r = \"animate\")), s && \"animate\" === r && s[e ? \"show\" : \"hide\"](e).animate(a), s) {\n let t = this.pointAttribs(i, l || !i.selected ? void 0 : \"select\");\n l ? d && s.css({\n fill: t.fill\n }) : s[r](t);\n }\n s && s.addClass(i.getClassName(), !0);\n } else s && (i.graphic = s.destroy());\n }\n markerAttribs(t, e) {\n let i = this.options,\n s = i.marker,\n r = t.marker || {},\n o = r.symbol || s.symbol,\n n = {},\n a,\n h,\n l = N(r.radius, s && s.radius);\n e && (a = s.states[e], l = N((h = r.states && r.states[e]) && h.radius, a && a.radius, l && l + (a && a.radiusPlus || 0))), t.hasImage = o && 0 === o.indexOf(\"url\"), t.hasImage && (l = 0);\n let d = t.pos();\n return j(l) && d && (i.crisp && (d[0] = S(d[0], t.hasImage ? 0 : \"rect\" === o ? s?.lineWidth || 0 : 1)), n.x = d[0] - l, n.y = d[1] - l), l && (n.width = n.height = 2 * l), n;\n }\n pointAttribs(t, e) {\n let i = this.options.marker,\n s = t && t.options,\n r = s && s.marker || {},\n o = s && s.color,\n n = t && t.color,\n a = t && t.zone && t.zone.color,\n h,\n l,\n d = this.color,\n c,\n p,\n u = N(r.lineWidth, i.lineWidth),\n g = 1;\n return d = o || a || n || d, c = r.fillColor || i.fillColor || d, p = r.lineColor || i.lineColor || d, e = e || \"normal\", h = i.states[e] || {}, u = N((l = r.states && r.states[e] || {}).lineWidth, h.lineWidth, u + N(l.lineWidthPlus, h.lineWidthPlus, 0)), c = l.fillColor || h.fillColor || c, {\n stroke: p = l.lineColor || h.lineColor || p,\n \"stroke-width\": u,\n fill: c,\n opacity: g = N(l.opacity, h.opacity, g)\n };\n }\n destroy(t) {\n let e, i, s;\n let r = this,\n o = r.chart,\n n = /AppleWebKit\\/533/.test(f.navigator.userAgent),\n a = r.data || [];\n for (L(r, \"destroy\", {\n keepEventsForUpdate: t\n }), this.removeEvents(t), (r.axisTypes || []).forEach(function (t) {\n (s = r[t]) && s.series && (w(s.series, r), s.isDirty = s.forceRedraw = !0);\n }), r.legendItem && r.chart.legend.destroyItem(r), e = a.length; e--;) (i = a[e]) && i.destroy && i.destroy();\n for (let t of r.zones) k(t, void 0, !0);\n l.clearTimeout(r.animationTimeout), z(r, function (t, e) {\n t instanceof h && !t.survive && t[n && \"group\" === e ? \"hide\" : \"destroy\"]();\n }), o.hoverSeries === r && (o.hoverSeries = void 0), w(o.series, r), o.orderItems(\"series\"), z(r, function (e, i) {\n t && \"hcEvents\" === i || delete r[i];\n });\n }\n applyZones() {\n let {\n area: t,\n chart: e,\n graph: i,\n zones: s,\n points: r,\n xAxis: o,\n yAxis: n,\n zoneAxis: a\n } = this,\n {\n inverted: h,\n renderer: l\n } = e,\n d = this[`${a}Axis`],\n {\n isXAxis: c,\n len: p = 0\n } = d || {},\n u = (i?.strokeWidth() || 0) / 2 + 1,\n g = (t, e = 0, i = 0) => {\n h && (i = p - i);\n let {\n translated: s = 0,\n lineClip: r\n } = t,\n o = i - s;\n r?.push([\"L\", e, Math.abs(o) < u ? i - u * (o <= 0 ? -1 : 1) : s]);\n };\n if (s.length && (i || t) && d && j(d.min)) {\n let e = d.getExtremes().max,\n u = t => {\n t.forEach((e, i) => {\n (\"M\" === e[0] || \"L\" === e[0]) && (t[i] = [e[0], c ? p - e[1] : e[1], c ? e[2] : p - e[2]]);\n });\n };\n if (s.forEach(t => {\n t.lineClip = [], t.translated = b(d.toPixels(N(t.value, e), !0) || 0, 0, p);\n }), i && !this.showLine && i.hide(), t && t.hide(), \"y\" === a && r.length < o.len) for (let t of r) {\n let {\n plotX: e,\n plotY: i,\n zone: r\n } = t,\n o = r && s[s.indexOf(r) - 1];\n r && g(r, e, i), o && g(o, e, i);\n }\n let f = [],\n m = d.toPixels(d.getExtremes().min, !0);\n s.forEach(e => {\n let s = e.lineClip || [],\n r = Math.round(e.translated || 0);\n o.reversed && s.reverse();\n let {\n clip: a,\n simpleClip: d\n } = e,\n p = 0,\n g = 0,\n x = o.len,\n y = n.len;\n c ? (p = r, x = m) : (g = r, y = m);\n let b = [[\"M\", p, g], [\"L\", x, g], [\"L\", x, y], [\"L\", p, y], [\"Z\"]],\n v = [b[0], ...s, b[1], b[2], ...f, b[3], b[4]];\n f = s.reverse(), m = r, h && (u(v), t && u(b)), a ? (a.animate({\n d: v\n }), d?.animate({\n d: b\n })) : (a = e.clip = l.path(v), t && (d = e.simpleClip = l.path(b))), i && e.graph?.clip(a), t && e.area?.clip(d);\n });\n } else this.visible && (i && i.show(), t && t.show());\n }\n plotGroup(t, e, i, s, r) {\n let o = this[t],\n n = !o,\n a = {\n visibility: i,\n zIndex: s || .1\n };\n return C(this.opacity) && !this.chart.styledMode && \"inactive\" !== this.state && (a.opacity = this.opacity), o || (this[t] = o = this.chart.renderer.g().add(r)), o.addClass(\"highcharts-\" + e + \" highcharts-series-\" + this.index + \" highcharts-\" + this.type + \"-series \" + (C(this.colorIndex) ? \"highcharts-color-\" + this.colorIndex + \" \" : \"\") + (this.options.className || \"\") + (o.hasClass(\"highcharts-tracker\") ? \" highcharts-tracker\" : \"\"), !0), o.attr(a)[n ? \"attr\" : \"animate\"](this.getPlotBox(e)), o;\n }\n getPlotBox(t) {\n let e = this.xAxis,\n i = this.yAxis,\n s = this.chart,\n r = s.inverted && !s.polar && e && this.invertible && \"series\" === t;\n return s.inverted && (e = i, i = this.xAxis), {\n translateX: e ? e.left : s.plotLeft,\n translateY: i ? i.top : s.plotTop,\n rotation: r ? 90 : 0,\n rotationOriginX: r ? (e.len - i.len) / 2 : 0,\n rotationOriginY: r ? (e.len + i.len) / 2 : 0,\n scaleX: r ? -1 : 1,\n scaleY: 1\n };\n }\n removeEvents(t) {\n let {\n eventsToUnbind: e\n } = this;\n t || W(this), e.length && (e.forEach(t => {\n t();\n }), e.length = 0);\n }\n render() {\n let t = this,\n {\n chart: e,\n options: i,\n hasRendered: s\n } = t,\n r = d(i.animation),\n o = t.visible ? \"inherit\" : \"hidden\",\n n = i.zIndex,\n a = e.seriesGroup,\n h = t.finishedAnimating ? 0 : r.duration;\n L(this, \"render\"), t.plotGroup(\"group\", \"series\", o, n, a), t.markerGroup = t.plotGroup(\"markerGroup\", \"markers\", o, n, a), !1 !== i.clip && t.setClip(), h && t.animate?.(!0), t.drawGraph && (t.drawGraph(), t.applyZones()), t.visible && t.drawPoints(), t.drawDataLabels?.(), t.redrawPoints?.(), i.enableMouseTracking && t.drawTracker?.(), h && t.animate?.(), s || (h && r.defer && (h += r.defer), t.animationTimeout = H(() => {\n t.afterAnimate();\n }, h || 0)), t.isDirty = !1, t.hasRendered = !0, L(t, \"afterRender\");\n }\n redraw() {\n let t = this.isDirty || this.isDirtyData;\n this.translate(), this.render(), t && delete this.kdTree;\n }\n reserveSpace() {\n return this.visible || !this.chart.options.chart.ignoreHiddenSeries;\n }\n searchPoint(t, e) {\n let {\n xAxis: i,\n yAxis: s\n } = this,\n r = this.chart.inverted;\n return this.searchKDTree({\n clientX: r ? i.len - t.chartY + i.pos : t.chartX - i.pos,\n plotY: r ? s.len - t.chartX + s.pos : t.chartY - s.pos\n }, e, t);\n }\n buildKDTree(t) {\n this.buildingKdTree = !0;\n let e = this,\n i = e.options.findNearestPointBy.indexOf(\"y\") > -1 ? 2 : 1;\n delete e.kdTree, H(function () {\n e.kdTree = function t(i, s, r) {\n let o, n;\n let a = i?.length;\n if (a) return o = e.kdAxisArray[s % r], i.sort((t, e) => (t[o] || 0) - (e[o] || 0)), {\n point: i[n = Math.floor(a / 2)],\n left: t(i.slice(0, n), s + 1, r),\n right: t(i.slice(n + 1), s + 1, r)\n };\n }(e.getValidPoints(void 0, !e.directTouch), i, i), e.buildingKdTree = !1;\n }, e.options.kdNow || t?.type === \"touchstart\" ? 0 : 1);\n }\n searchKDTree(t, e, i) {\n let s = this,\n [r, o] = this.kdAxisArray,\n n = e ? \"distX\" : \"dist\",\n a = (s.options.findNearestPointBy || \"\").indexOf(\"y\") > -1 ? 2 : 1,\n h = !!s.isBubble;\n if (this.kdTree || this.buildingKdTree || this.buildKDTree(i), this.kdTree) return function t(e, i, a, l) {\n let d = i.point,\n c = s.kdAxisArray[a % l],\n p,\n u,\n g = d;\n !function (t, e) {\n let i = t[r],\n s = e[r],\n n = C(i) && C(s) ? i - s : null,\n a = t[o],\n l = e[o],\n d = C(a) && C(l) ? a - l : 0,\n c = h && e.marker?.radius || 0;\n e.dist = Math.sqrt((n && n * n || 0) + d * d) - c, e.distX = C(n) ? Math.abs(n) - c : Number.MAX_VALUE;\n }(e, d);\n let f = (e[c] || 0) - (d[c] || 0) + (h && d.marker?.radius || 0),\n m = f < 0 ? \"left\" : \"right\",\n x = f < 0 ? \"right\" : \"left\";\n return i[m] && (g = (p = t(e, i[m], a + 1, l))[n] < g[n] ? p : d), i[x] && Math.sqrt(f * f) < g[n] && (g = (u = t(e, i[x], a + 1, l))[n] < g[n] ? u : g), g;\n }(t, this.kdTree, a, a);\n }\n pointPlacementToXValue() {\n let {\n options: t,\n xAxis: e\n } = this,\n i = t.pointPlacement;\n return \"between\" === i && (i = e.reversed ? -.5 : .5), j(i) ? i * (t.pointRange || e.pointRange) : 0;\n }\n isPointInside(t) {\n let {\n chart: e,\n xAxis: i,\n yAxis: s\n } = this,\n {\n plotX: r = -1,\n plotY: o = -1\n } = t;\n return o >= 0 && o <= (s ? s.len : e.plotHeight) && r >= 0 && r <= (i ? i.len : e.plotWidth);\n }\n drawTracker() {\n let t = this,\n e = t.options,\n i = e.trackByArea,\n s = [].concat((i ? t.areaPath : t.graphPath) || []),\n r = t.chart,\n o = r.pointer,\n n = r.renderer,\n a = r.options.tooltip?.snap || 0,\n h = () => {\n e.enableMouseTracking && r.hoverSeries !== t && t.onMouseOver();\n },\n l = \"rgba(192,192,192,\" + (g ? 1e-4 : .002) + \")\",\n d = t.tracker;\n d ? d.attr({\n d: s\n }) : t.graph && (t.tracker = d = n.path(s).attr({\n visibility: t.visible ? \"inherit\" : \"hidden\",\n zIndex: 2\n }).addClass(i ? \"highcharts-tracker-area\" : \"highcharts-tracker-line\").add(t.group), r.styledMode || d.attr({\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n stroke: l,\n fill: i ? l : \"none\",\n \"stroke-width\": t.graph.strokeWidth() + (i ? 0 : 2 * a)\n }), [t.tracker, t.markerGroup, t.dataLabelsGroup].forEach(t => {\n t && (t.addClass(\"highcharts-tracker\").on(\"mouseover\", h).on(\"mouseout\", t => {\n o?.onTrackerMouseOut(t);\n }), e.cursor && !r.styledMode && t.css({\n cursor: e.cursor\n }), t.on(\"touchstart\", h));\n })), L(this, \"afterDrawTracker\");\n }\n addPoint(t, e, i, s, r) {\n let o, n;\n let a = this.options,\n h = this.data,\n l = this.chart,\n d = this.xAxis,\n c = d && d.hasNames && d.names,\n p = a.data,\n u = this.xData;\n e = N(e, !0);\n let g = {\n series: this\n };\n this.pointClass.prototype.applyOptions.apply(g, [t]);\n let f = g.x;\n if (n = u.length, this.requireSorting && f < u[n - 1]) for (o = !0; n && u[n - 1] > f;) n--;\n this.updateParallelArrays(g, \"splice\", [n, 0, 0]), this.updateParallelArrays(g, n), c && g.name && (c[f] = g.name), p.splice(n, 0, t), (o || this.processedData) && (this.data.splice(n, 0, null), this.processData()), \"point\" === a.legendType && this.generatePoints(), i && (h[0] && h[0].remove ? h[0].remove(!1) : (h.shift(), this.updateParallelArrays(g, \"shift\"), p.shift())), !1 !== r && L(this, \"addPoint\", {\n point: g\n }), this.isDirty = !0, this.isDirtyData = !0, e && l.redraw(s);\n }\n removePoint(t, e, i) {\n let s = this,\n r = s.data,\n o = r[t],\n n = s.points,\n a = s.chart,\n h = function () {\n n && n.length === r.length && n.splice(t, 1), r.splice(t, 1), s.options.data.splice(t, 1), s.updateParallelArrays(o || {\n series: s\n }, \"splice\", [t, 1]), o && o.destroy(), s.isDirty = !0, s.isDirtyData = !0, e && a.redraw();\n };\n c(i, a), e = N(e, !0), o ? o.firePointEvent(\"remove\", null, h) : h();\n }\n remove(t, e, i, s) {\n let r = this,\n o = r.chart;\n function n() {\n r.destroy(s), o.isDirtyLegend = o.isDirtyBox = !0, o.linkSeries(s), N(t, !0) && o.redraw(e);\n }\n !1 !== i ? L(r, \"remove\", null, n) : n();\n }\n update(t, e) {\n L(this, \"update\", {\n options: t = M(t, this.userOptions)\n });\n let i = this,\n s = i.chart,\n r = i.userOptions,\n o = i.initialType || i.type,\n n = s.options.plotOptions,\n a = m[o].prototype,\n h = i.finishedAnimating && {\n animation: !1\n },\n l = {},\n d,\n c,\n p = [\"colorIndex\", \"eventOptions\", \"navigatorSeries\", \"symbolIndex\", \"baseSeries\"],\n u = t.type || r.type || s.options.chart.type,\n g = !(this.hasDerivedData || u && u !== this.type || void 0 !== t.pointStart || void 0 !== t.pointInterval || void 0 !== t.relativeXValue || t.joinBy || t.mapData || [\"dataGrouping\", \"pointStart\", \"pointInterval\", \"pointIntervalUnit\", \"keys\"].some(t => i.hasOptionChanged(t)));\n u = u || o, g && (p.push(\"data\", \"isDirtyData\", \"isDirtyCanvas\", \"points\", \"processedData\", \"processedXData\", \"processedYData\", \"xIncrement\", \"cropped\", \"_hasPointMarkers\", \"hasDataLabels\", \"nodes\", \"layout\", \"level\", \"mapMap\", \"mapData\", \"minY\", \"maxY\", \"minX\", \"maxX\", \"transformGroups\"), !1 !== t.visible && p.push(\"area\", \"graph\"), i.parallelArrays.forEach(function (t) {\n p.push(t + \"Data\");\n }), t.data && (t.dataSorting && A(i.options.dataSorting, t.dataSorting), this.setData(t.data, !1))), t = R(r, {\n index: void 0 === r.index ? i.index : r.index,\n pointStart: n?.series?.pointStart ?? r.pointStart ?? i.xData?.[0]\n }, !g && {\n data: i.options.data\n }, t, h), g && t.data && (t.data = i.options.data), (p = [\"group\", \"markerGroup\", \"dataLabelsGroup\", \"transformGroup\"].concat(p)).forEach(function (t) {\n p[t] = i[t], delete i[t];\n });\n let f = !1;\n if (m[u]) {\n if (f = u !== i.type, i.remove(!1, !1, !1, !0), f) {\n if (s.propFromSeries(), Object.setPrototypeOf) Object.setPrototypeOf(i, m[u].prototype);else {\n let t = Object.hasOwnProperty.call(i, \"hcEvents\") && i.hcEvents;\n for (c in a) i[c] = void 0;\n A(i, m[u].prototype), t ? i.hcEvents = t : delete i.hcEvents;\n }\n }\n } else T(17, !0, s, {\n missingModuleFor: u\n });\n if (p.forEach(function (t) {\n i[t] = p[t];\n }), i.init(s, t), g && this.points) for (let t of (!1 === (d = i.options).visible ? (l.graphic = 1, l.dataLabel = 1) : (this.hasMarkerChanged(d, r) && (l.graphic = 1), i.hasDataLabels?.() || (l.dataLabel = 1)), this.points)) t && t.series && (t.resolveColor(), Object.keys(l).length && t.destroyElements(l), !1 === d.showInLegend && t.legendItem && s.legend.destroyItem(t));\n i.initialType = o, s.linkSeries(), s.setSortedData(), f && i.linkedSeries.length && (i.isDirtyData = !0), L(this, \"afterUpdate\"), N(e, !0) && s.redraw(!!g && void 0);\n }\n setName(t) {\n this.name = this.options.name = this.userOptions.name = t, this.chart.isDirtyLegend = !0;\n }\n hasOptionChanged(t) {\n let e = this.chart,\n i = this.options[t],\n s = e.options.plotOptions,\n r = this.userOptions[t],\n o = N(s?.[this.type]?.[t], s?.series?.[t]);\n return r && !C(o) ? i !== r : i !== N(o, i);\n }\n onMouseOver() {\n let t = this.chart,\n e = t.hoverSeries,\n i = t.pointer;\n i?.setHoverChartIndex(), e && e !== this && e.onMouseOut(), this.options.events.mouseOver && L(this, \"mouseOver\"), this.setState(\"hover\"), t.hoverSeries = this;\n }\n onMouseOut() {\n let t = this.options,\n e = this.chart,\n i = e.tooltip,\n s = e.hoverPoint;\n e.hoverSeries = null, s && s.onMouseOut(), this && t.events.mouseOut && L(this, \"mouseOut\"), i && !this.stickyTracking && (!i.shared || this.noSharedTooltip) && i.hide(), e.series.forEach(function (t) {\n t.setState(\"\", !0);\n });\n }\n setState(t, e) {\n let i = this,\n s = i.options,\n r = i.graph,\n o = s.inactiveOtherPoints,\n n = s.states,\n a = N(n[t || \"normal\"] && n[t || \"normal\"].animation, i.chart.options.chart.animation),\n h = s.lineWidth,\n l = s.opacity;\n if (t = t || \"\", i.state !== t && ([i.group, i.markerGroup, i.dataLabelsGroup].forEach(function (e) {\n e && (i.state && e.removeClass(\"highcharts-series-\" + i.state), t && e.addClass(\"highcharts-series-\" + t));\n }), i.state = t, !i.chart.styledMode)) {\n if (n[t] && !1 === n[t].enabled) return;\n if (t && (h = n[t].lineWidth || h + (n[t].lineWidthPlus || 0), l = N(n[t].opacity, l)), r && !r.dashstyle && j(h)) for (let t of [r, ...this.zones.map(t => t.graph)]) t?.animate({\n \"stroke-width\": h\n }, a);\n o || [i.group, i.markerGroup, i.dataLabelsGroup, i.labelBySeries].forEach(function (t) {\n t && t.animate({\n opacity: l\n }, a);\n });\n }\n e && o && i.points && i.setAllPointsToState(t || void 0);\n }\n setAllPointsToState(t) {\n this.points.forEach(function (e) {\n e.setState && e.setState(t);\n });\n }\n setVisible(t, e) {\n let i = this,\n s = i.chart,\n r = s.options.chart.ignoreHiddenSeries,\n o = i.visible;\n i.visible = t = i.options.visible = i.userOptions.visible = void 0 === t ? !o : t;\n let n = t ? \"show\" : \"hide\";\n [\"group\", \"dataLabelsGroup\", \"markerGroup\", \"tracker\", \"tt\"].forEach(t => {\n i[t]?.[n]();\n }), (s.hoverSeries === i || s.hoverPoint?.series === i) && i.onMouseOut(), i.legendItem && s.legend.colorizeItem(i, t), i.isDirty = !0, i.options.stacking && s.series.forEach(t => {\n t.options.stacking && t.visible && (t.isDirty = !0);\n }), i.linkedSeries.forEach(e => {\n e.setVisible(t, !1);\n }), r && (s.isDirtyBox = !0), L(i, n), !1 !== e && s.redraw();\n }\n show() {\n this.setVisible(!0);\n }\n hide() {\n this.setVisible(!1);\n }\n select(t) {\n this.selected = t = this.options.selected = void 0 === t ? !this.selected : t, this.checkbox && (this.checkbox.checked = t), L(this, t ? \"select\" : \"unselect\");\n }\n shouldShowTooltip(t, e, i = {}) {\n return i.series = this, i.visiblePlotOnly = !0, this.chart.isInsidePlot(t, e, i);\n }\n drawLegendSymbol(t, e) {\n r[this.options.legendSymbol || \"rectangle\"]?.call(this, t, e);\n }\n }\n return X.defaultOptions = n, X.types = a.seriesTypes, X.registerType = a.registerSeriesType, A(X.prototype, {\n axisTypes: [\"xAxis\", \"yAxis\"],\n coll: \"series\",\n colorCounter: 0,\n directTouch: !1,\n invertible: !0,\n isCartesian: !0,\n kdAxisArray: [\"clientX\", \"plotY\"],\n parallelArrays: [\"x\", \"y\"],\n pointClass: o,\n requireSorting: !0,\n sorted: !0\n }), a.series = X, X;\n }), i(e, \"Core/Legend/Legend.js\", [e[\"Core/Animation/AnimationUtilities.js\"], e[\"Core/Foundation.js\"], e[\"Core/Globals.js\"], e[\"Core/Series/Series.js\"], e[\"Core/Series/Point.js\"], e[\"Core/Renderer/RendererUtilities.js\"], e[\"Core/Templating.js\"], e[\"Core/Utilities.js\"]], function (t, e, i, s, r, o, n, a) {\n var h;\n let {\n animObject: l,\n setAnimation: d\n } = t,\n {\n registerEventOptions: c\n } = e,\n {\n composed: p,\n marginNames: u\n } = i,\n {\n distribute: g\n } = o,\n {\n format: f\n } = n,\n {\n addEvent: m,\n createElement: x,\n css: y,\n defined: b,\n discardElement: v,\n find: S,\n fireEvent: C,\n isNumber: k,\n merge: M,\n pick: w,\n pushUnique: T,\n relativeLength: A,\n stableSort: P,\n syncTimeout: L\n } = a;\n class O {\n constructor(t, e) {\n this.allItems = [], this.initialItemY = 0, this.itemHeight = 0, this.itemMarginBottom = 0, this.itemMarginTop = 0, this.itemX = 0, this.itemY = 0, this.lastItemY = 0, this.lastLineHeight = 0, this.legendHeight = 0, this.legendWidth = 0, this.maxItemWidth = 0, this.maxLegendWidth = 0, this.offsetWidth = 0, this.padding = 0, this.pages = [], this.symbolHeight = 0, this.symbolWidth = 0, this.titleHeight = 0, this.totalItemWidth = 0, this.widthOption = 0, this.chart = t, this.setOptions(e), e.enabled && (this.render(), c(this, e), m(this.chart, \"endResize\", function () {\n this.legend.positionCheckboxes();\n })), m(this.chart, \"render\", () => {\n this.options.enabled && this.proximate && (this.proximatePositions(), this.positionItems());\n });\n }\n setOptions(t) {\n let e = w(t.padding, 8);\n this.options = t, this.chart.styledMode || (this.itemStyle = t.itemStyle, this.itemHiddenStyle = M(this.itemStyle, t.itemHiddenStyle)), this.itemMarginTop = t.itemMarginTop, this.itemMarginBottom = t.itemMarginBottom, this.padding = e, this.initialItemY = e - 5, this.symbolWidth = w(t.symbolWidth, 16), this.pages = [], this.proximate = \"proximate\" === t.layout && !this.chart.inverted, this.baseline = void 0;\n }\n update(t, e) {\n let i = this.chart;\n this.setOptions(M(!0, this.options, t)), \"events\" in this.options && c(this, this.options), this.destroy(), i.isDirtyLegend = i.isDirtyBox = !0, w(e, !0) && i.redraw(), C(this, \"afterUpdate\", {\n redraw: e\n });\n }\n colorizeItem(t, e) {\n let {\n area: i,\n group: s,\n label: r,\n line: o,\n symbol: n\n } = t.legendItem || {};\n if (s?.[e ? \"removeClass\" : \"addClass\"](\"highcharts-legend-item-hidden\"), !this.chart.styledMode) {\n let {\n itemHiddenStyle: s = {}\n } = this,\n a = s.color,\n {\n fillColor: h,\n fillOpacity: l,\n lineColor: d,\n marker: c\n } = t.options,\n p = t => (!e && (t.fill && (t.fill = a), t.stroke && (t.stroke = a)), t);\n r?.css(M(e ? this.itemStyle : s)), o?.attr(p({\n stroke: d || t.color\n })), n && n.attr(p(c && n.isMarker ? t.pointAttribs() : {\n fill: t.color\n })), i?.attr(p({\n fill: h || t.color,\n \"fill-opacity\": h ? 1 : l ?? .75\n }));\n }\n C(this, \"afterColorizeItem\", {\n item: t,\n visible: e\n });\n }\n positionItems() {\n this.allItems.forEach(this.positionItem, this), this.chart.isResizing || this.positionCheckboxes();\n }\n positionItem(t) {\n let {\n group: e,\n x: i = 0,\n y: s = 0\n } = t.legendItem || {},\n r = this.options,\n o = r.symbolPadding,\n n = !r.rtl,\n a = t.checkbox;\n if (e && e.element) {\n let r = {\n translateX: n ? i : this.legendWidth - i - 2 * o - 4,\n translateY: s\n };\n e[b(e.translateY) ? \"animate\" : \"attr\"](r, void 0, () => {\n C(this, \"afterPositionItem\", {\n item: t\n });\n });\n }\n a && (a.x = i, a.y = s);\n }\n destroyItem(t) {\n let e = t.checkbox,\n i = t.legendItem || {};\n for (let t of [\"group\", \"label\", \"line\", \"symbol\"]) i[t] && (i[t] = i[t].destroy());\n e && v(e), t.legendItem = void 0;\n }\n destroy() {\n for (let t of this.getAllItems()) this.destroyItem(t);\n for (let t of [\"clipRect\", \"up\", \"down\", \"pager\", \"nav\", \"box\", \"title\", \"group\"]) this[t] && (this[t] = this[t].destroy());\n this.display = null;\n }\n positionCheckboxes() {\n let t;\n let e = this.group && this.group.alignAttr,\n i = this.clipHeight || this.legendHeight,\n s = this.titleHeight;\n e && (t = e.translateY, this.allItems.forEach(function (r) {\n let o;\n let n = r.checkbox;\n n && (o = t + s + n.y + (this.scrollOffset || 0) + 3, y(n, {\n left: e.translateX + r.checkboxOffset + n.x - 20 + \"px\",\n top: o + \"px\",\n display: this.proximate || o > t - 6 && o < t + i - 6 ? \"\" : \"none\"\n }));\n }, this));\n }\n renderTitle() {\n let t = this.options,\n e = this.padding,\n i = t.title,\n s,\n r = 0;\n i.text && (this.title || (this.title = this.chart.renderer.label(i.text, e - 3, e - 4, void 0, void 0, void 0, t.useHTML, void 0, \"legend-title\").attr({\n zIndex: 1\n }), this.chart.styledMode || this.title.css(i.style), this.title.add(this.group)), i.width || this.title.css({\n width: this.maxLegendWidth + \"px\"\n }), r = (s = this.title.getBBox()).height, this.offsetWidth = s.width, this.contentGroup.attr({\n translateY: r\n })), this.titleHeight = r;\n }\n setText(t) {\n let e = this.options;\n t.legendItem.label.attr({\n text: e.labelFormat ? f(e.labelFormat, t, this.chart) : e.labelFormatter.call(t)\n });\n }\n renderItem(t) {\n let e = t.legendItem = t.legendItem || {},\n i = this.chart,\n s = i.renderer,\n r = this.options,\n o = \"horizontal\" === r.layout,\n n = this.symbolWidth,\n a = r.symbolPadding || 0,\n h = this.itemStyle,\n l = this.itemHiddenStyle,\n d = o ? w(r.itemDistance, 20) : 0,\n c = !r.rtl,\n p = !t.series,\n u = !p && t.series.drawLegendSymbol ? t.series : t,\n g = u.options,\n f = !!this.createCheckboxForItem && g && g.showCheckbox,\n m = r.useHTML,\n x = t.options.className,\n y = e.label,\n b = n + a + d + (f ? 20 : 0);\n !y && (e.group = s.g(\"legend-item\").addClass(\"highcharts-\" + u.type + \"-series highcharts-color-\" + t.colorIndex + (x ? \" \" + x : \"\") + (p ? \" highcharts-series-\" + t.index : \"\")).attr({\n zIndex: 1\n }).add(this.scrollGroup), e.label = y = s.text(\"\", c ? n + a : -a, this.baseline || 0, m), i.styledMode || y.css(M(t.visible ? h : l)), y.attr({\n align: c ? \"left\" : \"right\",\n zIndex: 2\n }).add(e.group), !this.baseline && (this.fontMetrics = s.fontMetrics(y), this.baseline = this.fontMetrics.f + 3 + this.itemMarginTop, y.attr(\"y\", this.baseline), this.symbolHeight = w(r.symbolHeight, this.fontMetrics.f), r.squareSymbol && (this.symbolWidth = w(r.symbolWidth, Math.max(this.symbolHeight, 16)), b = this.symbolWidth + a + d + (f ? 20 : 0), c && y.attr(\"x\", this.symbolWidth + a))), u.drawLegendSymbol(this, t), this.setItemEvents && this.setItemEvents(t, y, m)), f && !t.checkbox && this.createCheckboxForItem && this.createCheckboxForItem(t), this.colorizeItem(t, t.visible), (i.styledMode || !h.width) && y.css({\n width: (r.itemWidth || this.widthOption || i.spacingBox.width) - b + \"px\"\n }), this.setText(t);\n let v = y.getBBox(),\n S = this.fontMetrics && this.fontMetrics.h || 0;\n t.itemWidth = t.checkboxOffset = r.itemWidth || e.labelWidth || v.width + b, this.maxItemWidth = Math.max(this.maxItemWidth, t.itemWidth), this.totalItemWidth += t.itemWidth, this.itemHeight = t.itemHeight = Math.round(e.labelHeight || (v.height > 1.5 * S ? v.height : S));\n }\n layoutItem(t) {\n let e = this.options,\n i = this.padding,\n s = \"horizontal\" === e.layout,\n r = t.itemHeight,\n o = this.itemMarginBottom,\n n = this.itemMarginTop,\n a = s ? w(e.itemDistance, 20) : 0,\n h = this.maxLegendWidth,\n l = e.alignColumns && this.totalItemWidth > h ? this.maxItemWidth : t.itemWidth,\n d = t.legendItem || {};\n s && this.itemX - i + l > h && (this.itemX = i, this.lastLineHeight && (this.itemY += n + this.lastLineHeight + o), this.lastLineHeight = 0), this.lastItemY = n + this.itemY + o, this.lastLineHeight = Math.max(r, this.lastLineHeight), d.x = this.itemX, d.y = this.itemY, s ? this.itemX += l : (this.itemY += n + r + o, this.lastLineHeight = r), this.offsetWidth = this.widthOption || Math.max((s ? this.itemX - i - (t.checkbox ? 0 : a) : l) + i, this.offsetWidth);\n }\n getAllItems() {\n let t = [];\n return this.chart.series.forEach(function (e) {\n let i = e && e.options;\n e && w(i.showInLegend, !b(i.linkedTo) && void 0, !0) && (t = t.concat((e.legendItem || {}).labels || (\"point\" === i.legendType ? e.data : e)));\n }), C(this, \"afterGetAllItems\", {\n allItems: t\n }), t;\n }\n getAlignment() {\n let t = this.options;\n return this.proximate ? t.align.charAt(0) + \"tv\" : t.floating ? \"\" : t.align.charAt(0) + t.verticalAlign.charAt(0) + t.layout.charAt(0);\n }\n adjustMargins(t, e) {\n let i = this.chart,\n s = this.options,\n r = this.getAlignment();\n r && [/(lth|ct|rth)/, /(rtv|rm|rbv)/, /(rbh|cb|lbh)/, /(lbv|lm|ltv)/].forEach(function (o, n) {\n o.test(r) && !b(t[n]) && (i[u[n]] = Math.max(i[u[n]], i.legend[(n + 1) % 2 ? \"legendHeight\" : \"legendWidth\"] + [1, -1, -1, 1][n] * s[n % 2 ? \"x\" : \"y\"] + w(s.margin, 12) + e[n] + (i.titleOffset[n] || 0)));\n });\n }\n proximatePositions() {\n let t;\n let e = this.chart,\n i = [],\n s = \"left\" === this.options.align;\n for (let r of (this.allItems.forEach(function (t) {\n let r,\n o,\n n = s,\n a,\n h;\n t.yAxis && (t.xAxis.options.reversed && (n = !n), t.points && (r = S(n ? t.points : t.points.slice(0).reverse(), function (t) {\n return k(t.plotY);\n })), o = this.itemMarginTop + t.legendItem.label.getBBox().height + this.itemMarginBottom, h = t.yAxis.top - e.plotTop, a = t.visible ? (r ? r.plotY : t.yAxis.height) + (h - .3 * o) : h + t.yAxis.height, i.push({\n target: a,\n size: o,\n item: t\n }));\n }, this), g(i, e.plotHeight))) t = r.item.legendItem || {}, k(r.pos) && (t.y = e.plotTop - e.spacing[0] + r.pos);\n }\n render() {\n let t = this.chart,\n e = t.renderer,\n i = this.options,\n s = this.padding,\n r = this.getAllItems(),\n o,\n n,\n a,\n h = this.group,\n l,\n d = this.box;\n this.itemX = s, this.itemY = this.initialItemY, this.offsetWidth = 0, this.lastItemY = 0, this.widthOption = A(i.width, t.spacingBox.width - s), l = t.spacingBox.width - 2 * s - i.x, [\"rm\", \"lm\"].indexOf(this.getAlignment().substring(0, 2)) > -1 && (l /= 2), this.maxLegendWidth = this.widthOption || l, h || (this.group = h = e.g(\"legend\").addClass(i.className || \"\").attr({\n zIndex: 7\n }).add(), this.contentGroup = e.g().attr({\n zIndex: 1\n }).add(h), this.scrollGroup = e.g().add(this.contentGroup)), this.renderTitle(), P(r, (t, e) => (t.options && t.options.legendIndex || 0) - (e.options && e.options.legendIndex || 0)), i.reversed && r.reverse(), this.allItems = r, this.display = o = !!r.length, this.lastLineHeight = 0, this.maxItemWidth = 0, this.totalItemWidth = 0, this.itemHeight = 0, r.forEach(this.renderItem, this), r.forEach(this.layoutItem, this), n = (this.widthOption || this.offsetWidth) + s, a = this.lastItemY + this.lastLineHeight + this.titleHeight, a = this.handleOverflow(a) + s, d || (this.box = d = e.rect().addClass(\"highcharts-legend-box\").attr({\n r: i.borderRadius\n }).add(h)), t.styledMode || d.attr({\n stroke: i.borderColor,\n \"stroke-width\": i.borderWidth || 0,\n fill: i.backgroundColor || \"none\"\n }).shadow(i.shadow), n > 0 && a > 0 && d[d.placed ? \"animate\" : \"attr\"](d.crisp.call({}, {\n x: 0,\n y: 0,\n width: n,\n height: a\n }, d.strokeWidth())), h[o ? \"show\" : \"hide\"](), t.styledMode && \"none\" === h.getStyle(\"display\") && (n = a = 0), this.legendWidth = n, this.legendHeight = a, o && this.align(), this.proximate || this.positionItems(), C(this, \"afterRender\");\n }\n align(t = this.chart.spacingBox) {\n let e = this.chart,\n i = this.options,\n s = t.y;\n /(lth|ct|rth)/.test(this.getAlignment()) && e.titleOffset[0] > 0 ? s += e.titleOffset[0] : /(lbh|cb|rbh)/.test(this.getAlignment()) && e.titleOffset[2] > 0 && (s -= e.titleOffset[2]), s !== t.y && (t = M(t, {\n y: s\n })), e.hasRendered || (this.group.placed = !1), this.group.align(M(i, {\n width: this.legendWidth,\n height: this.legendHeight,\n verticalAlign: this.proximate ? \"top\" : i.verticalAlign\n }), !0, t);\n }\n handleOverflow(t) {\n let e = this,\n i = this.chart,\n s = i.renderer,\n r = this.options,\n o = r.y,\n n = \"top\" === r.verticalAlign,\n a = this.padding,\n h = r.maxHeight,\n l = r.navigation,\n d = w(l.animation, !0),\n c = l.arrowSize || 12,\n p = this.pages,\n u = this.allItems,\n g = function (t) {\n \"number\" == typeof t ? S.attr({\n height: t\n }) : S && (e.clipRect = S.destroy(), e.contentGroup.clip()), e.contentGroup.div && (e.contentGroup.div.style.clip = t ? \"rect(\" + a + \"px,9999px,\" + (a + t) + \"px,0)\" : \"auto\");\n },\n f = function (t) {\n return e[t] = s.circle(0, 0, 1.3 * c).translate(c / 2, c / 2).add(v), i.styledMode || e[t].attr(\"fill\", \"rgba(0,0,0,0.0001)\"), e[t];\n },\n m,\n x,\n y,\n b = i.spacingBox.height + (n ? -o : o) - a,\n v = this.nav,\n S = this.clipRect;\n return \"horizontal\" !== r.layout || \"middle\" === r.verticalAlign || r.floating || (b /= 2), h && (b = Math.min(b, h)), p.length = 0, t && b > 0 && t > b && !1 !== l.enabled ? (this.clipHeight = m = Math.max(b - 20 - this.titleHeight - a, 0), this.currentPage = w(this.currentPage, 1), this.fullHeight = t, u.forEach((t, e) => {\n let i = (y = t.legendItem || {}).y || 0,\n s = Math.round(y.label.getBBox().height),\n r = p.length;\n (!r || i - p[r - 1] > m && (x || i) !== p[r - 1]) && (p.push(x || i), r++), y.pageIx = r - 1, x && ((u[e - 1].legendItem || {}).pageIx = r - 1), e === u.length - 1 && i + s - p[r - 1] > m && i > p[r - 1] && (p.push(i), y.pageIx = r), i !== x && (x = i);\n }), S || (S = e.clipRect = s.clipRect(0, a - 2, 9999, 0), e.contentGroup.clip(S)), g(m), v || (this.nav = v = s.g().attr({\n zIndex: 1\n }).add(this.group), this.up = s.symbol(\"triangle\", 0, 0, c, c).add(v), f(\"upTracker\").on(\"click\", function () {\n e.scroll(-1, d);\n }), this.pager = s.text(\"\", 15, 10).addClass(\"highcharts-legend-navigation\"), !i.styledMode && l.style && this.pager.css(l.style), this.pager.add(v), this.down = s.symbol(\"triangle-down\", 0, 0, c, c).add(v), f(\"downTracker\").on(\"click\", function () {\n e.scroll(1, d);\n })), e.scroll(0), t = b) : v && (g(), this.nav = v.destroy(), this.scrollGroup.attr({\n translateY: 1\n }), this.clipHeight = 0), t;\n }\n scroll(t, e) {\n let i = this.chart,\n s = this.pages,\n r = s.length,\n o = this.clipHeight,\n n = this.options.navigation,\n a = this.pager,\n h = this.padding,\n c = this.currentPage + t;\n c > r && (c = r), c > 0 && (void 0 !== e && d(e, i), this.nav.attr({\n translateX: h,\n translateY: o + this.padding + 7 + this.titleHeight,\n visibility: \"inherit\"\n }), [this.up, this.upTracker].forEach(function (t) {\n t.attr({\n class: 1 === c ? \"highcharts-legend-nav-inactive\" : \"highcharts-legend-nav-active\"\n });\n }), a.attr({\n text: c + \"/\" + r\n }), [this.down, this.downTracker].forEach(function (t) {\n t.attr({\n x: 18 + this.pager.getBBox().width,\n class: c === r ? \"highcharts-legend-nav-inactive\" : \"highcharts-legend-nav-active\"\n });\n }, this), i.styledMode || (this.up.attr({\n fill: 1 === c ? n.inactiveColor : n.activeColor\n }), this.upTracker.css({\n cursor: 1 === c ? \"default\" : \"pointer\"\n }), this.down.attr({\n fill: c === r ? n.inactiveColor : n.activeColor\n }), this.downTracker.css({\n cursor: c === r ? \"default\" : \"pointer\"\n })), this.scrollOffset = -s[c - 1] + this.initialItemY, this.scrollGroup.animate({\n translateY: this.scrollOffset\n }), this.currentPage = c, this.positionCheckboxes(), L(() => {\n C(this, \"afterScroll\", {\n currentPage: c\n });\n }, l(w(e, i.renderer.globalAnimation, !0)).duration));\n }\n setItemEvents(t, e, i) {\n let o = this,\n n = t.legendItem || {},\n a = o.chart.renderer.boxWrapper,\n h = t instanceof r,\n l = t instanceof s,\n d = \"highcharts-legend-\" + (h ? \"point\" : \"series\") + \"-active\",\n c = o.chart.styledMode,\n p = i ? [e, n.symbol] : [n.group],\n u = e => {\n o.allItems.forEach(i => {\n t !== i && [i].concat(i.linkedSeries || []).forEach(t => {\n t.setState(e, !h);\n });\n });\n };\n for (let i of p) i && i.on(\"mouseover\", function () {\n t.visible && u(\"inactive\"), t.setState(\"hover\"), t.visible && a.addClass(d), c || e.css(o.options.itemHoverStyle);\n }).on(\"mouseout\", function () {\n o.chart.styledMode || e.css(M(t.visible ? o.itemStyle : o.itemHiddenStyle)), u(\"\"), a.removeClass(d), t.setState();\n }).on(\"click\", function (e) {\n let i = function () {\n t.setVisible && t.setVisible(), u(t.visible ? \"inactive\" : \"\");\n };\n a.removeClass(d), C(o, \"itemClick\", {\n browserEvent: e,\n legendItem: t\n }, i), h ? t.firePointEvent(\"legendItemClick\", {\n browserEvent: e\n }) : l && C(t, \"legendItemClick\", {\n browserEvent: e\n });\n });\n }\n createCheckboxForItem(t) {\n t.checkbox = x(\"input\", {\n type: \"checkbox\",\n className: \"highcharts-legend-checkbox\",\n checked: t.selected,\n defaultChecked: t.selected\n }, this.options.itemCheckboxStyle, this.chart.container), m(t.checkbox, \"click\", function (e) {\n let i = e.target;\n C(t.series || t, \"checkboxClick\", {\n checked: i.checked,\n item: t\n }, function () {\n t.select();\n });\n });\n }\n }\n return (h = O || (O = {})).compose = function (t) {\n T(p, \"Core.Legend\") && m(t, \"beforeMargins\", function () {\n this.legend = new h(this, this.options.legend);\n });\n }, O;\n }), i(e, \"Core/Chart/Chart.js\", [e[\"Core/Animation/AnimationUtilities.js\"], e[\"Core/Axis/Axis.js\"], e[\"Core/Defaults.js\"], e[\"Core/Templating.js\"], e[\"Core/Foundation.js\"], e[\"Core/Globals.js\"], e[\"Core/Renderer/RendererRegistry.js\"], e[\"Core/Series/Series.js\"], e[\"Core/Series/SeriesRegistry.js\"], e[\"Core/Renderer/SVG/SVGRenderer.js\"], e[\"Core/Time.js\"], e[\"Core/Utilities.js\"], e[\"Core/Renderer/HTML/AST.js\"], e[\"Core/Axis/Tick.js\"]], function (t, e, i, s, r, o, n, a, h, l, d, c, p, u) {\n let {\n animate: g,\n animObject: f,\n setAnimation: m\n } = t,\n {\n defaultOptions: x,\n defaultTime: y\n } = i,\n {\n numberFormat: b\n } = s,\n {\n registerEventOptions: v\n } = r,\n {\n charts: S,\n doc: C,\n marginNames: k,\n svg: M,\n win: w\n } = o,\n {\n seriesTypes: T\n } = h,\n {\n addEvent: A,\n attr: P,\n createElement: L,\n css: O,\n defined: D,\n diffObjects: E,\n discardElement: I,\n erase: j,\n error: B,\n extend: R,\n find: z,\n fireEvent: N,\n getStyle: W,\n isArray: G,\n isNumber: H,\n isObject: X,\n isString: F,\n merge: Y,\n objectEach: U,\n pick: V,\n pInt: $,\n relativeLength: Z,\n removeEvent: _,\n splat: q,\n syncTimeout: K,\n uniqueKey: J\n } = c;\n class Q {\n static chart(t, e, i) {\n return new Q(t, e, i);\n }\n constructor(t, e, i) {\n this.sharedClips = {};\n let s = [...arguments];\n (F(t) || t.nodeName) && (this.renderTo = s.shift()), this.init(s[0], s[1]);\n }\n setZoomOptions() {\n let t = this.options.chart,\n e = t.zooming;\n this.zooming = {\n ...e,\n type: V(t.zoomType, e.type),\n key: V(t.zoomKey, e.key),\n pinchType: V(t.pinchType, e.pinchType),\n singleTouch: V(t.zoomBySingleTouch, e.singleTouch, !1),\n resetButton: Y(e.resetButton, t.resetZoomButton)\n };\n }\n init(t, e) {\n N(this, \"init\", {\n args: arguments\n }, function () {\n let i = Y(x, t),\n s = i.chart;\n this.userOptions = R({}, t), this.margin = [], this.spacing = [], this.labelCollectors = [], this.callback = e, this.isResizing = 0, this.options = i, this.axes = [], this.series = [], this.time = t.time && Object.keys(t.time).length ? new d(t.time) : o.time, this.numberFormatter = s.numberFormatter || b, this.styledMode = s.styledMode, this.hasCartesianSeries = s.showAxes, this.index = S.length, S.push(this), o.chartCount++, v(this, s), this.xAxis = [], this.yAxis = [], this.pointCount = this.colorCounter = this.symbolCounter = 0, this.setZoomOptions(), N(this, \"afterInit\"), this.firstRender();\n });\n }\n initSeries(t) {\n let e = this.options.chart,\n i = t.type || e.type,\n s = T[i];\n s || B(17, !0, this, {\n missingModuleFor: i\n });\n let r = new s();\n return \"function\" == typeof r.init && r.init(this, t), r;\n }\n setSortedData() {\n this.getSeriesOrderByLinks().forEach(function (t) {\n t.points || t.data || !t.enabledDataSorting || t.setData(t.options.data, !1);\n });\n }\n getSeriesOrderByLinks() {\n return this.series.concat().sort(function (t, e) {\n return t.linkedSeries.length || e.linkedSeries.length ? e.linkedSeries.length - t.linkedSeries.length : 0;\n });\n }\n orderItems(t, e = 0) {\n let i = this[t],\n s = this.options[t] = q(this.options[t]).slice(),\n r = this.userOptions[t] = this.userOptions[t] ? q(this.userOptions[t]).slice() : [];\n if (this.hasRendered && (s.splice(e), r.splice(e)), i) for (let t = e, o = i.length; t < o; ++t) {\n let e = i[t];\n e && (e.index = t, e instanceof a && (e.name = e.getName()), e.options.isInternal || (s[t] = e.options, r[t] = e.userOptions));\n }\n }\n isInsidePlot(t, e, i = {}) {\n let {\n inverted: s,\n plotBox: r,\n plotLeft: o,\n plotTop: n,\n scrollablePlotBox: a\n } = this,\n {\n scrollLeft: h = 0,\n scrollTop: l = 0\n } = i.visiblePlotOnly && this.scrollablePlotArea?.scrollingContainer || {},\n d = i.series,\n c = i.visiblePlotOnly && a || r,\n p = i.inverted ? e : t,\n u = i.inverted ? t : e,\n g = {\n x: p,\n y: u,\n isInsidePlot: !0,\n options: i\n };\n if (!i.ignoreX) {\n let t = d && (s && !this.polar ? d.yAxis : d.xAxis) || {\n pos: o,\n len: 1 / 0\n },\n e = i.paneCoordinates ? t.pos + p : o + p;\n e >= Math.max(h + o, t.pos) && e <= Math.min(h + o + c.width, t.pos + t.len) || (g.isInsidePlot = !1);\n }\n if (!i.ignoreY && g.isInsidePlot) {\n let t = !s && i.axis && !i.axis.isXAxis && i.axis || d && (s ? d.xAxis : d.yAxis) || {\n pos: n,\n len: 1 / 0\n },\n e = i.paneCoordinates ? t.pos + u : n + u;\n e >= Math.max(l + n, t.pos) && e <= Math.min(l + n + c.height, t.pos + t.len) || (g.isInsidePlot = !1);\n }\n return N(this, \"afterIsInsidePlot\", g), g.isInsidePlot;\n }\n redraw(t) {\n N(this, \"beforeRedraw\");\n let e = this.hasCartesianSeries ? this.axes : this.colorAxis || [],\n i = this.series,\n s = this.pointer,\n r = this.legend,\n o = this.userOptions.legend,\n n = this.renderer,\n a = n.isHidden(),\n h = [],\n l,\n d,\n c,\n p = this.isDirtyBox,\n u = this.isDirtyLegend,\n g;\n for (n.rootFontSize = n.boxWrapper.getStyle(\"font-size\"), this.setResponsive && this.setResponsive(!1), m(!!this.hasRendered && t, this), a && this.temporaryDisplay(), this.layOutTitles(!1), c = i.length; c--;) if (((g = i[c]).options.stacking || g.options.centerInCategory) && (d = !0, g.isDirty)) {\n l = !0;\n break;\n }\n if (l) for (c = i.length; c--;) (g = i[c]).options.stacking && (g.isDirty = !0);\n i.forEach(function (t) {\n t.isDirty && (\"point\" === t.options.legendType ? (\"function\" == typeof t.updateTotals && t.updateTotals(), u = !0) : o && (o.labelFormatter || o.labelFormat) && (u = !0)), t.isDirtyData && N(t, \"updatedData\");\n }), u && r && r.options.enabled && (r.render(), this.isDirtyLegend = !1), d && this.getStacks(), e.forEach(function (t) {\n t.updateNames(), t.setScale();\n }), this.getMargins(), e.forEach(function (t) {\n t.isDirty && (p = !0);\n }), e.forEach(function (t) {\n let e = t.min + \",\" + t.max;\n t.extKey !== e && (t.extKey = e, h.push(function () {\n N(t, \"afterSetExtremes\", R(t.eventArgs, t.getExtremes())), delete t.eventArgs;\n })), (p || d) && t.redraw();\n }), p && this.drawChartBox(), N(this, \"predraw\"), i.forEach(function (t) {\n (p || t.isDirty) && t.visible && t.redraw(), t.isDirtyData = !1;\n }), s && s.reset(!0), n.draw(), N(this, \"redraw\"), N(this, \"render\"), a && this.temporaryDisplay(!0), h.forEach(function (t) {\n t.call();\n });\n }\n get(t) {\n let e = this.series;\n function i(e) {\n return e.id === t || e.options && e.options.id === t;\n }\n let s = z(this.axes, i) || z(this.series, i);\n for (let t = 0; !s && t < e.length; t++) s = z(e[t].points || [], i);\n return s;\n }\n getAxes() {\n let t = this.userOptions;\n for (let i of (N(this, \"getAxes\"), [\"xAxis\", \"yAxis\"])) for (let s of t[i] = q(t[i] || {})) new e(this, s, i);\n N(this, \"afterGetAxes\");\n }\n getSelectedPoints() {\n return this.series.reduce((t, e) => (e.getPointsCollection().forEach(e => {\n V(e.selectedStaging, e.selected) && t.push(e);\n }), t), []);\n }\n getSelectedSeries() {\n return this.series.filter(function (t) {\n return t.selected;\n });\n }\n setTitle(t, e, i) {\n this.applyDescription(\"title\", t), this.applyDescription(\"subtitle\", e), this.applyDescription(\"caption\", void 0), this.layOutTitles(i);\n }\n applyDescription(t, e) {\n let i = this,\n s = this.options[t] = Y(this.options[t], e),\n r = this[t];\n r && e && (this[t] = r = r.destroy()), s && !r && ((r = this.renderer.text(s.text, 0, 0, s.useHTML).attr({\n align: s.align,\n class: \"highcharts-\" + t,\n zIndex: s.zIndex || 4\n }).add()).update = function (e, s) {\n i.applyDescription(t, e), i.layOutTitles(s);\n }, this.styledMode || r.css(R(\"title\" === t ? {\n fontSize: this.options.isStock ? \"1em\" : \"1.2em\"\n } : {}, s.style)), this[t] = r);\n }\n layOutTitles(t = !0) {\n let e = [0, 0, 0],\n i = this.renderer,\n s = this.spacingBox;\n [\"title\", \"subtitle\", \"caption\"].forEach(function (t) {\n let r = this[t],\n o = this.options[t],\n n = o.verticalAlign || \"top\",\n a = \"title\" === t ? \"top\" === n ? -3 : 0 : \"top\" === n ? e[0] + 2 : 0;\n if (r) {\n r.css({\n width: (o.width || s.width + (o.widthAdjust || 0)) + \"px\"\n });\n let t = i.fontMetrics(r).b,\n h = Math.round(r.getBBox(o.useHTML).height);\n r.align(R({\n y: \"bottom\" === n ? t : a + t,\n height: h\n }, o), !1, \"spacingBox\"), o.floating || (\"top\" === n ? e[0] = Math.ceil(e[0] + h) : \"bottom\" === n && (e[2] = Math.ceil(e[2] + h)));\n }\n }, this), e[0] && \"top\" === (this.options.title.verticalAlign || \"top\") && (e[0] += this.options.title.margin), e[2] && \"bottom\" === this.options.caption.verticalAlign && (e[2] += this.options.caption.margin);\n let r = !this.titleOffset || this.titleOffset.join(\",\") !== e.join(\",\");\n this.titleOffset = e, N(this, \"afterLayOutTitles\"), !this.isDirtyBox && r && (this.isDirtyBox = this.isDirtyLegend = r, this.hasRendered && t && this.isDirtyBox && this.redraw());\n }\n getContainerBox() {\n let t = [].map.call(this.renderTo.children, t => {\n if (t !== this.container) {\n let e = t.style.display;\n return t.style.display = \"none\", [t, e];\n }\n }),\n e = {\n width: W(this.renderTo, \"width\", !0) || 0,\n height: W(this.renderTo, \"height\", !0) || 0\n };\n return t.filter(Boolean).forEach(([t, e]) => {\n t.style.display = e;\n }), e;\n }\n getChartSize() {\n let t = this.options.chart,\n e = t.width,\n i = t.height,\n s = this.getContainerBox(),\n r = s.height > 1 && !(!this.renderTo.parentElement?.style.height && \"100%\" === this.renderTo.style.height);\n this.chartWidth = Math.max(0, e || s.width || 600), this.chartHeight = Math.max(0, Z(i, this.chartWidth) || (r ? s.height : 400)), this.containerBox = s;\n }\n temporaryDisplay(t) {\n let e = this.renderTo,\n i;\n if (t) for (; e && e.style;) e.hcOrigStyle && (O(e, e.hcOrigStyle), delete e.hcOrigStyle), e.hcOrigDetached && (C.body.removeChild(e), e.hcOrigDetached = !1), e = e.parentNode;else for (; e && e.style && (C.body.contains(e) || e.parentNode || (e.hcOrigDetached = !0, C.body.appendChild(e)), (\"none\" === W(e, \"display\", !1) || e.hcOricDetached) && (e.hcOrigStyle = {\n display: e.style.display,\n height: e.style.height,\n overflow: e.style.overflow\n }, i = {\n display: \"block\",\n overflow: \"hidden\"\n }, e !== this.renderTo && (i.height = 0), O(e, i), e.offsetWidth || e.style.setProperty(\"display\", \"block\", \"important\")), (e = e.parentNode) !== C.body););\n }\n setClassName(t) {\n this.container.className = \"highcharts-container \" + (t || \"\");\n }\n getContainer() {\n let t = this.options,\n e = t.chart,\n i = \"data-highcharts-chart\",\n s = J(),\n r,\n o = this.renderTo;\n o || (this.renderTo = o = e.renderTo), F(o) && (this.renderTo = o = C.getElementById(o)), o || B(13, !0, this);\n let a = $(P(o, i));\n H(a) && S[a] && S[a].hasRendered && S[a].destroy(), P(o, i, this.index), o.innerHTML = p.emptyHTML, e.skipClone || o.offsetWidth || this.temporaryDisplay(), this.getChartSize();\n let h = this.chartHeight,\n d = this.chartWidth;\n O(o, {\n overflow: \"hidden\"\n }), this.styledMode || (r = R({\n position: \"relative\",\n overflow: \"hidden\",\n width: d + \"px\",\n height: h + \"px\",\n textAlign: \"left\",\n lineHeight: \"normal\",\n zIndex: 0,\n \"-webkit-tap-highlight-color\": \"rgba(0,0,0,0)\",\n userSelect: \"none\",\n \"touch-action\": \"manipulation\",\n outline: \"none\",\n padding: \"0px\"\n }, e.style || {}));\n let c = L(\"div\", {\n id: s\n }, r, o);\n this.container = c, this.getChartSize(), d === this.chartWidth || (d = this.chartWidth, this.styledMode || O(c, {\n width: V(e.style?.width, d + \"px\")\n })), this.containerBox = this.getContainerBox(), this._cursor = c.style.cursor;\n let u = e.renderer || !M ? n.getRendererType(e.renderer) : l;\n if (this.renderer = new u(c, d, h, void 0, e.forExport, t.exporting && t.exporting.allowHTML, this.styledMode), m(void 0, this), this.setClassName(e.className), this.styledMode) for (let e in t.defs) this.renderer.definition(t.defs[e]);else this.renderer.setStyle(e.style);\n this.renderer.chartIndex = this.index, N(this, \"afterGetContainer\");\n }\n getMargins(t) {\n let {\n spacing: e,\n margin: i,\n titleOffset: s\n } = this;\n this.resetMargins(), s[0] && !D(i[0]) && (this.plotTop = Math.max(this.plotTop, s[0] + e[0])), s[2] && !D(i[2]) && (this.marginBottom = Math.max(this.marginBottom, s[2] + e[2])), this.legend && this.legend.display && this.legend.adjustMargins(i, e), N(this, \"getMargins\"), t || this.getAxisMargins();\n }\n getAxisMargins() {\n let t = this,\n e = t.axisOffset = [0, 0, 0, 0],\n i = t.colorAxis,\n s = t.margin,\n r = function (t) {\n t.forEach(function (t) {\n t.visible && t.getOffset();\n });\n };\n t.hasCartesianSeries ? r(t.axes) : i && i.length && r(i), k.forEach(function (i, r) {\n D(s[r]) || (t[i] += e[r]);\n }), t.setChartSize();\n }\n getOptions() {\n return E(this.userOptions, x);\n }\n reflow(t) {\n let e = this,\n i = e.containerBox,\n s = e.getContainerBox();\n delete e.pointer?.chartPosition, !e.isPrinting && !e.isResizing && i && s.width && ((s.width !== i.width || s.height !== i.height) && (c.clearTimeout(e.reflowTimeout), e.reflowTimeout = K(function () {\n e.container && e.setSize(void 0, void 0, !1);\n }, t ? 100 : 0)), e.containerBox = s);\n }\n setReflow() {\n let t = this,\n e = e => {\n t.options?.chart.reflow && t.hasLoaded && t.reflow(e);\n };\n if (\"function\" == typeof ResizeObserver) new ResizeObserver(e).observe(t.renderTo);else {\n let t = A(w, \"resize\", e);\n A(this, \"destroy\", t);\n }\n }\n setSize(t, e, i) {\n let s = this,\n r = s.renderer;\n s.isResizing += 1, m(i, s);\n let o = r.globalAnimation;\n s.oldChartHeight = s.chartHeight, s.oldChartWidth = s.chartWidth, void 0 !== t && (s.options.chart.width = t), void 0 !== e && (s.options.chart.height = e), s.getChartSize();\n let {\n chartWidth: n,\n chartHeight: a,\n scrollablePixelsX: h = 0,\n scrollablePixelsY: l = 0\n } = s;\n (s.isDirtyBox || n !== s.oldChartWidth || a !== s.oldChartHeight) && (s.styledMode || (o ? g : O)(s.container, {\n width: `${n + h}px`,\n height: `${a + l}px`\n }, o), s.setChartSize(!0), r.setSize(n, a, o), s.axes.forEach(function (t) {\n t.isDirty = !0, t.setScale();\n }), s.isDirtyLegend = !0, s.isDirtyBox = !0, s.layOutTitles(), s.getMargins(), s.redraw(o), s.oldChartHeight = void 0, N(s, \"resize\"), setTimeout(() => {\n s && N(s, \"endResize\");\n }, f(o).duration)), s.isResizing -= 1;\n }\n setChartSize(t) {\n let e, i, s, r;\n let {\n chartHeight: o,\n chartWidth: n,\n inverted: a,\n spacing: h,\n renderer: l\n } = this,\n d = this.clipOffset,\n c = Math[a ? \"floor\" : \"round\"];\n this.plotLeft = e = Math.round(this.plotLeft), this.plotTop = i = Math.round(this.plotTop), this.plotWidth = s = Math.max(0, Math.round(n - e - this.marginRight)), this.plotHeight = r = Math.max(0, Math.round(o - i - this.marginBottom)), this.plotSizeX = a ? r : s, this.plotSizeY = a ? s : r, this.spacingBox = l.spacingBox = {\n x: h[3],\n y: h[0],\n width: n - h[3] - h[1],\n height: o - h[0] - h[2]\n }, this.plotBox = l.plotBox = {\n x: e,\n y: i,\n width: s,\n height: r\n }, d && (this.clipBox = {\n x: c(d[3]),\n y: c(d[0]),\n width: c(this.plotSizeX - d[1] - d[3]),\n height: c(this.plotSizeY - d[0] - d[2])\n }), t || (this.axes.forEach(function (t) {\n t.setAxisSize(), t.setAxisTranslation();\n }), l.alignElements()), N(this, \"afterSetChartSize\", {\n skipAxes: t\n });\n }\n resetMargins() {\n N(this, \"resetMargins\");\n let t = this,\n e = t.options.chart,\n i = e.plotBorderWidth || 0,\n s = i / 2;\n [\"margin\", \"spacing\"].forEach(function (i) {\n let s = e[i],\n r = X(s) ? s : [s, s, s, s];\n [\"Top\", \"Right\", \"Bottom\", \"Left\"].forEach(function (s, o) {\n t[i][o] = V(e[i + s], r[o]);\n });\n }), k.forEach(function (e, i) {\n t[e] = V(t.margin[i], t.spacing[i]);\n }), t.axisOffset = [0, 0, 0, 0], t.clipOffset = [s, s, s, s], t.plotBorderWidth = i;\n }\n drawChartBox() {\n let t = this.options.chart,\n e = this.renderer,\n i = this.chartWidth,\n s = this.chartHeight,\n r = this.styledMode,\n o = this.plotBGImage,\n n = t.backgroundColor,\n a = t.plotBackgroundColor,\n h = t.plotBackgroundImage,\n l = this.plotLeft,\n d = this.plotTop,\n c = this.plotWidth,\n p = this.plotHeight,\n u = this.plotBox,\n g = this.clipRect,\n f = this.clipBox,\n m = this.chartBackground,\n x = this.plotBackground,\n y = this.plotBorder,\n b,\n v,\n S,\n C = \"animate\";\n m || (this.chartBackground = m = e.rect().addClass(\"highcharts-background\").add(), C = \"attr\"), r ? b = v = m.strokeWidth() : (v = (b = t.borderWidth || 0) + (t.shadow ? 8 : 0), S = {\n fill: n || \"none\"\n }, (b || m[\"stroke-width\"]) && (S.stroke = t.borderColor, S[\"stroke-width\"] = b), m.attr(S).shadow(t.shadow)), m[C]({\n x: v / 2,\n y: v / 2,\n width: i - v - b % 2,\n height: s - v - b % 2,\n r: t.borderRadius\n }), C = \"animate\", x || (C = \"attr\", this.plotBackground = x = e.rect().addClass(\"highcharts-plot-background\").add()), x[C](u), !r && (x.attr({\n fill: a || \"none\"\n }).shadow(t.plotShadow), h && (o ? (h !== o.attr(\"href\") && o.attr(\"href\", h), o.animate(u)) : this.plotBGImage = e.image(h, l, d, c, p).add())), g ? g.animate({\n width: f.width,\n height: f.height\n }) : this.clipRect = e.clipRect(f), C = \"animate\", y || (C = \"attr\", this.plotBorder = y = e.rect().addClass(\"highcharts-plot-border\").attr({\n zIndex: 1\n }).add()), r || y.attr({\n stroke: t.plotBorderColor,\n \"stroke-width\": t.plotBorderWidth || 0,\n fill: \"none\"\n }), y[C](y.crisp({\n x: l,\n y: d,\n width: c,\n height: p\n }, -y.strokeWidth())), this.isDirtyBox = !1, N(this, \"afterDrawChartBox\");\n }\n propFromSeries() {\n let t, e, i;\n let s = this,\n r = s.options.chart,\n o = s.options.series;\n [\"inverted\", \"angular\", \"polar\"].forEach(function (n) {\n for (e = T[r.type], i = r[n] || e && e.prototype[n], t = o && o.length; !i && t--;) (e = T[o[t].type]) && e.prototype[n] && (i = !0);\n s[n] = i;\n });\n }\n linkSeries(t) {\n let e = this,\n i = e.series;\n i.forEach(function (t) {\n t.linkedSeries.length = 0;\n }), i.forEach(function (t) {\n let {\n linkedTo: i\n } = t.options;\n if (F(i)) {\n let s;\n (s = \":previous\" === i ? e.series[t.index - 1] : e.get(i)) && s.linkedParent !== t && (s.linkedSeries.push(t), t.linkedParent = s, s.enabledDataSorting && t.setDataSortingOptions(), t.visible = V(t.options.visible, s.options.visible, t.visible));\n }\n }), N(this, \"afterLinkSeries\", {\n isUpdating: t\n });\n }\n renderSeries() {\n this.series.forEach(function (t) {\n t.translate(), t.render();\n });\n }\n render() {\n let t = this.axes,\n e = this.colorAxis,\n i = this.renderer,\n s = this.options.chart.axisLayoutRuns || 2,\n r = t => {\n t.forEach(t => {\n t.visible && t.render();\n });\n },\n o = 0,\n n = !0,\n a,\n h = 0;\n for (let e of (this.setTitle(), N(this, \"beforeMargins\"), this.getStacks?.(), this.getMargins(!0), this.setChartSize(), t)) {\n let {\n options: t\n } = e,\n {\n labels: i\n } = t;\n if (this.hasCartesianSeries && e.horiz && e.visible && i.enabled && e.series.length && \"colorAxis\" !== e.coll && !this.polar) {\n o = t.tickLength, e.createGroups();\n let s = new u(e, 0, \"\", !0),\n r = s.createLabel(\"x\", i);\n if (s.destroy(), r && V(i.reserveSpace, !H(t.crossing)) && (o = r.getBBox().height + i.distance + Math.max(t.offset || 0, 0)), o) {\n r?.destroy();\n break;\n }\n }\n }\n for (this.plotHeight = Math.max(this.plotHeight - o, 0); (n || a || s > 1) && h < s;) {\n let e = this.plotWidth,\n i = this.plotHeight;\n for (let e of t) 0 === h ? e.setScale() : (e.horiz && n || !e.horiz && a) && e.setTickInterval(!0);\n 0 === h ? this.getAxisMargins() : this.getMargins(), n = e / this.plotWidth > (h ? 1 : 1.1), a = i / this.plotHeight > (h ? 1 : 1.05), h++;\n }\n this.drawChartBox(), this.hasCartesianSeries ? r(t) : e && e.length && r(e), this.seriesGroup || (this.seriesGroup = i.g(\"series-group\").attr({\n zIndex: 3\n }).shadow(this.options.chart.seriesGroupShadow).add()), this.renderSeries(), this.addCredits(), this.setResponsive && this.setResponsive(), this.hasRendered = !0;\n }\n addCredits(t) {\n let e = this,\n i = Y(!0, this.options.credits, t);\n i.enabled && !this.credits && (this.credits = this.renderer.text(i.text + (this.mapCredits || \"\"), 0, 0).addClass(\"highcharts-credits\").on(\"click\", function () {\n i.href && (w.location.href = i.href);\n }).attr({\n align: i.position.align,\n zIndex: 8\n }), e.styledMode || this.credits.css(i.style), this.credits.add().align(i.position), this.credits.update = function (t) {\n e.credits = e.credits.destroy(), e.addCredits(t);\n });\n }\n destroy() {\n let t;\n let e = this,\n i = e.axes,\n s = e.series,\n r = e.container,\n n = r && r.parentNode;\n for (N(e, \"destroy\"), e.renderer.forExport ? j(S, e) : S[e.index] = void 0, o.chartCount--, e.renderTo.removeAttribute(\"data-highcharts-chart\"), _(e), t = i.length; t--;) i[t] = i[t].destroy();\n for (this.scroller && this.scroller.destroy && this.scroller.destroy(), t = s.length; t--;) s[t] = s[t].destroy();\n [\"title\", \"subtitle\", \"chartBackground\", \"plotBackground\", \"plotBGImage\", \"plotBorder\", \"seriesGroup\", \"clipRect\", \"credits\", \"pointer\", \"rangeSelector\", \"legend\", \"resetZoomButton\", \"tooltip\", \"renderer\"].forEach(function (t) {\n let i = e[t];\n i && i.destroy && (e[t] = i.destroy());\n }), r && (r.innerHTML = p.emptyHTML, _(r), n && I(r)), U(e, function (t, i) {\n delete e[i];\n });\n }\n firstRender() {\n let t = this,\n e = t.options;\n t.getContainer(), t.resetMargins(), t.setChartSize(), t.propFromSeries(), t.getAxes();\n let i = G(e.series) ? e.series : [];\n e.series = [], i.forEach(function (e) {\n t.initSeries(e);\n }), t.linkSeries(), t.setSortedData(), N(t, \"beforeRender\"), t.render(), t.pointer?.getChartPosition(), t.renderer.imgCount || t.hasLoaded || t.onload(), t.temporaryDisplay(!0);\n }\n onload() {\n this.callbacks.concat([this.callback]).forEach(function (t) {\n t && void 0 !== this.index && t.apply(this, [this]);\n }, this), N(this, \"load\"), N(this, \"render\"), D(this.index) && this.setReflow(), this.warnIfA11yModuleNotLoaded(), this.hasLoaded = !0;\n }\n warnIfA11yModuleNotLoaded() {\n let {\n options: t,\n title: e\n } = this;\n !t || this.accessibility || (this.renderer.boxWrapper.attr({\n role: \"img\",\n \"aria-label\": (e && e.element.textContent || \"\").replace(/ this.transform({\n reset: !0,\n trigger: \"zoom\"\n }));\n }\n pan(t, e) {\n let i = this,\n s = \"object\" == typeof e ? e : {\n enabled: e,\n type: \"x\"\n },\n r = s.type,\n o = r && i[{\n x: \"xAxis\",\n xy: \"axes\",\n y: \"yAxis\"\n }[r]].filter(t => t.options.panningEnabled && !t.options.isInternal),\n n = i.options.chart;\n n?.panning && (n.panning = s), N(this, \"pan\", {\n originalEvent: t\n }, () => {\n i.transform({\n axes: o,\n event: t,\n to: {\n x: t.chartX - (i.mouseDownX || 0),\n y: t.chartY - (i.mouseDownY || 0)\n },\n trigger: \"pan\"\n }), O(i.container, {\n cursor: \"move\"\n });\n });\n }\n transform(t) {\n let {\n axes: e = this.axes,\n event: i,\n from: s = {},\n reset: r,\n selection: o,\n to: n = {},\n trigger: a\n } = t,\n {\n inverted: h\n } = this,\n l = !1,\n d,\n c;\n for (let t of (this.hoverPoints?.forEach(t => t.setState()), e)) {\n let {\n horiz: e,\n len: p,\n minPointOffset: u = 0,\n options: g,\n reversed: f\n } = t,\n m = e ? \"width\" : \"height\",\n x = e ? \"x\" : \"y\",\n y = V(n[m], t.len),\n b = V(s[m], t.len),\n v = 10 > Math.abs(y) ? 1 : y / b,\n S = (s[x] || 0) + b / 2 - t.pos,\n C = S - ((n[x] ?? t.pos) + y / 2 - t.pos) / v,\n k = f && !h || !f && h ? -1 : 1;\n if (!r && (S < 0 || S > t.len)) continue;\n let M = t.toValue(C, !0) + (o || t.isOrdinal ? 0 : u * k),\n w = t.toValue(C + p / v, !0) - (o || t.isOrdinal ? 0 : u * k || 0),\n T = t.allExtremes;\n if (M > w && ([M, w] = [w, M]), 1 === v && !r && \"yAxis\" === t.coll && !T) {\n for (let e of t.series) {\n let t = e.getExtremes(e.getProcessedData(!0).yData, !0);\n T ?? (T = {\n dataMin: Number.MAX_VALUE,\n dataMax: -Number.MAX_VALUE\n }), H(t.dataMin) && H(t.dataMax) && (T.dataMin = Math.min(t.dataMin, T.dataMin), T.dataMax = Math.max(t.dataMax, T.dataMax));\n }\n t.allExtremes = T;\n }\n let {\n dataMin: A,\n dataMax: P,\n min: L,\n max: O\n } = R(t.getExtremes(), T || {}),\n E = A ?? g.min,\n I = P ?? g.max,\n j = w - M,\n B = t.categories ? 0 : Math.min(j, I - E),\n z = E - B * (D(g.min) ? 0 : g.minPadding),\n N = I + B * (D(g.max) ? 0 : g.maxPadding),\n W = t.allowZoomOutside || 1 === v || \"zoom\" !== a && v > 1,\n G = Math.min(g.min ?? z, z, W ? L : z),\n X = Math.max(g.max ?? N, N, W ? O : N);\n (!t.isOrdinal || t.options.overscroll || 1 !== v || r) && (M < G && (M = G, v >= 1 && (w = M + j)), w > X && (w = X, v >= 1 && (M = w - j)), (r || t.series.length && (M !== L || w !== O) && M >= G && w <= X) && (o ? o[t.coll].push({\n axis: t,\n min: M,\n max: w\n }) : (t.isPanning = \"zoom\" !== a, t.isPanning && (c = !0), t.setExtremes(r ? void 0 : M, r ? void 0 : w, !1, !1, {\n move: C,\n trigger: a,\n scale: v\n }), !r && (M > G || w < X) && \"mousewheel\" !== a && (d = !0)), l = !0), i && (this[e ? \"mouseDownX\" : \"mouseDownY\"] = i[e ? \"chartX\" : \"chartY\"]));\n }\n return l && (o ? N(this, \"selection\", o, () => {\n delete t.selection, t.trigger = \"zoom\", this.transform(t);\n }) : (!d || c || this.resetZoomButton ? !d && this.resetZoomButton && (this.resetZoomButton = this.resetZoomButton.destroy()) : this.showResetZoom(), this.redraw(\"zoom\" === a && (this.options.chart.animation ?? this.pointCount < 100)))), l;\n }\n }\n return R(Q.prototype, {\n callbacks: [],\n collectionsWithInit: {\n xAxis: [Q.prototype.addAxis, [!0]],\n yAxis: [Q.prototype.addAxis, [!1]],\n series: [Q.prototype.addSeries]\n },\n collectionsWithUpdate: [\"xAxis\", \"yAxis\", \"series\"],\n propsRequireDirtyBox: [\"backgroundColor\", \"borderColor\", \"borderWidth\", \"borderRadius\", \"plotBackgroundColor\", \"plotBackgroundImage\", \"plotBorderColor\", \"plotBorderWidth\", \"plotShadow\", \"shadow\"],\n propsRequireReflow: [\"margin\", \"marginTop\", \"marginRight\", \"marginBottom\", \"marginLeft\", \"spacing\", \"spacingTop\", \"spacingRight\", \"spacingBottom\", \"spacingLeft\"],\n propsRequireUpdateSeries: [\"chart.inverted\", \"chart.polar\", \"chart.ignoreHiddenSeries\", \"chart.type\", \"colors\", \"plotOptions\", \"time\", \"tooltip\"]\n }), Q;\n }), i(e, \"Extensions/ScrollablePlotArea.js\", [e[\"Core/Animation/AnimationUtilities.js\"], e[\"Core/Globals.js\"], e[\"Core/Renderer/RendererRegistry.js\"], e[\"Core/Utilities.js\"]], function (t, e, i, s) {\n let {\n stop: r\n } = t,\n {\n composed: o\n } = e,\n {\n addEvent: n,\n createElement: a,\n css: h,\n defined: l,\n merge: d,\n pushUnique: c\n } = s;\n function p() {\n let t = this.scrollablePlotArea;\n (this.scrollablePixelsX || this.scrollablePixelsY) && !t && (this.scrollablePlotArea = t = new g(this)), t?.applyFixed();\n }\n function u() {\n this.chart.scrollablePlotArea && (this.chart.scrollablePlotArea.isDirty = !0);\n }\n class g {\n static compose(t, e, i) {\n c(o, this.compose) && (n(t, \"afterInit\", u), n(e, \"afterSetChartSize\", t => this.afterSetSize(t.target, t)), n(e, \"render\", p), n(i, \"show\", u));\n }\n static afterSetSize(t, e) {\n let i, s, r;\n let {\n minWidth: o,\n minHeight: n\n } = t.options.chart.scrollablePlotArea || {},\n {\n clipBox: a,\n plotBox: h,\n inverted: c,\n renderer: p\n } = t;\n if (!p.forExport && (o ? (t.scrollablePixelsX = i = Math.max(0, o - t.chartWidth), i && (t.scrollablePlotBox = d(t.plotBox), h.width = t.plotWidth += i, a[c ? \"height\" : \"width\"] += i, r = !0)) : n && (t.scrollablePixelsY = s = Math.max(0, n - t.chartHeight), l(s) && (t.scrollablePlotBox = d(t.plotBox), h.height = t.plotHeight += s, a[c ? \"width\" : \"height\"] += s, r = !1)), l(r) && !e.skipAxes)) for (let e of t.axes) e.horiz === r && (e.setAxisSize(), e.setAxisTranslation());\n }\n constructor(t) {\n let e;\n let s = t.options.chart,\n r = i.getRendererType(),\n o = s.scrollablePlotArea || {},\n l = this.moveFixedElements.bind(this),\n d = {\n WebkitOverflowScrolling: \"touch\",\n overflowX: \"hidden\",\n overflowY: \"hidden\"\n };\n t.scrollablePixelsX && (d.overflowX = \"auto\"), t.scrollablePixelsY && (d.overflowY = \"auto\"), this.chart = t;\n let c = this.parentDiv = a(\"div\", {\n className: \"highcharts-scrolling-parent\"\n }, {\n position: \"relative\"\n }, t.renderTo),\n p = this.scrollingContainer = a(\"div\", {\n className: \"highcharts-scrolling\"\n }, d, c),\n u = this.innerContainer = a(\"div\", {\n className: \"highcharts-inner-container\"\n }, void 0, p),\n g = this.fixedDiv = a(\"div\", {\n className: \"highcharts-fixed\"\n }, {\n position: \"absolute\",\n overflow: \"hidden\",\n pointerEvents: \"none\",\n zIndex: (s.style?.zIndex || 0) + 2,\n top: 0\n }, void 0, !0),\n f = this.fixedRenderer = new r(g, t.chartWidth, t.chartHeight, s.style);\n this.mask = f.path().attr({\n fill: s.backgroundColor || \"#fff\",\n \"fill-opacity\": o.opacity ?? .85,\n zIndex: -1\n }).addClass(\"highcharts-scrollable-mask\").add(), p.parentNode.insertBefore(g, p), h(t.renderTo, {\n overflow: \"visible\"\n }), n(t, \"afterShowResetZoom\", l), n(t, \"afterApplyDrilldown\", l), n(t, \"afterLayOutTitles\", l), n(p, \"scroll\", () => {\n let {\n pointer: i,\n hoverPoint: s\n } = t;\n i && (delete i.chartPosition, s && (e = s), i.runPointActions(void 0, e, !0));\n }), u.appendChild(t.container);\n }\n applyFixed() {\n let {\n chart: t,\n fixedRenderer: e,\n isDirty: i,\n scrollingContainer: s\n } = this,\n {\n axisOffset: o,\n chartWidth: n,\n chartHeight: a,\n container: d,\n plotHeight: c,\n plotLeft: p,\n plotTop: u,\n plotWidth: g,\n scrollablePixelsX: f = 0,\n scrollablePixelsY: m = 0\n } = t,\n {\n scrollPositionX: x = 0,\n scrollPositionY: y = 0\n } = t.options.chart.scrollablePlotArea || {},\n b = n + f,\n v = a + m;\n e.setSize(n, a), (i ?? !0) && (this.isDirty = !1, this.moveFixedElements()), r(t.container), h(d, {\n width: `${b}px`,\n height: `${v}px`\n }), t.renderer.boxWrapper.attr({\n width: b,\n height: v,\n viewBox: [0, 0, b, v].join(\" \")\n }), t.chartBackground?.attr({\n width: b,\n height: v\n }), h(s, {\n width: `${n}px`,\n height: `${a}px`\n }), l(i) || (s.scrollLeft = f * x, s.scrollTop = m * y);\n let S = u - o[0] - 1,\n C = p - o[3] - 1,\n k = u + c + o[2] + 1,\n M = p + g + o[1] + 1,\n w = p + g - f,\n T = u + c - m,\n A = [[\"M\", 0, 0]];\n f ? A = [[\"M\", 0, S], [\"L\", p - 1, S], [\"L\", p - 1, k], [\"L\", 0, k], [\"Z\"], [\"M\", w, S], [\"L\", n, S], [\"L\", n, k], [\"L\", w, k], [\"Z\"]] : m && (A = [[\"M\", C, 0], [\"L\", C, u - 1], [\"L\", M, u - 1], [\"L\", M, 0], [\"Z\"], [\"M\", C, T], [\"L\", C, a], [\"L\", M, a], [\"L\", M, T], [\"Z\"]]), \"adjustHeight\" !== t.redrawTrigger && this.mask.attr({\n d: A\n });\n }\n moveFixedElements() {\n let t;\n let {\n container: e,\n inverted: i,\n scrollablePixelsX: s,\n scrollablePixelsY: r\n } = this.chart,\n o = this.fixedRenderer,\n n = g.fixedSelectors;\n for (let a of (s && !i ? t = \".highcharts-yaxis\" : s && i ? t = \".highcharts-xaxis\" : r && !i ? t = \".highcharts-xaxis\" : r && i && (t = \".highcharts-yaxis\"), t && n.push(`${t}:not(.highcharts-radial-axis)`, `${t}-labels:not(.highcharts-radial-axis-labels)`), n)) [].forEach.call(e.querySelectorAll(a), t => {\n (t.namespaceURI === o.SVG_NS ? o.box : o.box.parentNode).appendChild(t), t.style.pointerEvents = \"auto\";\n });\n }\n }\n return g.fixedSelectors = [\".highcharts-breadcrumbs-group\", \".highcharts-contextbutton\", \".highcharts-caption\", \".highcharts-credits\", \".highcharts-drillup-button\", \".highcharts-legend\", \".highcharts-legend-checkbox\", \".highcharts-navigator-series\", \".highcharts-navigator-xaxis\", \".highcharts-navigator-yaxis\", \".highcharts-navigator\", \".highcharts-range-selector-group\", \".highcharts-reset-zoom\", \".highcharts-scrollbar\", \".highcharts-subtitle\", \".highcharts-title\"], g;\n }), i(e, \"Core/Axis/Stacking/StackItem.js\", [e[\"Core/Templating.js\"], e[\"Core/Series/SeriesRegistry.js\"], e[\"Core/Utilities.js\"]], function (t, e, i) {\n let {\n format: s\n } = t,\n {\n series: r\n } = e,\n {\n destroyObjectProperties: o,\n fireEvent: n,\n isNumber: a,\n pick: h\n } = i;\n return class {\n constructor(t, e, i, s, r) {\n let o = t.chart.inverted,\n n = t.reversed;\n this.axis = t;\n let a = this.isNegative = !!i != !!n;\n this.options = e = e || {}, this.x = s, this.total = null, this.cumulative = null, this.points = {}, this.hasValidPoints = !1, this.stack = r, this.leftCliff = 0, this.rightCliff = 0, this.alignOptions = {\n align: e.align || (o ? a ? \"left\" : \"right\" : \"center\"),\n verticalAlign: e.verticalAlign || (o ? \"middle\" : a ? \"bottom\" : \"top\"),\n y: e.y,\n x: e.x\n }, this.textAlign = e.textAlign || (o ? a ? \"right\" : \"left\" : \"center\");\n }\n destroy() {\n o(this, this.axis);\n }\n render(t) {\n let e = this.axis.chart,\n i = this.options,\n r = i.format,\n o = r ? s(r, this, e) : i.formatter.call(this);\n if (this.label) this.label.attr({\n text: o,\n visibility: \"hidden\"\n });else {\n this.label = e.renderer.label(o, null, void 0, i.shape, void 0, void 0, i.useHTML, !1, \"stack-labels\");\n let s = {\n r: i.borderRadius || 0,\n text: o,\n padding: h(i.padding, 5),\n visibility: \"hidden\"\n };\n e.styledMode || (s.fill = i.backgroundColor, s.stroke = i.borderColor, s[\"stroke-width\"] = i.borderWidth, this.label.css(i.style || {})), this.label.attr(s), this.label.added || this.label.add(t);\n }\n this.label.labelrank = e.plotSizeY, n(this, \"afterRender\");\n }\n setOffset(t, e, i, s, o, l) {\n let {\n alignOptions: d,\n axis: c,\n label: p,\n options: u,\n textAlign: g\n } = this,\n f = c.chart,\n m = this.getStackBox({\n xOffset: t,\n width: e,\n boxBottom: i,\n boxTop: s,\n defaultX: o,\n xAxis: l\n }),\n {\n verticalAlign: x\n } = d;\n if (p && m) {\n let t = p.getBBox(void 0, 0),\n e = p.padding,\n i = \"justify\" === h(u.overflow, \"justify\"),\n s;\n d.x = u.x || 0, d.y = u.y || 0;\n let {\n x: o,\n y: n\n } = this.adjustStackPosition({\n labelBox: t,\n verticalAlign: x,\n textAlign: g\n });\n m.x -= o, m.y -= n, p.align(d, !1, m), (s = f.isInsidePlot(p.alignAttr.x + d.x + o, p.alignAttr.y + d.y + n)) || (i = !1), i && r.prototype.justifyDataLabel.call(c, p, d, p.alignAttr, t, m), p.attr({\n x: p.alignAttr.x,\n y: p.alignAttr.y,\n rotation: u.rotation,\n rotationOriginX: t.width * {\n left: 0,\n center: .5,\n right: 1\n }[u.textAlign || \"center\"],\n rotationOriginY: t.height / 2\n }), h(!i && u.crop, !0) && (s = a(p.x) && a(p.y) && f.isInsidePlot(p.x - e + (p.width || 0), p.y) && f.isInsidePlot(p.x + e, p.y)), p[s ? \"show\" : \"hide\"]();\n }\n n(this, \"afterSetOffset\", {\n xOffset: t,\n width: e\n });\n }\n adjustStackPosition({\n labelBox: t,\n verticalAlign: e,\n textAlign: i\n }) {\n let s = {\n bottom: 0,\n middle: 1,\n top: 2,\n right: 1,\n center: 0,\n left: -1\n },\n r = s[e],\n o = s[i];\n return {\n x: t.width / 2 + t.width / 2 * o,\n y: t.height / 2 * r\n };\n }\n getStackBox(t) {\n let e = this.axis,\n i = e.chart,\n {\n boxTop: s,\n defaultX: r,\n xOffset: o,\n width: n,\n boxBottom: l\n } = t,\n d = e.stacking.usePercentage ? 100 : h(s, this.total, 0),\n c = e.toPixels(d),\n p = t.xAxis || i.xAxis[0],\n u = h(r, p.translate(this.x)) + o,\n g = Math.abs(c - e.toPixels(l || a(e.min) && e.logarithmic && e.logarithmic.lin2log(e.min) || 0)),\n f = i.inverted,\n m = this.isNegative;\n return f ? {\n x: (m ? c : c - g) - i.plotLeft,\n y: p.height - u - n + p.top - i.plotTop,\n width: g,\n height: n\n } : {\n x: u + p.transB - i.plotLeft,\n y: (m ? c - g : c) - i.plotTop,\n width: n,\n height: g\n };\n }\n };\n }), i(e, \"Core/Axis/Stacking/StackingAxis.js\", [e[\"Core/Animation/AnimationUtilities.js\"], e[\"Core/Axis/Axis.js\"], e[\"Core/Series/SeriesRegistry.js\"], e[\"Core/Axis/Stacking/StackItem.js\"], e[\"Core/Utilities.js\"]], function (t, e, i, s, r) {\n var o;\n let {\n getDeferredAnimation: n\n } = t,\n {\n series: {\n prototype: a\n }\n } = i,\n {\n addEvent: h,\n correctFloat: l,\n defined: d,\n destroyObjectProperties: c,\n fireEvent: p,\n isArray: u,\n isNumber: g,\n objectEach: f,\n pick: m\n } = r;\n function x() {\n let t = this.inverted;\n this.axes.forEach(t => {\n t.stacking && t.stacking.stacks && t.hasVisibleSeries && (t.stacking.oldStacks = t.stacking.stacks);\n }), this.series.forEach(e => {\n let i = e.xAxis && e.xAxis.options || {};\n e.options.stacking && e.reserveSpace() && (e.stackKey = [e.type, m(e.options.stack, \"\"), t ? i.top : i.left, t ? i.height : i.width].join(\",\"));\n });\n }\n function y() {\n let t = this.stacking;\n if (t) {\n let e = t.stacks;\n f(e, (t, i) => {\n c(t), delete e[i];\n }), t.stackTotalGroup?.destroy();\n }\n }\n function b() {\n this.stacking || (this.stacking = new w(this));\n }\n function v(t, e, i, s) {\n return !d(t) || t.x !== e || s && t.stackKey !== s ? t = {\n x: e,\n index: 0,\n key: s,\n stackKey: s\n } : t.index++, t.key = [i, e, t.index].join(\",\"), t;\n }\n function S() {\n let t;\n let e = this,\n i = e.yAxis,\n s = e.stackKey || \"\",\n r = i.stacking.stacks,\n o = e.processedXData,\n n = e.options.stacking,\n a = e[n + \"Stacker\"];\n a && [s, \"-\" + s].forEach(i => {\n let s = o.length,\n n,\n h,\n l;\n for (; s--;) n = o[s], t = e.getStackIndicator(t, n, e.index, i), h = r[i]?.[n], (l = h?.points[t.key || \"\"]) && a.call(e, l, h, s);\n });\n }\n function C(t, e, i) {\n let s = e.total ? 100 / e.total : 0;\n t[0] = l(t[0] * s), t[1] = l(t[1] * s), this.stackedYData[i] = t[1];\n }\n function k(t) {\n (this.is(\"column\") || this.is(\"columnrange\")) && (this.options.centerInCategory && !this.options.stacking && this.chart.series.length > 1 ? a.setStackedPoints.call(this, t, \"group\") : t.stacking.resetStacks());\n }\n function M(t, e) {\n let i, r, o, n, a, h, c, p, g;\n let f = e || this.options.stacking;\n if (!f || !this.reserveSpace() || ({\n group: \"xAxis\"\n }[f] || \"yAxis\") !== t.coll) return;\n let x = this.processedXData,\n y = this.processedYData,\n b = [],\n v = y.length,\n S = this.options,\n C = S.threshold || 0,\n k = S.startFromThreshold ? C : 0,\n M = S.stack,\n w = e ? `${this.type},${f}` : this.stackKey || \"\",\n T = \"-\" + w,\n A = this.negStacks,\n P = t.stacking,\n L = P.stacks,\n O = P.oldStacks;\n for (P.stacksTouched += 1, c = 0; c < v; c++) {\n p = x[c], g = y[c], h = (i = this.getStackIndicator(i, p, this.index)).key || \"\", L[a = (r = A && g < (k ? 0 : C)) ? T : w] || (L[a] = {}), L[a][p] || (O[a]?.[p] ? (L[a][p] = O[a][p], L[a][p].total = null) : L[a][p] = new s(t, t.options.stackLabels, !!r, p, M)), o = L[a][p], null !== g ? (o.points[h] = o.points[this.index] = [m(o.cumulative, k)], d(o.cumulative) || (o.base = h), o.touched = P.stacksTouched, i.index > 0 && !1 === this.singleStacks && (o.points[h][0] = o.points[this.index + \",\" + p + \",0\"][0])) : (delete o.points[h], delete o.points[this.index]);\n let e = o.total || 0;\n \"percent\" === f ? (n = r ? w : T, e = A && L[n]?.[p] ? (n = L[n][p]).total = Math.max(n.total || 0, e) + Math.abs(g) || 0 : l(e + (Math.abs(g) || 0))) : \"group\" === f ? (u(g) && (g = g[0]), null !== g && e++) : e = l(e + (g || 0)), \"group\" === f ? o.cumulative = (e || 1) - 1 : o.cumulative = l(m(o.cumulative, k) + (g || 0)), o.total = e, null !== g && (o.points[h].push(o.cumulative), b[c] = o.cumulative, o.hasValidPoints = !0);\n }\n \"percent\" === f && (P.usePercentage = !0), \"group\" !== f && (this.stackedYData = b), P.oldStacks = {};\n }\n class w {\n constructor(t) {\n this.oldStacks = {}, this.stacks = {}, this.stacksTouched = 0, this.axis = t;\n }\n buildStacks() {\n let t, e;\n let i = this.axis,\n s = i.series,\n r = \"xAxis\" === i.coll,\n o = i.options.reversedStacks,\n n = s.length;\n for (this.resetStacks(), this.usePercentage = !1, e = n; e--;) t = s[o ? e : n - e - 1], r && t.setGroupedPoints(i), t.setStackedPoints(i);\n if (!r) for (e = 0; e < n; e++) s[e].modifyStacks();\n p(i, \"afterBuildStacks\");\n }\n cleanStacks() {\n this.oldStacks && (this.stacks = this.oldStacks, f(this.stacks, t => {\n f(t, t => {\n t.cumulative = t.total;\n });\n }));\n }\n resetStacks() {\n f(this.stacks, t => {\n f(t, (e, i) => {\n g(e.touched) && e.touched < this.stacksTouched ? (e.destroy(), delete t[i]) : (e.total = null, e.cumulative = null);\n });\n });\n }\n renderStackTotals() {\n let t = this.axis,\n e = t.chart,\n i = e.renderer,\n s = this.stacks,\n r = n(e, t.options.stackLabels?.animation || !1),\n o = this.stackTotalGroup = this.stackTotalGroup || i.g(\"stack-labels\").attr({\n zIndex: 6,\n opacity: 0\n }).add();\n o.translate(e.plotLeft, e.plotTop), f(s, t => {\n f(t, t => {\n t.render(o);\n });\n }), o.animate({\n opacity: 1\n }, r);\n }\n }\n return (o || (o = {})).compose = function (t, e, i) {\n let s = e.prototype,\n r = i.prototype;\n s.getStacks || (h(t, \"init\", b), h(t, \"destroy\", y), s.getStacks = x, r.getStackIndicator = v, r.modifyStacks = S, r.percentStacker = C, r.setGroupedPoints = k, r.setStackedPoints = M);\n }, o;\n }), i(e, \"Series/Line/LineSeries.js\", [e[\"Core/Series/Series.js\"], e[\"Core/Series/SeriesRegistry.js\"], e[\"Core/Utilities.js\"]], function (t, e, i) {\n let {\n defined: s,\n merge: r,\n isObject: o\n } = i;\n class n extends t {\n drawGraph() {\n let t = this.options,\n e = (this.gappedPath || this.getGraphPath).call(this),\n i = this.chart.styledMode;\n [this, ...this.zones].forEach((s, n) => {\n let a,\n h = s.graph,\n l = h ? \"animate\" : \"attr\",\n d = s.dashStyle || t.dashStyle;\n h ? (h.endX = this.preventGraphAnimation ? null : e.xMap, h.animate({\n d: e\n })) : e.length && (s.graph = h = this.chart.renderer.path(e).addClass(\"highcharts-graph\" + (n ? ` highcharts-zone-graph-${n - 1} ` : \" \") + (n && s.className || \"\")).attr({\n zIndex: 1\n }).add(this.group)), h && !i && (a = {\n stroke: !n && t.lineColor || s.color || this.color || \"#cccccc\",\n \"stroke-width\": t.lineWidth || 0,\n fill: this.fillGraph && this.color || \"none\"\n }, d ? a.dashstyle = d : \"square\" !== t.linecap && (a[\"stroke-linecap\"] = a[\"stroke-linejoin\"] = \"round\"), h[l](a).shadow(n < 2 && t.shadow && r({\n filterUnits: \"userSpaceOnUse\"\n }, o(t.shadow) ? t.shadow : {}))), h && (h.startX = e.xMap, h.isArea = e.isArea);\n });\n }\n getGraphPath(t, e, i) {\n let r = this,\n o = r.options,\n n = [],\n a = [],\n h,\n l = o.step,\n d = (t = t || r.points).reversed;\n return d && t.reverse(), (l = {\n right: 1,\n center: 2\n }[l] || l && 3) && d && (l = 4 - l), (t = this.getValidPoints(t, !1, !(o.connectNulls && !e && !i))).forEach(function (d, c) {\n let p;\n let u = d.plotX,\n g = d.plotY,\n f = t[c - 1],\n m = d.isNull || \"number\" != typeof g;\n (d.leftCliff || f && f.rightCliff) && !i && (h = !0), m && !s(e) && c > 0 ? h = !o.connectNulls : m && !e ? h = !0 : (0 === c || h ? p = [[\"M\", d.plotX, d.plotY]] : r.getPointSpline ? p = [r.getPointSpline(t, d, c)] : l ? (p = 1 === l ? [[\"L\", f.plotX, g]] : 2 === l ? [[\"L\", (f.plotX + u) / 2, f.plotY], [\"L\", (f.plotX + u) / 2, g]] : [[\"L\", u, f.plotY]]).push([\"L\", u, g]) : p = [[\"L\", u, g]], a.push(d.x), l && (a.push(d.x), 2 === l && a.push(d.x)), n.push.apply(n, p), h = !1);\n }), n.xMap = a, r.graphPath = n, n;\n }\n }\n return n.defaultOptions = r(t.defaultOptions, {\n legendSymbol: \"lineMarker\"\n }), e.registerSeriesType(\"line\", n), n;\n }), i(e, \"Series/Area/AreaSeriesDefaults.js\", [], function () {\n return {\n threshold: 0,\n legendSymbol: \"areaMarker\"\n };\n }), i(e, \"Series/Area/AreaSeries.js\", [e[\"Series/Area/AreaSeriesDefaults.js\"], e[\"Core/Series/SeriesRegistry.js\"], e[\"Core/Utilities.js\"]], function (t, e, i) {\n let {\n seriesTypes: {\n line: s\n }\n } = e,\n {\n extend: r,\n merge: o,\n objectEach: n,\n pick: a\n } = i;\n class h extends s {\n drawGraph() {\n this.areaPath = [], super.drawGraph.apply(this);\n let {\n areaPath: t,\n options: e\n } = this;\n [this, ...this.zones].forEach((i, s) => {\n let r = {},\n o = i.fillColor || e.fillColor,\n n = i.area,\n a = n ? \"animate\" : \"attr\";\n n ? (n.endX = this.preventGraphAnimation ? null : t.xMap, n.animate({\n d: t\n })) : (r.zIndex = 0, (n = i.area = this.chart.renderer.path(t).addClass(\"highcharts-area\" + (s ? ` highcharts-zone-area-${s - 1} ` : \" \") + (s && i.className || \"\")).add(this.group)).isArea = !0), this.chart.styledMode || (r.fill = o || i.color || this.color, r[\"fill-opacity\"] = o ? 1 : e.fillOpacity ?? .75, n.css({\n pointerEvents: this.stickyTracking ? \"none\" : \"auto\"\n })), n[a](r), n.startX = t.xMap, n.shiftUnit = e.step ? 2 : 1;\n });\n }\n getGraphPath(t) {\n let e, i, r;\n let o = s.prototype.getGraphPath,\n n = this.options,\n h = n.stacking,\n l = this.yAxis,\n d = [],\n c = [],\n p = this.index,\n u = l.stacking.stacks[this.stackKey],\n g = n.threshold,\n f = Math.round(l.getThreshold(n.threshold)),\n m = a(n.connectNulls, \"percent\" === h),\n x = function (i, s, r) {\n let o = t[i],\n n = h && u[o.x].points[p],\n a = o[r + \"Null\"] || 0,\n m = o[r + \"Cliff\"] || 0,\n x,\n y,\n b = !0;\n m || a ? (x = (a ? n[0] : n[1]) + m, y = n[0] + m, b = !!a) : !h && t[s] && t[s].isNull && (x = y = g), void 0 !== x && (c.push({\n plotX: e,\n plotY: null === x ? f : l.getThreshold(x),\n isNull: b,\n isCliff: !0\n }), d.push({\n plotX: e,\n plotY: null === y ? f : l.getThreshold(y),\n doCurve: !1\n }));\n };\n t = t || this.points, h && (t = this.getStackPoints(t));\n for (let s = 0, o = t.length; s < o; ++s) h || (t[s].leftCliff = t[s].rightCliff = t[s].leftNull = t[s].rightNull = void 0), i = t[s].isNull, e = a(t[s].rectPlotX, t[s].plotX), r = h ? a(t[s].yBottom, f) : f, i && !m || (m || x(s, s - 1, \"left\"), i && !h && m || (c.push(t[s]), d.push({\n x: s,\n plotX: e,\n plotY: r\n })), m || x(s, s + 1, \"right\"));\n let y = o.call(this, c, !0, !0);\n d.reversed = !0;\n let b = o.call(this, d, !0, !0),\n v = b[0];\n v && \"M\" === v[0] && (b[0] = [\"L\", v[1], v[2]]);\n let S = y.concat(b);\n S.length && S.push([\"Z\"]);\n let C = o.call(this, c, !1, m);\n return this.chart.series.length > 1 && h && c.some(t => t.isCliff) && (S.hasStackedCliffs = C.hasStackedCliffs = !0), S.xMap = y.xMap, this.areaPath = S, C;\n }\n getStackPoints(t) {\n let e = this,\n i = [],\n s = [],\n r = this.xAxis,\n o = this.yAxis,\n h = o.stacking.stacks[this.stackKey],\n l = {},\n d = o.series,\n c = d.length,\n p = o.options.reversedStacks ? 1 : -1,\n u = d.indexOf(e);\n if (t = t || this.points, this.options.stacking) {\n for (let e = 0; e < t.length; e++) t[e].leftNull = t[e].rightNull = void 0, l[t[e].x] = t[e];\n n(h, function (t, e) {\n null !== t.total && s.push(e);\n }), s.sort(function (t, e) {\n return t - e;\n });\n let g = d.map(t => t.visible);\n s.forEach(function (t, n) {\n let f = 0,\n m,\n x;\n if (l[t] && !l[t].isNull) i.push(l[t]), [-1, 1].forEach(function (i) {\n let r = 1 === i ? \"rightNull\" : \"leftNull\",\n o = h[s[n + i]],\n a = 0;\n if (o) {\n let i = u;\n for (; i >= 0 && i < c;) {\n let s = d[i].index;\n !(m = o.points[s]) && (s === e.index ? l[t][r] = !0 : g[i] && (x = h[t].points[s]) && (a -= x[1] - x[0])), i += p;\n }\n }\n l[t][1 === i ? \"rightCliff\" : \"leftCliff\"] = a;\n });else {\n let e = u;\n for (; e >= 0 && e < c;) {\n let i = d[e].index;\n if (m = h[t].points[i]) {\n f = m[1];\n break;\n }\n e += p;\n }\n f = a(f, 0), f = o.translate(f, 0, 1, 0, 1), i.push({\n isNull: !0,\n plotX: r.translate(t, 0, 0, 0, 1),\n x: t,\n plotY: f,\n yBottom: f\n });\n }\n });\n }\n return i;\n }\n }\n return h.defaultOptions = o(s.defaultOptions, t), r(h.prototype, {\n singleStacks: !1\n }), e.registerSeriesType(\"area\", h), h;\n }), i(e, \"Series/Spline/SplineSeries.js\", [e[\"Core/Series/SeriesRegistry.js\"], e[\"Core/Utilities.js\"]], function (t, e) {\n let {\n line: i\n } = t.seriesTypes,\n {\n merge: s,\n pick: r\n } = e;\n class o extends i {\n getPointSpline(t, e, i) {\n let s, o, n, a;\n let h = e.plotX || 0,\n l = e.plotY || 0,\n d = t[i - 1],\n c = t[i + 1];\n function p(t) {\n return t && !t.isNull && !1 !== t.doCurve && !e.isCliff;\n }\n if (p(d) && p(c)) {\n let t = d.plotX || 0,\n i = d.plotY || 0,\n r = c.plotX || 0,\n p = c.plotY || 0,\n u = 0;\n s = (1.5 * h + t) / 2.5, o = (1.5 * l + i) / 2.5, n = (1.5 * h + r) / 2.5, a = (1.5 * l + p) / 2.5, n !== s && (u = (a - o) * (n - h) / (n - s) + l - a), o += u, a += u, o > i && o > l ? (o = Math.max(i, l), a = 2 * l - o) : o < i && o < l && (o = Math.min(i, l), a = 2 * l - o), a > p && a > l ? (a = Math.max(p, l), o = 2 * l - a) : a < p && a < l && (a = Math.min(p, l), o = 2 * l - a), e.rightContX = n, e.rightContY = a, e.controlPoints = {\n low: [s, o],\n high: [n, a]\n };\n }\n let u = [\"C\", r(d.rightContX, d.plotX, 0), r(d.rightContY, d.plotY, 0), r(s, h, 0), r(o, l, 0), h, l];\n return d.rightContX = d.rightContY = void 0, u;\n }\n }\n return o.defaultOptions = s(i.defaultOptions), t.registerSeriesType(\"spline\", o), o;\n }), i(e, \"Series/AreaSpline/AreaSplineSeries.js\", [e[\"Series/Spline/SplineSeries.js\"], e[\"Core/Series/SeriesRegistry.js\"], e[\"Core/Utilities.js\"]], function (t, e, i) {\n let {\n area: s,\n area: {\n prototype: r\n }\n } = e.seriesTypes,\n {\n extend: o,\n merge: n\n } = i;\n class a extends t {}\n return a.defaultOptions = n(t.defaultOptions, s.defaultOptions), o(a.prototype, {\n getGraphPath: r.getGraphPath,\n getStackPoints: r.getStackPoints,\n drawGraph: r.drawGraph\n }), e.registerSeriesType(\"areaspline\", a), a;\n }), i(e, \"Series/Column/ColumnSeriesDefaults.js\", [], function () {\n return {\n borderRadius: 3,\n centerInCategory: !1,\n groupPadding: .2,\n marker: null,\n pointPadding: .1,\n minPointLength: 0,\n cropThreshold: 50,\n pointRange: null,\n states: {\n hover: {\n halo: !1,\n brightness: .1\n },\n select: {\n color: \"#cccccc\",\n borderColor: \"#000000\"\n }\n },\n dataLabels: {\n align: void 0,\n verticalAlign: void 0,\n y: void 0\n },\n startFromThreshold: !0,\n stickyTracking: !1,\n tooltip: {\n distance: 6\n },\n threshold: 0,\n borderColor: \"#ffffff\"\n };\n }), i(e, \"Series/Column/ColumnSeries.js\", [e[\"Core/Animation/AnimationUtilities.js\"], e[\"Core/Color/Color.js\"], e[\"Series/Column/ColumnSeriesDefaults.js\"], e[\"Core/Globals.js\"], e[\"Core/Series/Series.js\"], e[\"Core/Series/SeriesRegistry.js\"], e[\"Core/Utilities.js\"]], function (t, e, i, s, r, o, n) {\n let {\n animObject: a\n } = t,\n {\n parse: h\n } = e,\n {\n noop: l\n } = s,\n {\n clamp: d,\n crisp: c,\n defined: p,\n extend: u,\n fireEvent: g,\n isArray: f,\n isNumber: m,\n merge: x,\n pick: y,\n objectEach: b\n } = n;\n class v extends r {\n animate(t) {\n let e, i;\n let s = this,\n r = this.yAxis,\n o = r.pos,\n n = r.reversed,\n h = s.options,\n {\n clipOffset: l,\n inverted: c\n } = this.chart,\n p = {},\n g = c ? \"translateX\" : \"translateY\";\n t && l ? (p.scaleY = .001, i = d(r.toPixels(h.threshold), o, o + r.len), c ? (i += n ? -Math.floor(l[0]) : Math.ceil(l[2]), p.translateX = i - r.len) : (i += n ? Math.ceil(l[0]) : -Math.floor(l[2]), p.translateY = i), s.clipBox && s.setClip(), s.group.attr(p)) : (e = Number(s.group.attr(g)), s.group.animate({\n scaleY: 1\n }, u(a(s.options.animation), {\n step: function (t, i) {\n s.group && (p[g] = e + i.pos * (o - e), s.group.attr(p));\n }\n })));\n }\n init(t, e) {\n super.init.apply(this, arguments);\n let i = this;\n (t = i.chart).hasRendered && t.series.forEach(function (t) {\n t.type === i.type && (t.isDirty = !0);\n });\n }\n getColumnMetrics() {\n let t = this,\n e = t.options,\n i = t.xAxis,\n s = t.yAxis,\n r = i.options.reversedStacks,\n o = i.reversed && !r || !i.reversed && r,\n n = {},\n a,\n h = 0;\n !1 === e.grouping ? h = 1 : t.chart.series.forEach(function (e) {\n let i;\n let r = e.yAxis,\n o = e.options;\n e.type === t.type && e.reserveSpace() && s.len === r.len && s.pos === r.pos && (o.stacking && \"group\" !== o.stacking ? (void 0 === n[a = e.stackKey] && (n[a] = h++), i = n[a]) : !1 !== o.grouping && (i = h++), e.columnIndex = i);\n });\n let l = Math.min(Math.abs(i.transA) * (!i.brokenAxis?.hasBreaks && i.ordinal?.slope || e.pointRange || i.closestPointRange || i.tickInterval || 1), i.len),\n d = l * e.groupPadding,\n c = (l - 2 * d) / (h || 1),\n p = Math.min(e.maxPointWidth || i.len, y(e.pointWidth, c * (1 - 2 * e.pointPadding))),\n u = (t.columnIndex || 0) + (o ? 1 : 0);\n return t.columnMetrics = {\n width: p,\n offset: (c - p) / 2 + (d + u * c - l / 2) * (o ? -1 : 1),\n paddedWidth: c,\n columnCount: h\n }, t.columnMetrics;\n }\n crispCol(t, e, i, s) {\n let r = this.borderWidth,\n o = this.chart.inverted;\n return s = c(e + s, r, o) - (e = c(e, r, o)), this.options.crisp && (i = c(t + i, r) - (t = c(t, r))), {\n x: t,\n y: e,\n width: i,\n height: s\n };\n }\n adjustForMissingColumns(t, e, i, s) {\n if (!i.isNull && s.columnCount > 1) {\n let r = this.xAxis.series.filter(t => t.visible).map(t => t.index),\n o = 0,\n n = 0;\n b(this.xAxis.stacking?.stacks, t => {\n if (\"number\" == typeof i.x) {\n let e = t[i.x.toString()];\n if (e && f(e.points[this.index])) {\n let t = Object.keys(e.points).filter(t => !t.match(\",\") && e.points[t] && e.points[t].length > 1).map(parseFloat).filter(t => -1 !== r.indexOf(t)).sort((t, e) => e - t);\n o = t.indexOf(this.index), n = t.length;\n }\n }\n }), o = this.xAxis.reversed ? n - 1 - o : o;\n let a = (n - 1) * s.paddedWidth + e;\n t = (i.plotX || 0) + a / 2 - e - o * s.paddedWidth;\n }\n return t;\n }\n translate() {\n let t = this,\n e = t.chart,\n i = t.options,\n s = t.dense = t.closestPointRange * t.xAxis.transA < 2,\n o = t.borderWidth = y(i.borderWidth, s ? 0 : 1),\n n = t.xAxis,\n a = t.yAxis,\n h = i.threshold,\n l = y(i.minPointLength, 5),\n c = t.getColumnMetrics(),\n u = c.width,\n f = t.pointXOffset = c.offset,\n x = t.dataMin,\n b = t.dataMax,\n v = t.translatedThreshold = a.getThreshold(h),\n S = t.barW = Math.max(u, 1 + 2 * o);\n i.pointPadding && (S = Math.ceil(S)), r.prototype.translate.apply(t), t.points.forEach(function (s) {\n let r = y(s.yBottom, v),\n o = 999 + Math.abs(r),\n g = s.plotX || 0,\n C = d(s.plotY, -o, a.len + o),\n k,\n M = Math.min(C, r),\n w = Math.max(C, r) - M,\n T = u,\n A = g + f,\n P = S;\n l && Math.abs(w) < l && (w = l, k = !a.reversed && !s.negative || a.reversed && s.negative, m(h) && m(b) && s.y === h && b <= h && (a.min || 0) < h && (x !== b || (a.max || 0) <= h) && (k = !k, s.negative = !s.negative), M = Math.abs(M - v) > l ? r - l : v - (k ? l : 0)), p(s.options.pointWidth) && (A -= Math.round(((T = P = Math.ceil(s.options.pointWidth)) - u) / 2)), i.centerInCategory && !i.stacking && (A = t.adjustForMissingColumns(A, T, s, c)), s.barX = A, s.pointWidth = T, s.tooltipPos = e.inverted ? [d(a.len + a.pos - e.plotLeft - C, a.pos - e.plotLeft, a.len + a.pos - e.plotLeft), n.len + n.pos - e.plotTop - A - P / 2, w] : [n.left - e.plotLeft + A + P / 2, d(C + a.pos - e.plotTop, a.pos - e.plotTop, a.len + a.pos - e.plotTop), w], s.shapeType = t.pointClass.prototype.shapeType || \"roundedRect\", s.shapeArgs = t.crispCol(A, s.isNull ? v : M, P, s.isNull ? 0 : w);\n }), g(this, \"afterColumnTranslate\");\n }\n drawGraph() {\n this.group[this.dense ? \"addClass\" : \"removeClass\"](\"highcharts-dense-data\");\n }\n pointAttribs(t, e) {\n let i = this.options,\n s = this.pointAttrToOptions || {},\n r = s.stroke || \"borderColor\",\n o = s[\"stroke-width\"] || \"borderWidth\",\n n,\n a,\n l,\n d = t && t.color || this.color,\n c = t && t[r] || i[r] || d,\n p = t && t.options.dashStyle || i.dashStyle,\n u = t && t[o] || i[o] || this[o] || 0,\n g = y(t && t.opacity, i.opacity, 1);\n t && this.zones.length && (a = t.getZone(), d = t.options.color || a && (a.color || t.nonZonedColor) || this.color, a && (c = a.borderColor || c, p = a.dashStyle || p, u = a.borderWidth || u)), e && t && (l = (n = x(i.states[e], t.options.states && t.options.states[e] || {})).brightness, d = n.color || void 0 !== l && h(d).brighten(n.brightness).get() || d, c = n[r] || c, u = n[o] || u, p = n.dashStyle || p, g = y(n.opacity, g));\n let f = {\n fill: d,\n stroke: c,\n \"stroke-width\": u,\n opacity: g\n };\n return p && (f.dashstyle = p), f;\n }\n drawPoints(t = this.points) {\n let e;\n let i = this,\n s = this.chart,\n r = i.options,\n o = s.renderer,\n n = r.animationLimit || 250;\n t.forEach(function (t) {\n let a = t.plotY,\n h = t.graphic,\n l = !!h,\n d = h && s.pointCount < n ? \"animate\" : \"attr\";\n m(a) && null !== t.y ? (e = t.shapeArgs, h && t.hasNewShapeType() && (h = h.destroy()), i.enabledDataSorting && (t.startXPos = i.xAxis.reversed ? -(e && e.width || 0) : i.xAxis.width), !h && (t.graphic = h = o[t.shapeType](e).add(t.group || i.group), h && i.enabledDataSorting && s.hasRendered && s.pointCount < n && (h.attr({\n x: t.startXPos\n }), l = !0, d = \"animate\")), h && l && h[d](x(e)), s.styledMode || h[d](i.pointAttribs(t, t.selected && \"select\")).shadow(!1 !== t.allowShadow && r.shadow), h && (h.addClass(t.getClassName(), !0), h.attr({\n visibility: t.visible ? \"inherit\" : \"hidden\"\n }))) : h && (t.graphic = h.destroy());\n });\n }\n drawTracker(t = this.points) {\n let e;\n let i = this,\n s = i.chart,\n r = s.pointer,\n o = function (t) {\n let e = r?.getPointFromEvent(t);\n r && e && i.options.enableMouseTracking && (r.isDirectTouch = !0, e.onMouseOver(t));\n };\n t.forEach(function (t) {\n e = f(t.dataLabels) ? t.dataLabels : t.dataLabel ? [t.dataLabel] : [], t.graphic && (t.graphic.element.point = t), e.forEach(function (e) {\n (e.div || e.element).point = t;\n });\n }), i._hasTracking || (i.trackerGroups.forEach(function (t) {\n i[t] && (i[t].addClass(\"highcharts-tracker\").on(\"mouseover\", o).on(\"mouseout\", function (t) {\n r?.onTrackerMouseOut(t);\n }).on(\"touchstart\", o), !s.styledMode && i.options.cursor && i[t].css({\n cursor: i.options.cursor\n }));\n }), i._hasTracking = !0), g(this, \"afterDrawTracker\");\n }\n remove() {\n let t = this,\n e = t.chart;\n e.hasRendered && e.series.forEach(function (e) {\n e.type === t.type && (e.isDirty = !0);\n }), r.prototype.remove.apply(t, arguments);\n }\n }\n return v.defaultOptions = x(r.defaultOptions, i), u(v.prototype, {\n directTouch: !0,\n getSymbol: l,\n negStacks: !0,\n trackerGroups: [\"group\", \"dataLabelsGroup\"]\n }), o.registerSeriesType(\"column\", v), v;\n }), i(e, \"Core/Series/DataLabel.js\", [e[\"Core/Animation/AnimationUtilities.js\"], e[\"Core/Templating.js\"], e[\"Core/Utilities.js\"]], function (t, e, i) {\n var s;\n let {\n getDeferredAnimation: r\n } = t,\n {\n format: o\n } = e,\n {\n defined: n,\n extend: a,\n fireEvent: h,\n isArray: l,\n isString: d,\n merge: c,\n objectEach: p,\n pick: u,\n pInt: g,\n splat: f\n } = i;\n return function (t) {\n function e() {\n return v(this).some(t => t?.enabled);\n }\n function i(t, e, i, s, r) {\n let {\n chart: o,\n enabledDataSorting: h\n } = this,\n l = this.isCartesian && o.inverted,\n d = t.plotX,\n p = t.plotY,\n g = i.rotation || 0,\n f = n(d) && n(p) && o.isInsidePlot(d, Math.round(p), {\n inverted: l,\n paneCoordinates: !0,\n series: this\n }),\n m = 0 === g && \"justify\" === u(i.overflow, h ? \"none\" : \"justify\"),\n x = this.visible && !1 !== t.visible && n(d) && (t.series.forceDL || h && !m || f || u(i.inside, !!this.options.stacking) && s && o.isInsidePlot(d, l ? s.x + 1 : s.y + s.height - 1, {\n inverted: l,\n paneCoordinates: !0,\n series: this\n })),\n y = t.pos();\n if (x && y) {\n var b;\n let n = e.getBBox(),\n d = e.getBBox(void 0, 0),\n p = {\n right: 1,\n center: .5\n }[i.align || 0] || 0,\n v = {\n bottom: 1,\n middle: .5\n }[i.verticalAlign || 0] || 0;\n if (s = a({\n x: y[0],\n y: Math.round(y[1]),\n width: 0,\n height: 0\n }, s || {}), \"plotEdges\" === i.alignTo && this.isCartesian && (s[l ? \"x\" : \"y\"] = 0, s[l ? \"width\" : \"height\"] = this.yAxis?.len || 0), a(i, {\n width: n.width,\n height: n.height\n }), b = s, h && this.xAxis && !m && this.setDataLabelStartPos(t, e, r, f, b), e.align(c(i, {\n width: d.width,\n height: d.height\n }), !1, s, !1), e.alignAttr.x += p * (d.width - n.width), e.alignAttr.y += v * (d.height - n.height), e[e.placed ? \"animate\" : \"attr\"]({\n x: e.alignAttr.x + (n.width - d.width) / 2,\n y: e.alignAttr.y + (n.height - d.height) / 2,\n rotationOriginX: (e.width || 0) / 2,\n rotationOriginY: (e.height || 0) / 2\n }), m && s.height >= 0) this.justifyDataLabel(e, i, e.alignAttr, n, s, r);else if (u(i.crop, !0)) {\n let {\n x: t,\n y: i\n } = e.alignAttr;\n x = o.isInsidePlot(t, i, {\n paneCoordinates: !0,\n series: this\n }) && o.isInsidePlot(t + n.width - 1, i + n.height - 1, {\n paneCoordinates: !0,\n series: this\n });\n }\n i.shape && !g && e[r ? \"attr\" : \"animate\"]({\n anchorX: y[0],\n anchorY: y[1]\n });\n }\n r && h && (e.placed = !1), x || h && !m ? (e.show(), e.placed = !0) : (e.hide(), e.placed = !1);\n }\n function s() {\n return this.plotGroup(\"dataLabelsGroup\", \"data-labels\", this.hasRendered ? \"inherit\" : \"hidden\", this.options.dataLabels.zIndex || 6);\n }\n function m(t) {\n let e = this.hasRendered || 0,\n i = this.initDataLabelsGroup().attr({\n opacity: +e\n });\n return !e && i && (this.visible && i.show(), this.options.animation ? i.animate({\n opacity: 1\n }, t) : i.attr({\n opacity: 1\n })), i;\n }\n function x(t) {\n let e;\n t = t || this.points;\n let i = this,\n s = i.chart,\n a = i.options,\n l = s.renderer,\n {\n backgroundColor: c,\n plotBackgroundColor: m\n } = s.options.chart,\n x = l.getContrast(d(m) && m || d(c) && c || \"#000000\"),\n y = v(i),\n {\n animation: S,\n defer: C\n } = y[0],\n k = C ? r(s, S, i) : {\n defer: 0,\n duration: 0\n };\n h(this, \"drawDataLabels\"), i.hasDataLabels?.() && (e = this.initDataLabels(k), t.forEach(t => {\n let r = t.dataLabels || [];\n f(b(y, t.dlOptions || t.options?.dataLabels)).forEach((c, f) => {\n let m = c.enabled && (t.visible || t.dataLabelOnHidden) && (!t.isNull || t.dataLabelOnNull) && function (t, e) {\n let i = e.filter;\n if (i) {\n let e = i.operator,\n s = t[i.property],\n r = i.value;\n return \">\" === e && s > r || \"<\" === e && s < r || \">=\" === e && s >= r || \"<=\" === e && s <= r || \"==\" === e && s == r || \"===\" === e && s === r || \"!=\" === e && s != r || \"!==\" === e && s !== r;\n }\n return !0;\n }(t, c),\n {\n backgroundColor: y,\n borderColor: b,\n distance: v,\n style: S = {}\n } = c,\n C,\n k,\n M,\n w,\n T = {},\n A = r[f],\n P = !A,\n L;\n m && (k = u(c[t.formatPrefix + \"Format\"], c.format), C = t.getLabelConfig(), M = n(k) ? o(k, C, s) : (c[t.formatPrefix + \"Formatter\"] || c.formatter).call(C, c), w = c.rotation, !s.styledMode && (S.color = u(c.color, S.color, d(i.color) ? i.color : void 0, \"#000000\"), \"contrast\" === S.color ? (\"none\" !== y && (L = y), t.contrastColor = l.getContrast(\"auto\" !== L && L || t.color || i.color), S.color = L || !n(v) && c.inside || 0 > g(v || 0) || a.stacking ? t.contrastColor : x) : delete t.contrastColor, a.cursor && (S.cursor = a.cursor)), T = {\n r: c.borderRadius || 0,\n rotation: w,\n padding: c.padding,\n zIndex: 1\n }, s.styledMode || (T.fill = \"auto\" === y ? t.color : y, T.stroke = \"auto\" === b ? t.color : b, T[\"stroke-width\"] = c.borderWidth), p(T, (t, e) => {\n void 0 === t && delete T[e];\n })), !A || m && n(M) && !!A.div == !!c.useHTML && (A.rotation && c.rotation || A.rotation === c.rotation) || (A = void 0, P = !0), m && n(M) && (A ? T.text = M : (A = l.label(M, 0, 0, c.shape, void 0, void 0, c.useHTML, void 0, \"data-label\")).addClass(\" highcharts-data-label-color-\" + t.colorIndex + \" \" + (c.className || \"\") + (c.useHTML ? \" highcharts-tracker\" : \"\")), A && (A.options = c, A.attr(T), s.styledMode ? S.width && A.css({\n width: S.width,\n textOverflow: S.textOverflow\n }) : A.css(S).shadow(c.shadow), h(A, \"beforeAddingDataLabel\", {\n labelOptions: c,\n point: t\n }), A.added || A.add(e), i.alignDataLabel(t, A, c, void 0, P), A.isActive = !0, r[f] && r[f] !== A && r[f].destroy(), r[f] = A));\n });\n let c = r.length;\n for (; c--;) r[c] && r[c].isActive ? r[c].isActive = !1 : (r[c]?.destroy(), r.splice(c, 1));\n t.dataLabel = r[0], t.dataLabels = r;\n })), h(this, \"afterDrawDataLabels\");\n }\n function y(t, e, i, s, r, o) {\n let n = this.chart,\n a = e.align,\n h = e.verticalAlign,\n l = t.box ? 0 : t.padding || 0,\n d = n.inverted ? this.yAxis : this.xAxis,\n c = d ? d.left - n.plotLeft : 0,\n p = n.inverted ? this.xAxis : this.yAxis,\n u = p ? p.top - n.plotTop : 0,\n {\n x: g = 0,\n y: f = 0\n } = e,\n m,\n x;\n return (m = (i.x || 0) + l + c) < 0 && (\"right\" === a && g >= 0 ? (e.align = \"left\", e.inside = !0) : g -= m, x = !0), (m = (i.x || 0) + s.width - l + c) > n.plotWidth && (\"left\" === a && g <= 0 ? (e.align = \"right\", e.inside = !0) : g += n.plotWidth - m, x = !0), (m = i.y + l + u) < 0 && (\"bottom\" === h && f >= 0 ? (e.verticalAlign = \"top\", e.inside = !0) : f -= m, x = !0), (m = (i.y || 0) + s.height - l + u) > n.plotHeight && (\"top\" === h && f <= 0 ? (e.verticalAlign = \"bottom\", e.inside = !0) : f += n.plotHeight - m, x = !0), x && (e.x = g, e.y = f, t.placed = !o, t.align(e, void 0, r)), x;\n }\n function b(t, e) {\n let i = [],\n s;\n if (l(t) && !l(e)) i = t.map(function (t) {\n return c(t, e);\n });else if (l(e) && !l(t)) i = e.map(function (e) {\n return c(t, e);\n });else if (l(t) || l(e)) {\n if (l(t) && l(e)) for (s = Math.max(t.length, e.length); s--;) i[s] = c(t[s], e[s]);\n } else i = c(t, e);\n return i;\n }\n function v(t) {\n let e = t.chart.options.plotOptions;\n return f(b(b(e?.series?.dataLabels, e?.[t.type]?.dataLabels), t.options.dataLabels));\n }\n function S(t, e, i, s, r) {\n let o = this.chart,\n n = o.inverted,\n a = this.xAxis,\n h = a.reversed,\n l = ((n ? e.height : e.width) || 0) / 2,\n d = t.pointWidth,\n c = d ? d / 2 : 0;\n e.startXPos = n ? r.x : h ? -l - c : a.width - l + c, e.startYPos = n ? h ? this.yAxis.height - l + c : -l - c : r.y, s ? \"hidden\" === e.visibility && (e.show(), e.attr({\n opacity: 0\n }).animate({\n opacity: 1\n })) : e.attr({\n opacity: 1\n }).animate({\n opacity: 0\n }, void 0, e.hide), o.hasRendered && (i && e.attr({\n x: e.startXPos,\n y: e.startYPos\n }), e.placed = !0);\n }\n t.compose = function (t) {\n let r = t.prototype;\n r.initDataLabels || (r.initDataLabels = m, r.initDataLabelsGroup = s, r.alignDataLabel = i, r.drawDataLabels = x, r.justifyDataLabel = y, r.setDataLabelStartPos = S, r.hasDataLabels = e);\n };\n }(s || (s = {})), s;\n }), i(e, \"Series/Column/ColumnDataLabel.js\", [e[\"Core/Series/DataLabel.js\"], e[\"Core/Globals.js\"], e[\"Core/Series/SeriesRegistry.js\"], e[\"Core/Utilities.js\"]], function (t, e, i, s) {\n var r;\n let {\n composed: o\n } = e,\n {\n series: n\n } = i,\n {\n merge: a,\n pick: h,\n pushUnique: l\n } = s;\n return function (e) {\n function i(t, e, i, s, r) {\n let o = this.chart.inverted,\n l = t.series,\n d = (l.xAxis ? l.xAxis.len : this.chart.plotSizeX) || 0,\n c = (l.yAxis ? l.yAxis.len : this.chart.plotSizeY) || 0,\n p = t.dlBox || t.shapeArgs,\n u = h(t.below, t.plotY > h(this.translatedThreshold, c)),\n g = h(i.inside, !!this.options.stacking);\n if (p) {\n if (s = a(p), !(\"allow\" === i.overflow && !1 === i.crop)) {\n s.y < 0 && (s.height += s.y, s.y = 0);\n let t = s.y + s.height - c;\n t > 0 && t < s.height - 1 && (s.height -= t);\n }\n o && (s = {\n x: c - s.y - s.height,\n y: d - s.x - s.width,\n width: s.height,\n height: s.width\n }), g || (o ? (s.x += u ? 0 : s.width, s.width = 0) : (s.y += u ? s.height : 0, s.height = 0));\n }\n i.align = h(i.align, !o || g ? \"center\" : u ? \"right\" : \"left\"), i.verticalAlign = h(i.verticalAlign, o || g ? \"middle\" : u ? \"top\" : \"bottom\"), n.prototype.alignDataLabel.call(this, t, e, i, s, r), i.inside && t.contrastColor && e.css({\n color: t.contrastColor\n });\n }\n e.compose = function (e) {\n t.compose(n), l(o, \"ColumnDataLabel\") && (e.prototype.alignDataLabel = i);\n };\n }(r || (r = {})), r;\n }), i(e, \"Series/Bar/BarSeries.js\", [e[\"Series/Column/ColumnSeries.js\"], e[\"Core/Series/SeriesRegistry.js\"], e[\"Core/Utilities.js\"]], function (t, e, i) {\n let {\n extend: s,\n merge: r\n } = i;\n class o extends t {}\n return o.defaultOptions = r(t.defaultOptions, {}), s(o.prototype, {\n inverted: !0\n }), e.registerSeriesType(\"bar\", o), o;\n }), i(e, \"Series/Scatter/ScatterSeriesDefaults.js\", [], function () {\n return {\n lineWidth: 0,\n findNearestPointBy: \"xy\",\n jitter: {\n x: 0,\n y: 0\n },\n marker: {\n enabled: !0\n },\n tooltip: {\n headerFormat: '● {series.name} ',\n pointFormat: \"x: {point.x} y: {point.y} \"\n }\n };\n }), i(e, \"Series/Scatter/ScatterSeries.js\", [e[\"Series/Scatter/ScatterSeriesDefaults.js\"], e[\"Core/Series/SeriesRegistry.js\"], e[\"Core/Utilities.js\"]], function (t, e, i) {\n let {\n column: s,\n line: r\n } = e.seriesTypes,\n {\n addEvent: o,\n extend: n,\n merge: a\n } = i;\n class h extends r {\n applyJitter() {\n let t = this,\n e = this.options.jitter,\n i = this.points.length;\n e && this.points.forEach(function (s, r) {\n [\"x\", \"y\"].forEach(function (o, n) {\n if (e[o] && !s.isNull) {\n let a = `plot${o.toUpperCase()}`,\n h = t[`${o}Axis`],\n l = e[o] * h.transA;\n if (h && !h.logarithmic) {\n let t = Math.max(0, (s[a] || 0) - l),\n e = Math.min(h.len, (s[a] || 0) + l);\n s[a] = t + (e - t) * function (t) {\n let e = 1e4 * Math.sin(t);\n return e - Math.floor(e);\n }(r + n * i), \"x\" === o && (s.clientX = s.plotX);\n }\n }\n });\n });\n }\n drawGraph() {\n this.options.lineWidth ? super.drawGraph() : this.graph && (this.graph = this.graph.destroy());\n }\n }\n return h.defaultOptions = a(r.defaultOptions, t), n(h.prototype, {\n drawTracker: s.prototype.drawTracker,\n sorted: !1,\n requireSorting: !1,\n noSharedTooltip: !0,\n trackerGroups: [\"group\", \"markerGroup\", \"dataLabelsGroup\"]\n }), o(h, \"afterTranslate\", function () {\n this.applyJitter();\n }), e.registerSeriesType(\"scatter\", h), h;\n }), i(e, \"Series/CenteredUtilities.js\", [e[\"Core/Globals.js\"], e[\"Core/Series/Series.js\"], e[\"Core/Utilities.js\"]], function (t, e, i) {\n var s, r;\n let {\n deg2rad: o\n } = t,\n {\n fireEvent: n,\n isNumber: a,\n pick: h,\n relativeLength: l\n } = i;\n return (r = s || (s = {})).getCenter = function () {\n let t = this.options,\n i = this.chart,\n s = 2 * (t.slicedOffset || 0),\n r = i.plotWidth - 2 * s,\n o = i.plotHeight - 2 * s,\n d = t.center,\n c = Math.min(r, o),\n p = t.thickness,\n u,\n g = t.size,\n f = t.innerSize || 0,\n m,\n x;\n \"string\" == typeof g && (g = parseFloat(g)), \"string\" == typeof f && (f = parseFloat(f));\n let y = [h(d[0], \"50%\"), h(d[1], \"50%\"), h(g && g < 0 ? void 0 : t.size, \"100%\"), h(f && f < 0 ? void 0 : t.innerSize || 0, \"0%\")];\n for (!i.angular || this instanceof e || (y[3] = 0), m = 0; m < 4; ++m) x = y[m], u = m < 2 || 2 === m && /%$/.test(x), y[m] = l(x, [r, o, c, y[2]][m]) + (u ? s : 0);\n return y[3] > y[2] && (y[3] = y[2]), a(p) && 2 * p < y[2] && p > 0 && (y[3] = y[2] - 2 * p), n(this, \"afterGetCenter\", {\n positions: y\n }), y;\n }, r.getStartAndEndRadians = function (t, e) {\n let i = a(t) ? t : 0,\n s = a(e) && e > i && e - i < 360 ? e : i + 360;\n return {\n start: o * (i + -90),\n end: o * (s + -90)\n };\n }, s;\n }), i(e, \"Series/Pie/PiePoint.js\", [e[\"Core/Animation/AnimationUtilities.js\"], e[\"Core/Series/Point.js\"], e[\"Core/Utilities.js\"]], function (t, e, i) {\n let {\n setAnimation: s\n } = t,\n {\n addEvent: r,\n defined: o,\n extend: n,\n isNumber: a,\n pick: h,\n relativeLength: l\n } = i;\n class d extends e {\n getConnectorPath(t) {\n let e = t.dataLabelPosition,\n i = t.options || {},\n s = i.connectorShape,\n r = this.connectorShapes[s] || s;\n return e && r.call(this, {\n ...e.computed,\n alignment: e.alignment\n }, e.connectorPosition, i) || [];\n }\n getTranslate() {\n return this.sliced && this.slicedTranslation || {\n translateX: 0,\n translateY: 0\n };\n }\n haloPath(t) {\n let e = this.shapeArgs;\n return this.sliced || !this.visible ? [] : this.series.chart.renderer.symbols.arc(e.x, e.y, e.r + t, e.r + t, {\n innerR: e.r - 1,\n start: e.start,\n end: e.end,\n borderRadius: e.borderRadius\n });\n }\n constructor(t, e, i) {\n super(t, e, i), this.half = 0, this.name ?? (this.name = \"Slice\");\n let s = t => {\n this.slice(\"select\" === t.type);\n };\n r(this, \"select\", s), r(this, \"unselect\", s);\n }\n isValid() {\n return a(this.y) && this.y >= 0;\n }\n setVisible(t, e = !0) {\n t !== this.visible && this.update({\n visible: t ?? !this.visible\n }, e, void 0, !1);\n }\n slice(t, e, i) {\n let r = this.series;\n s(i, r.chart), e = h(e, !0), this.sliced = this.options.sliced = t = o(t) ? t : !this.sliced, r.options.data[r.data.indexOf(this)] = this.options, this.graphic && this.graphic.animate(this.getTranslate());\n }\n }\n return n(d.prototype, {\n connectorShapes: {\n fixedOffset: function (t, e, i) {\n let s = e.breakAt,\n r = e.touchingSliceAt,\n o = i.softConnector ? [\"C\", t.x + (\"left\" === t.alignment ? -5 : 5), t.y, 2 * s.x - r.x, 2 * s.y - r.y, s.x, s.y] : [\"L\", s.x, s.y];\n return [[\"M\", t.x, t.y], o, [\"L\", r.x, r.y]];\n },\n straight: function (t, e) {\n let i = e.touchingSliceAt;\n return [[\"M\", t.x, t.y], [\"L\", i.x, i.y]];\n },\n crookedLine: function (t, e, i) {\n let {\n breakAt: s,\n touchingSliceAt: r\n } = e,\n {\n series: o\n } = this,\n [n, a, h] = o.center,\n d = h / 2,\n {\n plotLeft: c,\n plotWidth: p\n } = o.chart,\n u = \"left\" === t.alignment,\n {\n x: g,\n y: f\n } = t,\n m = s.x;\n if (i.crookDistance) {\n let t = l(i.crookDistance, 1);\n m = u ? n + d + (p + c - n - d) * (1 - t) : c + (n - d) * t;\n } else m = n + (a - f) * Math.tan((this.angle || 0) - Math.PI / 2);\n let x = [[\"M\", g, f]];\n return (u ? m <= g && m >= s.x : m >= g && m <= s.x) && x.push([\"L\", m, f]), x.push([\"L\", s.x, s.y], [\"L\", r.x, r.y]), x;\n }\n }\n }), d;\n }), i(e, \"Series/Pie/PieSeriesDefaults.js\", [], function () {\n return {\n borderRadius: 3,\n center: [null, null],\n clip: !1,\n colorByPoint: !0,\n dataLabels: {\n connectorPadding: 5,\n connectorShape: \"crookedLine\",\n crookDistance: void 0,\n distance: 30,\n enabled: !0,\n formatter: function () {\n return this.point.isNull ? void 0 : this.point.name;\n },\n softConnector: !0,\n x: 0\n },\n fillColor: void 0,\n ignoreHiddenPoint: !0,\n inactiveOtherPoints: !0,\n legendType: \"point\",\n marker: null,\n size: null,\n showInLegend: !1,\n slicedOffset: 10,\n stickyTracking: !1,\n tooltip: {\n followPointer: !0\n },\n borderColor: \"#ffffff\",\n borderWidth: 1,\n lineWidth: void 0,\n states: {\n hover: {\n brightness: .1\n }\n }\n };\n }), i(e, \"Series/Pie/PieSeries.js\", [e[\"Series/CenteredUtilities.js\"], e[\"Series/Column/ColumnSeries.js\"], e[\"Core/Globals.js\"], e[\"Series/Pie/PiePoint.js\"], e[\"Series/Pie/PieSeriesDefaults.js\"], e[\"Core/Series/Series.js\"], e[\"Core/Series/SeriesRegistry.js\"], e[\"Core/Renderer/SVG/Symbols.js\"], e[\"Core/Utilities.js\"]], function (t, e, i, s, r, o, n, a, h) {\n let {\n getStartAndEndRadians: l\n } = t,\n {\n noop: d\n } = i,\n {\n clamp: c,\n extend: p,\n fireEvent: u,\n merge: g,\n pick: f\n } = h;\n class m extends o {\n animate(t) {\n let e = this,\n i = e.points,\n s = e.startAngleRad;\n t || i.forEach(function (t) {\n let i = t.graphic,\n r = t.shapeArgs;\n i && r && (i.attr({\n r: f(t.startR, e.center && e.center[3] / 2),\n start: s,\n end: s\n }), i.animate({\n r: r.r,\n start: r.start,\n end: r.end\n }, e.options.animation));\n });\n }\n drawEmpty() {\n let t, e;\n let i = this.startAngleRad,\n s = this.endAngleRad,\n r = this.options;\n 0 === this.total && this.center ? (t = this.center[0], e = this.center[1], this.graph || (this.graph = this.chart.renderer.arc(t, e, this.center[1] / 2, 0, i, s).addClass(\"highcharts-empty-series\").add(this.group)), this.graph.attr({\n d: a.arc(t, e, this.center[2] / 2, 0, {\n start: i,\n end: s,\n innerR: this.center[3] / 2\n })\n }), this.chart.styledMode || this.graph.attr({\n \"stroke-width\": r.borderWidth,\n fill: r.fillColor || \"none\",\n stroke: r.color || \"#cccccc\"\n })) : this.graph && (this.graph = this.graph.destroy());\n }\n drawPoints() {\n let t = this.chart.renderer;\n this.points.forEach(function (e) {\n e.graphic && e.hasNewShapeType() && (e.graphic = e.graphic.destroy()), e.graphic || (e.graphic = t[e.shapeType](e.shapeArgs).add(e.series.group), e.delayedRendering = !0);\n });\n }\n generatePoints() {\n super.generatePoints(), this.updateTotals();\n }\n getX(t, e, i, s) {\n let r = this.center,\n o = this.radii ? this.radii[i.index] || 0 : r[2] / 2,\n n = s.dataLabelPosition,\n a = n?.distance || 0,\n h = Math.asin(c((t - r[1]) / (o + a), -1, 1));\n return r[0] + Math.cos(h) * (o + a) * (e ? -1 : 1) + (a > 0 ? (e ? -1 : 1) * (s.padding || 0) : 0);\n }\n hasData() {\n return !!this.processedXData.length;\n }\n redrawPoints() {\n let t, e, i, s;\n let r = this,\n o = r.chart;\n this.drawEmpty(), r.group && !o.styledMode && r.group.shadow(r.options.shadow), r.points.forEach(function (n) {\n let a = {};\n e = n.graphic, !n.isNull && e ? (s = n.shapeArgs, t = n.getTranslate(), o.styledMode || (i = r.pointAttribs(n, n.selected && \"select\")), n.delayedRendering ? (e.setRadialReference(r.center).attr(s).attr(t), o.styledMode || e.attr(i).attr({\n \"stroke-linejoin\": \"round\"\n }), n.delayedRendering = !1) : (e.setRadialReference(r.center), o.styledMode || g(!0, a, i), g(!0, a, s, t), e.animate(a)), e.attr({\n visibility: n.visible ? \"inherit\" : \"hidden\"\n }), e.addClass(n.getClassName(), !0)) : e && (n.graphic = e.destroy());\n });\n }\n sortByAngle(t, e) {\n t.sort(function (t, i) {\n return void 0 !== t.angle && (i.angle - t.angle) * e;\n });\n }\n translate(t) {\n u(this, \"translate\"), this.generatePoints();\n let e = this.options,\n i = e.slicedOffset,\n s = l(e.startAngle, e.endAngle),\n r = this.startAngleRad = s.start,\n o = (this.endAngleRad = s.end) - r,\n n = this.points,\n a = e.ignoreHiddenPoint,\n h = n.length,\n d,\n c,\n p,\n g,\n f,\n m,\n x,\n y = 0;\n for (t || (this.center = t = this.getCenter()), m = 0; m < h; m++) {\n x = n[m], d = r + y * o, x.isValid() && (!a || x.visible) && (y += x.percentage / 100), c = r + y * o;\n let e = {\n x: t[0],\n y: t[1],\n r: t[2] / 2,\n innerR: t[3] / 2,\n start: Math.round(1e3 * d) / 1e3,\n end: Math.round(1e3 * c) / 1e3\n };\n x.shapeType = \"arc\", x.shapeArgs = e, (p = (c + d) / 2) > 1.5 * Math.PI ? p -= 2 * Math.PI : p < -Math.PI / 2 && (p += 2 * Math.PI), x.slicedTranslation = {\n translateX: Math.round(Math.cos(p) * i),\n translateY: Math.round(Math.sin(p) * i)\n }, g = Math.cos(p) * t[2] / 2, f = Math.sin(p) * t[2] / 2, x.tooltipPos = [t[0] + .7 * g, t[1] + .7 * f], x.half = p < -Math.PI / 2 || p > Math.PI / 2 ? 1 : 0, x.angle = p;\n }\n u(this, \"afterTranslate\");\n }\n updateTotals() {\n let t = this.points,\n e = t.length,\n i = this.options.ignoreHiddenPoint,\n s,\n r,\n o = 0;\n for (s = 0; s < e; s++) (r = t[s]).isValid() && (!i || r.visible) && (o += r.y);\n for (s = 0, this.total = o; s < e; s++) (r = t[s]).percentage = o > 0 && (r.visible || !i) ? r.y / o * 100 : 0, r.total = o;\n }\n }\n return m.defaultOptions = g(o.defaultOptions, r), p(m.prototype, {\n axisTypes: [],\n directTouch: !0,\n drawGraph: void 0,\n drawTracker: e.prototype.drawTracker,\n getCenter: t.getCenter,\n getSymbol: d,\n invertible: !1,\n isCartesian: !1,\n noSharedTooltip: !0,\n pointAttribs: e.prototype.pointAttribs,\n pointClass: s,\n requireSorting: !1,\n searchPoint: d,\n trackerGroups: [\"group\", \"dataLabelsGroup\"]\n }), n.registerSeriesType(\"pie\", m), m;\n }), i(e, \"Series/Pie/PieDataLabel.js\", [e[\"Core/Series/DataLabel.js\"], e[\"Core/Globals.js\"], e[\"Core/Renderer/RendererUtilities.js\"], e[\"Core/Series/SeriesRegistry.js\"], e[\"Core/Utilities.js\"]], function (t, e, i, s, r) {\n var o;\n let {\n composed: n,\n noop: a\n } = e,\n {\n distribute: h\n } = i,\n {\n series: l\n } = s,\n {\n arrayMax: d,\n clamp: c,\n defined: p,\n pick: u,\n pushUnique: g,\n relativeLength: f\n } = r;\n return function (e) {\n let i = {\n radialDistributionY: function (t, e) {\n return (e.dataLabelPosition?.top || 0) + t.distributeBox.pos;\n },\n radialDistributionX: function (t, e, i, s, r) {\n let o = r.dataLabelPosition;\n return t.getX(i < (o?.top || 0) + 2 || i > (o?.bottom || 0) - 2 ? s : i, e.half, e, r);\n },\n justify: function (t, e, i, s) {\n return s[0] + (t.half ? -1 : 1) * (i + (e.dataLabelPosition?.distance || 0));\n },\n alignToPlotEdges: function (t, e, i, s) {\n let r = t.getBBox().width;\n return e ? r + s : i - r - s;\n },\n alignToConnectors: function (t, e, i, s) {\n let r = 0,\n o;\n return t.forEach(function (t) {\n (o = t.dataLabel.getBBox().width) > r && (r = o);\n }), e ? r + s : i - r - s;\n }\n };\n function s(t, e) {\n let {\n center: i,\n options: s\n } = this,\n r = i[2] / 2,\n o = t.angle || 0,\n n = Math.cos(o),\n a = Math.sin(o),\n h = i[0] + n * r,\n l = i[1] + a * r,\n d = Math.min((s.slicedOffset || 0) + (s.borderWidth || 0), e / 5);\n return {\n natural: {\n x: h + n * e,\n y: l + a * e\n },\n computed: {},\n alignment: e < 0 ? \"center\" : t.half ? \"right\" : \"left\",\n connectorPosition: {\n breakAt: {\n x: h + n * d,\n y: l + a * d\n },\n touchingSliceAt: {\n x: h,\n y: l\n }\n },\n distance: e\n };\n }\n function r() {\n let t = this,\n e = t.points,\n i = t.chart,\n s = i.plotWidth,\n r = i.plotHeight,\n o = i.plotLeft,\n n = Math.round(i.chartWidth / 3),\n a = t.center,\n c = a[2] / 2,\n g = a[1],\n m = [[], []],\n x = [0, 0, 0, 0],\n y = t.dataLabelPositioners,\n b,\n v,\n S,\n C = 0;\n t.visible && t.hasDataLabels?.() && (e.forEach(t => {\n (t.dataLabels || []).forEach(t => {\n t.shortened && (t.attr({\n width: \"auto\"\n }).css({\n width: \"auto\",\n textOverflow: \"clip\"\n }), t.shortened = !1);\n });\n }), l.prototype.drawDataLabels.apply(t), e.forEach(t => {\n (t.dataLabels || []).forEach((e, i) => {\n let s = a[2] / 2,\n r = e.options,\n o = f(r?.distance || 0, s);\n 0 === i && m[t.half].push(t), !p(r?.style?.width) && e.getBBox().width > n && (e.css({\n width: Math.round(.7 * n) + \"px\"\n }), e.shortened = !0), e.dataLabelPosition = this.getDataLabelPosition(t, o), C = Math.max(C, o);\n });\n }), m.forEach((e, n) => {\n let l = e.length,\n d = [],\n f,\n m,\n b = 0,\n k;\n l && (t.sortByAngle(e, n - .5), C > 0 && (f = Math.max(0, g - c - C), m = Math.min(g + c + C, i.plotHeight), e.forEach(t => {\n (t.dataLabels || []).forEach(e => {\n let s = e.dataLabelPosition;\n s && s.distance > 0 && (s.top = Math.max(0, g - c - s.distance), s.bottom = Math.min(g + c + s.distance, i.plotHeight), b = e.getBBox().height || 21, e.lineHeight = i.renderer.fontMetrics(e.text || e).h + 2 * e.padding, t.distributeBox = {\n target: (e.dataLabelPosition?.natural.y || 0) - s.top + e.lineHeight / 2,\n size: b,\n rank: t.y\n }, d.push(t.distributeBox));\n });\n }), h(d, k = m + b - f, k / 5)), e.forEach(i => {\n (i.dataLabels || []).forEach(h => {\n let l = h.options || {},\n g = i.distributeBox,\n f = h.dataLabelPosition,\n m = f?.natural.y || 0,\n b = l.connectorPadding || 0,\n C = h.lineHeight || 21,\n k = (C - h.getBBox().height) / 2,\n M = 0,\n w = m,\n T = \"inherit\";\n if (f) {\n if (d && p(g) && f.distance > 0 && (void 0 === g.pos ? T = \"hidden\" : (S = g.size, w = y.radialDistributionY(i, h))), l.justify) M = y.justify(i, h, c, a);else switch (l.alignTo) {\n case \"connectors\":\n M = y.alignToConnectors(e, n, s, o);\n break;\n case \"plotEdges\":\n M = y.alignToPlotEdges(h, n, s, o);\n break;\n default:\n M = y.radialDistributionX(t, i, w - k, m, h);\n }\n if (f.attribs = {\n visibility: T,\n align: f.alignment\n }, f.posAttribs = {\n x: M + (l.x || 0) + ({\n left: b,\n right: -b\n }[f.alignment] || 0),\n y: w + (l.y || 0) - C / 2\n }, f.computed.x = M, f.computed.y = w - k, u(l.crop, !0)) {\n let t;\n M - (v = h.getBBox().width) < b && 1 === n ? (t = Math.round(v - M + b), x[3] = Math.max(t, x[3])) : M + v > s - b && 0 === n && (t = Math.round(M + v - s + b), x[1] = Math.max(t, x[1])), w - S / 2 < 0 ? x[0] = Math.max(Math.round(-w + S / 2), x[0]) : w + S / 2 > r && (x[2] = Math.max(Math.round(w + S / 2 - r), x[2])), f.sideOverflow = t;\n }\n }\n });\n }));\n }), (0 === d(x) || this.verifyDataLabelOverflow(x)) && (this.placeDataLabels(), this.points.forEach(e => {\n (e.dataLabels || []).forEach(s => {\n let {\n connectorColor: r,\n connectorWidth: o = 1\n } = s.options || {},\n n = s.dataLabelPosition;\n if (o) {\n let a;\n b = s.connector, n && n.distance > 0 ? (a = !b, b || (s.connector = b = i.renderer.path().addClass(\"highcharts-data-label-connector highcharts-color-\" + e.colorIndex + (e.className ? \" \" + e.className : \"\")).add(t.dataLabelsGroup)), i.styledMode || b.attr({\n \"stroke-width\": o,\n stroke: r || e.color || \"#666666\"\n }), b[a ? \"attr\" : \"animate\"]({\n d: e.getConnectorPath(s)\n }), b.attr({\n visibility: n.attribs?.visibility\n })) : b && (s.connector = b.destroy());\n }\n });\n })));\n }\n function o() {\n this.points.forEach(t => {\n (t.dataLabels || []).forEach(t => {\n let e = t.dataLabelPosition;\n e ? (e.sideOverflow && (t.css({\n width: Math.max(t.getBBox().width - e.sideOverflow, 0) + \"px\",\n textOverflow: (t.options?.style || {}).textOverflow || \"ellipsis\"\n }), t.shortened = !0), t.attr(e.attribs), t[t.moved ? \"animate\" : \"attr\"](e.posAttribs), t.moved = !0) : t && t.attr({\n y: -9999\n });\n }), delete t.distributeBox;\n }, this);\n }\n function m(t) {\n let e = this.center,\n i = this.options,\n s = i.center,\n r = i.minSize || 80,\n o = r,\n n = null !== i.size;\n return !n && (null !== s[0] ? o = Math.max(e[2] - Math.max(t[1], t[3]), r) : (o = Math.max(e[2] - t[1] - t[3], r), e[0] += (t[3] - t[1]) / 2), null !== s[1] ? o = c(o, r, e[2] - Math.max(t[0], t[2])) : (o = c(o, r, e[2] - t[0] - t[2]), e[1] += (t[0] - t[2]) / 2), o < e[2] ? (e[2] = o, e[3] = Math.min(i.thickness ? Math.max(0, o - 2 * i.thickness) : Math.max(0, f(i.innerSize || 0, o)), o), this.translate(e), this.drawDataLabels && this.drawDataLabels()) : n = !0), n;\n }\n e.compose = function (e) {\n if (t.compose(l), g(n, \"PieDataLabel\")) {\n let t = e.prototype;\n t.dataLabelPositioners = i, t.alignDataLabel = a, t.drawDataLabels = r, t.getDataLabelPosition = s, t.placeDataLabels = o, t.verifyDataLabelOverflow = m;\n }\n };\n }(o || (o = {})), o;\n }), i(e, \"Core/Geometry/GeometryUtilities.js\", [], function () {\n var t, e;\n return (e = t || (t = {})).getCenterOfPoints = function (t) {\n let e = t.reduce((t, e) => (t.x += e.x, t.y += e.y, t), {\n x: 0,\n y: 0\n });\n return {\n x: e.x / t.length,\n y: e.y / t.length\n };\n }, e.getDistanceBetweenPoints = function (t, e) {\n return Math.sqrt(Math.pow(e.x - t.x, 2) + Math.pow(e.y - t.y, 2));\n }, e.getAngleBetweenPoints = function (t, e) {\n return Math.atan2(e.x - t.x, e.y - t.y);\n }, e.pointInPolygon = function ({\n x: t,\n y: e\n }, i) {\n let s = i.length,\n r,\n o,\n n = !1;\n for (r = 0, o = s - 1; r < s; o = r++) {\n let [s, a] = i[r],\n [h, l] = i[o];\n a > e != l > e && t < (h - s) * (e - a) / (l - a) + s && (n = !n);\n }\n return n;\n }, t;\n }), i(e, \"Extensions/OverlappingDataLabels.js\", [e[\"Core/Geometry/GeometryUtilities.js\"], e[\"Core/Utilities.js\"]], function (t, e) {\n let {\n pointInPolygon: i\n } = t,\n {\n addEvent: s,\n fireEvent: r,\n objectEach: o,\n pick: n\n } = e;\n function a(t) {\n let e = t.length,\n s = (t, e) => !(e.x >= t.x + t.width || e.x + e.width <= t.x || e.y >= t.y + t.height || e.y + e.height <= t.y),\n o = (t, e) => {\n for (let s of t) if (i({\n x: s[0],\n y: s[1]\n }, e)) return !0;\n return !1;\n },\n n,\n a,\n l,\n d,\n c,\n p = !1;\n for (let i = 0; i < e; i++) (n = t[i]) && (n.oldOpacity = n.opacity, n.newOpacity = 1, n.absoluteBox = function (t) {\n if (t && (!t.alignAttr || t.placed)) {\n let e = t.box ? 0 : t.padding || 0,\n i = t.alignAttr || {\n x: t.attr(\"x\"),\n y: t.attr(\"y\")\n },\n s = t.getBBox();\n return t.width = s.width, t.height = s.height, {\n x: i.x + (t.parentGroup?.translateX || 0) + e,\n y: i.y + (t.parentGroup?.translateY || 0) + e,\n width: (t.width || 0) - 2 * e,\n height: (t.height || 0) - 2 * e,\n polygon: s?.polygon\n };\n }\n }(n));\n t.sort((t, e) => (e.labelrank || 0) - (t.labelrank || 0));\n for (let i = 0; i < e; ++i) {\n d = (a = t[i]) && a.absoluteBox;\n let r = d?.polygon;\n for (let n = i + 1; n < e; ++n) {\n c = (l = t[n]) && l.absoluteBox;\n let e = !1;\n if (d && c && a !== l && 0 !== a.newOpacity && 0 !== l.newOpacity && \"hidden\" !== a.visibility && \"hidden\" !== l.visibility) {\n let t = c.polygon;\n if (r && t && r !== t ? o(r, t) && (e = !0) : s(d, c) && (e = !0), e) {\n let t = a.labelrank < l.labelrank ? a : l,\n e = t.text;\n t.newOpacity = 0, e?.element.querySelector(\"textPath\") && e.hide();\n }\n }\n }\n }\n for (let e of t) h(e, this) && (p = !0);\n p && r(this, \"afterHideAllOverlappingLabels\");\n }\n function h(t, e) {\n let i,\n s,\n o = !1;\n return t && (s = t.newOpacity, t.oldOpacity !== s && (t.hasClass(\"highcharts-data-label\") ? (t[s ? \"removeClass\" : \"addClass\"](\"highcharts-data-label-hidden\"), i = function () {\n e.styledMode || t.css({\n pointerEvents: s ? \"auto\" : \"none\"\n });\n }, o = !0, t[t.isOld ? \"animate\" : \"attr\"]({\n opacity: s\n }, void 0, i), r(e, \"afterHideOverlappingLabel\")) : t.attr({\n opacity: s\n })), t.isOld = !0), o;\n }\n function l() {\n let t = this,\n e = [];\n for (let i of t.labelCollectors || []) e = e.concat(i());\n for (let i of t.yAxis || []) i.stacking && i.options.stackLabels && !i.options.stackLabels.allowOverlap && o(i.stacking.stacks, t => {\n o(t, t => {\n t.label && e.push(t.label);\n });\n });\n for (let i of t.series || []) if (i.visible && i.hasDataLabels?.()) {\n let s = i => {\n for (let s of i) s.visible && (s.dataLabels || []).forEach(i => {\n let r = i.options || {};\n i.labelrank = n(r.labelrank, s.labelrank, s.shapeArgs?.height), r.allowOverlap ?? Number(r.distance) > 0 ? (i.oldOpacity = i.opacity, i.newOpacity = 1, h(i, t)) : e.push(i);\n });\n };\n s(i.nodes || []), s(i.points);\n }\n this.hideOverlappingLabels(e);\n }\n return {\n compose: function (t) {\n let e = t.prototype;\n e.hideOverlappingLabels || (e.hideOverlappingLabels = a, s(t, \"render\", l));\n }\n };\n }), i(e, \"Extensions/BorderRadius.js\", [e[\"Core/Defaults.js\"], e[\"Core/Globals.js\"], e[\"Core/Utilities.js\"]], function (t, e, i) {\n let {\n defaultOptions: s\n } = t,\n {\n noop: r\n } = e,\n {\n addEvent: o,\n extend: n,\n isObject: a,\n merge: h,\n relativeLength: l\n } = i,\n d = {\n radius: 0,\n scope: \"stack\",\n where: void 0\n },\n c = r,\n p = r;\n function u(t, e, i, s, r = {}) {\n let o = c(t, e, i, s, r),\n {\n innerR: n = 0,\n r: a = i,\n start: h = 0,\n end: d = 0\n } = r;\n if (r.open || !r.borderRadius) return o;\n let p = d - h,\n g = Math.sin(p / 2),\n f = Math.max(Math.min(l(r.borderRadius || 0, a - n), (a - n) / 2, a * g / (1 + g)), 0),\n m = Math.min(f, p / Math.PI * 2 * n),\n x = o.length - 1;\n for (; x--;) !function (t, e, i) {\n let s, r, o;\n let n = t[e],\n a = t[e + 1];\n if (\"Z\" === a[0] && (a = t[0]), (\"M\" === n[0] || \"L\" === n[0]) && \"A\" === a[0] ? (s = n, r = a, o = !0) : \"A\" === n[0] && (\"M\" === a[0] || \"L\" === a[0]) && (s = a, r = n), s && r && r.params) {\n let n = r[1],\n a = r[5],\n h = r.params,\n {\n start: l,\n end: d,\n cx: c,\n cy: p\n } = h,\n u = a ? n - i : n + i,\n g = u ? Math.asin(i / u) : 0,\n f = a ? g : -g,\n m = Math.cos(g) * u;\n o ? (h.start = l + f, s[1] = c + m * Math.cos(l), s[2] = p + m * Math.sin(l), t.splice(e + 1, 0, [\"A\", i, i, 0, 0, 1, c + n * Math.cos(h.start), p + n * Math.sin(h.start)])) : (h.end = d - f, r[6] = c + n * Math.cos(h.end), r[7] = p + n * Math.sin(h.end), t.splice(e + 1, 0, [\"A\", i, i, 0, 0, 1, c + m * Math.cos(d), p + m * Math.sin(d)])), r[4] = Math.abs(h.end - h.start) < Math.PI ? 0 : 1;\n }\n }(o, x, x > 1 ? m : f);\n return o;\n }\n function g() {\n if (this.options.borderRadius && !(this.chart.is3d && this.chart.is3d())) {\n let {\n options: t,\n yAxis: e\n } = this,\n i = \"percent\" === t.stacking,\n r = s.plotOptions?.[this.type]?.borderRadius,\n o = f(t.borderRadius, a(r) ? r : {}),\n h = e.options.reversed;\n for (let s of this.points) {\n let {\n shapeArgs: r\n } = s;\n if (\"roundedRect\" === s.shapeType && r) {\n let {\n width: a = 0,\n height: d = 0,\n y: c = 0\n } = r,\n p = c,\n u = d;\n if (\"stack\" === o.scope && s.stackTotal) {\n let r = e.translate(i ? 100 : s.stackTotal, !1, !0, !1, !0),\n o = e.translate(t.threshold || 0, !1, !0, !1, !0),\n n = this.crispCol(0, Math.min(r, o), 0, Math.abs(r - o));\n p = n.y, u = n.height;\n }\n let g = (s.negative ? -1 : 1) * (h ? -1 : 1) == -1,\n f = o.where;\n !f && this.is(\"waterfall\") && Math.abs((s.yBottom || 0) - (this.translatedThreshold || 0)) > this.borderWidth && (f = \"all\"), f || (f = \"end\");\n let m = Math.min(l(o.radius, a), a / 2, \"all\" === f ? d / 2 : 1 / 0) || 0;\n \"end\" === f && (g && (p -= m), u += m), n(r, {\n brBoxHeight: u,\n brBoxY: p,\n r: m\n });\n }\n }\n }\n }\n function f(t, e) {\n return a(t) || (t = {\n radius: t || 0\n }), h(d, e, t);\n }\n function m() {\n let t = f(this.options.borderRadius);\n for (let e of this.points) {\n let i = e.shapeArgs;\n i && (i.borderRadius = l(t.radius, (i.r || 0) - (i.innerR || 0)));\n }\n }\n function x(t, e, i, s, r = {}) {\n let o = p(t, e, i, s, r),\n {\n r: n = 0,\n brBoxHeight: a = s,\n brBoxY: h = e\n } = r,\n l = e - h,\n d = h + a - (e + s),\n c = l - n > -.1 ? 0 : n,\n u = d - n > -.1 ? 0 : n,\n g = Math.max(c && l, 0),\n f = Math.max(u && d, 0),\n m = [t + c, e],\n y = [t + i - c, e],\n b = [t + i, e + c],\n v = [t + i, e + s - u],\n S = [t + i - u, e + s],\n C = [t + u, e + s],\n k = [t, e + s - u],\n M = [t, e + c],\n w = (t, e) => Math.sqrt(Math.pow(t, 2) - Math.pow(e, 2));\n if (g) {\n let t = w(c, c - g);\n m[0] -= t, y[0] += t, b[1] = M[1] = e + c - g;\n }\n if (s < c - g) {\n let r = w(c, c - g - s);\n b[0] = v[0] = t + i - c + r, S[0] = Math.min(b[0], S[0]), C[0] = Math.max(v[0], C[0]), k[0] = M[0] = t + c - r, b[1] = M[1] = e + s;\n }\n if (f) {\n let t = w(u, u - f);\n S[0] += t, C[0] -= t, v[1] = k[1] = e + s - u + f;\n }\n if (s < u - f) {\n let r = w(u, u - f - s);\n b[0] = v[0] = t + i - u + r, y[0] = Math.min(b[0], y[0]), m[0] = Math.max(v[0], m[0]), k[0] = M[0] = t + u - r, v[1] = k[1] = e;\n }\n return o.length = 0, o.push([\"M\", ...m], [\"L\", ...y], [\"A\", c, c, 0, 0, 1, ...b], [\"L\", ...v], [\"A\", u, u, 0, 0, 1, ...S], [\"L\", ...C], [\"A\", u, u, 0, 0, 1, ...k], [\"L\", ...M], [\"A\", c, c, 0, 0, 1, ...m], [\"Z\"]), o;\n }\n return {\n compose: function (t, e, i) {\n let s = t.types.pie;\n if (!e.symbolCustomAttribs.includes(\"borderRadius\")) {\n let r = i.prototype.symbols;\n o(t, \"afterColumnTranslate\", g, {\n order: 9\n }), o(s, \"afterTranslate\", m), e.symbolCustomAttribs.push(\"borderRadius\", \"brBoxHeight\", \"brBoxY\"), c = r.arc, p = r.roundedRect, r.arc = u, r.roundedRect = x;\n }\n },\n optionsToObject: f\n };\n }), i(e, \"Core/Responsive.js\", [e[\"Core/Utilities.js\"]], function (t) {\n var e;\n let {\n diffObjects: i,\n extend: s,\n find: r,\n merge: o,\n pick: n,\n uniqueKey: a\n } = t;\n return function (t) {\n function e(t, e) {\n let i = t.condition;\n (i.callback || function () {\n return this.chartWidth <= n(i.maxWidth, Number.MAX_VALUE) && this.chartHeight <= n(i.maxHeight, Number.MAX_VALUE) && this.chartWidth >= n(i.minWidth, 0) && this.chartHeight >= n(i.minHeight, 0);\n }).call(this) && e.push(t._id);\n }\n function h(t, e) {\n let s = this.options.responsive,\n n = this.currentResponsive,\n h = [],\n l;\n !e && s && s.rules && s.rules.forEach(t => {\n void 0 === t._id && (t._id = a()), this.matchResponsiveRule(t, h);\n }, this);\n let d = o(...h.map(t => r((s || {}).rules || [], e => e._id === t)).map(t => t && t.chartOptions));\n d.isResponsiveOptions = !0, h = h.toString() || void 0;\n let c = n && n.ruleIds;\n h === c || (n && (this.currentResponsive = void 0, this.updatingResponsive = !0, this.update(n.undoOptions, t, !0), this.updatingResponsive = !1), h ? ((l = i(d, this.options, !0, this.collectionsWithUpdate)).isResponsiveOptions = !0, this.currentResponsive = {\n ruleIds: h,\n mergedOptions: d,\n undoOptions: l\n }, this.updatingResponsive || this.update(d, t, !0)) : this.currentResponsive = void 0);\n }\n t.compose = function (t) {\n let i = t.prototype;\n return i.matchResponsiveRule || s(i, {\n matchResponsiveRule: e,\n setResponsive: h\n }), t;\n };\n }(e || (e = {})), e;\n }), i(e, \"masters/highcharts.src.js\", [e[\"Core/Globals.js\"], e[\"Core/Utilities.js\"], e[\"Core/Defaults.js\"], e[\"Core/Animation/Fx.js\"], e[\"Core/Animation/AnimationUtilities.js\"], e[\"Core/Renderer/HTML/AST.js\"], e[\"Core/Templating.js\"], e[\"Core/Renderer/RendererRegistry.js\"], e[\"Core/Renderer/RendererUtilities.js\"], e[\"Core/Renderer/SVG/SVGElement.js\"], e[\"Core/Renderer/SVG/SVGRenderer.js\"], e[\"Core/Renderer/HTML/HTMLElement.js\"], e[\"Core/Axis/Axis.js\"], e[\"Core/Axis/DateTimeAxis.js\"], e[\"Core/Axis/LogarithmicAxis.js\"], e[\"Core/Axis/PlotLineOrBand/PlotLineOrBand.js\"], e[\"Core/Axis/Tick.js\"], e[\"Core/Tooltip.js\"], e[\"Core/Series/Point.js\"], e[\"Core/Pointer.js\"], e[\"Core/Legend/Legend.js\"], e[\"Core/Legend/LegendSymbol.js\"], e[\"Core/Chart/Chart.js\"], e[\"Extensions/ScrollablePlotArea.js\"], e[\"Core/Axis/Stacking/StackingAxis.js\"], e[\"Core/Axis/Stacking/StackItem.js\"], e[\"Core/Series/Series.js\"], e[\"Core/Series/SeriesRegistry.js\"], e[\"Series/Column/ColumnDataLabel.js\"], e[\"Series/Pie/PieDataLabel.js\"], e[\"Core/Series/DataLabel.js\"], e[\"Extensions/OverlappingDataLabels.js\"], e[\"Extensions/BorderRadius.js\"], e[\"Core/Responsive.js\"], e[\"Core/Color/Color.js\"], e[\"Core/Time.js\"]], function (t, e, i, s, r, o, n, a, h, l, d, c, p, u, g, f, m, x, y, b, v, S, C, k, M, w, T, A, P, L, O, D, E, I, j, B) {\n return t.AST = o, t.Axis = p, t.Chart = C, t.Color = j, t.DataLabel = O, t.Fx = s, t.HTMLElement = c, t.Legend = v, t.LegendSymbol = S, t.OverlappingDataLabels = t.OverlappingDataLabels || D, t.PlotLineOrBand = f, t.Point = y, t.Pointer = b, t.RendererRegistry = a, t.Series = T, t.SeriesRegistry = A, t.StackItem = w, t.SVGElement = l, t.SVGRenderer = d, t.Templating = n, t.Tick = m, t.Time = B, t.Tooltip = x, t.animate = r.animate, t.animObject = r.animObject, t.chart = C.chart, t.color = j.parse, t.dateFormat = n.dateFormat, t.defaultOptions = i.defaultOptions, t.distribute = h.distribute, t.format = n.format, t.getDeferredAnimation = r.getDeferredAnimation, t.getOptions = i.getOptions, t.numberFormat = n.numberFormat, t.seriesType = A.seriesType, t.setAnimation = r.setAnimation, t.setOptions = i.setOptions, t.stop = r.stop, t.time = i.defaultTime, t.timers = s.timers, E.compose(t.Series, t.SVGElement, t.SVGRenderer), P.compose(t.Series.types.column), O.compose(t.Series), u.compose(t.Axis), c.compose(t.SVGRenderer), v.compose(t.Chart), g.compose(t.Axis), D.compose(t.Chart), L.compose(t.Series.types.pie), f.compose(t.Chart, t.Axis), b.compose(t.Chart), I.compose(t.Chart), k.compose(t.Axis, t.Chart, t.Series), M.compose(t.Axis, t.Chart, t.Series), x.compose(t.Pointer), e.extend(t, e), t;\n }), e[\"masters/highcharts.src.js\"]._modules = e, e[\"masters/highcharts.src.js\"];\n});","/**\n * @license\n * Lodash \n * Copyright OpenJS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;\n(function () {\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.21';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function',\n INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [['ary', WRAP_ARY_FLAG], ['bind', WRAP_BIND_FLAG], ['bindKey', WRAP_BIND_KEY_FLAG], ['curry', WRAP_CURRY_FLAG], ['curryRight', WRAP_CURRY_RIGHT_FLAG], ['flip', WRAP_FLIP_FLAG], ['partial', WRAP_PARTIAL_FLAG], ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], ['rearg', WRAP_REARG_FLAG]];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/;\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\n var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, rsUpper + '+' + rsOptContrUpper, rsOrdUpper, rsOrdLower, rsDigits, rsEmoji].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = ['Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag] = cloneableTags[numberTag] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[setTag] = cloneableTags[stringTag] = cloneableTags[symbolTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A',\n '\\xc1': 'A',\n '\\xc2': 'A',\n '\\xc3': 'A',\n '\\xc4': 'A',\n '\\xc5': 'A',\n '\\xe0': 'a',\n '\\xe1': 'a',\n '\\xe2': 'a',\n '\\xe3': 'a',\n '\\xe4': 'a',\n '\\xe5': 'a',\n '\\xc7': 'C',\n '\\xe7': 'c',\n '\\xd0': 'D',\n '\\xf0': 'd',\n '\\xc8': 'E',\n '\\xc9': 'E',\n '\\xca': 'E',\n '\\xcb': 'E',\n '\\xe8': 'e',\n '\\xe9': 'e',\n '\\xea': 'e',\n '\\xeb': 'e',\n '\\xcc': 'I',\n '\\xcd': 'I',\n '\\xce': 'I',\n '\\xcf': 'I',\n '\\xec': 'i',\n '\\xed': 'i',\n '\\xee': 'i',\n '\\xef': 'i',\n '\\xd1': 'N',\n '\\xf1': 'n',\n '\\xd2': 'O',\n '\\xd3': 'O',\n '\\xd4': 'O',\n '\\xd5': 'O',\n '\\xd6': 'O',\n '\\xd8': 'O',\n '\\xf2': 'o',\n '\\xf3': 'o',\n '\\xf4': 'o',\n '\\xf5': 'o',\n '\\xf6': 'o',\n '\\xf8': 'o',\n '\\xd9': 'U',\n '\\xda': 'U',\n '\\xdb': 'U',\n '\\xdc': 'U',\n '\\xf9': 'u',\n '\\xfa': 'u',\n '\\xfb': 'u',\n '\\xfc': 'u',\n '\\xdd': 'Y',\n '\\xfd': 'y',\n '\\xff': 'y',\n '\\xc6': 'Ae',\n '\\xe6': 'ae',\n '\\xde': 'Th',\n '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A',\n '\\u0102': 'A',\n '\\u0104': 'A',\n '\\u0101': 'a',\n '\\u0103': 'a',\n '\\u0105': 'a',\n '\\u0106': 'C',\n '\\u0108': 'C',\n '\\u010a': 'C',\n '\\u010c': 'C',\n '\\u0107': 'c',\n '\\u0109': 'c',\n '\\u010b': 'c',\n '\\u010d': 'c',\n '\\u010e': 'D',\n '\\u0110': 'D',\n '\\u010f': 'd',\n '\\u0111': 'd',\n '\\u0112': 'E',\n '\\u0114': 'E',\n '\\u0116': 'E',\n '\\u0118': 'E',\n '\\u011a': 'E',\n '\\u0113': 'e',\n '\\u0115': 'e',\n '\\u0117': 'e',\n '\\u0119': 'e',\n '\\u011b': 'e',\n '\\u011c': 'G',\n '\\u011e': 'G',\n '\\u0120': 'G',\n '\\u0122': 'G',\n '\\u011d': 'g',\n '\\u011f': 'g',\n '\\u0121': 'g',\n '\\u0123': 'g',\n '\\u0124': 'H',\n '\\u0126': 'H',\n '\\u0125': 'h',\n '\\u0127': 'h',\n '\\u0128': 'I',\n '\\u012a': 'I',\n '\\u012c': 'I',\n '\\u012e': 'I',\n '\\u0130': 'I',\n '\\u0129': 'i',\n '\\u012b': 'i',\n '\\u012d': 'i',\n '\\u012f': 'i',\n '\\u0131': 'i',\n '\\u0134': 'J',\n '\\u0135': 'j',\n '\\u0136': 'K',\n '\\u0137': 'k',\n '\\u0138': 'k',\n '\\u0139': 'L',\n '\\u013b': 'L',\n '\\u013d': 'L',\n '\\u013f': 'L',\n '\\u0141': 'L',\n '\\u013a': 'l',\n '\\u013c': 'l',\n '\\u013e': 'l',\n '\\u0140': 'l',\n '\\u0142': 'l',\n '\\u0143': 'N',\n '\\u0145': 'N',\n '\\u0147': 'N',\n '\\u014a': 'N',\n '\\u0144': 'n',\n '\\u0146': 'n',\n '\\u0148': 'n',\n '\\u014b': 'n',\n '\\u014c': 'O',\n '\\u014e': 'O',\n '\\u0150': 'O',\n '\\u014d': 'o',\n '\\u014f': 'o',\n '\\u0151': 'o',\n '\\u0154': 'R',\n '\\u0156': 'R',\n '\\u0158': 'R',\n '\\u0155': 'r',\n '\\u0157': 'r',\n '\\u0159': 'r',\n '\\u015a': 'S',\n '\\u015c': 'S',\n '\\u015e': 'S',\n '\\u0160': 'S',\n '\\u015b': 's',\n '\\u015d': 's',\n '\\u015f': 's',\n '\\u0161': 's',\n '\\u0162': 'T',\n '\\u0164': 'T',\n '\\u0166': 'T',\n '\\u0163': 't',\n '\\u0165': 't',\n '\\u0167': 't',\n '\\u0168': 'U',\n '\\u016a': 'U',\n '\\u016c': 'U',\n '\\u016e': 'U',\n '\\u0170': 'U',\n '\\u0172': 'U',\n '\\u0169': 'u',\n '\\u016b': 'u',\n '\\u016d': 'u',\n '\\u016f': 'u',\n '\\u0171': 'u',\n '\\u0173': 'u',\n '\\u0174': 'W',\n '\\u0175': 'w',\n '\\u0176': 'Y',\n '\\u0177': 'y',\n '\\u0178': 'Y',\n '\\u0179': 'Z',\n '\\u017b': 'Z',\n '\\u017d': 'Z',\n '\\u017a': 'z',\n '\\u017c': 'z',\n '\\u017e': 'z',\n '\\u0132': 'IJ',\n '\\u0133': 'ij',\n '\\u0152': 'Oe',\n '\\u0153': 'oe',\n '\\u0149': \"'n\",\n '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = function () {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }();\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0:\n return func.call(thisArg);\n case 1:\n return func.call(thisArg, args[0]);\n case 2:\n return func.call(thisArg, args[0], args[1]);\n case 3:\n return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function (value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n while (fromRight ? index-- : ++index < length) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? baseSum(array, iteratee) / length : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function (object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function (key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function (value, index, collection) {\n accumulator = initAccum ? (initAccum = false, value) : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : result + current;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function (key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') : string;\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function (value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function (key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n map.forEach(function (value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function (arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n set.forEach(function (value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n set.forEach(function (value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string) ? unicodeSize(string) : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string);\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length;\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = function () {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? 'Symbol(src)_1.' + uid : '';\n }();\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$');\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n var defineProperty = function () {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }();\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap();\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = function () {\n function object() {}\n return function (proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object();\n object.prototype = undefined;\n return result;\n };\n }();\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : start - 1,\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n if (!isArr || !isRight && arrLength == length && takeCount == length) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n outer: while (length-- && resIndex < takeCount) {\n index += dir;\n var iterIndex = -1,\n value = array[index];\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash(),\n 'map': new (Map || ListCache)(),\n 'string': new Hash()\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n this.__data__ = new MapCache();\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache();\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n isBuff && (key == 'offset' || key == 'parent') ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') ||\n // Skip index properties.\n isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if (value !== undefined && !eq(object[key], value) || value === undefined && !(key in object)) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || value === undefined && !(key in object)) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function (value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || isFunc && !object) {\n result = isFlat || isFunc ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat ? copySymbolsIn(value, baseAssignIn(result, value)) : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack());\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n if (isSet(value)) {\n value.forEach(function (subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function (subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys;\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function (subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function (object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n if (value === undefined && !(key in object) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function () {\n func.apply(undefined, args);\n }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n } else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer: while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n value = comparator || value !== 0 ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n } else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function (value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n if (current != null && (computed === undefined ? current === current && !isSymbol(current) : comparator(current, computed))) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : length + start;\n }\n end = end === undefined || end > length ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function (value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n predicate || (predicate = isFlattenable);\n result || (result = []);\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function (key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n var index = 0,\n length = path.length;\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return index && index == length ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || length >= 120 && array.length >= 120) ? new SetCache(othIndex && array) : undefined;\n }\n array = arrays[0];\n var index = -1,\n seen = caches[0];\n outer: while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n value = comparator || value !== 0 ? value : 0;\n if (!(seen ? cacheHas(seen, computed) : includes(result, computed, comparator))) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache ? cacheHas(cache, computed) : includes(arrays[othIndex], computed, comparator))) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function (value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack());\n return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n stack || (stack = new Stack());\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack());\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack();\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) : result)) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n baseEach(collection, function (value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function (object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function (object) {\n var objValue = get(object, path);\n return objValue === undefined && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function (srcValue, key) {\n stack || (stack = new Stack());\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n } else {\n var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + '', object, source, stack) : undefined;\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer ? customizer(objValue, srcValue, key + '', object, source, stack) : undefined;\n var isCommon = newValue === undefined;\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n } else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n } else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n } else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n } else {\n newValue = [];\n }\n } else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n } else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n } else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function (iteratee) {\n if (isArray(iteratee)) {\n return function (value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n };\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n var result = baseMap(collection, function (value, key, collection) {\n var criteria = arrayMap(iteratees, function (iteratee) {\n return iteratee(value);\n });\n return {\n 'criteria': criteria,\n 'index': ++index,\n 'value': value\n };\n });\n return baseSortBy(result, function (object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function (value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function (object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue) ? objValue : isIndex(path[index + 1]) ? [] : {};\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function (func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function (func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n if (start < 0) {\n start = -start > length ? 0 : length + start;\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : end - start >>> 0;\n start >>>= 0;\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n baseEach(collection, function (value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = low + high >>> 1,\n computed = array[mid];\n if (computed !== null && !isSymbol(computed) && (retHighest ? computed <= value : computed < value)) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? computed <= value : computed < value;\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n } else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache();\n } else {\n seen = iteratee ? [] : result;\n }\n outer: while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n value = comparator || value !== 0 ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n } else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {}\n return isDrop ? baseSlice(array, fromRight ? 0 : index, fromRight ? index + 1 : length) : baseSlice(array, fromRight ? index + 1 : 0, fromRight ? length : index);\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function (result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return !start && end >= length ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function (id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n if (!othIsNull && !othIsSymbol && !valIsSymbol && value > other || valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol || valIsNull && othIsDefined && othIsReflexive || !valIsDefined && othIsReflexive || !valIsReflexive) {\n return 1;\n }\n if (!valIsNull && !valIsSymbol && !othIsSymbol && value < other || othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol || othIsNull && valIsDefined && valIsReflexive || !othIsDefined && valIsReflexive || !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n var index = -1,\n length = props.length;\n while (++index < length) {\n var key = props[index];\n var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined;\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function (collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function (object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n customizer = assigner.length > 3 && typeof customizer == 'function' ? (length--, customizer) : undefined;\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function (collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n while (fromRight ? index-- : ++index < length) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function (object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n function wrapper() {\n var fn = this && this !== root && this instanceof wrapper ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function (string) {\n string = toString(string);\n var strSymbols = hasUnicode(string) ? stringToArray(string) : undefined;\n var chr = strSymbols ? strSymbols[0] : string.charAt(0);\n var trailing = strSymbols ? castSlice(strSymbols, 1).join('') : string.slice(1);\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function (string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function () {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0:\n return new Ctor();\n case 1:\n return new Ctor(args[0]);\n case 2:\n return new Ctor(args[0], args[1]);\n case 3:\n return new Ctor(args[0], args[1], args[2]);\n case 4:\n return new Ctor(args[0], args[1], args[2], args[3]);\n case 5:\n return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6:\n return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7:\n return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder ? [] : replaceHolders(args, placeholder);\n length -= holders.length;\n if (length < arity) {\n return createRecurry(func, bitmask, createHybrid, wrapper.placeholder, undefined, args, holders, undefined, undefined, arity - length);\n }\n var fn = this && this !== root && this instanceof wrapper ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function (collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function (key) {\n return iteratee(iterable[key], key, iterable);\n };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function (funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n if (data && isLaziable(data[0]) && data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && !data[4].length && data[9] == 1) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = func.length == 1 && isLaziable(func) ? wrapper[funcName]() : wrapper.thru(func);\n }\n }\n return function () {\n var args = arguments,\n value = args[0];\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(func, bitmask, createHybrid, wrapper.placeholder, thisArg, args, newHolders, argPos, ary, arity - length);\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function (object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function (value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function (iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function (args) {\n var thisArg = this;\n return arrayFunc(iteratees, function (iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars) ? castSlice(stringToArray(result), 0, length).join('') : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = this && this !== root && this instanceof wrapper ? Ctor : func;\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function (start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? start < end ? 1 : -1 : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function (value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n bitmask |= isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG;\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, newHoldersRight, argPos, ary, arity];\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function (number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && 1 / setToArray(new Set([, -0]))[1] == INFINITY) ? noop : function (values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function (object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n var newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity];\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined ? isBindKey ? 0 : func.length : nativeMax(newData[9] - length, 0);\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined || eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key)) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : undefined;\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n if (customizer) {\n var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function (othValue, othIndex) {\n if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n case arrayBufferTag:\n if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n case errorTag:\n return object.name == other.name && object.message == other.message;\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == other + '';\n case mapTag:\n var convert = mapToArray;\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n if (customizer) {\n var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function (func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = func.name + '',\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n while (length--) {\n var key = result[length],\n value = object[key];\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function (object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function (symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function (object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise && getTag(Promise.resolve()) != promiseTag || Set && getTag(new Set()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) {\n getTag = function (value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString:\n return dataViewTag;\n case mapCtorString:\n return mapTag;\n case promiseCtorString:\n return promiseTag;\n case setCtorString:\n return setTag;\n case weakMapCtorString:\n return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n switch (data.type) {\n case 'drop':\n start += size;\n break;\n case 'dropRight':\n end -= size;\n break;\n case 'take':\n end = nativeMin(end, start + size);\n break;\n case 'takeRight':\n start = nativeMax(start, end - size);\n break;\n }\n }\n return {\n 'start': start,\n 'end': end\n };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n var index = -1,\n length = path.length,\n result = false;\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return typeof object.constructor == 'function' && !isPrototype(object) ? baseCreate(getPrototype(object)) : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n case dataViewTag:\n return cloneDataView(object, isDeep);\n case float32Tag:\n case float64Tag:\n case int8Tag:\n case int16Tag:\n case int32Tag:\n case uint8Tag:\n case uint8ClampedTag:\n case uint16Tag:\n case uint32Tag:\n return cloneTypedArray(object, isDeep);\n case mapTag:\n return new Ctor();\n case numberTag:\n case stringTag:\n return new Ctor(object);\n case regexpTag:\n return cloneRegExp(object);\n case setTag:\n return new Ctor();\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length && (type == 'number' || type != 'symbol' && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number' ? isArrayLike(object) && isIndex(index, object.length) : type == 'string' && index in object) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null;\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && maskSrcKey in func;\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = typeof Ctor == 'function' && Ctor.prototype || objectProto;\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function (object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue && (srcValue !== undefined || key in Object(object));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function (key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n var isCombo = srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_CURRY_FLAG || srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_REARG_FLAG && data[7].length <= source[8] || srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG) && source[7].length <= source[8] && bitmask == WRAP_CURRY_FLAG;\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? func.length - 1 : start, 0);\n return function () {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n if (key == '__proto__') {\n return;\n }\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function (func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = reference + '';\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n return function () {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function (string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function (match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : number || match);\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return func + '';\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function (pair) {\n var value = '_.' + pair[0];\n if (bitmask & pair[1] && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if (guard ? isIterateeCall(array, size, guard) : size === undefined) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, index += size);\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function (array, values) {\n return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function (array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function (array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = guard || n === undefined ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = guard || n === undefined ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return array && array.length ? baseWhile(array, getIteratee(predicate, 3), true, true) : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return array && array.length ? baseWhile(array, getIteratee(predicate, 3), true) : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return array && array.length ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function (arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped) : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function (arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, getIteratee(iteratee, 2)) : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function (arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, undefined, comparator) : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value ? strictLastIndexOf(array, value, index) : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return array && array.length ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return array && array.length && values && values.length ? basePullAll(array, values) : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return array && array.length && values && values.length ? basePullAll(array, values, getIteratee(iteratee, 2)) : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return array && array.length && values && values.length ? basePullAll(array, values, undefined, comparator) : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function (array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n basePullAt(array, arrayMap(indexes, function (index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n } else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return array && array.length ? baseSortedUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return array && array.length ? baseSortedUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = guard || n === undefined ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = guard || n === undefined ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return array && array.length ? baseWhile(array, getIteratee(predicate, 3), false, true) : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return array && array.length ? baseWhile(array, getIteratee(predicate, 3)) : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function (arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function (arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function (arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return array && array.length ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return array && array.length ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return array && array.length ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function (group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function (index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function (group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function (array, values) {\n return isArrayLikeObject(array) ? baseDifference(array, values) : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function (arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function (arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function (arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function (arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function (paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function (object) {\n return baseAt(object, paths);\n };\n if (length > 1 || this.__actions__.length || !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function (array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n return {\n 'done': done,\n 'value': value\n };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function (result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function (result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0;\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection) ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 : !!length && baseIndexOf(collection, value, fromIndex) > -1;\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function (collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n baseEach(collection, function (value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function (result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function (result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function () {\n return [[], []];\n });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if (guard ? isIterateeCall(collection, n, guard) : n === undefined) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\n var sortBy = baseRest(function (collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function () {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function () {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = func && n == null ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function () {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function (func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function (object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;\n }\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;\n }\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function (func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function (func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || resolver != null && typeof resolver != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function () {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache)();\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function () {\n var args = arguments;\n switch (args.length) {\n case 0:\n return !predicate.call(this);\n case 1:\n return !predicate.call(this, args[0]);\n case 2:\n return !predicate.call(this, args[0], args[1]);\n case 3:\n return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function (func, transforms) {\n transforms = transforms.length == 1 && isArray(transforms[0]) ? arrayMap(transforms[0], baseUnary(getIteratee())) : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n var funcsLength = transforms.length;\n return baseRest(function (args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function (func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function (func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function (func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function (args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '' + func(text) + '
';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles
'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || value !== value && other !== other;\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function (value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function () {\n return arguments;\n }()) ? baseIsArguments : function (value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false || isObjectLike(value) && baseGetTag(value) == boolTag;\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) && (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag || typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' || isObjectLike(value) && baseGetTag(value) == numberTag;\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' || !isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag;\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' || isObjectLike(value) && baseGetTag(value) == symbolTag;\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function (value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : tag == setTag ? setToArray : values;\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = value < 0 ? -1 : 1;\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n return result === result ? remainder ? result - remainder : result : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? other + '' : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) : value === 0 ? value : 0;\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function (object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function (object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function (object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function (object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function (object, sources) {\n object = Object(object);\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n if (value === undefined || eq(value, objectProto[key]) && !hasOwnProperty.call(object, key)) {\n object[key] = source[key];\n }\n }\n }\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function (args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null ? object : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null ? object : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function (result, value, key) {\n if (value != null && typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function (result, value, key) {\n if (value != null && typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n baseForOwn(object, function (value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n baseForOwn(object, function (value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function (object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function (object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function (object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function (path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function (object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function (prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function (value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor() : [];\n } else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n } else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function (value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n } else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n } else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function (result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n var length = string.length;\n position = position === undefined ? length : baseClamp(toInteger(position), 0, length);\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return string && reHasUnescapedHtml.test(string) ? string.replace(reUnescapedHtml, escapeHtmlChar) : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return string && reHasRegExpChar.test(string) ? string.replace(reRegExpChar, '\\\\$&') : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function (result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function (result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return createPadding(nativeFloor(mid), chars) + string + createPadding(nativeCeil(mid), chars);\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n var strLength = length ? stringSize(string) : 0;\n return length && strLength < length ? string + createPadding(length - strLength, chars) : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n var strLength = length ? stringSize(string) : 0;\n return length && strLength < length ? createPadding(length - strLength, chars) + string : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if (guard ? isIterateeCall(string, n, guard) : n === undefined) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function (result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (typeof separator == 'string' || separator != null && !isRegExp(separator))) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function (result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null ? 0 : baseClamp(toInteger(position), 0, string.length);\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<%- value %> ');\n * compiled({ 'value': '