{"version":3,"file":"js/chartiq-06d44265.js","mappings":";;AAwvDA;AACA;AAEA;;;;AAmDA;;;;;AAfA;;;AALA;;AAwxBA;AACA;AASA;AACA;;AAcA;AACA;AACA;AAEA;AA2BA;;AAmTA;AACA;;;;;;;;AASA;ACj5FA;AACA;;;;;;;;;;;;;;;;;ACiGA;;;;;;;;;;;AAmEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsaA;;;;;;;AAiNA;;;;;;;AA2GA;;;;;;;;;;;;;;;;;;;;;;;AAufA;;;;;;;;;;;;;;;;;;;;;;;;;;AAk4BA;;;;;;;;;;;;;;;AAqYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmmBA;AAi8BA;AACA;AACA;;;;;AAWA;;;;;;;;;;;;;;;AAwHA;AA8oBA;AACA;AAEA;AAUA;AACA;AACA;AACA;AACA;AAEA;AAUA;AACA;AACA;AACA;AAEA;AAGA;AAKA;AACA;AAEA;AAEA;AAMA;AAEA;AAIA;;;;;;;;;;;;;;;;;;;;AAmPA;;;;;;;;;;;;;;;AAqwBA;;;;;AA+XA;;;;;;AAuSA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4HA;;;;;;;;;;;;;;;AAgGA;;;;;;AA6TA;;;;AAwPA;;;;;;;;;;;;;;;;;AAk4BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0jBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyOA;;;;;;;;;;;;;AAooBA;;;;AAoQA;;;;;;;;;;;;AAwtDA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmjBA;AAgSA;AAEA;AAMA;AACA;AACA;AAGA;AAMA;;AAUA;;;;;;;;;AAmyBA;;;;AA0GA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2tBA;;;;;;;;;;;;;;;;;;;;;;;;;AAg6BA;;;AAqTA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoRA;;;;;;;;;;;;;;;;;;AAolBA;;;;;;;;;;;AAuKA;;;;;;;;;AAgnBA;;;;;;;;;AAmbA;;;;;;;;;;;AAsQA;;;;;;;;;;;;AAsHA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmXA;;;;;;;AA4pBA;;AA2oCA;AAEA;AAEA;;AAsBA;;;;;;AAMA;;;AAGA;;;;AAIA;;;AAGA;;;;;;AAMA;;;AAGA;;;AAGA;;;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA;;;AAOA;;;;;;AAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4+BA;ACzwpBA;;AAGA;AACA;AAEA;;;;AAIA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;AAIA;;AAyGA;;AA0GA;;AAUA;AAwsBA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAGA;;AAKA;AACA;AAEA;AACA;AACA;AACA;AAEA;;AAEA;AACA;AAEA;;AAEA;AACA;AACA;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3rCA;;;;AAIA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA","sources":["webpack:///../node_modules/chartiq/js/addOns.js","webpack:///../node_modules/chartiq/js/chartiq.js","webpack:///../node_modules/chartiq/js/components.js","webpack:///../node_modules/chartiq/js/defaultConfiguration.js","webpack:///../node_modules/chartiq/js/standard.js"],"sourcesContent":["/**!\n *\t9.3.0\n *\tGeneration date: 2024-06-03T13:22:07.487Z\n *\tClient name: euroland as\n *\tPackage Type: Core alacarte\n *\tLicense type: annual\n *\tBuild descriptor: 13d0ed304\n */\n\n/***********************************************************!\n * Copyright © 2023 S&P Global All rights reserved\n*************************************************************/\n/*************************************! DO NOT MAKE CHANGES TO THIS LIBRARY FILE!! !*************************************\n* If you wish to overwrite default functionality, create a separate file with a copy of the methods you are overwriting *\n* and load that file right after the library has been loaded, but before the chart engine is instantiated. *\n* Directly modifying library files will prevent upgrades and the ability for ChartIQ to support your solution. *\n*************************************************************************************************************************/\n/* eslint-disable no-extra-parens */\n\n\nimport {CIQ as __CIQ_} from \"../js/chartiq.js\";\n\n\nlet __js_addons_standard_dataLoader_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nvar CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * Loads static data from uploaded files into the chart for easier consumption.\n * @param {object} params Configuration parameters.\n * @param {CIQ.ChartEngine} params.stx A reference to the chart engine that contains the chart for\n * \t\twhich the DataLoader is created.\n * @constructor\n * @name CIQ.DataLoader\n * @since 8.4.0\n */\nclass DataLoader {\n\tconstructor(params) {\n\t\tconst { stx } = params;\n\t\tif (!stx) {\n\t\t\tconsole.warn(\"The DataLoader requires an stx parameter\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.stx = stx;\n\t\tthis.cssRequired = true;\n\n\t\tstx.dataLoader = this;\n\t\tif (CIQ.UI) {\n\t\t\tconst listener = ({ value: uiContext }) => {\n\t\t\t\tif (!uiContext) return;\n\t\t\t\tsetTimeout(this.subscribeToChanges, 0, uiContext);\n\t\t\t\tsetTimeout(this.registerHotKeys, 0, uiContext);\n\t\t\t};\n\t\t\tCIQ.UI.observeProperty(\"uiContext\", stx, listener);\n\t\t\tstx.addEventListener(\"destroy\", () =>\n\t\t\t\tCIQ.UI.unobserveProperty(\"uiContext\", stx, listener)\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Formats data into OHLC format readable by the {@link CIQ.ChartEngine}\n\t * @param {CIQ.CSVReader} dataObj CIQ.CSVReader which contains the parsed data\n\t * @param {FormData} dataOptions FormData options that get the name of the imported data\n\t * @memberof CIQ.DataLoader\n\t * @alias formatData\n\t */\n\tformatData(dataObj, dataOptions) {\n\t\tconst { defaultPlotField } = this.stx.chart;\n\t\tconst { results, fields } = dataObj;\n\t\tconst { name } = dataOptions;\n\n\t\tconst dtIdx = fields.indexOf(\"DT\");\n\t\tconst dateIdx = fields.indexOf(\"Date\");\n\t\tconst nameIdx = fields.indexOf(name);\n\n\t\tconst useField = nameIdx > -1;\n\t\tlet usedFields = [dtIdx > -1 ? dtIdx : dateIdx];\n\t\tif (useField) usedFields.push(fields.indexOf(name));\n\t\tresults.data = results.map((row) => {\n\t\t\tconst entry = {};\n\t\t\trow.split(\",\").forEach((col, idx) => {\n\t\t\t\tif (useField && usedFields.indexOf(idx) === -1) return;\n\t\t\t\tlet f = fields[idx];\n\t\t\t\tlet c;\n\t\t\t\ttry {\n\t\t\t\t\tc = JSON.parse(col);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tc = col;\n\t\t\t\t}\n\t\t\t\tlet parsedCol = f === \"DT\" || f === \"Date\" ? c : Number.parseFloat(c);\n\t\t\t\tentry[fields[idx]] = parsedCol;\n\n\t\t\t\t// If we're using the \"name\" to signify we want to add a series\n\t\t\t\t// then take the value of the series and set it the defaultPlotField.\n\t\t\t\t// Otherwise we end up trying to plot the defaultPlotField instead of the \"name\"\n\t\t\t\tif (idx === nameIdx) {\n\t\t\t\t\tdelete entry[fields[idx]];\n\t\t\t\t\tentry[defaultPlotField] = parsedCol;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn entry;\n\t\t});\n\t}\n\n\t/**\n\t * Imports data from a {@link CIQ.CSVReader} and loads it into the chart based on FormData parameters.\n\t * @param {CIQ.CSVReader} dataObj CIQ.CSVReader that contains parsed data\n\t * @memberof CIQ.DataLoader\n\t * @alias importData\n\t */\n\timportData(dataObj) {\n\t\tconst self = this;\n\t\tconst { stx } = this;\n\n\t\tconst opt = Object.fromEntries(dataObj.formData.entries());\n\t\tlet { color, display, name, panel, periodicity } = opt;\n\t\tperiodicity = JSON.parse(periodicity);\n\n\t\tthis.formatData(dataObj, opt);\n\t\tconst { results } = dataObj;\n\t\tconst { data } = results;\n\n\t\tconst symbolObject = {\n\t\t\tsymbol: name,\n\t\t\tstatic: true\n\t\t};\n\t\tconst params = {\n\t\t\tdata,\n\t\t\tsymbolObject,\n\t\t\tpanel: panel === \"true\" ? true : undefined,\n\t\t\tcolor\n\t\t};\n\n\t\tif (display === \"secondary\") {\n\t\t\tstx.addSeries(name, params, function () {\n\t\t\t\tlet series = stx.getSeries({ symbol: name })[0];\n\t\t\t\tconst tick = stx.tickFromDate(series.endPoints.end);\n\t\t\t\tstx.chart.scroll =\n\t\t\t\t\tstx.chart.dataSet.length - 1 - tick + stx.chart.maxTicks;\n\t\t\t\tself.registerDataWarnings(true);\n\t\t\t});\n\t\t} else {\n\t\t\tstx.quoteDriver.pause(name);\n\t\t\tstx.loadChart(symbolObject, { masterData: data, periodicity }, () => {\n\t\t\t\tself.registerDataWarnings();\n\n\t\t\t\tconst contextWrapper = stx.container.closest(\"cq-context-wrapper\");\n\t\t\t\tif (contextWrapper && contextWrapper.removeEmptyMsg)\n\t\t\t\t\tcontextWrapper.removeEmptyMsg();\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Registers and cleans up warnings about when data will be removed on users actions\n\t * @param {boolean} series When true adds tear downs for series.\n\t * @memberof DataLoader#\n\t */\n\tregisterDataWarnings(series) {\n\t\tconst { stx } = this;\n\t\tconst warningEvt = stx.addEventListener(\"menu\", ({ stx, menu }) => {\n\t\t\tif (\n\t\t\t\tmenu.matches(\".ciq-period\") &&\n\t\t\t\tCIQ.UI.getMyContext(menu) === stx.uiContext\n\t\t\t) {\n\t\t\t\tstx.dispatch(\"notification\", \"changeperiodicity\");\n\t\t\t}\n\t\t});\n\t\tlet seriesInj, highlightInj;\n\t\tif (series) {\n\t\t\tseriesInj = stx.append(\"removeSeries\", removeWarnings);\n\t\t\thighlightInj = stx.append(\"deleteHighlighed\", removeWarnings);\n\t\t}\n\n\t\tstx.addEventListener(\"periodicity\", ({ stx, differentData }) => {\n\t\t\tconst statics = stx.getSymbols({ static: true });\n\t\t\tif (statics && differentData) {\n\t\t\t\tstatics.forEach((symbol) => {\n\t\t\t\t\tstx.removeSeries(symbol, stx.chart);\n\t\t\t\t\tremoveWarnings();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tstx.addEventListener(\"newChart\", () => {\n\t\t\tremoveWarnings();\n\t\t});\n\n\t\tfunction removeWarnings() {\n\t\t\tif (!stx.getSymbols({ static: true }).length) {\n\t\t\t\tstx.removeEventListener(warningEvt);\n\t\t\t\tif (series) {\n\t\t\t\t\tstx.removeInjection(seriesInj);\n\t\t\t\t\tstx.removeInjection(highlightInj);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tregisterHotKeys(uiContext) {\n\t\tconst hotKeys = CIQ.getFromNS(uiContext.config, \"hotkeyConfig.hotkeys\");\n\t\tif (!hotKeys) return;\n\n\t\tlet hotKey = hotKeys.find(({ action }) => action === \"dataLoader\");\n\t\tif (hotKey)\n\t\t\thotKey.action = () => {\n\t\t\t\tuiContext.getAdvertised(\"Channel\").write(null, \"dataLoader\", true);\n\t\t\t};\n\t}\n\n\tsubscribeToChanges(uiContext) {\n\t\tconst { stx } = uiContext;\n\t\tconst base = CIQ.UI.BaseComponent.prototype;\n\n\t\tbase.channelSubscribe(\n\t\t\t\"channel.dataLoader\",\n\t\t\t(value) => {\n\t\t\t\tlet val = value\n\t\t\t\t\t? { type: \"dataLoader\", params: { stx, context: uiContext } }\n\t\t\t\t\t: {};\n\n\t\t\t\tbase.channelWrite(\"channel.dialog\", val, stx);\n\t\t\t},\n\t\t\tstx\n\t\t);\n\t}\n}\n\n/**\n * Helper class to read loaded web files with a FileReader.\n * @constructor\n * @name CIQ.CSVReader\n * @param {external:File} file Web file that the CSVReader should parse.\n * @since 8.4.0\n */\nclass CSVReader {\n\tconstructor(file) {\n\t\tconst reader = new FileReader();\n\t\t/**\n\t\t * @type {external:FileReader}\n\t\t * @alias reader\n\t\t * @memberof CIQ.CSVReader\n\t\t * @instance\n\t\t */\n\t\tthis.reader = reader;\n\t\t/**\n\t\t * @type {external:File}\n\t\t * @alias file\n\t\t * @memberof CIQ.CSVReader\n\t\t * @instance\n\t\t */\n\t\tthis.file = file;\n\t}\n\n\t/**\n\t * Asynchronously parse a File with the FileReader.\n\t * Determines the linebreak and splits into arrays for fields and data.\n\t * On resolve returns the results of the file split based on identified line break.\n\t * @param {external:File} file File to passed to the FileReader and parsed.\n\t * @memberof CIQ.CSVReader\n\t * @async\n\t * @return {Promise}\n\t */\n\tasync parse(file) {\n\t\tconst { reader } = this;\n\t\treturn new Promise((res, rej) => {\n\t\t\treader.readAsText(file);\n\n\t\t\treader.onload = (e) => {\n\t\t\t\tconst raw = this.splitResults(reader.result);\n\t\t\t\tconst fields = raw.shift(); // remove fields so they aren't reparsed\n\t\t\t\tconst quoted = !!fields.match(/\"/);\n\t\t\t\tconst splitter = quoted ? new RegExp(/,(?=\")/) : new RegExp(/,/);\n\t\t\t\tthis.fields = fields.split(splitter).map((field) => {\n\t\t\t\t\tlet f;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tf = JSON.parse(field);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tf = field;\n\t\t\t\t\t}\n\t\t\t\t\treturn f;\n\t\t\t\t});\n\t\t\t\tif (raw[raw.length - 1] === \"\") raw.pop(); // remove any trailing newline\n\t\t\t\tthis.results = raw;\n\t\t\t\tres(raw);\n\t\t\t};\n\n\t\t\treader.onerror = (e) => {\n\t\t\t\tconsole.warn(e);\n\t\t\t\trej(e);\n\t\t\t};\n\t\t});\n\t}\n\n\t/**\n\t * Determines the line break on the File by checking for carriage and newLine return.\n\t * Progressively reads 5% ofthe file until it finds a value.\n\t * @param {string} data Raw parsed values from the FileReader\n\t * @memberof CIQ.CSVReader\n\t * @returns string Identified line break in the file which will be used to split results\n\t */\n\tdetermineLineBreak(data) {\n\t\tconst { length } = data;\n\t\tconst carriage = \"\\r\\n\";\n\t\tconst newLine = \"\\n\";\n\t\tlet pct = Math.floor(length * 0.05); // take first 5% of the string\n\t\tlet start = 0;\n\t\tlet lbreak;\n\t\tdo {\n\t\t\tconst sub = data.substring(start, pct);\n\t\t\tif (sub.indexOf(carriage) > -1) lbreak = carriage;\n\t\t\telse if (sub.indexOf(newLine) > -1) lbreak = newLine;\n\t\t\telse start += pct;\n\t\t} while (!lbreak);\n\t\treturn lbreak;\n\t}\n\n\t/**\n\t * Splits data from the FileReader based on determined linebreak.\n\t * @param {string} data Parsed data from FileReader\n\t * @memberof CIQ.CSVReader\n\t * @returns string[] Split data from the FileReader\n\t */\n\tsplitResults(data) {\n\t\treturn data.split(this.determineLineBreak(data));\n\t}\n}\n\nCIQ.CSVReader = CIQ.CSVReader || CSVReader;\nCIQ.DataLoader = CIQ.DataLoader || DataLoader;\n\n/**\n * Native Web File API. Files are an implementation of the Blob Object. From MDN:\n > The File interface provides information about files and allows JavaScript in a web page to access their content.\n >\n > File objects are generally retrieved from a FileList object returned as a result of a user selecting files using the `` element, from a drag and drop operation's DataTransfer object, or from the mozGetAsFile() API on an HTMLCanvasElement.\n >\n > A File object is a specific kind of a Blob, and can be used in any context that a Blob can. In particular, FileReader, URL.createObjectURL(), createImageBitmap(), and XMLHttpRequest.send() accept both Blobs and Files.\n *\n * @external File\n * @see [File](https://developer.mozilla.org/en-US/docs/Web/API/File) at Mozilla Developer Network.\n */\n/**\n * Web API that will asynchronously read File or Blob Objects. From MDN:\n >The FileReader object lets web applications asynchronously read the contents of files (or raw data buffers) stored on the user's computer, using File or Blob objects to specify the file or data to read.\n >\n > File objects may be obtained from a FileList object returned as a result of a user selecting files using the `` element, from a drag and drop operation's DataTransfer object, or from the mozGetAsFile() API on an HTMLCanvasElement.\n >\n > FileReader can only access the contents of files that the user has explicitly selected, either using an HTML `` element or by drag and drop. It cannot be used to read a file by pathname from the user's file system. To read files on the client's file system by pathname, use the File System Access API. To read server-side files, use standard Ajax solutions, with CORS permission if reading cross-domain.\n\n\n * @external FileReader\n * @see [FileReader](https://developer.mozilla.org/en-US/docs/Web/API/FileReader) at Mozilla Developer Network.\n */\n\n};\n\n\nlet __js_addons_standard_extendedHours_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nvar CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * Use this constructor to initialize filtering and visualization styles of extended hours by the use of shading and delimitation lines.\n *\n * Extended hours can be toggled using the Ctrl+Alt+X keystroke combination (see the\n * `extendedHours` action in `hotkeyConfig.hotkeys` in *js/defaultConfiguration.js*).\n *\n * Requires *addOns.js*.\n *\n * This visualization will only work if data for the corresponding sessions is provided from your quote feed and the market definitions have the corresponding entries.\n * See {@link CIQ.Market} for details on how to define extended (non-default) hours.\n *\n * By default all extended hour sessions are disabled unless explicitly enabled using {@link CIQ.ExtendedHours.prepare} or {@link CIQ.ExtendedHours.set}.\n *\n * All possible market sessions needed to be shaded at any given time should be enabled at once with this method.\n *\n * Your fetch should load the required data based on the `params.stx.layout.extended` and `params.stx.layout.marketSessions` settings.\n *\n * Remember that when `params.filter` is set to true, this module performs a filter of already loaded masterData when {@link CIQ.ExtendedHours.set} is invoked,\n * rather than calling {@link CIQ.ChartEngine#loadChart} to reload the data from the server every time you enable or disable this feature.\n * So you must always return all requested sessions on your fetch responses if this flag is set.\n *\n * CSS info:\n * - The styles for the shading of each session is determined by the corresponding CSS class in the form of \"stx_market_session.\"+session_name (Example: `stx_market_session.pre`)\n * - The divider line is determined by the CSS class \"stx_market_session.divider\".\n *\n * **Important:** This module must be initialized before {@link CIQ.ChartEngine#importLayout} or the sessions will not be able to be restored.\n *\n * Example:\n * \n *\n * @param {object} params The constructor parameters.\n * @param {CIQ.ChartEngine} [params.stx] The chart object.\n * @param {boolean} [params.filter] Setting to true performs a filter of masterData when\n * \t\t{@link CIQ.ExtendedHours.set} is invoked, rather than calling\n * \t\t{@link CIQ.ChartEngine#loadChart} to reload the data from the server.\n * @param {string} [params.menuContextClass] A CSS class name used to query the menu DOM\n * \t\telement that contains the UI control for the extended hours add-on. In a multi-chart\n * \t\tdocument, the add-on is available only on charts that have a menu DOM element with\n * \t\tthe value for `menuContextClass` as a class attribute.\n *\n * @constructor\n * @name CIQ.ExtendedHours\n * @since\n * - 06-2016-02\n * - 3.0.0 Changed argument to an object to support `filter`.\n * - 3.0.0 No longer necessary to explicitly call new Chart to reload data. Instead call {@link CIQ.ExtendedHours.set} function.\n * - 5.0.0 No longer necessary to explicitly set `stx.layout.marketSessions` or `1stx.layout.extended` to manage sessions; instead call {@link CIQ.ExtendedHours.prepare} or {@link CIQ.ExtendedHours.set}.\n * - 8.0.0 Added `params.menuContextClass`.\n *\n * @example\n * // Call this only once to initialize the market sessions display manager.\n * new CIQ.ExtendedHours({stx:stxx, filter:true});\n *\n * // By default all sessions are disabled unless explicitly enabled.\n * // This forces the extended hours sessions [\"pre\",\"post\"] to be enabled when the chart is initially loaded.\n * stxx.extendedHours.prepare(true);\n *\n * // Now display your chart.\n * stxx.loadChart(stxx.chart.symbol, {}, function() {});\n *\n * @example\n * // Once your chart is displayed, you can call this from any UI interface to turn on extended hours.\n * stx.extendedHours.set(true);\n *\n * // Or call this from any UI interface to turn off extended hours.\n * stx.extendedHours.set(false);\n *\n * @example\n * // CSS entries for a session divider and sessions named \"pre\" and \"post\".\n * .stx_market_session.divider {\n * background-color: rgba(0,255,0,0.8);\n * width: 1px;\n * }\n * .stx_market_session.pre {\n * background-color: rgba(255,255,0,0.1);\n * }\n * .stx_market_session.post {\n * background-color: rgba(0,0,255,0.2);\n * }\n */\nCIQ.ExtendedHours =\n\tCIQ.ExtendedHours ||\n\tfunction (params) {\n\t\tvar stx = params.stx;\n\t\tthis.filter = params.filter;\n\t\tif (!stx) {\n\t\t\t// backwards compatibility\n\t\t\tstx = params;\n\t\t\tthis.filter = false;\n\t\t}\n\t\tvar styles = {};\n\t\tthis.stx = stx;\n\t\tthis.stx.extendedHours = this;\n\t\tthis.cssRequired = true;\n\n\t\tstx.addEventListener(\"theme\", function (tObject) {\n\t\t\t// reinitialize the session colors after a theme change\n\t\t\tstyles = {};\n\t\t\tfor (var sess in stx.layout.marketSessions) {\n\t\t\t\tif (!styles.session) styles.session = {};\n\t\t\t\tstyles.session[sess] = stx.canvasStyle(\"stx_market_session \" + sess);\n\t\t\t}\n\t\t});\n\n\t\tstx.addEventListener(\"symbolChange\", function (tObject) {\n\t\t\t// check if extended hours exists for this security\n\t\t\tif (\n\t\t\t\ttObject.action == \"master\" &&\n\t\t\t\tstx.layout.extended &&\n\t\t\t\t!(stx.chart.market.market_def && stx.chart.market.sessions.length)\n\t\t\t) {\n\t\t\t\tCIQ.alert(\"There are no Extended Hours for this instrument.\");\n\t\t\t}\n\t\t});\n\n\t\tif (CIQ.UI) {\n\t\t\tCIQ.UI.KeystrokeHub.addHotKeyHandler(\n\t\t\t\t\"extendedHours\",\n\t\t\t\t({ stx }) => {\n\t\t\t\t\tstx.container.ownerDocument.body.keystrokeHub.context.advertised.Layout.setExtendedHours();\n\t\t\t\t},\n\t\t\t\tstx\n\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * Prepares the extended hours settings and classes for the session names enumerated in the arguments without actually displaying or loading the data.\n\t\t *\n\t\t * This method can be used to force a particular session to load by default by calling it before {@link CIQ.ChartEngine#loadChart}.\n\t\t * Otherwise the chart will be loaded with all sessions disabled until {@link CIQ.ExtendedHours.set} is invoked.\n\t\t *\n\t\t * {@link CIQ.ChartEngine#importLayout} will also call this method to ensure the sessions are restored as previously saved.\n\t\t *\n\t\t * @param {boolean} enable Set to turn on/off the extended-hours visualization.\n\t\t * @param {array} sessions The sessions to visualize when enable is true. Any sessions previously visualized will be disabled. If set to null, will default to [\"pre\",\"post\"].\n\t\t * @memberof CIQ.ExtendedHours#\n\t\t * @alias prepare\n\t\t * @since 5.0.0\n\t\t */\n\t\tthis.prepare = function (enable, sessions) {\n\t\t\tstx.layout.extended = enable;\n\t\t\tfor (var sess in stx.layout.marketSessions) {\n\t\t\t\tstyles.session = {};\n\t\t\t\tstx.chart.market.disableSession(sess);\n\t\t\t}\n\t\t\tstx.layout.marketSessions = {};\n\t\t\tif (enable) {\n\t\t\t\tif (!sessions) sessions = [\"pre\", \"post\"];\n\t\t\t\tif (sessions.length) {\n\t\t\t\t\tfor (var s = 0; s < sessions.length; s++) {\n\t\t\t\t\t\tstx.layout.marketSessions[sessions[s]] = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tstx.layout.marketSessions = sessions;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (sess in stx.layout.marketSessions) {\n\t\t\t\tif (!styles.session) styles.session = {};\n\t\t\t\tstyles.session[sess] = stx.canvasStyle(\"stx_market_session \" + sess);\n\t\t\t\tstx.chart.market.disableSession(sess, true);\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * gathers and renders the extended hours for the preset session names enumerated in prepare().\n\t\t * @param {function} cb Optional callback function to be invoked once chart is reloaded with extended hours data.\n\t\t * @memberof CIQ.ExtendedHours#\n\t\t * @alias complete\n\t\t * @private\n\t\t * @since 5.0.0\n\t\t */\n\t\tthis.complete = function (cb) {\n\t\t\tstx.changeOccurred(\"layout\");\n\t\t\tif (!stx.chart.market.market_def) {\n\t\t\t\t// possibly a 24 hours Market. Not necessarily an error but nothing to do for ExtendedHours\n\t\t\t\tif (cb) cb();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.filter) {\n\t\t\t\tstx.createDataSet();\n\t\t\t\tstx.draw();\n\t\t\t\tif (cb) cb();\n\t\t\t} else {\n\t\t\t\tstx.loadChart(stx.chart.symbol, cb);\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Turns on or off extended hours for the session names enumerated in the arguments.\n\t\t * @param {boolean} enable Set to turn on/off the extended-hours visualization.\n\t\t * @param {array} sessions The sessions to visualize when enable is true. Any sessions previously visualized will be disabled. If set to null, will default to [\"pre\",\"post\"].\n\t\t * @param {function} cb Optional callback function to be invoked once chart is reloaded with extended hours data.\n\t\t * @memberof CIQ.ExtendedHours#\n\t\t * @alias set\n\t\t */\n\t\tthis.set = function (enable, sessions, cb) {\n\t\t\tthis.prepare(enable, sessions);\n\t\t\tthis.complete(cb);\n\t\t};\n\n\t\t// This injection shades the after hours portion of the chart for each yaxis.\n\t\t// Only the panel to which the yaxis belongs will get shading.\n\t\t// This means yaxes of overlays will bypass the shading block.\n\t\tthis.stx.append(\"drawYAxis\", function (panel, parameters) {\n\t\t\tif (!this.layout.extended) return;\n\t\t\tif (\n\t\t\t\tpanel.yAxis != parameters.yAxis ||\n\t\t\t\tpanel.shareChartXAxis === false ||\n\t\t\t\tpanel.hidden\n\t\t\t)\n\t\t\t\treturn;\n\t\t\tvar chart = panel.chart;\n\t\t\tif (CIQ.ChartEngine.isDailyInterval(this.layout.interval)) return;\n\t\t\tstyles.divider = this.canvasStyle(\"stx_market_session divider\");\n\t\t\tif (styles.session) {\n\t\t\t\tvar m = chart.market;\n\t\t\t\tvar ranges = [];\n\t\t\t\tvar range = {};\n\t\t\t\tvar nextBoundary, thisSession;\n\t\t\t\tfor (var i = 0; i < chart.dataSegment.length; i++) {\n\t\t\t\t\tvar ds = chart.dataSegment[i];\n\t\t\t\t\tif (!ds || !ds.DT) continue;\n\t\t\t\t\tvar c = null;\n\t\t\t\t\tif (m.market_def) {\n\t\t\t\t\t\tif (!nextBoundary || nextBoundary <= ds.DT) {\n\t\t\t\t\t\t\tthisSession = m.getSession(ds.DT);\n\t\t\t\t\t\t\tvar filterSession =\n\t\t\t\t\t\t\t\tthisSession !== \"\" &&\n\t\t\t\t\t\t\t\t(!this.layout.marketSessions ||\n\t\t\t\t\t\t\t\t\t!this.layout.marketSessions[thisSession]);\n\t\t\t\t\t\t\tnextBoundary = m[filterSession ? \"getNextOpen\" : \"getNextClose\"](\n\t\t\t\t\t\t\t\tds.DT\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tvar s = styles.session[thisSession];\n\t\t\t\t\tif (s) c = s.backgroundColor;\n\t\t\t\t\tif (range.color && range.color != c) {\n\t\t\t\t\t\tranges.push({\n\t\t\t\t\t\t\tstart: range.start,\n\t\t\t\t\t\t\tend: range.end,\n\t\t\t\t\t\t\tcolor: range.color\n\t\t\t\t\t\t});\n\t\t\t\t\t\trange = {};\n\t\t\t\t\t}\n\t\t\t\t\tif (c) {\n\t\t\t\t\t\tvar cw = this.layout.candleWidth;\n\t\t\t\t\t\tif (ds.candleWidth) cw = ds.candleWidth;\n\t\t\t\t\t\trange.end = this.pixelFromBar(i, chart) + cw / 2;\n\t\t\t\t\t\tif (!range.start && range.start !== 0)\n\t\t\t\t\t\t\trange.start = range.end - cw + 1;\n\t\t\t\t\t\trange.color = c;\n\t\t\t\t\t} else {\n\t\t\t\t\t\trange = {};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (range.start || range.start === 0)\n\t\t\t\t\tranges.push({\n\t\t\t\t\t\tstart: range.start,\n\t\t\t\t\t\tend: range.end,\n\t\t\t\t\t\tcolor: range.color\n\t\t\t\t\t});\n\t\t\t\tvar noDashes = CIQ.isTransparent(styles.divider.backgroundColor);\n\t\t\t\tvar dividerLineWidth = styles.divider.width.replace(/px/g, \"\");\n\t\t\t\tvar dividerStyle = {\n\t\t\t\t\ty0: panel.bottom,\n\t\t\t\t\ty1: panel.top,\n\t\t\t\t\tcolor: styles.divider.backgroundColor,\n\t\t\t\t\ttype: \"line\",\n\t\t\t\t\tcontext: chart.context,\n\t\t\t\t\tconfineToPanel: panel,\n\t\t\t\t\tpattern: \"dashed\",\n\t\t\t\t\tlineWidth: dividerLineWidth,\n\t\t\t\t\tdeferStroke: true\n\t\t\t\t};\n\t\t\t\tthis.startClip(panel.name);\n\t\t\t\tchart.context.beginPath();\n\t\t\t\tif (stx.highlightedDraggable) chart.context.globalAlpha *= 0.3;\n\t\t\t\tfor (i = 0; i < ranges.length; i++) {\n\t\t\t\t\tchart.context.fillStyle = ranges[i].color;\n\t\t\t\t\tif (!noDashes && ranges[i].start > chart.left)\n\t\t\t\t\t\tthis.plotLine(\n\t\t\t\t\t\t\tCIQ.extend(\n\t\t\t\t\t\t\t\t{ x0: ranges[i].start, x1: ranges[i].start },\n\t\t\t\t\t\t\t\tdividerStyle\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\tchart.context.fillRect(\n\t\t\t\t\t\tranges[i].start,\n\t\t\t\t\t\tpanel.top,\n\t\t\t\t\t\tranges[i].end - ranges[i].start,\n\t\t\t\t\t\tpanel.bottom - panel.top\n\t\t\t\t\t);\n\t\t\t\t\tif (!noDashes && ranges[i].end < chart.right)\n\t\t\t\t\t\tthis.plotLine(\n\t\t\t\t\t\t\tCIQ.extend({ x0: ranges[i].end, x1: ranges[i].end }, dividerStyle)\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tchart.context.stroke();\n\t\t\t\tthis.endClip();\n\t\t\t}\n\t\t});\n\t};\n\n};\n\n\nlet __js_addons_standard_fullScreen_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nvar CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * Creates an add-on that sets the chart UI to full-screen mode. In full-screen mode, a class\n * `full-screen` is added to the context element used for styling. In addition, elements with the\n * class `full-screen-hide` are hidden. Elements with the class `full-screen-show` that are\n * normally hidden are shown.\n *\n * Requires *addOns.js*.\n *\n * ![Full-screen display](./img-Full-Screen-Chart.png)\n *\n * @param {object} params Configuration parameters.\n * @param {CIQ.ChartEngine} [params.stx] The chart object.\n *\n * @constructor\n * @name CIQ.FullScreen\n * @since 7.3.0\n *\n * @example\n * new CIQ.FullScreen({ stx: stxx });\n */\nCIQ.FullScreen =\n\tCIQ.FullScreen ||\n\tfunction (params) {\n\t\tif (!params) params = {};\n\t\tif (!params.stx) {\n\t\t\tconsole.warn(\"The Full Screen addon requires an stx parameter\");\n\t\t\treturn;\n\t\t}\n\t\t// Check for loading within an iframe from another origin\n\t\ttry {\n\t\t\tif (window.location.host !== window.top.location.host)\n\t\t\t\tthrow new Error(\n\t\t\t\t\twindow.location.host + \" does not match \" + window.top.location.host\n\t\t\t\t);\n\t\t} catch (exception) {\n\t\t\tconsole.warn(\"Full screen mode disabled.\");\n\t\t\treturn;\n\t\t}\n\t\tthis.stx = params.stx;\n\t\tthis.stx.fullScreen = this;\n\t\tthis.fullScreenButton = null;\n\t\tthis.fullScreenState = false;\n\n\t\t//Attaches FullScreen button to HTML DOM inside .chartSize element\n\t\tthis.addFullScreenButton = function () {\n\t\t\tif (this.stx.registerChartControl)\n\t\t\t\tthis.fullScreenButton = this.stx.registerChartControl(\n\t\t\t\t\t\"stx-full-screen\",\n\t\t\t\t\t\"Full Screen\",\n\t\t\t\t\t(function (self) {\n\t\t\t\t\t\treturn function (e) {\n\t\t\t\t\t\t\tself.fullScreenToggle(e);\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t};\n\t\t\t\t\t})(this)\n\t\t\t\t);\n\t\t};\n\n\t\t//Click event handler for the Full Screen button.\n\t\tthis.fullScreenToggle = function (e) {\n\t\t\tvar doc = e.target.ownerDocument;\n\t\t\t// First check for availability of the requestFullScreen function\n\t\t\tif (\n\t\t\t\tdoc.documentElement.requestFullscreen ||\n\t\t\t\tdoc.documentElement.webkitRequestFullscreen ||\n\t\t\t\tdoc.documentElement.mozRequestFullscreen ||\n\t\t\t\tdoc.documentElement.msRequestFullscreen\n\t\t\t) {\n\t\t\t\t// Check if full screen is already enabled\n\t\t\t\tif (this.getFullScreenElement(doc)) {\n\t\t\t\t\tif (doc.exitFullscreen) doc.exitFullscreen();\n\t\t\t\t\telse if (doc.webkitExitFullscreen) doc.webkitExitFullscreen();\n\t\t\t\t\telse if (doc.mozCancelFullScreen) doc.mozCancelFullScreen();\n\t\t\t\t\telse if (doc.msExitFullscreen) doc.msExitFullscreen();\n\t\t\t\t} else {\n\t\t\t\t\t// requestFullscreen methods need to be checked for again here because the browser will not allow the method to be stored in a local var\n\t\t\t\t\tif (doc.documentElement.requestFullscreen)\n\t\t\t\t\t\tdoc.documentElement.requestFullscreen();\n\t\t\t\t\telse if (doc.documentElement.webkitRequestFullscreen)\n\t\t\t\t\t\tdoc.documentElement.webkitRequestFullscreen();\n\t\t\t\t\telse if (doc.documentElement.mozRequestFullscreen)\n\t\t\t\t\t\tdoc.documentElement.mozRequestFullscreen();\n\t\t\t\t\telse if (doc.documentElement.msRequestFullscreen)\n\t\t\t\t\t\tdoc.documentElement.msRequestFullscreen();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t//If the full screen api isn't available, manually trigger the fullScreen styling\n\t\t\t\tthis.fullScreenState = !this.fullScreenState;\n\t\t\t\tthis.fullScreenRender();\n\t\t\t}\n\t\t};\n\n\t\t// Append/remove full-screen class to context or body and update button state\n\t\tthis.fullScreenRender = function () {\n\t\t\tlet containerElement = null;\n\t\t\tcontainerElement = this.stx.container.closest(\n\t\t\t\t\"*[cq-context], cq-context, body\"\n\t\t\t);\n\t\t\tif (containerElement) {\n\t\t\t\tconst name = \"full-screen\";\n\t\t\t\tconst action = this.fullScreenState === true ? \"add\" : \"remove\";\n\t\t\t\tif (this.fullScreenButton)\n\t\t\t\t\tthis.fullScreenButton.classList[action](\"active\");\n\t\t\t\tcontainerElement.classList[action](name);\n\t\t\t\tthis.stx.channel.componentClass = {\n\t\t\t\t\t...this.stx.channel.componentClass,\n\t\t\t\t\t[name]: action\n\t\t\t\t};\n\n\t\t\t\t// Trigger a resize event to update the chart size\n\t\t\t\twindow.dispatchEvent(new Event(\"resize\"));\n\t\t\t}\n\t\t};\n\n\t\t//Handle full screen change\n\t\tthis.onFullScreenChange = function (e) {\n\t\t\tif (this.getFullScreenElement(e.target.ownerDocument)) {\n\t\t\t\tthis.fullScreenState = true;\n\t\t\t} else {\n\t\t\t\tthis.fullScreenState = false;\n\t\t\t}\n\t\t\tthis.fullScreenRender();\n\t\t};\n\n\t\tthis.getFullScreenElement = function (doc) {\n\t\t\treturn (\n\t\t\t\tdoc.fullscreenElement ||\n\t\t\t\tdoc.webkitCurrentFullScreenElement ||\n\t\t\t\tdoc.mozFullScreenElement ||\n\t\t\t\tdoc.msFullscreenElement\n\t\t\t);\n\t\t};\n\n\t\tvar listener = this.onFullScreenChange.bind(this);\n\t\tvar self = this;\n\t\t[\n\t\t\t\"fullscreenchange\",\n\t\t\t\"webkitfullscreenchange\",\n\t\t\t\"mozfullscreenchange\",\n\t\t\t\"MSFullscreenChange\"\n\t\t].forEach(function (ev) {\n\t\t\tself.stx.container.ownerDocument.addEventListener(ev, listener);\n\t\t\tself.stx.addEventListener(\"destroy\", function () {\n\t\t\t\tthis.container.ownerDocument.removeEventListener(ev, listener);\n\t\t\t});\n\t\t});\n\n\t\t// Add the FullScreen button to chartControls\n\t\tthis.addFullScreenButton();\n\t};\n\n};\n\n\nlet __js_addons_standard_inactivityTimer_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nvar CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * Add-On that puts the chart into \"sleep mode\" after a period of inactivity.\n *\n * Requires *addOns.js*.\n *\n * In sleep mode, a class \"ciq-sleeping\" will be added to the body. This will dim out the chart.\n * Sleep mode is ended when interaction with the chart is detected.\n *\n * @param {object} params Configuration parameters\n * @param {CIQ.ChartEngine} [params.stx] The chart object\n * @param {number} [params.minutes] Inactivity period in _minutes_. Set to 0 to disable the sleep mode.\n * @param {number} [params.interval] Sleeping quote update interval in _seconds_. During sleep mode, this is used for the update loop.\n * \t\t\t\t\t\t\t\t\tSet to non-zero positive number or defaults to 60.\n * @param {function} [params.wakeCB] Optional callback function after waking\n * @param {function} [params.sleepCB] Optional callback function after sleeping\n * @constructor\n * @name CIQ.InactivityTimer\n * @since 3.0.0\n * @example\n * \tnew CIQ.InactivityTimer({stx:stxx, minutes:30, interval:15}); //30 minutes of inactivity will put chart into sleep mode, updating every 15 seconds\n *\n */\nCIQ.InactivityTimer =\n\tCIQ.InactivityTimer ||\n\tfunction (params) {\n\t\tif (!params.minutes) return;\n\t\tif (!params.interval || params.interval < 0) params.interval = 60;\n\t\tthis.stx = params.stx;\n\t\tthis.timeout = params.minutes;\n\t\tthis.interval = params.interval;\n\t\tthis.wakeCB = params.wakeCB;\n\t\tthis.sleepCB = params.sleepCB;\n\t\tthis.sleepTimer = null;\n\t\tthis.sleeping = false;\n\t\tthis.last = new Date().getTime();\n\t\tthis.wakeChart = function (isPropagated) {\n\t\t\tclearTimeout(this.sleepTimer);\n\t\t\tthis.last = new Date().getTime();\n\t\t\tif (this.sleeping) {\n\t\t\t\tif (this.stx.quoteDriver) this.stx.quoteDriver.updateChartLoop();\n\t\t\t\tthis.sleeping = false;\n\t\t\t\tthis.stx.container.ownerDocument.body.classList.remove(\"ciq-sleeping\");\n\t\t\t\tif (!isPropagated) {\n\t\t\t\t\tCIQ.ChartEngine.registeredContainers.forEach(function (container) {\n\t\t\t\t\t\tif (params.stx !== container.stx && container.stx.inactivityTimer)\n\t\t\t\t\t\t\tcontainer.stx.inactivityTimer.wakeChart(true);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.sleepTimer = setTimeout(\n\t\t\t\tthis.sleepChart.bind(this),\n\t\t\t\tthis.timeout * 60000\n\t\t\t);\n\t\t\tif (this.wakeCB) this.wakeCB();\n\t\t};\n\t\tthis.sleepChart = function (isPropagated) {\n\t\t\tif (!this.sleeping) {\n\t\t\t\tif (this.stx.quoteDriver)\n\t\t\t\t\tthis.stx.quoteDriver.updateChartLoop(this.interval);\n\t\t\t\tthis.sleeping = true;\n\t\t\t\tthis.stx.container.ownerDocument.body.classList.add(\"ciq-sleeping\");\n\t\t\t\tif (!isPropagated) {\n\t\t\t\t\tCIQ.ChartEngine.registeredContainers.forEach(function (container) {\n\t\t\t\t\t\tif (params.stx !== container.stx && container.stx.inactivityTimer)\n\t\t\t\t\t\t\tcontainer.stx.inactivityTimer.sleepChart(true);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.sleepCB) this.sleepCB();\n\t\t};\n\n\t\tvar self = this,\n\t\t\tdoc = this.stx.container.ownerDocument;\n\t\tfunction wake() {\n\t\t\tself.wakeChart();\n\t\t}\n\n\t\t[\n\t\t\t\"mousemove\",\n\t\t\t\"mousedown\",\n\t\t\t\"touchstart\",\n\t\t\t\"touchmove\",\n\t\t\t\"pointerdown\",\n\t\t\t\"pointermove\",\n\t\t\t\"keydown\",\n\t\t\t\"wheel\"\n\t\t].forEach(function (ev) {\n\t\t\tdoc.body.addEventListener(ev, wake, { passive: false });\n\t\t\tself.stx.addEventListener(\"destroy\", function () {\n\t\t\t\tdoc.body.removeEventListener(ev, wake);\n\t\t\t\tclearTimeout(self.sleepTimer);\n\t\t\t});\n\t\t});\n\n\t\tthis.stx.inactivityTimer = this;\n\n\t\tthis.wakeChart();\n\t};\n\n};\n\n\nlet __js_addons_standard_rangeSlider_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nvar CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * Add-on that adds a range slider to the chart.\n *\n * The range slider allows the `dataSegment` to be selectable as a portion of the data set.\n *\n * The range slider can be toggled using the Ctrl+Alt+R keystroke combination (see the\n * `rangeSlider` action in `hotkeyConfig.hotkeys` in *js/defaultConfiguration.js*).\n *\n * Requires *addOns.js*.\n *\n * Also requires additional CSS. Add the following style sheet:\n * ```\n * \n * ```\n * or directly include this CSS:\n * ```\n * .stx_range_slider.shading {\n * background-color: rgba(128, 128, 128, 0.3);\n * border: solid 2px #0090b7;\n * width: 5px;\n * }\n * ```\n * Once instantiated, the range slider can be displayed or hidden by setting the `rangeSlider`\n * parameter of the primary chart's [layout object]{@link CIQ.ChartEngine#layout} and then issuing\n * a layout change event to trigger the new status. When initialing loading the chart, enable the\n * range slider in a callback function to prevent out‑of‑sequence issues. See the\n * examples below.\n *\n * A range slider is simply another chart. So you configure it and customize it using the same\n * parameters as you would the primary chart. The only difference is that the slider object is a\n * sub‑element of the primary chart, contained in the `slider.slider` object.\n *\n * For example, if you wanted to turn off the x-axis on the slider, assuming a chart instantiated\n * as `stxx`, you would execute:\n * ```\n * stxx.slider.slider.xaxisHeight = 0;\n * ```\n *\n * It is important to note that the range slider chart DOM element creates itself below the\n * primary chart container element, not inside the container. As such, all styling must be on a\n * parent `div` container rather than on the primary chart container itself to ensure styling is\n * shared between the chart and range slider containers.\n *\n * For example, do this:\n * ```\n *
\n *
\n *
\n *
\n * \n *
\n *
\n *
\n * ```\n *\n * not this:\n * ```\n *
\n *
\n *
\n *
\n *
\n * ```\n *\n * Range slider example:\n * \n *\n * @param {object} params Configuration parameters.\n * @param {CIQ.ChartEngine} [params.stx] The chart object.\n * @param {number} [params.height=\"95px\"] Height of the range slider panel. Must include a CSS\n * \t\tunit, such as \"px\".\n * @param {object} [params.yAxis] Y-axis parameters.\n * @param {number} [params.chartContainer] Handle to the main chart container. Defaults to\n * \t\t`stxx.container`.\n * @param {string} [params.menuContextClass] A CSS class name used to query the menu DOM element\n * \t\tthat contains the UI control for the range slider add-on. In a multi-chart document, the\n * \t\tadd-on is available only on charts that have a menu DOM element with the value for\n * \t\t`menuContextClass` as a class attribute.\n *\n * @constructor\n * @name CIQ.RangeSlider\n * @since\n * - 4.0.0\n * - 6.1.0 Added `params.yAxis`.\n * - 8.0.0 Added `params.menuContextClass`.\n *\n * @example\n * \n * \t\tCreate a range slider and enable it by default using the loadChart callback.\n * \n * const stxx = new CIQ.ChartEngine({ container: document.querySelector(\".chartContainer\") });\n *\n * stxx.attachQuoteFeed(quoteFeedSimulator,{ refreshInterval: 1, bufferSize: 200 });\n *\n * // Instantiate a range slider.\n * new CIQ.RangeSlider({ stx: stxx });\n *\n * function displayChart(){\n * stxx.loadChart(\"SPY\", null, function() {\n * // For smoother visualization, enable after the main chart has completed loading its data.\n * stxx.layout.rangeSlider = true; // Show the slider.\n * stxx.changeOccurred(\"layout\"); // Signal the change to force a redraw.\n * });\n * }\n *\n * @example\n * \n * \t\tCreate a range slider and enable/disable it using commands to be triggered from a menu.\n * \n * const stxx = new CIQ.ChartEngine({ container: document.querySelector(\".chartContainer\") });\n *\n * // Instantiate a range slider.\n * new CIQ.RangeSlider({ stx: stxx });\n *\n * // To display the slider from a menu use:\n * stxx.layout.rangeSlider = true; // Show the slider.\n * stxx.changeOccurred(\"layout\"); // Signal the change to force a redraw.\n *\n * // To hide the slider from a menu use:\n * stxx.layout.rangeSlider = false; // Hide the slider.\n * stxx.changeOccurred(\"layout\"); // Signal the change to force a redraw.\n */\nCIQ.RangeSlider =\n\tCIQ.RangeSlider ||\n\tfunction (params) {\n\t\tthis.cssRequired = true;\n\n\t\tvar stx = params.stx;\n\t\tstx.slider = this;\n\t\tvar sliderHeight = params.height ? params.height : \"95px\";\n\t\tvar chartContainer = params.chartContainer\n\t\t\t? params.chartContainer\n\t\t\t: params.stx.container;\n\n\t\tvar ciqSlider = document.createElement(\"div\");\n\t\tciqSlider.className = \"ciq-chart\";\n\t\tvar sliderContainer = document.createElement(\"div\");\n\t\tsliderContainer.className = \"chartContainer\";\n\t\tciqSlider.appendChild(sliderContainer);\n\t\tchartContainer.parentElement.parentElement.insertBefore(\n\t\t\tciqSlider,\n\t\t\tchartContainer.parentElement.nextSibling\n\t\t);\n\t\tObject.assign(ciqSlider.style, {\n\t\t\theight: sliderHeight,\n\t\t\tpaddingTop: \"5px\",\n\t\t\tdisplay: \"none\"\n\t\t});\n\t\tsliderContainer.style.height = \"100%\";\n\t\tsliderContainer.dimensionlessCanvas = true;\n\t\tvar self = (this.slider = new CIQ.ChartEngine({\n\t\t\tcontainer: sliderContainer,\n\t\t\tpreferences: { labels: false, whitespace: 0 }\n\t\t}));\n\t\tself.linkedChartEngine = stx;\n\t\tself.cleanupGaps = stx.cleanupGaps;\n\t\tself.setGapLines(stx.chart.gapLines);\n\t\tself.chart.customChart = stx.chart.customChart;\n\t\tself.xaxisHeight = 30;\n\t\tself.manageTouchAndMouse = false;\n\t\tself.minimumCandleWidth = 0;\n\t\tself.chart.yaxisMarginMultiplier = 1;\n\t\tvar panel = self.chart.panel;\n\t\tvar subholder = panel.subholder;\n\t\tvar closeButton = panel.close;\n\t\tsubholder.style.cursor = \"ew-resize\";\n\t\tsubholder.classList.add(\"stx_range_slider\");\n\t\tif (closeButton) {\n\t\t\tcloseButton.style.display = \"inline\";\n\t\t\tCIQ.safeClickTouch(closeButton, function () {\n\t\t\t\tstx.layout.rangeSlider = false;\n\t\t\t\tstx.changeOccurred(\"layout\");\n\t\t\t});\n\t\t}\n\t\tvar yAxis = panel.yAxis;\n\t\tyAxis.drawCurrentPriceLabel = false;\n\t\tObject.defineProperty(yAxis, \"position\", {\n\t\t\tget: function () {\n\t\t\t\treturn stx.slider.yAxisPosition || stx.chart.panel.yAxis.position;\n\t\t\t},\n\t\t\tset: function (position) {\n\t\t\t\tstx.slider.yAxisPosition = position;\n\t\t\t}\n\t\t});\n\t\tconst { get: widthGetter, set: widthSetter } =\n\t\t\tObject.getOwnPropertyDescriptor(CIQ.ChartEngine.YAxis.prototype, \"width\");\n\t\tObject.defineProperty(yAxis, \"width\", {\n\t\t\tget: function () {\n\t\t\t\treturn Math.max(widthGetter.call(yAxis), stx.chart.yAxis.width);\n\t\t\t},\n\t\t\tset: function (width) {\n\t\t\t\twidthSetter.call(yAxis, width);\n\t\t\t}\n\t\t});\n\t\tCIQ.extend(yAxis, params.yAxis);\n\t\tself.chart.baseline.userLevel = false;\n\t\tif (self.controls.home) self.controls.home.style.width = 0;\n\t\tself.initializeChart();\n\t\tconst listener = (obj) => self.notifyBreakpoint(obj.value);\n\t\tif (CIQ.UI) {\n\t\t\tCIQ.UI.KeystrokeHub.addHotKeyHandler(\n\t\t\t\t\"rangeSlider\",\n\t\t\t\t({ stx }) => {\n\t\t\t\t\tstx.container.ownerDocument.body.keystrokeHub.context.advertised.Layout.setRangeSlider();\n\t\t\t\t},\n\t\t\t\tstx\n\t\t\t);\n\t\t\tCIQ.UI.observeProperty(\"breakpoint\", stx.chart, listener);\n\t\t}\n\n\t\t/**\n\t\t * Dynamically updates the styling of the range slider.\n\t\t *\n\t\t * This method can be used to update CSS styles if you are injecting stylesheets using\n\t\t * JavaScript.\n\t\t *\n\t\t * @param {string} obj The CSS selector for which a style property is changed.\n\t\t * @param {string} attribute The style property changed in the CSS selector rule-set.\n\t\t * @param {string} value The value to apply to the CSS property.\n\t\t *\n\t\t * @alias updateStyles\n\t\t * @memberof CIQ.RangeSlider.prototype\n\t\t * @since 8.0.0\n\t\t *\n\t\t * @example\n\t\t * // Set the shading of the range slider.\n\t\t * stxx.slider.updateStyles(\n\t\t * 'stx_range_slider shading',\n\t\t * 'backgroundColor',\n\t\t * 'rgba(200, 50, 50, 0.45)'\n\t\t * );\n\t\t *\n\t\t * @example\n\t\t * // Set the color of the bars of the range slider to red.\n\t\t * stxx.slider.updateStyles(\n\t\t * 'stx_range_slider shading',\n\t\t * 'borderTopColor',\n\t\t * 'rgba(255, 0, 0)'\n\t\t * );\n\t\t */\n\t\tthis.updateStyles = function (obj, attribute, value) {\n\t\t\tstx.setStyle(obj, attribute, value);\n\t\t\tthis.style = stx.canvasStyle(\"stx_range_slider shading\");\n\t\t};\n\n\t\tthis.display = function (on) {\n\t\t\tif (stx.layout.rangeSlider !== on) {\n\t\t\t\t// do this the way it was intended\n\t\t\t\tstx.layout.rangeSlider = on;\n\t\t\t\tstx.changeOccurred(\"layout\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tciqSlider.style.display = on ? \"\" : \"none\";\n\t\t\tstx.resizeChart();\n\t\t\tciqSlider.ownerDocument.defaultView.dispatchEvent(new Event(\"resize\"));\n\t\t\tif (!on) return;\n\t\t\tself.resizeChart();\n\t\t\tself.initializeChart();\n\t\t\tthis.requestDraw(true);\n\t\t};\n\t\tthis.setSymbol = function (symbol) {\n\t\t\tself.chart.panel.display = self.chart.symbol = symbol;\n\t\t\tself.chart.symbolObject = { symbol: symbol };\n\t\t\tself.chart.market = stx.chart.market;\n\t\t\tself.setMainSeriesRenderer();\n\t\t\tself.resizeChart();\n\t\t\tthis.adjustRange(stx.chart);\n\t\t\tthis.requestDraw(true);\n\t\t};\n\t\tthis.acceptLayoutChange = function (layout) {\n\t\t\tvar doDraw = false;\n\t\t\tif (self.layout.rangeSlider !== layout.rangeSlider) {\n\t\t\t\tstx.slider.display(layout.rangeSlider);\n\t\t\t}\n\t\t\tvar relevantLayoutPropertiesForRedraw = [\n\t\t\t\t\"chartType\",\n\t\t\t\t\"aggregationType\",\n\t\t\t\t\"periodicity\",\n\t\t\t\t\"interval\",\n\t\t\t\t\"timeUnit\",\n\t\t\t\t\"chartScale\",\n\t\t\t\t\"rangeSlider\",\n\t\t\t\t\"flipped\",\n\t\t\t\t\"extended\",\n\t\t\t\t\"marketSessions\",\n\t\t\t\t\"kagi\",\n\t\t\t\t\"rangebars\",\n\t\t\t\t\"renko\",\n\t\t\t\t\"priceLines\",\n\t\t\t\t\"pandf\"\n\t\t\t];\n\t\t\trelevantLayoutPropertiesForRedraw.forEach(function (x) {\n\t\t\t\tif (!CIQ.equals(self.layout[x], layout[x])) {\n\t\t\t\t\tself.layout[x] = layout[x];\n\t\t\t\t\tdoDraw = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (!CIQ.trulyVisible(ciqSlider)) return;\n\t\t\tif (doDraw) {\n\t\t\t\tself.setMainSeriesRenderer();\n\t\t\t\tthis.requestDraw(true);\n\t\t\t}\n\t\t};\n\t\tthis.adjustRange = function (chart) {\n\t\t\tif (!chart.dataSet) return;\n\t\t\tif (!chart.endPoints || !chart.endPoints.begin) return;\n\t\t\tvar myChart = self.chart;\n\t\t\tif (!myChart.width) return;\n\t\t\tvar scrollOffset = 0,\n\t\t\t\tticksOffset = 0;\n\t\t\tif (stx.quoteDriver) {\n\t\t\t\tvar behaviorParams = {\n\t\t\t\t\tsymbol: chart.symbol,\n\t\t\t\t\tsymbolObject: chart.symbolObject,\n\t\t\t\t\tinterval: stx.layout.interval\n\t\t\t\t};\n\t\t\t\tif (\n\t\t\t\t\t(behaviorParams.interval == \"month\" ||\n\t\t\t\t\t\tbehaviorParams.interval == \"week\") &&\n\t\t\t\t\t!stx.dontRoll\n\t\t\t\t) {\n\t\t\t\t\tbehaviorParams.interval = \"day\";\n\t\t\t\t}\n\t\t\t\tvar behavior = stx.quoteDriver.getQuoteFeed(behaviorParams).behavior;\n\t\t\t\tif (behavior && behavior.bufferSize) {\n\t\t\t\t\tif (chart.moreAvailable) scrollOffset = behavior.bufferSize;\n\t\t\t\t\tif (stx.isHistoricalMode()) ticksOffset = behavior.bufferSize;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmyChart.baseline.defaultLevel = chart.baseline.actualLevel;\n\t\t\tmyChart.scroll =\n\t\t\t\tMath.max(\n\t\t\t\t\t0,\n\t\t\t\t\tchart.dataSet.length -\n\t\t\t\t\t\tstx.tickFromDate(chart.endPoints.begin) -\n\t\t\t\t\t\tscrollOffset\n\t\t\t\t) + 1;\n\t\t\tself.setMaxTicks(myChart.scroll - ticksOffset + 2);\n\t\t};\n\t\tthis.copyData = function (chart) {\n\t\t\tif (!(chart.dataSet && chart.masterData)) return;\n\t\t\tvar myChart = self.chart;\n\t\t\tmyChart.masterData = self.masterData = chart.masterData.slice(0);\n\t\t\tmyChart.dataSet = chart.dataSet.slice(0);\n\t\t\tmyChart.state = chart.state;\n\t\t\tself.establishMarkerTicks();\n\t\t\tthis.requestDraw();\n\t\t};\n\t\tthis.calculateYAxisPosition = function () {\n\t\t\tvar panel = self.chart.panel;\n\t\t\tvar currentPosition = self.getYAxisCurrentPosition(panel.yAxis, panel);\n\t\t\tif (panel.yAxis.position && currentPosition != panel.yAxis.position)\n\t\t\t\tself.calculateYAxisPositions();\n\t\t};\n\t\tthis.drawSlider = function () {\n\t\t\tif (!CIQ.trulyVisible(ciqSlider)) return;\n\t\t\tif (!stx.chart.dataSet || !stx.chart.dataSet.length) return;\n\t\t\tvar style = this.style;\n\t\t\tif (!style)\n\t\t\t\tstyle = this.style = stx.canvasStyle(\"stx_range_slider shading\");\n\t\t\tvar chartPanel = stx.chart.panel,\n\t\t\t\tctx = self.chart.context,\n\t\t\t\tsegmentImage = self.chart.segmentImage || [],\n\t\t\t\thalfCandle = self.layout.candleWidth / 2;\n\t\t\tvar left = (self.tickLeft = Math.max(\n\t\t\t\tstx.tickFromPixel(chartPanel.left + halfCandle),\n\t\t\t\t0\n\t\t\t));\n\t\t\tvar right = (self.tickRight = Math.min(\n\t\t\t\tstx.tickFromPixel(chartPanel.right - halfCandle),\n\t\t\t\tstx.chart.dataSet.length - 1\n\t\t\t));\n\t\t\tvar pLeft = (self.pixelLeft =\n\t\t\t\tself.pixelFromTick(left) -\n\t\t\t\t(segmentImage[left] ? segmentImage[left].candleWidth / 2 : halfCandle));\n\t\t\tvar pRight = (self.pixelRight =\n\t\t\t\tself.pixelFromTick(right) +\n\t\t\t\t(segmentImage[right]\n\t\t\t\t\t? segmentImage[right].candleWidth / 2\n\t\t\t\t\t: halfCandle));\n\t\t\tvar leftBoundary = subholder.offsetLeft,\n\t\t\t\trightBoundary = leftBoundary + subholder.offsetWidth;\n\t\t\tctx.save();\n\t\t\tctx.beginPath();\n\t\t\tctx.fillStyle = style.backgroundColor;\n\t\t\tctx.fillRect(\n\t\t\t\tleftBoundary,\n\t\t\t\tsubholder.offsetTop,\n\t\t\t\tpLeft - leftBoundary,\n\t\t\t\tsubholder.offsetHeight\n\t\t\t);\n\t\t\tctx.fillRect(\n\t\t\t\trightBoundary,\n\t\t\t\tsubholder.offsetTop,\n\t\t\t\tpRight - rightBoundary,\n\t\t\t\tsubholder.offsetHeight\n\t\t\t);\n\t\t\tctx.strokeStyle = style.borderTopColor;\n\t\t\tctx.lineWidth = parseInt(style.borderWidth, 10);\n\t\t\tctx.moveTo(pLeft, subholder.offsetTop);\n\t\t\tctx.lineTo(pLeft, subholder.offsetTop + subholder.offsetHeight);\n\t\t\tctx.moveTo(pRight, subholder.offsetTop);\n\t\t\tctx.lineTo(pRight, subholder.offsetTop + subholder.offsetHeight);\n\t\t\tctx.stroke();\n\t\t\tctx.beginPath();\n\t\t\tctx.lineWidth = parseInt(style.width, 10);\n\t\t\tctx.lineCap = \"round\";\n\t\t\tctx.moveTo(pLeft, subholder.offsetTop + subholder.offsetHeight / 4);\n\t\t\tctx.lineTo(pLeft, subholder.offsetTop + (3 * subholder.offsetHeight) / 4);\n\t\t\tctx.moveTo(pRight, subholder.offsetTop + subholder.offsetHeight / 4);\n\t\t\tctx.lineTo(\n\t\t\t\tpRight,\n\t\t\t\tsubholder.offsetTop + (3 * subholder.offsetHeight) / 4\n\t\t\t);\n\t\t\tctx.stroke();\n\t\t\tctx.restore();\n\t\t};\n\t\tthis.requestDraw = function (immediate) {\n\t\t\tconst draw = () => {\n\t\t\t\tself.draw();\n\t\t\t\tthis.drawSlider();\n\t\t\t\tif (this.drawRequested)\n\t\t\t\t\tthis.drawRequested = clearTimeout(this.drawRequested);\n\t\t\t};\n\t\t\tif (immediate) draw();\n\t\t\telse if (!this.drawRequested) {\n\t\t\t\tthis.drawRequested = setTimeout(draw, 100);\n\t\t\t}\n\t\t};\n\t\tstx.addEventListener(\"destroy\", function (obj) {\n\t\t\tif (CIQ.UI)\n\t\t\t\tCIQ.UI.unobserveProperty(\"breakpoint\", obj.stx.chart, listener);\n\t\t\tself.destroy();\n\t\t});\n\t\tstx.addEventListener(\"layout\", function (obj) {\n\t\t\tobj.stx.slider.acceptLayoutChange(obj.stx.layout);\n\t\t});\n\t\tstx.addEventListener(\"preferences\", function (obj) {\n\t\t\tconst { language } = obj.stx.preferences;\n\t\t\tif (CIQ.I18N && self.preferences.language != language) {\n\t\t\t\tCIQ.I18N.setLocale(self, language);\n\t\t\t}\n\t\t\tself.preferences.language = language;\n\t\t\tthis.slider.requestDraw(true);\n\t\t});\n\t\tstx.addEventListener(\"symbolChange\", function (obj) {\n\t\t\tif (obj.action == \"master\") obj.stx.slider.setSymbol(obj.symbol);\n\t\t});\n\t\tstx.addEventListener(\"symbolImport\", function (obj) {\n\t\t\tif (obj.action == \"master\") obj.stx.slider.setSymbol(obj.symbol);\n\t\t\tobj.stx.slider.acceptLayoutChange(obj.stx.layout);\n\t\t});\n\t\tstx.addEventListener(\"theme\", function (obj) {\n\t\t\tself.clearPixelCache();\n\n\t\t\tconst { multiChartContainer } = stx.uiContext.topNode;\n\t\t\tconst { breakpoint } = stx.chart;\n\n\t\t\tif (multiChartContainer) {\n\t\t\t\tself.styles = multiChartContainer.styles[breakpoint] || {};\n\t\t\t\tmultiChartContainer.styles[breakpoint] = self.styles;\n\t\t\t} else {\n\t\t\t\tself.styles = {};\n\t\t\t}\n\n\t\t\tself.container.style.backgroundColor = \"\";\n\t\t\tif (CIQ.ThemeHelper) {\n\t\t\t\tvar helper = new CIQ.ThemeHelper({ stx: obj.stx });\n\t\t\t\thelper.params.stx = self;\n\t\t\t\thelper.update();\n\t\t\t}\n\t\t});\n\t\tstx.append(\"createDataSet\", function (...args) {\n\t\t\tconst [, , { animationEntry } = {}] = args || [];\n\t\t\tif (animationEntry) return;\n\t\t\tthis.slider.adjustRange(this.chart);\n\t\t\tthis.slider.copyData(this.chart);\n\t\t});\n\t\tstx.append(\"draw\", function ({ animationEntry } = {}) {\n\t\t\tif (animationEntry || !CIQ.trulyVisible(ciqSlider)) return;\n\t\t\tif (!self.chart.dataSet) return;\n\t\t\tthis.slider.calculateYAxisPosition();\n\t\t\tthis.slider.adjustRange(this.chart);\n\t\t\tthis.slider.requestDraw();\n\t\t});\n\t\tstx.prepend(\"resizeChart\", function () {\n\t\t\tvar ciqChart = chartContainer.parentElement;\n\t\t\tif (!ciqChart || !ciqChart.isConnected) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tvar chartArea = ciqChart.parentElement;\n\t\t\tvar totalHeightOfContainers = CIQ.elementDimensions(chartArea).height;\n\t\t\tvar chartContainers = chartArea.querySelectorAll(\".chartContainer\");\n\t\t\tArray.from(chartContainers).forEach(function (container) {\n\t\t\t\tif (container !== chartContainer && CIQ.trulyVisible(container)) {\n\t\t\t\t\ttotalHeightOfContainers -= CIQ.elementDimensions(\n\t\t\t\t\t\tcontainer.parentElement,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tborder: 1,\n\t\t\t\t\t\t\tpadding: 1,\n\t\t\t\t\t\t\tmargin: 1\n\t\t\t\t\t\t}\n\t\t\t\t\t).height;\n\t\t\t\t}\n\t\t\t});\n\t\t\tciqChart.style.height = totalHeightOfContainers + \"px\";\n\t\t\tif (this.layout.rangeSlider) {\n\t\t\t\tciqSlider.style.display = \"\";\n\t\t\t\tself.resizeChart();\n\t\t\t\tself.initializeChart();\n\t\t\t\tthis.slider.requestDraw();\n\t\t\t} else {\n\t\t\t\tciqSlider.style.display = \"none\";\n\t\t\t}\n\t\t});\n\t\t[\"mousedown\", \"touchstart\", \"pointerdown\"].forEach(function (ev) {\n\t\t\tsubholder.addEventListener(\n\t\t\t\tev,\n\t\t\t\tfunction (e) {\n\t\t\t\t\tvar start = self.backOutX(e.pageX);\n\t\t\t\t\tif (!start && start !== 0) return; // wrong event\n\t\t\t\t\tstart -= e.target.offsetLeft;\n\t\t\t\t\tself.startDrag = start;\n\t\t\t\t\tself.startPixelLeft = self.pixelLeft;\n\t\t\t\t\tself.startPixelRight = self.pixelRight;\n\t\t\t\t\tvar style = stx.slider.style;\n\t\t\t\t\tif (!style)\n\t\t\t\t\t\tstyle = stx.slider.style = stx.canvasStyle(\n\t\t\t\t\t\t\t\"stx_range_slider shading\"\n\t\t\t\t\t\t);\n\t\t\t\t\tvar bw = parseInt(style.borderLeftWidth, 10);\n\t\t\t\t\tstart += this.offsetLeft;\n\t\t\t\t\tif (start < self.pixelRight - bw) self.needsLeft = true;\n\t\t\t\t\tif (start > self.pixelLeft + bw) self.needsRight = true;\n\t\t\t\t\tif (CIQ.touchDevice) return;\n\t\t\t\t\tif (self.needsLeft && self.needsRight) {\n\t\t\t\t\t\t// change to grab only if drag started from viewport\n\t\t\t\t\t\te.target.classList.add(\"stx-drag-chart\");\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ passive: false }\n\t\t\t);\n\t\t});\n\t\t[\"mouseup\", \"mouseover\", \"touchend\", \"pointerup\"].forEach(function (ev) {\n\t\t\tsubholder.addEventListener(ev, function (e) {\n\t\t\t\tconst { which, type } = e;\n\t\t\t\tif (which === 1 && type !== \"pointerup\" && type !== \"mouseup\") return;\n\t\t\t\te.target.classList.remove(\"stx-drag-chart\");\n\t\t\t\tself.chart.panel.subholder.style.cursor = \"ew-resize\";\n\t\t\t\tself.startDrag = null;\n\t\t\t\tself.needsLeft = false;\n\t\t\t\tself.needsRight = false;\n\t\t\t});\n\t\t});\n\t\t[\"mousemove\", \"touchmove\", \"pointermove\"].forEach(function (ev) {\n\t\t\tsubholder.addEventListener(\n\t\t\t\tev,\n\t\t\t\tfunction (e) {\n\t\t\t\t\tif (!self.timeout) {\n\t\t\t\t\t\t// consolidate calls and execute on next tick\n\t\t\t\t\t\t// this prevents unnecessary calls that could otherwise build up based on mousemove\n\t\t\t\t\t\tself.timeout = setTimeout(() => {\n\t\t\t\t\t\t\tconst done = () => (self.timeout = clearTimeout(self.timeout));\n\n\t\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\t\tstartDrag,\n\t\t\t\t\t\t\t\tstartPixelLeft,\n\t\t\t\t\t\t\t\tstartPixelRight,\n\t\t\t\t\t\t\t\tneedsLeft,\n\t\t\t\t\t\t\t\tneedsRight\n\t\t\t\t\t\t\t} = self;\n\t\t\t\t\t\t\tlet { tickLeft, tickRight } = self;\n\n\t\t\t\t\t\t\tif (!startDrag && startDrag !== 0) return done();\n\t\t\t\t\t\t\tconst { touches } = e;\n\t\t\t\t\t\t\tlet movement =\n\t\t\t\t\t\t\t\t(touches && touches.length\n\t\t\t\t\t\t\t\t\t? self.backOutX(touches[0].pageX)\n\t\t\t\t\t\t\t\t\t: self.backOutX(e.pageX)) - e.target.offsetLeft;\n\t\t\t\t\t\t\tif (!movement && movement !== 0) return done(); // wrong event\n\t\t\t\t\t\t\tmovement -= startDrag;\n\n\t\t\t\t\t\t\tif (needsLeft) {\n\t\t\t\t\t\t\t\tif (startPixelLeft + movement < self.chart.left)\n\t\t\t\t\t\t\t\t\tmovement = self.chart.left - startPixelLeft;\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tneedsRight &&\n\t\t\t\t\t\t\t\t\tstartPixelRight + movement >= self.chart.right\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tmovement = self.chart.right - startPixelRight;\n\t\t\t\t\t\t\t\t\tif (!self.isHome()) movement += self.layout.candleWidth / 2; // force a right scroll\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttickLeft = self.tickFromPixel(startPixelLeft + movement);\n\t\t\t\t\t\t\t\tif (needsRight)\n\t\t\t\t\t\t\t\t\ttickRight = tickLeft + self.tickRight - self.tickLeft;\n\t\t\t\t\t\t\t} else if (needsRight) {\n\t\t\t\t\t\t\t\ttickRight = Math.min(\n\t\t\t\t\t\t\t\t\tself.tickFromPixel(startPixelRight + movement),\n\t\t\t\t\t\t\t\t\tstx.chart.dataSet.length - 1\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else return done();\n\n\t\t\t\t\t\t\tlet newCandleWidth = stx.chart.width / (tickRight - tickLeft + 1);\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\ttickRight >= tickLeft &&\n\t\t\t\t\t\t\t\t((needsLeft && needsRight) ||\n\t\t\t\t\t\t\t\t\tnewCandleWidth >= stx.minimumCandleWidth)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tself.tickLeft = tickLeft;\n\t\t\t\t\t\t\t\tself.tickRight = tickRight;\n\t\t\t\t\t\t\t\tstx.chart.scroll = stx.chart.dataSet.length - tickLeft;\n\t\t\t\t\t\t\t\tif (!needsLeft || !needsRight) {\n\t\t\t\t\t\t\t\t\tstx.setCandleWidth(newCandleWidth);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tstx.micropixels = 0;\n\t\t\t\t\t\t\t\tstx.draw();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdone();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ passive: false }\n\t\t\t);\n\t\t});\n\t\tthis.adjustRange(stx.chart);\n\t\tthis.copyData(stx.chart);\n\t\tstx.draw();\n\t};\n\n};\n\n\nlet __js_addons_standard_shortcuts_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nvar CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * Displays a legend of keyboard shortcuts and the actions the shortcuts perform.\n *\n * Delegates display of the legend to the\n * [cq-floating-window]{@link WebComponents.FloatingWindow} web component by dispatching a\n * \"floatingWindow\" event (see\n * [floatingWindowEventListener]{@link CIQ.ChartEngine~floatingWindowEventListener}).\n *\n * Creates the legend from keyboard shortcut specifications contained in a configuration object;\n * for example, the default chart configuration object (see the {@tutorial Chart Configuration}\n * tutorial).\n *\n * The keyboard shortcuts legend can be toggled using the Ctrl+Alt+K keystroke combination (see the\n * `shortcuts` action in `hotkeyConfig.hotkeys` in *js/defaultConfiguration.js*).\n *\n * Requires *addOns.js*.\n *\n * @param {object} params The constructor parameters.\n * @param {CIQ.ChartEngine} params.stx The chart engine instance for which the keyboard shortcuts\n * \t\tlegend is created.\n * @param {object} params.config A configuration object that includes specifications for hot keys\n * \t\tand drawing tool keyboard shortcuts. Typically, this object is the chart configuration\n * \t\tobject. See the {@tutorial Chart Configuration} tutorial for the data format for keyboard\n * \t\tshortcuts.\n * @param {number} [params.width=\"580\"] The width of the floating window that contains the\n * \t\tkeyboard shortcuts legend.\n * @param {boolean} [params.windowForEachChart=true] A flag that indicates whether each chart\n * \t\tinstance in a multi-chart document has its own keyboard shortcuts legend. If false, all\n * \t\tcharts share the same legend.\n *\n * @constructor\n * @name CIQ.Shortcuts\n * @since 8.2.0\n *\n * @example\n * new CIQ.Shortcuts(\n * stx: stxx,\n * config: {\n * drawingTools: [{ label: \"line\", shortcut: \"l\" }],\n * hotkeyConfig: {\n * hotkeys: [{ label: \"Pan chart up\", action: \"up\", commands: [\"ArrowUp\", \"Up\"] }]\n * }\n * }\n * );\n */\nCIQ.Shortcuts =\n\tCIQ.Shortcuts ||\n\tfunction ({ stx, width = 580, windowForEachChart = true, config } = {}) {\n\t\tif (!stx) {\n\t\t\tconsole.warn(\"The Shortcuts addon requires an stx parameter\");\n\t\t\treturn;\n\t\t}\n\t\t/**\n\t\t * The chart engine instance for which the keyboard shortcuts legend is created.\n\t\t *\n\t\t * @type {CIQ.ChartEngine}\n\t\t * @memberof CIQ.Shortcuts#\n\t\t * @alias stx\n\t\t * @since 8.2.0\n\t\t */\n\t\tthis.stx = stx;\n\t\t/**\n\t\t * Width of the floating window that contains the keyboard shortcuts legend.\n\t\t *\n\t\t * @type {number}\n\t\t * @memberof CIQ.Shortcuts#\n\t\t * @alias width\n\t\t * @since 8.2.0\n\t\t */\n\t\tthis.width = width;\n\t\t/**\n\t\t * In a multi-chart document, indicates whether each chart has its own keyboard shortcuts\n\t\t * legend. If false, all charts share the same legend.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @memberof CIQ.Shortcuts#\n\t\t * @alias windowForEachChart\n\t\t * @since 8.2.0\n\t\t */\n\t\tthis.windowForEachChart = windowForEachChart;\n\t\tthis.content = this.getShortcutContent(config);\n\n\t\tthis.ensureMessagingAvailable(stx);\n\t\tthis.enableUI(stx);\n\t\tthis.cssRequired = true;\n\n\t\tstx.shortcuts = this;\n\n\t\tif (CIQ.UI) {\n\t\t\tCIQ.UI.KeystrokeHub.addHotKeyHandler(\n\t\t\t\t\"shortcuts\",\n\t\t\t\t({ stx, options }) => {\n\t\t\t\t\tstx.container.ownerDocument.body.keystrokeHub.context.advertised.Layout.showShortcuts();\n\t\t\t\t},\n\t\t\t\tstx\n\t\t\t);\n\t\t}\n\t\tconst container = this.stx.container.closest(\"cq-context\");\n\t\tconst mo = new MutationObserver(\n\t\t\t() => (this.content = this.getShortcutContent(config))\n\t\t);\n\t\tmo.observe(container, { attributes: true });\n\t\tthis.mo = mo;\n\t};\n\n/**\n * Enables the keyboard shortcuts legend user interface.\n *\n * Adds a `showShortCuts` function to the {@link CIQ.UI.Layout} helper. The `showShortCuts`\n * function calls this class's [toggle]{@link CIQ.Shortcuts#toggle} function to show and hide the\n * keyboard shortcuts legend. Call `showShortCuts` in your application's user interface (see\n * example).\n *\n * This function is called when the add-on is instantiated.\n *\n * @param {CIQ.ChartEngine} stx The chart engine that provides the UI context for the keyboard\n * \t\tshortcuts legend.\n *\n * @memberof CIQ.Shortcuts#\n * @alias enableUI\n * @since 8.2.0\n *\n * @example Create a button that shows and hides the keyboard shortcuts legend.\n * \n */\nCIQ.Shortcuts.prototype.enableUI = function (stx) {\n\tif (!(stx && CIQ.UI)) return;\n\tsetTimeout(() => {\n\t\tconst layout = stx.uiContext.getAdvertised(\"Layout\");\n\t\tlayout.showShortcuts = (activator, value) =>\n\t\t\tthis.toggle(value, activator && activator.node);\n\t});\n};\n\n/**\n * Ensures that an instance of the [cq-floating-window]{@link WebComponents.FloatingWindow}\n * web component is available to handle event messaging and create the shortcuts legend floating\n * window.\n *\n * This function is called when the add-on is instantiated.\n *\n * @param {CIQ.ChartEngine} stx The chart engine that provides the UI context, which contains the\n * [cq-floating-window]{@link WebComponents.FloatingWindow} web component.\n *\n * @memberof CIQ.Shortcuts#\n * @alias ensureMessagingAvailable\n * @since 8.2.0\n */\nCIQ.Shortcuts.prototype.ensureMessagingAvailable = function (stx) {\n\tsetTimeout(() => {\n\t\tconst contextContainer = stx.uiContext.topNode;\n\t\tconst floatingWindow = Array.from(\n\t\t\tcontextContainer.querySelectorAll(\"cq-floating-window\")\n\t\t).find((el) => el.closest(\"cq-context\") === contextContainer);\n\n\t\tif (!floatingWindow) {\n\t\t\tcontextContainer.append(document.createElement(\"cq-floating-window\"));\n\t\t}\n\t});\n};\n\n/**\n * Creates the contents of the keyboard shortcuts legend based on specifications contained in a\n * configuration object. The contents are displayed in a\n * [cq-floating-window]{@link WebComponents.FloatingWindow} web component.\n *\n * This function is called when the add-on is instantiated.\n *\n * @param {object} config A configuration object that includes specifications for drawing tool\n * \t\tkeyboard shortcuts and hot keys. Typically, this object is the chart configuration object\n * \t\t(see the {@tutorial Chart Configuration} tutorial).\n * @return {string} The keyboard shortcuts legend as HTML.\n *\n * @memberof CIQ.Shortcuts#\n * @alias getShortcutContent\n * @since 8.2.0\n */\nCIQ.Shortcuts.prototype.getShortcutContent = function (config) {\n\tconst drawingToolShortcuts = (config.drawingTools || [])\n\t\t.filter((tool) => tool.shortcut)\n\t\t.map(\n\t\t\t({ label, shortcut }) =>\n\t\t\t\t`
\n\t\t\t\t\t
${label}
\n\t\t\t\t\t
Alt + ${shortcut.toUpperCase()}
\n\t\t\t\t
`\n\t\t)\n\t\t.join(\"\");\n\n\t// Alt + key combination produces unpredictable accent characters depending on keyboard mapping\n\t// default hotkeys include them for better coverage, avoid displaying them in legend\n\tconst isAscii = (str) => str.charCodeAt(str.length - 1) < 127;\n\tconst wrapKeys = (str) =>\n\t\tstr === \" + \"\n\t\t\t? \"+\"\n\t\t\t: str\n\t\t\t\t\t.split(\"+\")\n\t\t\t\t\t.map((el) => (el && el !== \" \" ? \"\" + el + \"\" : \"\"))\n\t\t\t\t\t.join(\" + \");\n\n\tconst commandsToString = (commands) => {\n\t\treturn commands\n\t\t\t.map((command) => command.replace(/Arrow|Key|Digit|^ | $/g, \"\"))\n\t\t\t.map((command) => command.replace(/\\+/, \" + \"))\n\t\t\t.reduce(\n\t\t\t\t(acc, command) =>\n\t\t\t\t\t!acc.includes(command) && isAscii(command)\n\t\t\t\t\t\t? acc.concat(command)\n\t\t\t\t\t\t: acc,\n\t\t\t\t[]\n\t\t\t)\n\t\t\t.map(wrapKeys)\n\t\t\t.join(\"
\");\n\t};\n\n\tconst container = this.stx.container.closest(\"cq-context\");\n\tif (!container) {\n\t\tthis.mo.disconnect();\n\t\treturn;\n\t}\n\tconst extensionAvailable = (name) =>\n\t\tcontainer.hasAttribute(name.toLowerCase() + \"-feature\");\n\tconst hotkeys = ((config.hotkeyConfig && config.hotkeyConfig.hotkeys) || [])\n\t\t.map(({ label, action, commands, extension }) => {\n\t\t\tif (extension && !extensionAvailable(extension)) {\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t\treturn `
${\n\t\t\t\tlabel || action\n\t\t\t}
${commandsToString(commands)}
`;\n\t\t})\n\t\t.join(\"\");\n\n\treturn `\n\t\t
\n\t\t\t
\n\t\t\t\t

Drawing tools shortcuts

\n\t\t\t\t
${drawingToolShortcuts}
\n\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t

Hotkeys

\n\t\t\t\t
${hotkeys}
\n\t\t\t
\n\t\t
\n\t`;\n};\n\n/**\n * Opens and closes the floating window that contains the keyboard shortcuts legend.\n *\n * @param {boolean} [value] If true, the window is opened. If false, the window is closed.\n * \t\tIf not provided, the window state is toggled. That is, the window is opened if it is\n * \t\tcurrently closed; closed, if it is currently open.\n * @param {HTMLElement} [node] Optional node which triggered the toggle.\n *\n * @memberof CIQ.Shortcuts#\n * @alias toggle\n * @since 8.2.0\n * @since 9.1.0 Added `node` parameter.\n */\nCIQ.Shortcuts.prototype.toggle = function (value, node) {\n\tthis.stx.dispatch(\"floatingWindow\", {\n\t\ttype: \"shortcut\",\n\t\ttitle: \"Shortcuts\",\n\t\tcontent: this.content,\n\t\tcontainer: this.stx.uiContext.topNode,\n\t\tonClose: () => {\n\t\t\tthis.closed = true;\n\t\t\tif (node && node.set) node.set(false);\n\t\t},\n\t\twidth: this.width,\n\t\tstatus: value,\n\t\ttag: this.windowForEachChart ? undefined : \"shortcut\"\n\t});\n};\n\n};\n\n\nlet __js_addons_standard_tableView_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nvar CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * Creates an overlay that displays the visible chart data segment as a table.\n *\n * The overlay includes controls that enable users to copy the table data to the clipboard or\n * download the data as a character-separated values (CSV) file. See\n * {@link TableViewBuilder.dataToCsv} for the default separator character.\n *\n * The table view can be opened using the Alt+K keystroke combination and closed using the Escape\n * key (see the `tableView` action in `hotkeyConfig.hotkeys` in *js/defaultConfiguration.js*).\n *\n * Requires *addOns.js*.\n *\n * @param {object} params Configuration parameters.\n * @param {CIQ.ChartEngine} params.stx A reference to the chart engine that contains the chart for\n * \t\twhich the table view is created.\n * @param {string} [params.minColumnWidth=\"84px\"] The minimum width (including units) of the\n * \t\ttable columns. **Note:** The units can be any CSS unit acceptable by the CSS `calc`\n * \t\tfunction.\n * @param {number} [params.coverUIMaxWidth=400] The chart width (in pixels) below which the table\n * \t\tview covers the entire chart, including user interface elements (symbol input field,\n * \t\tmenus, etc.). For example, if the value of this parameter is 1000, the table view covers\n * \t\tthe entire chart area if the chart width is <= 999 pixels.\n * @param {string} [params.coverContainer] A CSS selector used to obtain the DOM element that\n * \t\tultimately contains the table view; for example, \".chartContainer\".\n * @param {boolean} [params.usePreviousCloseForChange=true] Indicates whether the closing price of\n * \t\tthe previous data point should be used instead of the opening price of the current data\n * \t\tpoint to determine the amount of change for the current data point; that is,\n * \t\t(current close - previous close) or (current close - current open).\n * @param {object} [params.builderConfig] Optional object to configure the TableViewBuilder's static properties.\n *\n * @constructor\n * @name CIQ.TableView\n * @since\n * - 8.1.0\n * - 9.1.0 Added `builderConfig` parameter.\n *\n * @example\n * new CIQ.TableView({ stx: stxx });\n */\nCIQ.TableView =\n\tCIQ.TableView ||\n\tfunction ({\n\t\tstx,\n\t\tminColumnWidth = \"84px\",\n\t\tcoverUIMaxWidth = 400,\n\t\tcoverContainer,\n\t\tusePreviousCloseForChange = true,\n\t\tbuilderConfig\n\t} = {}) {\n\t\tif (!stx) {\n\t\t\tconsole.warn(\"The TableView addon requires an stx parameter\");\n\t\t\treturn;\n\t\t}\n\n\t\t/**\n\t\t * The chart engine instance that contains the chart for which the table view is created.\n\t\t *\n\t\t * @type CIQ.ChartEngine\n\t\t * @memberof CIQ.TableView#\n\t\t * @alias stx\n\t\t * @since 8.1.0\n\t\t */\n\t\tthis.stx = stx;\n\t\t/**\n\t\t * Toggle to display and hide additional table view columns, such as % Change and Volume.\n\t\t *\n\t\t * **Note:** Data in the additional columns might not be present in the chart view because\n\t\t * the data is calculated (for example, % Change) or is not part of the standard chart\n\t\t * display (for example, Volume — which can be displayed with the\n\t\t * [Volume Chart]{@link CIQ.Studies.createVolumeChart} study).\n\t\t *\n\t\t * @type boolean\n\t\t * @memberof CIQ.TableView#\n\t\t * @alias viewAdditionalColumns\n\t\t * @since 8.1.0\n\t\t */\n\t\tthis.viewAdditionalColumns = false;\n\t\t/**\n\t\t * Minimum width of the table view columns, including units. The units can be any CSS\n\t\t * unit acceptable by the CSS `calc` function.\n\t\t *\n\t\t * @type string\n\t\t * @memberof CIQ.TableView#\n\t\t * @alias minColumnWidth\n\t\t * @since 8.1.0\n\t\t */\n\t\tthis.minColumnWidth = minColumnWidth;\n\t\t/**\n\t\t * The chart width in pixels below which the table view covers the entire chart, including\n\t\t * user interface elements, such as the menus and footer.\n\t\t *\n\t\t * @type number\n\t\t * @memberof CIQ.TableView#\n\t\t * @alias coverUIMaxWidth\n\t\t * @since 8.1.0\n\t\t */\n\t\tthis.coverUIMaxWidth = coverUIMaxWidth;\n\t\t/**\n\t\t * A CSS selector used to obtain the DOM element that hosts the table view.\n\t\t *\n\t\t * @type string\n\t\t * @memberof CIQ.TableView#\n\t\t * @alias coverContainer\n\t\t * @since 8.1.0\n\t\t */\n\t\tthis.coverContainer = coverContainer;\n\t\t/**\n\t\t * If true, the closing price of the previous data point is used instead of the opening\n\t\t * price of the current data point to determine the amount of change for the current data\n\t\t * point.\n\t\t *\n\t\t * @type boolean\n\t\t * @memberof CIQ.TableView#\n\t\t * @alias usePreviousCloseForChange\n\t\t * @since 8.1.0\n\t\t */\n\t\tthis.usePreviousCloseForChange = usePreviousCloseForChange;\n\t\t/**\n\t\t * A reference to the {@link TableViewBuilder} namespace for access to the namespace\n\t\t * static methods.\n\t\t *\n\t\t * @type TableViewBuilder\n\t\t * @tsdeclaration\n\t\t * public builder: typeof TableViewBuilder\n\t\t * @memberof CIQ.TableView#\n\t\t * @alias builder\n\t\t * @since 8.1.0\n\t\t */\n\t\tthis.builder = Object.assign({}, TableViewBuilder, builderConfig);\n\n\t\tthis.listeners = [];\n\n\t\tstx.tableView = this;\n\t\tthis.cssRequired = true;\n\n\t\tif (CIQ.UI) {\n\t\t\tthis.listener = ({ value: uiContext }) => {\n\t\t\t\tif (!uiContext) return;\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tconst channel = this.subscribeToChanges(uiContext);\n\n\t\t\t\t\t// Updated hotkey alias if available to action\n\t\t\t\t\tconst tableViewKeyEntry = CIQ.getFromNS(\n\t\t\t\t\t\tuiContext.config,\n\t\t\t\t\t\t\"hotkeyConfig.hotkeys\",\n\t\t\t\t\t\t[]\n\t\t\t\t\t).find(({ action }) => action === \"tableView\");\n\t\t\t\t\tif (tableViewKeyEntry) {\n\t\t\t\t\t\ttableViewKeyEntry.action = () => {\n\t\t\t\t\t\t\tconst { stx: contextStx } =\n\t\t\t\t\t\t\t\tuiContext.topNode.ownerDocument.body.keystrokeHub.context;\n\t\t\t\t\t\t\tconst { tableView } = contextStx;\n\t\t\t\t\t\t\tif (tableView) {\n\t\t\t\t\t\t\t\tCIQ.UI.BaseComponent.prototype.channelWrite(\n\t\t\t\t\t\t\t\t\tchannel,\n\t\t\t\t\t\t\t\t\t!tableView.view,\n\t\t\t\t\t\t\t\t\tcontextStx\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t\tCIQ.UI.observeProperty(\"uiContext\", stx, this.listener);\n\t\t}\n\t\tsetTimeout(() => {\n\t\t\t// allow uiContext creation first\n\t\t\tthis.setup({ minColumnWidth, coverUIMaxWidth, coverContainer });\n\t\t});\n\t};\n\n/**\n * Sets up the dialog and toolbar for the table view.\n * @param {object} config Setup configuration\n * @memberof CIQ.TableView\n * @since 8.7.0\n */\nCIQ.TableView.prototype.setup = function (config) {\n\tconst { stx, builder } = this;\n\tif (stx.destroyed) return;\n\tconst { getChartCover, createToolbar, createTable } = builder;\n\tconst cover = getChartCover(stx, config);\n\tconst toolbar = createToolbar(stx, config);\n\tcover.append(toolbar);\n\tcover.style.display = \"none\";\n\n\tstx.addEventListener(\"symbolChange\", () => {\n\t\tif (this.view) {\n\t\t\tthis.close();\n\t\t\tcreateTable(stx, config);\n\t\t\tthis.dialog.focus();\n\t\t}\n\t});\n\n\tthis.dialog = cover;\n\tthis.toolbar = {\n\t\tsymbol: toolbar.querySelector(\".ciq-data-table-title > cq-symbol\"),\n\t\tcopyBtn: toolbar.querySelector(\".ciq-data-table-copy\"),\n\t\tdownloadBtn: toolbar.querySelector(\".ciq-data-table-download\"),\n\t\tadditional: toolbar.querySelector(\".ciq-data-table-additionalColumns\")\n\t};\n};\n\n/**\n * Displays the table view.\n *\n * @param {object} [params] Configuration parameters.\n * @param {object} [params.config] Table column information.\n * @param {function} [params.onClose] Callback function to execute on closing the table view. The\n * \t\tcallback enables synchronization of state in the application when the table view is\n * \t\tclosed.\n * @param {function} [params.processCloseEvent] A function to receive event that closes table. If required,\n * \t\tevent propagation can be stopped in this function. If the function is not provided, event propagation is stopped by default.\n *\n * @memberof CIQ.TableView#\n * @alias open\n * @since\n * - 8.1.0\n * - 8.9.3 Added processCloseEvent parameter.\n */\nCIQ.TableView.prototype.open = function (params) {\n\tif (params) {\n\t\tthis.params = params;\n\t}\n\tconst { config = {}, onClose, processCloseEvent } = this.params || {};\n\tif (this.view) {\n\t\tthis.close(false);\n\t}\n\tthis.onClose = onClose;\n\tthis.builder.createTable(this.stx, config);\n\tif (!this.dialog) return;\n\tconst { stx } = this;\n\tif (!stx.chart.masterData) return;\n\tconst close = this.close.bind(this);\n\n\tthis.lastFocused = null;\n\t// Set the dialog as an active modal, this will disable the main tab key handler\n\t// and tie us into the main escape key handler.\n\tconst keystrokeHub = this.dialog.ownerDocument.body.keystrokeHub;\n\tif (keystrokeHub) {\n\t\tif (keystrokeHub.tabActiveElement)\n\t\t\tthis.lastFocused = this.dialog.ownerDocument.activeElement; //keystrokeHub.tabActiveElement.element;//\n\t\tkeystrokeHub.highlightHide();\n\t\tkeystrokeHub.addActiveModal(this.dialog);\n\t}\n\n\tsetTimeout(() => (this.removeCloseListener = getCloseListener(this)));\n\n\tfunction getCloseListener(self) {\n\t\tconst contextNode = stx.uiContext.topNode;\n\t\tconst body = contextNode.ownerDocument.body;\n\n\t\tconst closeHandler = (e) => {\n\t\t\tconst withinTable = e.target.closest(\".ciq-data-table-container\");\n\t\t\tif (withinTable) return;\n\t\t\tclose();\n\t\t\tif (processCloseEvent) processCloseEvent(e);\n\t\t\telse e.stopPropagation();\n\t\t};\n\t\tcontextNode.addEventListener(\"click\", closeHandler, true);\n\t\tconst handleKeydown = (e) => {\n\t\t\tconst { tableView } = body.keystrokeHub.context.stx;\n\t\t\tif (!tableView || !tableView.view) return;\n\t\t\tif (e.code === \"Escape\") {\n\t\t\t\ttableView.close();\n\t\t\t\te.preventDefault();\n\t\t\t} else {\n\t\t\t\t// Handle all other keys using keyboard navigation functions in BaseComponent\n\t\t\t\tif (!CIQ.UI || !CIQ.UI.BaseComponent) return;\n\t\t\t\tconst componentProxy = CIQ.UI.BaseComponent.prototype;\n\t\t\t\tconst items = tableView.view.querySelectorAll(\"button\");\n\n\t\t\t\tif (e.code === \"Tab\") {\n\t\t\t\t\tlet { shiftKey } = e || {};\n\t\t\t\t\tcomponentProxy.focusNextItem(items, shiftKey, true);\n\t\t\t\t\tconst focused = componentProxy.findFocused(items);\n\t\t\t\t\t// The highlightItem context must have a keyboardNavigation property\n\t\t\t\t\tif (focused[0])\n\t\t\t\t\t\tcomponentProxy.highlightItem.call(\n\t\t\t\t\t\t\t{ keyboardNavigation: body.keystrokeHub },\n\t\t\t\t\t\t\tfocused[0]\n\t\t\t\t\t\t);\n\t\t\t\t} else if (e.code === \"Enter\") {\n\t\t\t\t\tconst focused = componentProxy.findFocused(items);\n\t\t\t\t\tif (focused[0]) componentProxy.clickItem(focused[0], e);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tbody.addEventListener(\"keydown\", handleKeydown);\n\n\t\t// Use modal functionality available in menu\n\t\tconst uiManager = CIQ.getFn(\"UI.getUIManager\")(contextNode);\n\t\tif (uiManager) {\n\t\t\t// Menu item requires show and hide providing no-op functions\n\t\t\tself.view.show = self.view.hide = function () {};\n\t\t\tuiManager.openMenu(self.view, {});\n\t\t\tself.view.isDialog = true;\n\t\t}\n\t\treturn () => {\n\t\t\tcontextNode.removeEventListener(\"click\", closeHandler, true);\n\t\t\tbody.removeEventListener(\"keydown\", handleKeydown);\n\t\t\tif (uiManager) uiManager.closeMenu(self.view);\n\t\t};\n\t}\n};\n\n/**\n * Closes the table view.\n *\n * @param {boolean} [notify=true] Indicates whether the `onClose` callback function is set (see\n * \t\t[open]{@link CIQ.TableView#open}).\n *\n * @memberof CIQ.TableView#\n * @alias close\n * @since 8.1.0\n */\nCIQ.TableView.prototype.close = function (notify = true) {\n\tlet body;\n\tif (this.dialog) {\n\t\tthis.dialog.style.display = \"none\";\n\t\tthis.dialog.ariaModal = \"false\";\n\t}\n\tif (this.view) {\n\t\tbody = this.view.ownerDocument.body;\n\t\tthis.view.remove();\n\t\tthis.view = null;\n\t}\n\tif (notify && this.onClose) {\n\t\tthis.onClose();\n\t}\n\n\tif (this.removeCloseListener) {\n\t\tthis.removeCloseListener();\n\t\tthis.removeCloseListener = null;\n\t}\n\n\t// Remove the table view as an active modal in keyboard navigation\n\tif (body && body.keystrokeHub) {\n\t\tconst { keystrokeHub } = body;\n\t\tlet { tabActiveModals } = keystrokeHub;\n\t\tlet modalIdx = tabActiveModals.indexOf(this.dialog);\n\t\tif (modalIdx > -1) {\n\t\t\ttabActiveModals.splice(modalIdx, 1);\n\t\t}\n\t\tif (!keystrokeHub.tabActiveElement && this.lastFocused)\n\t\t\tkeystrokeHub.tabActiveElement = {\n\t\t\t\telement: this.lastFocused\n\t\t\t};\n\t\tkeystrokeHub.tabIndex = Math.abs(keystrokeHub.tabIndex);\n\t\tkeystrokeHub.highlightAlign();\n\t}\n\tif (this.lastFocused) this.lastFocused.focus();\n};\n\n/**\n * Opens the table view if it is closed. Closes the table view if it is open.\n *\n * @memberof CIQ.TableView#\n * @alias toggle\n * @since 8.1.0\n */\nCIQ.TableView.prototype.toggle = function () {\n\tthis[this.view ? \"close\" : \"open\"]();\n\t// DO NOT move this into open method!\n\t// You don't want to change focus when toggling additional columns\n\tif (!this.view) this.dialog.focus();\n};\n\n/**\n * Subscribes to changes in the table view component communication channel, which enables other\n * components to open and close the table view.\n *\n * @param {CIQ.UI.Context} uiContext The user interface context of the table view. Provides the\n * \t\tcommunication channel path that identifies the table view channel.\n * @param {string} [channelPath] Specifies the channel path if the path is not available in the\n * \t\tcontext configuration provided by `uiContext`.\n * @return {string} Channel name subscribed to.\n *\n * @memberof CIQ.TableView#\n * @alias subscribeToChanges\n * @since\n * - 8.1.0\n * - 9.1.0 Returns the channel name.\n */\nCIQ.TableView.prototype.subscribeToChanges = function (\n\tuiContext,\n\tchannelPath = \"channels.tableView\"\n) {\n\tconst { channelSubscribe, channelWrite } = CIQ.UI.BaseComponent.prototype;\n\tconst { channels: { tableView = channelPath } = {} } = uiContext.config || {};\n\tconst { stx } = this;\n\n\tchannelSubscribe(\n\t\ttableView,\n\t\t(value) => {\n\t\t\tif (stx.tableView) {\n\t\t\t\tif (value) {\n\t\t\t\t\tstx.tableView.open({\n\t\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\t\tchannelWrite(tableView, false, stx);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t// DO NOT move this into open method!\n\t\t\t\t\t// You don't want to change focus when toggling additional columns\n\t\t\t\t\tstx.tableView.dialog.focus();\n\t\t\t\t} else {\n\t\t\t\t\tstx.tableView.close();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tstx\n\t);\n\n\tstx.addEventListener(\"destroy\", () => {\n\t\tif (this.dialog) this.dialog.remove();\n\t\tif (this.listener)\n\t\t\tCIQ.UI.unobserveProperty(\"uiContext\", stx, this.listener);\n\t});\n\n\treturn tableView;\n};\n\n/**\n * Namespace for {@link CIQ.TableView} creation–related properties and functions.\n *\n * @namespace\n * @name TableViewBuilder\n * @since 8.1.0\n */\nfunction TableViewBuilder() {}\n\n/**\n * The column header configuration for the table view.\n *\n * Can be used for rearranging the column order, removing columns, and updating labels.\n *\n * **Note:** Adding new columns has no effect.\n *\n * @type Object.\n * @memberof TableViewBuilder\n * @since 8.1.0\n */\nTableViewBuilder.colHeaders = {\n\tdate: { label: \"Date\", alias: \"DT\" },\n\topen: { label: \"Open\" },\n\thigh: { label: \"High\" },\n\tlow: { label: \"Low\" },\n\tclose: { label: \"Close\" },\n\tpctChange: { label: \"% Change\", cls: \"ciq-extra\" },\n\tpctChangeVsAvg: { label: \"% Change vs Average\", cls: \"ciq-extra\" },\n\tvolume: { label: \"Volume\", cls: \"ciq-extra\" }\n};\n\n/**\n * Character separator between columns in export\n *\n * @type string\n * @memberof TableViewBuilder\n * @since 9.1.0\n */\nTableViewBuilder.colSeparator = \",\";\n\n/**\n * Number of decimal places to display for percent formatted columns\n *\n * @type number\n * @memberof TableViewBuilder\n * @since 8.1.0\n */\nTableViewBuilder.percentDecimalPlaces = 2;\n\n/**\n * Label for the copy button on the table view toolbar.\n *\n * @type string\n * @memberof TableViewBuilder\n * @since 8.1.0\n */\nTableViewBuilder.copyLabel = \"Copy\";\n\n/**\n * Label for the download button on the table view toolbar.\n *\n * @type string\n * @memberof TableViewBuilder\n * @since 8.1.0\n */\nTableViewBuilder.downloadLabel = \"Download\";\n\n/**\n * Creates the toolbar cover elements of the table view.\n *\n * The toolbar contains buttons for copying and saving the table data and for displaying\n * additional table columns.\n * @param {CIQ.ChartEngine} stx A reference to the chart engine that contains the chart for which\n * \t\tthe table view is created.\n * @param {object} [config] Configuration parameters.\n * @param {function} [config.fileNameFormatter] Formats the name of the file that contains the\n * \t\tdownloaded table data.\n * @return {HTMLElement} toolbar Constructed toolbar container element.\n * @memberof TableViewBuilder\n * @since\n * - 8.7.0\n */\nTableViewBuilder.createToolbar = function (stx, config = {}) {\n\tconst { tableView } = stx;\n\tconst { builder } = tableView;\n\tconst { symbolDisplay, symbol } = stx.chart;\n\tconst {\n\t\tcolSeparator,\n\t\tdataToCsv,\n\t\tdownloadCsv,\n\t\tgetCoverToolbar,\n\t\tgetFilenameFormatter\n\t} = builder;\n\tconst { fileNameFormatter = getFilenameFormatter(stx) } = config;\n\n\tconst toolbar = getCoverToolbar({\n\t\tstx,\n\t\tsymbol: symbolDisplay || symbol,\n\t\tcopyFn,\n\t\tdownloadFn,\n\t\ttoggleAdditionalColumnsFn: (e) => {\n\t\t\tconst { tableView } = stx;\n\t\t\ttableView.viewAdditionalColumns = !tableView.viewAdditionalColumns;\n\t\t\te.currentTarget.classList[\n\t\t\t\ttableView.viewAdditionalColumns ? \"add\" : \"remove\"\n\t\t\t](\"ciq-active\");\n\t\t\te.currentTarget.ariaChecked = tableView.viewAdditionalColumns\n\t\t\t\t? \"true\"\n\t\t\t\t: \"false\";\n\t\t\tconst { lastFocused } = tableView;\n\t\t\tdelete tableView.lastFocused;\n\t\t\ttableView.open();\n\t\t\ttableView.lastFocused = lastFocused;\n\t\t},\n\t\tcloseFn: () => stx.tableView.close()\n\t});\n\treturn toolbar;\n\n\tfunction copyFn() {\n\t\tconst contentEl = document.createElement(\"textArea\");\n\t\tstx.container.ownerDocument.body.appendChild(contentEl);\n\n\t\tconst colHeaders = builder.getColumnHeaders(stx);\n\t\tcontentEl.textContent = dataToCsv(tableView.currentTable, {\n\t\t\tcolHeaders,\n\t\t\tcolSeparator\n\t\t});\n\t\tcontentEl.select();\n\t\tstx.container.ownerDocument.execCommand(\"copy\");\n\t\tcontentEl.remove();\n\t\tstx.dispatch(\"notification\", \"copytoclipboard\");\n\t}\n\n\tfunction downloadFn() {\n\t\tconst colHeaders = builder.getColumnHeaders(stx);\n\t\tconst csvData = dataToCsv(tableView.currentTable, {\n\t\t\tcolHeaders,\n\t\t\tcolSeparator\n\t\t});\n\t\tconst fileName = fileNameFormatter(csvData);\n\t\tdownloadCsv(csvData, fileName, stx);\n\t}\n};\n\n/**\n * Creates column header object\n *\n * @param {CIQ.ChartEngine} stx A reference to the chart engine that contains the chart for\n * \t\twhich the column headers object is created.\n * @returns Colum header object\n * @memberof TableViewBuilder\n * @since 9.3.0\n */\nTableViewBuilder.getColumnHeaders = function (stx) {\n\tconst { builder } = stx.tableView;\n\tconst colHeaders = Object.assign({}, builder.colHeaders);\n\n\tif (!stx.chart.highLowBars) {\n\t\tdelete colHeaders.open;\n\t\tdelete colHeaders.high;\n\t\tdelete colHeaders.low;\n\t}\n\n\tif (!stx.tableView.viewAdditionalColumns) {\n\t\tfor (let key in colHeaders) {\n\t\t\tif (colHeaders[key].cls) {\n\t\t\t\tdelete colHeaders[key];\n\t\t\t}\n\t\t}\n\t}\n\tconst labels = Object.values(colHeaders).map((item) => item.label);\n\n\tbuilder\n\t\t.getSeriesDataNames(stx)\n\t\t.forEach((item) => (colHeaders[item] = { label: item }));\n\n\tbuilder.getStudyDataNames(stx).forEach((item) => {\n\t\tif (!labels.includes(item)) colHeaders[item] = { label: item };\n\t});\n\treturn colHeaders;\n};\n\n/**\n * Creates a table view as an HTMLElement overlay over a chart container. The table view displays\n * a snapshot of the visible chart data segment.\n *\n * The overlay contains buttons for copying and saving the table data and for displaying\n * additional table columns.\n *\n * @param {CIQ.ChartEngine} stx A reference to the chart engine that contains the chart for which\n * \t\tthe table view is created.\n * @param {object} [config] Configuration parameters.\n * @param {function} [config.dateFormatter] Formats table date fields.\n * @param {function} [config.valueFormatter] Formats table values.\n * @param {function} [config.volumeFormatter] Formats the table volume field.\n * @param {function} [config.fileNameFormatter] Formats the name of the file that contains the\n * \t\tdownloaded table data.\n * @param {string} [config.minColumnWidth=\"84px\"] The minimum width (including units) of the\n * \t\ttable columns. **Note:** The units can be any CSS unit acceptable by the CSS `calc`\n * \t\tfunction.\n * @return {HTMLElement}\n *\n * @memberof TableViewBuilder\n * @since\n * - 8.1.0\n */\nTableViewBuilder.createTable = function (stx, config = {}) {\n\tif (!stx.chart || !stx.chart.dataSegment) return;\n\n\tconst { tableView } = stx;\n\tconst {\n\t\tgetChartData,\n\t\tdataToHtml,\n\t\tgetDateFormatter,\n\t\tgetValueFormatter,\n\t\tgetVolumeFormatter,\n\t\tgetSeriesDataNames,\n\t\tgetStudyDataNames,\n\t\tpercentDecimalPlaces,\n\t\tgetColumnHeaders\n\t} = tableView.builder;\n\n\tconst colHeaders = getColumnHeaders(stx);\n\n\tconst additionalDataFields = getSeriesDataNames(stx).concat(\n\t\tgetStudyDataNames(stx)\n\t);\n\n\tconst {\n\t\tdateFormatter = getDateFormatter(stx),\n\t\tvalueFormatter = getValueFormatter(stx),\n\t\tpercentFormatter = getValueFormatter(stx, percentDecimalPlaces),\n\t\tvolumeFormatter = getVolumeFormatter(stx),\n\t\tminColumnWidth = \"84px\"\n\t} = config;\n\n\tconst arr = getChartData(stx, {\n\t\tdateFormatter,\n\t\tvalueFormatter,\n\t\tpercentFormatter,\n\t\tvolumeFormatter,\n\t\tadditionalDataFields\n\t});\n\n\t// Save reference to the tableData for devs to inspect/use just in case\n\ttableView.currentTable = arr;\n\n\tconst cover = tableView.dialog;\n\tcover.role = \"dialog\";\n\tcover.ariaModal = \"true\";\n\tcover.style.display = \"\";\n\tconst { symbolDisplay, symbol } = stx.chart;\n\ttableView.toolbar.symbol.textContent = symbolDisplay || symbol;\n\n\tsetTimeout(() => {\n\t\tconst htmlTable = dataToHtml(arr, {\n\t\t\tcolHeaders,\n\t\t\tminColumnWidth\n\t\t});\n\t\tcover.appendChild(htmlTable);\n\t\ttableView.view = htmlTable;\n\t\tconst scrollbarStyling = CIQ.getFromNS(\n\t\t\tstx,\n\t\t\t\"uiContext.config.scrollbarStyling\"\n\t\t);\n\t\tif (scrollbarStyling) {\n\t\t\tscrollbarStyling.refresh(cover.querySelector(\"tbody\"));\n\t\t\tscrollbarStyling.refresh(cover.querySelector(\".ciq-data-table-wrapper\"), {\n\t\t\t\tsuppressScrollY: true\n\t\t\t});\n\t\t}\n\t\tif (stx.translateUI) stx.translateUI(cover);\n\t\tcover.classList.remove(\"loading\");\n\t});\n\n\treturn cover;\n};\n\n/**\n * Creates an HTML table containing the chart data and column headers (see\n * {@link TableViewBuilder.colHeaders}).\n *\n * @param {object[]} data The chart data.\n * @param {object} params Configuration parameters.\n * @param {Object.} params.colHeaders The column\n * \t\theaders as defined in {@link TableViewBuilder.colHeaders}.\n * @param {string} [params.minColumnWidth] The minimum width of the table columns, including units.\n * \t\t**Note:** The units can be any CSS unit acceptable by the CSS `calc` function.\n * @return {HTMLElement} A table containing the chart data and column headers.\n *\n * @memberof TableViewBuilder\n * @since 8.1.0\n */\nTableViewBuilder.dataToHtml = function (data, { colHeaders, minColumnWidth }) {\n\tconst keyLength = Object.keys(colHeaders).length;\n\tconst colWidth = `calc((100% - ${10 + keyLength * 4}px ) / ${keyLength})`;\n\tconst tableHeader = Object.entries(colHeaders).map(([, { label }], index) => {\n\t\treturn `${label.replace(\"(\", \" (\")}`;\n\t});\n\n\tconst tableRows = data.map((row) => {\n\t\tconst htmlRow = Object.keys(colHeaders)\n\t\t\t.map((key, index) => {\n\t\t\t\tconst value = row[key];\n\t\t\t\treturn index === 0\n\t\t\t\t\t? `${value}`\n\t\t\t\t\t: `${value}`;\n\t\t\t})\n\t\t\t.join(\"\");\n\t\treturn `${htmlRow}`;\n\t});\n\n\tconst tableWrapper = document.createElement(\"div\");\n\ttableWrapper.classList.add(\"ciq-data-table-wrapper\");\n\tconst minWidth = minColumnWidth\n\t\t? `calc(${keyLength} * ${minColumnWidth})`\n\t\t: \"\";\n\ttableWrapper.innerHTML = `\n\t\t\n\t\t${tableHeader.join(\"\")}\n\t\t${tableRows.join(\"\")}\n\t\t
`;\n\treturn tableWrapper;\n};\n\n/**\n * Transforms the chart data into a character-separated values (CSV) file, including column headers.\n *\n * @param {object[]} data The chart data.\n * @param {object} params Configuration parameters.\n * @param {Object.} params.colHeaders The column\n * \t\theaders as defined in {@link TableViewBuilder.colHeaders}.\n * @param {string} params.colSeparator=\"\\t\" The column separator for the CSV format.\n * @return {string} The column headers and chart data as a CSV file.\n *\n * @memberof TableViewBuilder\n * @since 8.1.0\n */\nTableViewBuilder.dataToCsv = function (\n\tdata,\n\t{ colHeaders, colSeparator = \"\\t\" }\n) {\n\tconst tableHeader = Object.entries(colHeaders)\n\t\t.map(([, { label }]) => `\"${label}\"`)\n\t\t.join(colSeparator);\n\n\tconst columns = Object.entries(colHeaders).map(\n\t\t(arr) => arr[1].alias || arr[0]\n\t);\n\tconst tableRows = data.map((row) => {\n\t\treturn columns\n\t\t\t.map((key) => `\"${key === \"DT\" ? row[key].toISOString() : row[key]}\"`)\n\t\t\t.join(colSeparator);\n\t});\n\n\treturn `${tableHeader}\\n${tableRows.reverse().join(\"\\n\")}`;\n};\n\n/**\n * Downloads the table view as a character-separated values (CSV) file.\n *\n * @param {string} csvString The table view in the form of character-separated data.\n * @param {string} filename The name given to the download file.\n * @param {CIQ.ChartEngine} [stx] The chart engine\n *\n * @memberof TableViewBuilder\n * @since\n * - 8.1.0\n * - 8.5.0 Added optional `stx` parameter to aid in specifying document to download from.\n */\nTableViewBuilder.downloadCsv = function (\n\tcsvString,\n\tfilename = \"filename\",\n\tstx = null\n) {\n\tconst blob = new Blob([csvString], { type: \"text/csv;charset=utf-8;\" });\n\n\tconst a = document.createElement(\"a\");\n\ta.href = window.URL.createObjectURL(blob, { type: \"text/plain\" });\n\ta.download = `${filename}.csv`;\n\ta.style.display = \"none\";\n\tconst doc = ((stx || {}).container || {}).ownerDocument || document;\n\tdoc.body.appendChild(a);\n\ta.click();\n\tdoc.body.removeChild(a);\n};\n\n/**\n * Extracts OHLC (open, high, low, close) data from the chart.\n *\n * @param {CIQ.ChartEngine} stx A reference to the chart engine that contains the chart from which\n * \t\tthe data is extracted.\n * @param {object} params Configuration parameters.\n * @param {function} [params.dateFormatter] Formats date fields.\n * @param {function} [params.valueFormatter] Formats OHLC and other values.\n * @param {function} [params.percentFormatter] Formats percent fields.\n * @param {function} [params.volumeFormatter] Formats the volume field.\n * @param {string[]} [params.additionalDataFields] An array of additional data field names for\n * \t\tcomparison series and study data.\n * @return {object[]} The formatted chart data.\n *\n * @memberof TableViewBuilder\n * @since 8.1.0\n */\nTableViewBuilder.getChartData = function (\n\tstx,\n\t{\n\t\tdateFormatter,\n\t\tvalueFormatter,\n\t\tpercentFormatter,\n\t\tvolumeFormatter,\n\t\tadditionalDataFields\n\t}\n) {\n\tconst data = stx.chart.dataSegment.filter((item) => item !== null);\n\tconst { usePreviousCloseForChange } = stx.tableView;\n\tlet out = [];\n\tlet length = 0;\n\tconst avgPctChange =\n\t\tdata.reduce((acc, { Close, iqPrevClose, Open }) => {\n\t\t\tconst Base = usePreviousCloseForChange ? iqPrevClose : Open;\n\t\t\tif (\n\t\t\t\ttypeof Close === \"undefined\" ||\n\t\t\t\tNumber.isNaN(Close) ||\n\t\t\t\ttypeof Base === \"undefined\" ||\n\t\t\t\tNumber.isNaN(Base)\n\t\t\t) {\n\t\t\t\treturn acc;\n\t\t\t}\n\t\t\tlength++;\n\t\t\treturn acc + (Close - Base) / Base;\n\t\t}, 0) / length;\n\tdata.forEach((item, index) => {\n\t\tconst { DT, displayDate, High, Low, Open, Close, iqPrevClose, Volume } =\n\t\t\titem;\n\t\tconst Base = usePreviousCloseForChange ? iqPrevClose : Open;\n\t\tconst pctChange = (Close - Base) / Base;\n\t\tconst date =\n\t\t\tdisplayDate ||\n\t\t\t(stx.displayZone\n\t\t\t\t? CIQ.convertTimeZone(DT, stx.dataZone, stx.displayZone)\n\t\t\t\t: DT);\n\t\tconst obj = {\n\t\t\tDT,\n\t\t\tdate: dateFormatter(date),\n\t\t\topen: valueFormatter(Open),\n\t\t\tclose: valueFormatter(Close),\n\t\t\tchange: valueFormatter(Close - Base),\n\t\t\tpctChange: percentFormatter(pctChange * 100),\n\t\t\tpctChangeVsAvg: percentFormatter((pctChange - avgPctChange) * 100),\n\t\t\thigh: valueFormatter(High),\n\t\t\tlow: valueFormatter(Low),\n\t\t\tvolume: volumeFormatter(Volume)\n\t\t};\n\t\tadditionalDataFields.forEach((fieldName) => {\n\t\t\tlet value = item[fieldName];\n\t\t\tif (value == null) {\n\t\t\t\tobj[fieldName] = \"\";\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (typeof value === \"object\") {\n\t\t\t\tvalue = value.Close;\n\t\t\t}\n\t\t\tobj[fieldName] = valueFormatter(value);\n\t\t});\n\n\t\tout.push(obj);\n\t});\n\tout.sort((a, b) => b.DT - a.DT);\n\treturn out;\n};\n\n/**\n * Creates a function that formats table view date fields.\n *\n * @param {CIQ.ChartEngine} stx A reference to the chart engine that contains the chart for which\n * \t\tthe date fields are formatted.\n * @return {function} A date formatter.\n *\n * @memberof TableViewBuilder\n * @since 8.1.0\n */\nTableViewBuilder.getDateFormatter = function (stx) {\n\treturn (dt, panel) => {\n\t\tif (!dt) return \"\";\n\n\t\treturn CIQ.displayableDate(stx, stx.chart, dt, true);\n\t};\n};\n\n/**\n * Creates a function that formats table view value fields.\n *\n * @param {CIQ.ChartEngine} stx A reference to the chart engine that contains the chart for which\n * \t\tthe value fields are formatted.\n * @param {number} [decimalPlaces] Number of decimal places to use, overrides any auto-detection of decimal places in data.\n * @return {function} A value formatter.\n *\n * @memberof TableViewBuilder\n * @since 8.1.0\n */\nTableViewBuilder.getValueFormatter = function (stx, decimalPlaces) {\n\tconst {\n\t\tchart: { panel, yAxis },\n\t\tlayout: { chartScale }\n\t} = stx;\n\tlet formatValue;\n\n\tif (yAxis.originalPriceFormatter && yAxis.originalPriceFormatter.func) {\n\t\tformatValue = (value) =>\n\t\t\tyAxis.originalPriceFormatter.func(stx, panel, value, decimalPlaces);\n\t} else if (\n\t\tyAxis.priceFormatter &&\n\t\tchartScale != \"percent\" &&\n\t\tchartScale != \"relative\"\n\t) {\n\t\tformatValue = (value) =>\n\t\t\tyAxis.priceFormatter(stx, panel, value, decimalPlaces);\n\t} else {\n\t\tformatValue = (value) => stx.formatYAxisPrice(value, panel, decimalPlaces);\n\t}\n\n\treturn (value) => formatValue(value).replace(/^-*0\\.0*$/, \"0\"); // display 0.00 as 0\n};\n\n/**\n * Creates a function that formats the table view volume field.\n *\n * @param {CIQ.ChartEngine} stx A reference to the chart engine that contains the chart for which\n * \t\tthe volume field is formatted.\n * @return {function} A volume field formatter.\n *\n * @memberof TableViewBuilder\n * @since 8.1.0\n */\nTableViewBuilder.getVolumeFormatter = function (stx) {\n\treturn (num) => {\n\t\tif (num == null) return \"\";\n\n\t\tif (stx.internationalizer) {\n\t\t\treturn stx.internationalizer.priceFormatters[0].format(num);\n\t\t}\n\n\t\tconst num_parts = num.toString().split(\".\");\n\t\tnum_parts[0] = CIQ.commas(num_parts[0]);\n\t\treturn num_parts[0];\n\t};\n};\n\n/**\n * Creates a function that creates and formats a file name from the chart symbol and table view\n * data.\n *\n * @param {CIQ.ChartEngine} stx A reference to the chart engine that contains the chart whose\n * \t\tsymbol and data is included in the file name.\n * @return {function} A function that creates and formats a file name.\n *\n * @memberof TableViewBuilder\n * @since 8.1.0\n */\nTableViewBuilder.getFilenameFormatter = function (stx) {\n\treturn (csvData) => {\n\t\tconst symbol = stx.chart.symbolDisplay || stx.chart.symbol;\n\t\tlet firstDate, lastDate;\n\t\tif (csvData) {\n\t\t\tconst rows = csvData.split(\"\\n\");\n\t\t\tif (rows.length > 1) {\n\t\t\t\t[, firstDate = \"\"] = rows[rows.length - 1].match(/^\"([^\"]*)\"/) || [];\n\t\t\t\t[, lastDate = \"\"] = rows[1].match(/^\"([^\"]*)\"/) || [];\n\t\t\t\tfirstDate = CIQ.yyyymmddhhmmssmmm(new Date(firstDate));\n\t\t\t\tlastDate = CIQ.yyyymmddhhmmssmmm(new Date(lastDate));\n\t\t\t}\n\t\t}\n\t\treturn `${symbol}${firstDate ? ` (${firstDate} _ ${lastDate})` : \"\"}`;\n\t};\n};\n\n/**\n * Creates and attaches an HTML container element to the DOM. The element covers the chart and\n * contains the table view.\n *\n * @param {CIQ.ChartEngine} stx A reference to the chart engine that contains the chart over which\n * \t\tthe cover is placed.\n * @param {object} params Configuration parameters.\n * @param {number} [params.coverUIMaxWidth] The width of the chart (in pixels) below which the\n * \t\tcover element overlays the entire chart, including user interface elements.\n * @param {string} [params.coverContainer] A CSS selector used to obtain the DOM element that\n * \t\tserves as the parent element of the cover element; for example, \".chartContainer\".\n * @return {HTMLElement} The cover element.\n *\n * @memberof TableViewBuilder\n * @since 8.1.0\n */\nTableViewBuilder.getChartCover = function (\n\tstx,\n\t{ coverUIMaxWidth, coverContainer }\n) {\n\tconst parentElement =\n\t\t(coverContainer &&\n\t\t\tstx.container.ownerDocument.querySelector(coverContainer)) ||\n\t\t(stx.uiContext && stx.container.offsetWidth < coverUIMaxWidth\n\t\t\t? stx.uiContext.topNode\n\t\t\t: stx.container.parentElement.parentElement);\n\n\tconst cover = document.createElement(\"div\");\n\tObject.assign(cover.style, { top: 0, left: 0, right: 0, bottom: 0 });\n\n\tcover.classList.add(\"ciq-data-table-container\", \"loading\");\n\tcover.setAttribute(\"role\", \"dialog\");\n\tCIQ.addTranslatableAriaLabel(cover, stx, \"Data Table\");\n\tcover.setAttribute(\"tabindex\", 0);\n\n\tconst spinner = document.createElement(\"div\");\n\tspinner.classList.add(\"ciq-spinner-wrapper\");\n\tspinner.innerHTML = ``;\n\n\tcover.appendChild(spinner);\n\n\tparentElement.appendChild(cover);\n\treturn cover;\n};\n\n/**\n * Creates a toolbar containing the table title and controls used to copy and download the table\n * data and add additional table columns.\n *\n * @param {object} params Function parameters.\n * @param {CIQ.ChartEngine} params.stx Chart engine instance.\n * @param {string} params.symbol An instrument symbol, which is used as the table title in the\n * \t\ttoolbar. Should be the symbol of the chart main series.\n * @param {function} [params.copyFn] Event handler for selection of the copy control.\n * @param {function} [params.downloadFn] Event handler for selection of the download control.\n * @param {function} [params.toggleAdditionalColumnsFn] Event handler for selection of the\n * \t\tadditional column control.\n * @param {function} [params.closeFn] Event handler for selection of the table view close (X)\n * \t\tcontrol.\n * @return {HTMLElement} The toolbar, containing title and controls.\n *\n * @memberof TableViewBuilder\n * @since\n * - 8.1.0\n * - 9.1.0 Removed unused parameter `viewAdditionalColumns`, added parameter `stx`.\n */\nTableViewBuilder.getCoverToolbar = function ({\n\tstx,\n\tsymbol,\n\tcopyFn,\n\tdownloadFn,\n\ttoggleAdditionalColumnsFn,\n\tcloseFn\n}) {\n\tconst { builder } = stx.tableView;\n\tconst toolBar = document.createElement(\"div\");\n\ttoolBar.classList.add(\"ciq-data-table-toolbar\");\n\ttoolBar.innerHTML = `\n\t\t
Symbol:
\n\t\t\n\t\t\n\t\t
\n\t\t\t\n\t\t
\n\t\t\n\t`;\n\tconst titleEl = toolBar.querySelector(\".ciq-data-table-title\");\n\ttitleEl.querySelector(\"cq-symbol\").textContent = symbol;\n\ttitleEl.setAttribute(\"role\", \"heading\");\n\n\tconst btnCopy = toolBar.querySelector(\".ciq-data-table-copy\");\n\tif (copyFn) {\n\t\tbtnCopy.addEventListener(\"click\", copyFn);\n\t} else {\n\t\tbtnCopy.style.display = \"none\";\n\t}\n\n\tconst btnDownload = toolBar.querySelector(\".ciq-data-table-download\");\n\tif (downloadFn) {\n\t\tbtnDownload.addEventListener(\"click\", function () {\n\t\t\tbtnDownload.blur();\n\t\t\tdownloadFn();\n\t\t});\n\t} else {\n\t\tbtnDownload.style.display = \"none\";\n\t}\n\n\tconst btnAdditionalColumns = toolBar.querySelector(\".additionalColumns\");\n\tif (toggleAdditionalColumnsFn) {\n\t\tbtnAdditionalColumns.addEventListener(\"click\", toggleAdditionalColumnsFn);\n\t} else {\n\t\tbtnAdditionalColumns.style.display = \"none\";\n\t}\n\n\ttoolBar.close = closeFn;\n\n\treturn toolBar;\n};\n\n/**\n * Gets the label of the additional columns button on the table view toolbar.\n *\n * @param {boolean} viewingAdditionalColumns If this parameter is true, the label should indicate\n * \t\tadditional table columns will be shown; if false, hidden.\n * @return {string} The button label.\n *\n * @memberof TableViewBuilder\n * @since 8.1.0\n */\nTableViewBuilder.getAdditionalColumnLabel = function (\n\tviewingAdditionalColumns\n) {\n\treturn `${\n\t\tviewingAdditionalColumns ? \"- \" : \"+ \"\n\t}Additional columns`;\n};\n\n/**\n * Obtains the names of all studies that have data in the chart's visible data segment.\n *\n * @param {CIQ.ChartEngine} stx A reference to the chart engine that contains the chart studies.\n * @return {string[]} The names of all studies that are in the visible portion of the chart.\n *\n * @memberof TableViewBuilder\n * @since 8.1.0\n */\nTableViewBuilder.getStudyDataNames = function (stx) {\n\treturn Object.values(stx.layout.studies || {})\n\t\t.filter((study) => !study.signalData || study.signalData.reveal)\n\t\t.map(getDataNames)\n\t\t.reduce((acc, item) => acc.concat(item), []);\n\n\tfunction getDataNames(study) {\n\t\treturn Object.keys(study.outputMap).filter(hasData);\n\t}\n\n\tfunction hasData(name) {\n\t\treturn stx.chart.dataSegment.some((data) => data && data[name]);\n\t}\n};\n\n/**\n * Obtains the symbols of all comparison series that have data in the chart's visible data\n * segment.\n *\n * @param {CIQ.ChartEngine} stx A reference to the chart engine that contains the comparison\n * \t\tseries.\n * @return {string[]} The names (symbols) of all comparison series that are in the visible\n * \t\tportion of the chart.\n *\n * @memberof TableViewBuilder\n * @since 8.1.0\n */\nTableViewBuilder.getSeriesDataNames = function (stx) {\n\treturn Object.values(stx.chart.seriesRenderers || {})\n\t\t.filter((item) => item.params.name !== \"_main_series\")\n\t\t.map((item) => {\n\t\t\treturn item.seriesParams.map(({ symbol }) => symbol);\n\t\t})\n\t\t.reduce((acc, item) => acc.concat(item), []);\n};\n\n/**\n * CIQ.UI.Context interface placeholder to be augmented in *componentUI.js* with properties.\n *\n * @tsinterface CIQ.UI~Context\n */\n\n};\n\n\nlet __js_addons_standard_tooltip_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\nvar CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\nif (!CIQ.Marker) {\n\tconsole.error(\"tooltip addon requires first activating markers feature.\");\n} else {\n\t/**\n\t * Add-on that creates a detailed tooltip as the user's mouse hovers over data points on the\n\t * chart. The tooltip contains information such as the open, high, low, and close prices of\n\t * stock quotes.\n\t *\n\t * > Starting with version 8.8.0, this tooltip uses different HTML and CSS.\n\t * See [8.7.0 to 8.8.0 upgrade notes]{@tutorial Upgradelog_8.7.0-8.8.0} for details.\n\t * All information and instructions on this page are based on 8.8.0 and newer.\n\t *\n\t * Tooltip example:\n\t * \n\t *\n\t * **Note:** Prior to version 8.2.0, the tooltip was directly linked to the crosshairs. The\n\t * crosshairs had to be active for the tooltip to be displayed.\n\t *\n\t * Requires *addOns.js* and *markers.js*, or the bundle *standard.js*.\n\t *\n\t * There can be only one `CIQ.Tooltip` per chart.\n\t *\n\t * Color and layout can be customized by overriding the CSS rule-sets defined for the\n\t * `.hu-tooltip` and related type selectors in *stx-chart.css*. Do not modify\n\t * *stx-chart.css*; create a separate style sheet file that overrides *stx-chart.css* in the\n\t * CSS cascade. See the example below.\n\t *\n\t * `CIQ.Tooltip` automatically creates its own HTML inside the chart container. Here is an\n\t * example of the structure (there will be one field tag per displayed element):\n\t * ```\n\t *\t\n\t *\t\t\n\t *\t\t\n\t *\t\t\t\n\t *\t\t\t\n\t *\t\t\n\t *\t\t\n\t *\t\t\t\n\t *\t\t\t\n\t *\t\t\n\t *\t
Tooltip
FieldValue
\n\t * ```\n\t * By default, the field rows are inserted in the following order:\n\t * - DT\n\t * - Open\n\t * - High\n\t * - Low\n\t * - Close\n\t * - Volume\n\t * - series\n\t * - studies\n\t *\n\t * But the default layout can be changed. You can override the order of fields or change the\n\t * labels by manually inserting the HTML that the tooltip would otherwise have created for\n\t * that field. If no override HTML is found for a particular field, the default is used.\n\t * **Note:** This HTML must be placed inside the chart container.\n\t *\n\t * All of the code is provided in *addOns.js* and can be fully customized by copying the\n\t * source code from the library and overriding the functions with your changes. Be sure to\n\t * never modify a library file, as this will hinder upgrades.\n\t *\n\t * For example, concatenating the field name (e.g., \"Jaw\") with the study name (e.g.,\n\t * \"Alligator\" ) is the default behavior of the tooltip for displaying the value title. Feel\n\t * free to override this behavior by creating your own custom version of the `renderFunction()`\n\t * for the `CIQ.Tooltip`. To do this, copy the entire `CIQ.Tooltip` code (found in *addOns.js*)\n\t * and make the changes to your custom version. Load your custom version instead. Specifically,\n\t * look for the following code in the `renderFunction()` that pushes out the text for each\n\t * study field:\n\t * ```\n\t *\tnewFieldName.classList.add(\"hu-tooltip-name\");\n\t *\tnewFieldName.innerHTML = stx.translateIf(fieldName);\n\t *\tnewField.appendChild(newFieldName);\n\t * ```\n\t * Replace `fieldName` with anything you want to use as the field title and push that instead.\n\t *\n\t * Visual Reference:
\n\t * ![hu-tooltip](hu-tooltip.png \"hu-tooltip\")\n\t *\n\t * For the parameters `ohl` and `volume`, the following values are accepted:\n\t * - `true` - data is always displayed.\n\t * - `false` - data is never displayed.\n\t * - `null` - data is only displayed where relevant to the plots on the chart.\n\t *\n\t * @param {object} tooltipParams The constructor parameters.\n\t * @param {CIQ.ChartEngine} [tooltipParams.stx] The chart object.\n\t * @param {boolean|null} [tooltipParams.ohl] Setting for OHL data (Close is always shown).\n\t * @param {boolean|null} [tooltipParams.volume] Setting for Volume.\n\t * @param {boolean} [tooltipParams.series] Set to true to show value of series.\n\t * @param {boolean} [tooltipParams.studies] Set to true to show value of studies.\n\t * @param {boolean} [tooltipParams.signalStudies] Set to true to show value of signalling studies\n\t * \t\teven when they are hidden.\n\t * @param {boolean} [tooltipParams.showOverBarOnly] Set to true to show the tooltip only when\n\t * \t\tthe mouse is over the primary line/bars.\n\t * @param {boolean} [tooltipParams.change] Set to true to show the change in daily value\n\t * \t\twhen the internal chart periodicity is a daily interval (see\n\t * \t\t{@link CIQ.ChartEngine.isDailyInterval}).\n\t * @param {boolean} [tooltipParams.interpolation] Set to true to show the estimated value when\n\t * \t\tthere is no data between bars. **Note:** A value of `null` is not considered missing\n\t * \t\tdata.\n\t * @param {boolean} [tooltipParams.useDataZone] Set to true to show the date in the `dataZone`\n\t * \t\ttime zone; false, to use the `displayZone` time zone (see\n\t * \t\t{@link CIQ.ChartEngine#setTimeZone}).\n\t * @param {boolean} [tooltipParams.showBarHighlight=true] Specifies whether the bar (data\n\t * \t\tpoint) the mouse is hovering over is highlighted. Applies to the floating tooltip only\n\t * \t\t(the dynamic tooltip points to the bar). If the crosshairs are active, this parameter\n\t * \t\tis ignored.\n\t * @param {string} [tooltipParams.caption] Set to caption text for assistive technologies\n\t *\n\t * @constructor\n\t * @name CIQ.Tooltip\n\t * @since\n\t * - 09-2016-19\n\t * - 5.0.0 Now `tooltipParams.showOverBarOnly` is available to show tooltip only when over the\n\t * \t\tprimary line/bars.\n\t * - 5.1.1 `tooltipParams.change` set to true to show the change in daily value when\n\t * \t\tdisplaying a daily interval.\n\t * - 6.2.5 New `tooltipParams.interpolation` flag to show estimated value for missing series\n\t * \t\tdata points.\n\t * - 7.0.0 New `tooltipParams.useDataZone` flag to show the date in either the `dataZone` or\n\t * \t\t`displayZone` date/time.\n\t * - 8.2.0 Decoupled `CIQ.Tooltip` from the crosshairs and added highlighting of the data\n\t * \t\tpoint (or bar) the mouse is hovering over. The new `tooltipParams.showBarHighlight`\n\t * \t\tparameter enables or disables the highlighting.\n\t * - 8.6.0 New `tooltipParams.signalStudies` flag to show the value of signaling studies\n\t * \t\teven when they are hidden.\n\t * - 8.8.0 Added `tooltipParams.caption` parameter; changed HTML elements related to tooltip.\n\t * - 9.1.2 added null state for parameters `ohl` and `volume`.\n\t *\n\t * @example Add a tooltip to a chart:\n\t * // First declare your chart engine.\n\t * const stxx = new CIQ.ChartEngine({ container: document.querySelector(\".chartContainer\")[0] });\n\t *\n\t * // Then link the tooltip to that chart.\n\t * // Note how we've enabled OHL, Volume, Series and Studies.\n\t * new CIQ.Tooltip({ stx: stxx, ohl: true, volume: true, series: true, studies: true });\n\t *\n\t * @example Customize the order, layout, or text in tooltip labels:\n\t * // In this example, we've rearranged the HTML to display the Close field first, then the DT.\n\t * // We are also labeling the DT 'Date/Time' and the Close 'Last'.\n\t * // The rest of the fields are displayed in their default order.\n\t *\n\t *\t\t\n\t *\t\t\n\t *\t\t\t\n\t *\t\t\t\n\t *\t\t\t\n\t *\t\t\t\n\t *\t\t
Tooltip
Field Value
Date/Time
\n\t *\n\t * @example Customize the CSS for the tooltip (see stx-chart.css):\n\t *\t.hu-tooltip {\n\t *\t\tposition: absolute;\n\t *\t\tleft: -50000px;\n\t *\t\tz-index: 30;\n\t *\t\twhite-space: nowrap;\n\t *\t\tpadding: 6px;\n\t *\t\tborder: 2px solid #4ea1fe;\n\t *\t\tbackground-color: rgba(255,255,255,.9);\n\t *\t\tcolor: #000;\n\t *\t\tfont-size: 14px;\n\t *\t}\n\t *\n\t *\t.hu-tooltip [hu-tooltip-field]:first-of-type * {\n\t *\t\tpadding-top: 5px;\n\t *\t}\n\t *\t.hu-tooltip [hu-tooltip-field]:last-of-type * {\n\t *\t\tpadding-bottom: 5px;\n\t *\t}\n\t *\n\t *\t.hu-tooltip .hu-tooltip-name {\n\t *\t\ttext-align: left;\n\t *)\t\tpadding: 0 5px;\n\t *\t\tfont-weight: bold;\n\t *\t}\n\t *\t.hu-tooltip .hu-tooltip-name:after {\n\t *\t\tcontent:':';\n\t *\t}\n\t *\n\t *\t.hu-tooltip .hu-tooltip-value {\n\t *\t\ttext-align: right;\n\t *\t\tpadding: 0 5px;\n\t *\t}\n\t */\n\tCIQ.Tooltip =\n\t\tCIQ.Tooltip ||\n\t\tfunction (tooltipParams) {\n\t\t\tif (!CIQ.Marker) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"CIQ.Tooltip addon requires CIQ.Marker module to be enabled.\"\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.cssRequired = true;\n\n\t\t\tconst {\n\t\t\t\tstx,\n\t\t\t\tohl: showOhl,\n\t\t\t\tchange: showChange,\n\t\t\t\tvolume: showVolume,\n\t\t\t\tseries: showSeries,\n\t\t\t\tstudies: showStudies,\n\t\t\t\tsignalStudies: showSignalStudies,\n\t\t\t\tinterpolation: showInterpolation,\n\t\t\t\tshowOverBarOnly,\n\t\t\t\tshowBarHighlight = true,\n\t\t\t\tuseDataZone,\n\t\t\t\tcaption: captionText\n\t\t\t} = tooltipParams;\n\t\t\tconst { container } = stx.chart;\n\n\t\t\tlet node = container.querySelector(\".hu-tooltip\");\n\t\t\tif (!node) {\n\t\t\t\tnode = document.createElement(\"table\");\n\t\t\t\tnode.classList.add(\"hu-tooltip\");\n\t\t\t\tcontainer.appendChild(node);\n\t\t\t}\n\t\t\tif (captionText) {\n\t\t\t\tlet caption = node.querySelector(\"caption\");\n\t\t\t\tif (!caption) {\n\t\t\t\t\tcaption = document.createElement(\"caption\");\n\t\t\t\t\tnode.insertBefore(caption, node.firstChild);\n\t\t\t\t}\n\t\t\t\tcaption.innerHTML = stx.translateIf(captionText);\n\t\t\t}\n\n\t\t\tlet highlightEl = container.querySelector(\".hu-tooltip-highlight\");\n\t\t\tif (!highlightEl) {\n\t\t\t\thighlightEl = document.createElement(\"div\");\n\t\t\t\thighlightEl.classList.add(\"hu-tooltip-highlight\");\n\t\t\t\tcontainer.appendChild(highlightEl);\n\t\t\t}\n\n\t\t\tCIQ.Marker.Tooltip = function (params) {\n\t\t\t\tif (!this.className) this.className = \"CIQ.Marker.Tooltip\";\n\t\t\t\tthis.highlightEl = highlightEl;\n\t\t\t\tparams.label = \"tooltip\";\n\t\t\t\tCIQ.Marker.call(this, params);\n\t\t\t};\n\n\t\t\tCIQ.inheritsFrom(CIQ.Marker.Tooltip, CIQ.Marker, false);\n\n\t\t\tCIQ.Marker.Tooltip.sameBar = function (bar1, bar2) {\n\t\t\t\tif (!bar1 || !bar2) return false;\n\t\t\t\tif (+bar1.DT != +bar2.DT) return false;\n\t\t\t\tif (bar1.Close != bar2.Close) return false;\n\t\t\t\tif (bar1.Open != bar2.Open) return false;\n\t\t\t\tif (bar1.Volume != bar2.Volume) return false;\n\t\t\t\treturn true;\n\t\t\t};\n\n\t\t\tCIQ.Marker.Tooltip.placementFunction = function (params) {\n\t\t\t\tif (hideIfDisabled()) return;\n\t\t\t\tconst TOOLTIP_BAR_OFFSET = 30;\n\t\t\t\tvar stx = params.stx;\n\t\t\t\tfor (var i = 0; i < params.arr.length; i++) {\n\t\t\t\t\tvar marker = params.arr[i];\n\t\t\t\t\tvar bar = stx.barFromPixel(stx.cx);\n\t\t\t\t\tvar quote = stx.chart.dataSegment[bar];\n\t\t\t\t\tvar goodBar;\n\t\t\t\t\tvar overBar = true;\n\t\t\t\t\tvar highPx, lowPx;\n\n\t\t\t\t\tif (quote != \"undefined\" && quote && quote.DT) {\n\t\t\t\t\t\tgoodBar = true;\n\t\t\t\t\t\tif (quote.High) highPx = stx.pixelFromPrice(quote.High);\n\t\t\t\t\t\tif (quote.Low) lowPx = stx.pixelFromPrice(quote.Low);\n\t\t\t\t\t\tif (!stx.chart.highLowBars) {\n\t\t\t\t\t\t\tif (quote.Close) {\n\t\t\t\t\t\t\t\thighPx = stx.pixelFromPrice(quote.Close) - 15;\n\t\t\t\t\t\t\t\tlowPx = stx.pixelFromPrice(quote.Close) + 15;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (showOverBarOnly && !(stx.cy >= highPx && stx.cy <= lowPx))\n\t\t\t\t\t\t\toverBar = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t!(\n\t\t\t\t\t\t\tstx.insideChart &&\n\t\t\t\t\t\t\t!stx.openDialog &&\n\t\t\t\t\t\t\t!stx.activeDrawing &&\n\t\t\t\t\t\t\t!stx.grabbingScreen &&\n\t\t\t\t\t\t\tgoodBar &&\n\t\t\t\t\t\t\toverBar\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\thighlightEl.style.display = \"none\";\n\t\t\t\t\t\tmarker.node.style.left = \"-50000px\";\n\t\t\t\t\t\tmarker.node.style.right = \"auto\";\n\t\t\t\t\t\tmarker.node.ariaHidden = \"true\";\n\t\t\t\t\t\tmarker.lastBar = {};\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\tCIQ.Marker.Tooltip.sameBar(\n\t\t\t\t\t\t\tstx.chart.dataSegment[bar],\n\t\t\t\t\t\t\tmarker.lastBar\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\tbar != stx.chart.dataSegment.length - 1\n\t\t\t\t\t) {\n\t\t\t\t\t\tadjustSticky(marker);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tmarker.lastBar = stx.chart.dataSegment[bar];\n\n\t\t\t\t\tconst candleWidth =\n\t\t\t\t\t\t\tmarker.lastBar.candleWidth || stx.layout.candleWidth,\n\t\t\t\t\t\ttooltipWidth =\n\t\t\t\t\t\t\tparseInt(getComputedStyle(marker.node).width, 10) +\n\t\t\t\t\t\t\tcandleWidth / 2 +\n\t\t\t\t\t\t\tTOOLTIP_BAR_OFFSET,\n\t\t\t\t\t\tchartOffset = stx.chart.panel.left,\n\t\t\t\t\t\tcurrentBarOffsetLeft = stx.pixelFromBar(bar),\n\t\t\t\t\t\tcurrentBarOffsetRight =\n\t\t\t\t\t\t\tcontainer.clientWidth - currentBarOffsetLeft,\n\t\t\t\t\t\tleftSpaceAvailable = currentBarOffsetLeft - chartOffset,\n\t\t\t\t\t\trightSpaceAvailable = currentBarOffsetRight,\n\t\t\t\t\t\tleftHasSufficientSpace = leftSpaceAvailable > tooltipWidth,\n\t\t\t\t\t\trightHasSufficientSpace = rightSpaceAvailable > tooltipWidth;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(rightHasSufficientSpace &&\n\t\t\t\t\t\t\trightSpaceAvailable > leftSpaceAvailable) ||\n\t\t\t\t\t\t!leftHasSufficientSpace\n\t\t\t\t\t) {\n\t\t\t\t\t\tmarker.node.style.left =\n\t\t\t\t\t\t\t(currentBarOffsetLeft + tooltipWidth < container.clientWidth\n\t\t\t\t\t\t\t\t? Math.round(currentBarOffsetLeft + TOOLTIP_BAR_OFFSET)\n\t\t\t\t\t\t\t\t: container.clientWidth - tooltipWidth) + \"px\";\n\t\t\t\t\t\tmarker.node.style.right = \"auto\";\n\t\t\t\t\t} else if (leftHasSufficientSpace) {\n\t\t\t\t\t\tmarker.node.style.left = \"auto\";\n\t\t\t\t\t\tmarker.node.style.right =\n\t\t\t\t\t\t\tMath.round(currentBarOffsetRight + TOOLTIP_BAR_OFFSET) + \"px\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmarker.node.style.left =\n\t\t\t\t\t\t\tcurrentBarOffsetLeft - tooltipWidth / 2 + \"px\";\n\t\t\t\t\t\tmarker.node.style.right = Math.round(currentBarOffsetRight) + \"px\";\n\t\t\t\t\t}\n\t\t\t\t\tmarker.node.ariaHidden = \"false\";\n\n\t\t\t\t\tvar height = parseInt(getComputedStyle(marker.node).height, 10);\n\t\t\t\t\tvar top = Math.round(\n\t\t\t\t\t\tstx.backOutY(CIQ.ChartEngine.crosshairY) - height / 2\n\t\t\t\t\t);\n\t\t\t\t\tif (top + height > stx.height) top = stx.height - height;\n\t\t\t\t\tif (top < 0) top = 0;\n\t\t\t\t\tmarker.node.style.top = top + \"px\";\n\t\t\t\t\tadjustSticky(marker);\n\t\t\t\t\tif (showBarHighlight && !stx.layout.crosshair) {\n\t\t\t\t\t\tconst candleWidth =\n\t\t\t\t\t\t\tmarker.lastBar.candleWidth || stx.layout.candleWidth;\n\t\t\t\t\t\tconst left = stx.pixelFromBar(bar) - candleWidth / 2;\n\t\t\t\t\t\tlet width = candleWidth;\n\n\t\t\t\t\t\tif (left + width > stx.chart.width) {\n\t\t\t\t\t\t\t// adjust width of last bar so it does not highlight past the edge of the chart into the y-axis\n\t\t\t\t\t\t\twidth = stx.chart.width - left;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\thighlightEl.style.display = \"block\";\n\t\t\t\t\t\thighlightEl.style.left = left + \"px\";\n\t\t\t\t\t\thighlightEl.style.width = width + \"px\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\thighlightEl.style.display = \"none\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// backwards compatibility\n\t\t\t\t// temporarily disable overXAxis, overYAxis so the crosshairs don't hide if touch device and over y-axis (this can happen\n\t\t\t\t// due to the offset which we apply)\n\t\t\t\tif (CIQ.touchDevice && stx.layout.crosshair) {\n\t\t\t\t\tvar overXAxis = stx.overXAxis,\n\t\t\t\t\t\toverYAxis = stx.overYAxis;\n\t\t\t\t\tstx.overXAxis = stx.overYAxis = false;\n\t\t\t\t\tstx.doDisplayCrosshairs();\n\t\t\t\t\tstx.overXAxis = overXAxis;\n\t\t\t\t\tstx.overYAxis = overYAxis;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction hideIfDisabled() {\n\t\t\t\tconst { headsUp, crosshair } = stx.layout;\n\t\t\t\tconst isFloating =\n\t\t\t\t\t(headsUp && headsUp.floating) || headsUp === \"floating\";\n\n\t\t\t\tconst crosshairsOn =\n\t\t\t\t\tcrosshair &&\n\t\t\t\t\tstx.displayCrosshairs &&\n\t\t\t\t\t[\"static\", null, undefined].includes(headsUp); // backwards compatibility\n\n\t\t\t\tif (stx.huTooltip && !isFloating && !crosshairsOn) {\n\t\t\t\t\thideTooltip();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfunction hideTooltip() {\n\t\t\t\tconst { huTooltip } = stx;\n\t\t\t\tconst { node } = huTooltip;\n\t\t\t\tif (!node) return;\n\t\t\t\tnode.style.left = \"-50000px\";\n\t\t\t\tnode.style.right = \"auto\";\n\t\t\t\tnode.ariaHidden = \"true\";\n\n\t\t\t\thuTooltip.lastBar = {};\n\t\t\t\tif (huTooltip.highlightEl) huTooltip.highlightEl.style.display = \"none\";\n\t\t\t}\n\n\t\t\tfunction renderFunction() {\n\t\t\t\tvar stx = this;\n\t\t\t\t// the tooltip has not been initialized with this chart.\n\t\t\t\tif (hideIfDisabled()) return;\n\n\t\t\t\tvar bar = stx.barFromPixel(stx.cx),\n\t\t\t\t\tdata = stx.chart.dataSegment[bar];\n\t\t\t\tif (!data) {\n\t\t\t\t\thideTooltip();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tCIQ.Marker.Tooltip.sameBar(data, stx.huTooltip.lastBar) &&\n\t\t\t\t\tbar != stx.chart.dataSegment.length - 1\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar node = stx.huTooltip.node;\n\t\t\t\tnode.parentElement\n\t\t\t\t\t.querySelectorAll(\"[auto]\")\n\t\t\t\t\t.forEach((i) => i.remove());\n\t\t\t\tnode.parentElement\n\t\t\t\t\t.querySelectorAll(\".hu-tooltip-value\")\n\t\t\t\t\t.forEach((i) => (i.innerHTML = \"\"));\n\n\t\t\t\tvar panel = stx.chart.panel;\n\t\t\t\tvar yAxis = panel.yAxis;\n\t\t\t\tvar dupMap = {};\n\t\t\t\tvar fields = [];\n\t\t\t\tfields.push({\n\t\t\t\t\tmember: \"DT\",\n\t\t\t\t\tdisplay: \"DT\",\n\t\t\t\t\tpanel: panel,\n\t\t\t\t\tyAxis: yAxis\n\t\t\t\t});\n\t\t\t\tfields.push({\n\t\t\t\t\tmember: \"Close\",\n\t\t\t\t\tdisplay: \"Close\",\n\t\t\t\t\tpanel: panel,\n\t\t\t\t\tyAxis: yAxis\n\t\t\t\t});\n\t\t\t\tdupMap.DT = dupMap.Close = 1;\n\t\t\t\tif (\n\t\t\t\t\tshowChange &&\n\t\t\t\t\tCIQ.ChartEngine.isDailyInterval(stx.layout.interval)\n\t\t\t\t) {\n\t\t\t\t\tfields.push({\n\t\t\t\t\t\tmember: \"Change\",\n\t\t\t\t\t\tdisplay: \"Change\",\n\t\t\t\t\t\tpanel: panel,\n\t\t\t\t\t\tyAxis: yAxis\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (showOhl !== false && (showOhl || stx.chart.highLowBars)) {\n\t\t\t\t\tfields.push({\n\t\t\t\t\t\tmember: \"Open\",\n\t\t\t\t\t\tdisplay: \"Open\",\n\t\t\t\t\t\tpanel: panel,\n\t\t\t\t\t\tyAxis: yAxis\n\t\t\t\t\t});\n\t\t\t\t\tfields.push({\n\t\t\t\t\t\tmember: \"High\",\n\t\t\t\t\t\tdisplay: \"High\",\n\t\t\t\t\t\tpanel: panel,\n\t\t\t\t\t\tyAxis: yAxis\n\t\t\t\t\t});\n\t\t\t\t\tfields.push({\n\t\t\t\t\t\tmember: \"Low\",\n\t\t\t\t\t\tdisplay: \"Low\",\n\t\t\t\t\t\tpanel: panel,\n\t\t\t\t\t\tyAxis: yAxis\n\t\t\t\t\t});\n\t\t\t\t\tdupMap.Open = dupMap.High = dupMap.Low = 1;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tshowVolume !== false &&\n\t\t\t\t\t(showVolume ||\n\t\t\t\t\t\t(stx.layout.studies &&\n\t\t\t\t\t\t\tObject.values(stx.layout.studies)\n\t\t\t\t\t\t\t\t.filter((s) => s.libraryEntry.name)\n\t\t\t\t\t\t\t\t.some(\n\t\t\t\t\t\t\t\t\t(s) =>\n\t\t\t\t\t\t\t\t\t\ts.libraryEntry.name.toLowerCase().includes(\"volume\") ||\n\t\t\t\t\t\t\t\t\t\ts.libraryEntry.name.toLowerCase().includes(\"vwap\") ||\n\t\t\t\t\t\t\t\t\t\ts.libraryEntry.name.toLowerCase().includes(\"money flow\") ||\n\t\t\t\t\t\t\t\t\t\ts.libraryEntry.name.toLowerCase().includes(\"movement\")\n\t\t\t\t\t\t\t\t)))\n\t\t\t\t) {\n\t\t\t\t\tfields.push({\n\t\t\t\t\t\tmember: \"Volume\",\n\t\t\t\t\t\tdisplay: \"Volume\",\n\t\t\t\t\t\tpanel: null,\n\t\t\t\t\t\tyAxis: null\n\t\t\t\t\t}); // null yAxis use raw value\n\t\t\t\t\tdupMap.Volume = 1;\n\t\t\t\t}\n\t\t\t\tif (showSeries) {\n\t\t\t\t\tvar renderers = stx.chart.seriesRenderers;\n\t\t\t\t\tfor (var renderer in renderers) {\n\t\t\t\t\t\tvar rendererToDisplay = renderers[renderer];\n\t\t\t\t\t\tif (rendererToDisplay === stx.mainSeriesRenderer) continue;\n\t\t\t\t\t\tpanel = stx.panels[rendererToDisplay.params.panel];\n\t\t\t\t\t\tyAxis = rendererToDisplay.params.yAxis;\n\t\t\t\t\t\tif (!yAxis && rendererToDisplay.params.shareYAxis)\n\t\t\t\t\t\t\tyAxis = panel.yAxis;\n\t\t\t\t\t\tfor (var id = 0; id < rendererToDisplay.seriesParams.length; id++) {\n\t\t\t\t\t\t\tvar seriesParams = rendererToDisplay.seriesParams[id];\n\t\t\t\t\t\t\t// if a series has a symbol and a field then it maybe a object chain\n\t\t\t\t\t\t\tvar sKey = seriesParams.symbol;\n\t\t\t\t\t\t\tvar subField = seriesParams.field;\n\t\t\t\t\t\t\tif (!sKey) sKey = subField;\n\t\t\t\t\t\t\telse if (subField && sKey != subField)\n\t\t\t\t\t\t\t\tsKey = CIQ.createObjectChainNames(sKey, subField)[0];\n\t\t\t\t\t\t\tvar display =\n\t\t\t\t\t\t\t\tseriesParams.display ||\n\t\t\t\t\t\t\t\tseriesParams.symbol ||\n\t\t\t\t\t\t\t\tseriesParams.field;\n\t\t\t\t\t\t\tif (sKey && !dupMap[display]) {\n\t\t\t\t\t\t\t\tfields.push({\n\t\t\t\t\t\t\t\t\tmember: sKey,\n\t\t\t\t\t\t\t\t\tdisplay: display,\n\t\t\t\t\t\t\t\t\tpanel: panel,\n\t\t\t\t\t\t\t\t\tyAxis: yAxis,\n\t\t\t\t\t\t\t\t\tisSeries: true\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tdupMap[display] = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (showStudies || showSignalStudies) {\n\t\t\t\t\tfor (var study in stx.layout.studies) {\n\t\t\t\t\t\tvar sd = stx.layout.studies[study];\n\t\t\t\t\t\tif (!showSignalStudies && sd.signalData && !sd.signalData.reveal)\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tpanel = stx.panels[sd.panel];\n\t\t\t\t\t\tyAxis = panel && sd.getYAxis(stx);\n\t\t\t\t\t\tfor (var output in stx.layout.studies[study].outputMap) {\n\t\t\t\t\t\t\tif (output && !dupMap[output]) {\n\t\t\t\t\t\t\t\tvar alias = sd.study.alias;\n\t\t\t\t\t\t\t\tvar displayValue = output;\n\t\t\t\t\t\t\t\tvar outputValue =\n\t\t\t\t\t\t\t\t\tstx.layout.studies[study].outputMap[displayValue];\n\t\t\t\t\t\t\t\tif (alias && alias.hasOwnProperty(outputValue)) {\n\t\t\t\t\t\t\t\t\tdisplayValue = displayValue.replace(\n\t\t\t\t\t\t\t\t\t\toutputValue,\n\t\t\t\t\t\t\t\t\t\talias[outputValue]\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tvar regex = new RegExp(sd.type, \"ig\");\n\t\t\t\t\t\t\t\t\tvar match = displayValue.match(regex); // find if display value has any study name duplicates\n\t\t\t\t\t\t\t\t\tif (match && match.length > 1) {\n\t\t\t\t\t\t\t\t\t\tvar matched = 0;\n\t\t\t\t\t\t\t\t\t\tdisplayValue = displayValue.replace(\n\t\t\t\t\t\t\t\t\t\t\tregex,\n\t\t\t\t\t\t\t\t\t\t\treplaceFirstOfTwo(matched)\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tfields.push({\n\t\t\t\t\t\t\t\t\tmember: output,\n\t\t\t\t\t\t\t\t\tdisplay: displayValue,\n\t\t\t\t\t\t\t\t\tpanel: panel,\n\t\t\t\t\t\t\t\t\tyAxis: yAxis\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tdupMap[output] = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dupMap[study + \"_hist\"]) {\n\t\t\t\t\t\t\tfields.push({\n\t\t\t\t\t\t\t\tmember: study + \"_hist\",\n\t\t\t\t\t\t\t\tdisplay: study + \"_hist\",\n\t\t\t\t\t\t\t\tpanel: panel,\n\t\t\t\t\t\t\t\tyAxis: yAxis\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tdupMap[study + \"_hist\"] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dupMap[study + \"_hist1\"]) {\n\t\t\t\t\t\t\tfields.push({\n\t\t\t\t\t\t\t\tmember: study + \"_hist1\",\n\t\t\t\t\t\t\t\tdisplay: study + \"_hist1\",\n\t\t\t\t\t\t\t\tpanel: panel,\n\t\t\t\t\t\t\t\tyAxis: yAxis\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tdupMap[study + \"_hist1\"] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dupMap[study + \"_hist2\"]) {\n\t\t\t\t\t\t\tfields.push({\n\t\t\t\t\t\t\t\tmember: study + \"_hist2\",\n\t\t\t\t\t\t\t\tdisplay: study + \"_hist2\",\n\t\t\t\t\t\t\t\tpanel: panel,\n\t\t\t\t\t\t\t\tyAxis: yAxis\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tdupMap[study + \"_hist2\"] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (var f = 0; f < fields.length; f++) {\n\t\t\t\t\tvar obj = fields[f];\n\t\t\t\t\tvar name = obj.member;\n\t\t\t\t\tvar displayName = obj.display;\n\t\t\t\t\tvar isRecordDate = name == \"DT\";\n\t\t\t\t\tif (\n\t\t\t\t\t\tisRecordDate &&\n\t\t\t\t\t\t!useDataZone &&\n\t\t\t\t\t\t!CIQ.ChartEngine.isDailyInterval(stx.layout.interval)\n\t\t\t\t\t)\n\t\t\t\t\t\tname = \"displayDate\"; // display date is timezone adjusted\n\t\t\t\t\tpanel = obj.panel;\n\t\t\t\t\tyAxis = obj.yAxis;\n\t\t\t\t\tvar labelDecimalPlaces = null;\n\t\t\t\t\tif (yAxis) {\n\t\t\t\t\t\tif (!panel || panel !== panel.chart.panel) {\n\t\t\t\t\t\t\t// If a study panel, use yAxis settings to determine decimal places\n\t\t\t\t\t\t\tif (yAxis.decimalPlaces || yAxis.decimalPlaces === 0)\n\t\t\t\t\t\t\t\tlabelDecimalPlaces = yAxis.decimalPlaces;\n\t\t\t\t\t\t\telse if (yAxis.maxDecimalPlaces || yAxis.maxDecimalPlaces === 0)\n\t\t\t\t\t\t\t\tlabelDecimalPlaces = yAxis.maxDecimalPlaces;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// If a chart panel, then always display at least the number of decimal places as calculated by masterData (panel.chart.decimalPlaces)\n\t\t\t\t\t\t\t// but if we are zoomed to high granularity then expand all the way out to the y-axis significant digits (panel.yAxis.printDecimalPlaces)\n\t\t\t\t\t\t\tlabelDecimalPlaces = Math.max(\n\t\t\t\t\t\t\t\tyAxis.printDecimalPlaces,\n\t\t\t\t\t\t\t\tpanel.chart.decimalPlaces\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t//\t... and never display more decimal places than the symbol is supposed to be quoting at\n\t\t\t\t\t\t\tif (yAxis.maxDecimalPlaces || yAxis.maxDecimalPlaces === 0)\n\t\t\t\t\t\t\t\tlabelDecimalPlaces = Math.min(\n\t\t\t\t\t\t\t\t\tlabelDecimalPlaces,\n\t\t\t\t\t\t\t\t\tyAxis.maxDecimalPlaces\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvar dsField = null;\n\t\t\t\t\t// account for object chains\n\t\t\t\t\tvar tuple = CIQ.existsInObjectChain(data, name);\n\t\t\t\t\tif (tuple) dsField = tuple.obj[tuple.member];\n\t\t\t\t\telse if (name == \"Change\") dsField = data.Close - data.iqPrevClose;\n\n\t\t\t\t\tvar fieldName = displayName.replace(/^(Result )(.*)/, \"$2\");\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(showInterpolation || this.cleanupGaps === \"stretch\") &&\n\t\t\t\t\t\tfields[f].isSeries &&\n\t\t\t\t\t\t(dsField === null || typeof dsField == \"undefined\")\n\t\t\t\t\t) {\n\t\t\t\t\t\t// do this only for additional series and not the main series\n\t\t\t\t\t\tvar seriesPrice = stx.valueFromInterpolation(\n\t\t\t\t\t\t\tbar,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\"Close\",\n\t\t\t\t\t\t\tpanel,\n\t\t\t\t\t\t\tyAxis,\n\t\t\t\t\t\t\tthis.cleanupGaps === \"stretch\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (seriesPrice === null) continue;\n\t\t\t\t\t\tdsField = seriesPrice;\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\t(dsField || dsField === 0) &&\n\t\t\t\t\t\t(isRecordDate ||\n\t\t\t\t\t\t\ttypeof dsField !== \"object\" ||\n\t\t\t\t\t\t\tdsField.Close ||\n\t\t\t\t\t\t\tdsField.Close === 0)\n\t\t\t\t\t) {\n\t\t\t\t\t\tvar fieldValue = \"\";\n\t\t\t\t\t\tif (dsField.Close || dsField.Close === 0) dsField = dsField.Close;\n\t\t\t\t\t\tif (dsField.constructor == Number) {\n\t\t\t\t\t\t\tif (!yAxis) {\n\t\t\t\t\t\t\t\t// raw value\n\t\t\t\t\t\t\t\tfieldValue = dsField;\n\t\t\t\t\t\t\t\tvar intl = stx.internationalizer;\n\t\t\t\t\t\t\t\tif (intl) {\n\t\t\t\t\t\t\t\t\tvar l = intl.priceFormatters.length;\n\t\t\t\t\t\t\t\t\tvar decimalPlaces = CIQ.countDecimals(fieldValue);\n\t\t\t\t\t\t\t\t\tif (decimalPlaces >= l) decimalPlaces = l - 1;\n\t\t\t\t\t\t\t\t\tfieldValue =\n\t\t\t\t\t\t\t\t\t\tintl.priceFormatters[decimalPlaces].format(fieldValue);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\tyAxis.originalPriceFormatter &&\n\t\t\t\t\t\t\t\tyAxis.originalPriceFormatter.func\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t// in comparison mode with custom formatter\n\t\t\t\t\t\t\t\tfieldValue = yAxis.originalPriceFormatter.func(\n\t\t\t\t\t\t\t\t\tstx,\n\t\t\t\t\t\t\t\t\tpanel,\n\t\t\t\t\t\t\t\t\tdsField,\n\t\t\t\t\t\t\t\t\tlabelDecimalPlaces\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\tyAxis.priceFormatter &&\n\t\t\t\t\t\t\t\tyAxis.priceFormatter != CIQ.Comparison.priceFormat\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t// using custom formatter\n\t\t\t\t\t\t\t\tfieldValue = yAxis.priceFormatter(\n\t\t\t\t\t\t\t\t\tstx,\n\t\t\t\t\t\t\t\t\tpanel,\n\t\t\t\t\t\t\t\t\tdsField,\n\t\t\t\t\t\t\t\t\tlabelDecimalPlaces\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfieldValue = stx.formatYAxisPrice(\n\t\t\t\t\t\t\t\t\tdsField,\n\t\t\t\t\t\t\t\t\tpanel,\n\t\t\t\t\t\t\t\t\tlabelDecimalPlaces,\n\t\t\t\t\t\t\t\t\tyAxis\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (dsField.constructor == Date) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tisRecordDate &&\n\t\t\t\t\t\t\t\tstx.controls.floatDate &&\n\t\t\t\t\t\t\t\tstx.controls.floatDate.innerHTML\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tif (stx.chart.xAxis.noDraw) fieldValue = \"N/A\";\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tfieldValue = CIQ.displayableDate(stx, panel.chart, dsField);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfieldValue = CIQ.yyyymmdd(dsField);\n\t\t\t\t\t\t\t\tif (!CIQ.ChartEngine.isDailyInterval(stx.layout.interval)) {\n\t\t\t\t\t\t\t\t\tfieldValue += \" \" + dsField.toTimeString().substring(0, 8);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfieldValue = dsField;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar dedicatedField = node.querySelector(\n\t\t\t\t\t\t\t'.hu-tooltip [hu-tooltip-field=\"' + fieldName + '\"]'\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (dedicatedField) {\n\t\t\t\t\t\t\tdedicatedField.querySelector(\".hu-tooltip-value\").innerHTML =\n\t\t\t\t\t\t\t\tfieldValue;\n\t\t\t\t\t\t\tvar fieldNameField =\n\t\t\t\t\t\t\t\tdedicatedField.querySelector(\".hu-tooltip-name\");\n\t\t\t\t\t\t\tif (fieldNameField.innerHTML === \"\") {\n\t\t\t\t\t\t\t\tfieldNameField.innerHTML = fieldName;\n\t\t\t\t\t\t\t\tif (stx.translateUI) stx.translateUI(fieldNameField);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar newField = document.createElement(\"tr\");\n\t\t\t\t\t\t\tnewField.setAttribute(\"hu-tooltip-field\", \"\");\n\t\t\t\t\t\t\tnewField.setAttribute(\"auto\", true);\n\t\t\t\t\t\t\tvar newFieldName = document.createElement(\"td\");\n\t\t\t\t\t\t\tnewFieldName.classList.add(\"hu-tooltip-name\");\n\t\t\t\t\t\t\tnewFieldName.innerHTML = stx.translateIf(fieldName);\n\t\t\t\t\t\t\tnewField.appendChild(newFieldName);\n\t\t\t\t\t\t\tvar newFieldValue = document.createElement(\"td\");\n\t\t\t\t\t\t\tnewFieldValue.classList.add(\"hu-tooltip-value\");\n\t\t\t\t\t\t\tnewFieldValue.innerHTML = fieldValue;\n\t\t\t\t\t\t\tnewField.appendChild(newFieldValue);\n\t\t\t\t\t\t\tvar parent = node.querySelector(\"tbody\") || node;\n\t\t\t\t\t\t\tparent.appendChild(newField);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar naField = node.querySelector(\n\t\t\t\t\t\t\t'.hu-tooltip [hu-tooltip-field=\"' + fieldName + '\"]'\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (naField) {\n\t\t\t\t\t\t\tvar naFieldNameField = naField.querySelector(\".hu-tooltip-name\");\n\t\t\t\t\t\t\tif (naFieldNameField.innerHTML !== \"\")\n\t\t\t\t\t\t\t\tnaField.querySelector(\".hu-tooltip-value\").innerHTML = \"n/a\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstx.huTooltip.render();\n\n\t\t\t\tfunction replaceFirstOfTwo(matched) {\n\t\t\t\t\treturn function (m) {\n\t\t\t\t\t\treturn ++matched === 1 ? \"\" : m;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction adjustSticky(marker) {\n\t\t\t\tif (marker.node.style.left === \"-50000px\") return;\n\t\t\t\tvar mSticky = stx.controls.mSticky;\n\t\t\t\tif (mSticky && mSticky.style.display !== \"none\") {\n\t\t\t\t\tvar newTop =\n\t\t\t\t\t\tCIQ.stripPX(marker.node.style.top) -\n\t\t\t\t\t\tCIQ.elementDimensions(mSticky, {\n\t\t\t\t\t\t\tpadding: true,\n\t\t\t\t\t\t\tborder: true,\n\t\t\t\t\t\t\tmargin: true\n\t\t\t\t\t\t}).height;\n\n\t\t\t\t\tif (newTop < 0) {\n\t\t\t\t\t\tmarker.node.style.top =\n\t\t\t\t\t\t\tCIQ.stripPX(marker.node.style.top) - newTop + \"px\";\n\t\t\t\t\t\tnewTop = 0;\n\t\t\t\t\t}\n\t\t\t\t\tvar style = mSticky.style;\n\t\t\t\t\tCIQ.efficientDOMUpdate(style, \"top\", newTop + \"px\");\n\t\t\t\t\tCIQ.efficientDOMUpdate(style, \"left\", marker.node.style.left);\n\t\t\t\t\tCIQ.efficientDOMUpdate(style, \"right\", marker.node.style.right);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontainer.addEventListener(\"mouseout\", hideTooltip);\n\n\t\t\tstx.append(\"mousemoveinner\", function () {\n\t\t\t\tadjustSticky(this.huTooltip);\n\t\t\t});\n\n\t\t\tstx.append(\"deleteHighlighted\", function () {\n\t\t\t\tthis.huTooltip.lastBar = {};\n\t\t\t\tthis.headsUpHR();\n\t\t\t});\n\t\t\tstx.append(\"headsUpHR\", renderFunction);\n\t\t\tstx.append(\"createDataSegment\", renderFunction);\n\t\t\tstx.huTooltip = new CIQ.Marker.Tooltip({\n\t\t\t\tstx: stx,\n\t\t\t\txPositioner: \"bar\",\n\t\t\t\tchartContainer: true,\n\t\t\t\tnode: node\n\t\t\t});\n\t\t};\n}\n\n};\n\n\nlet _exports = {CIQ:__CIQ_};\nexport {__js_addons_standard_dataLoader_ as dataLoader};\nexport {__js_addons_standard_extendedHours_ as extendedHours};\nexport {__js_addons_standard_fullScreen_ as fullScreen};\nexport {__js_addons_standard_inactivityTimer_ as inactivityTimer};\nexport {__js_addons_standard_rangeSlider_ as rangeSlider};\nexport {__js_addons_standard_shortcuts_ as shortcuts};\nexport {__js_addons_standard_tableView_ as tableView};\nexport {__js_addons_standard_tooltip_ as tooltip};\n\nexport {__CIQ_ as CIQ};\n\n/* global __TREE_SHAKE__ */\nif (typeof __TREE_SHAKE__ === \"undefined\" || !__TREE_SHAKE__) {\n\t_exports.CIQ.activateImports(\n\t\t__js_addons_standard_dataLoader_,\n\t\t__js_addons_standard_extendedHours_,\n\t\t__js_addons_standard_fullScreen_,\n\t\t__js_addons_standard_inactivityTimer_,\n\t\t__js_addons_standard_rangeSlider_,\n\t\t__js_addons_standard_shortcuts_,\n\t\t__js_addons_standard_tableView_,\n\t\t__js_addons_standard_tooltip_,\n\t\tnull\n\t);\n}","/**!\n *\t9.3.0\n *\tGeneration date: 2024-06-03T13:22:07.487Z\n *\tClient name: euroland as\n *\tPackage Type: Core alacarte\n *\tLicense type: annual\n *\tBuild descriptor: 13d0ed304\n */\n\n/***********************************************************!\n * Copyright © 2023 S&P Global All rights reserved\n*************************************************************/\n/*************************************! DO NOT MAKE CHANGES TO THIS LIBRARY FILE!! !*************************************\n* If you wish to overwrite default functionality, create a separate file with a copy of the methods you are overwriting *\n* and load that file right after the library has been loaded, but before the chart engine is instantiated. *\n* Directly modifying library files will prevent upgrades and the ability for ChartIQ to support your solution. *\n*************************************************************************************************************************/\n/* eslint-disable no-extra-parens */\n\n\n/* eslint-disable */ /* jshint ignore:start */ /* ignore jslint start */\nx2w9K[398538]=(function(){var O=2;for(;O !== 9;){switch(O){case 1:return globalThis;break;case 2:O=typeof globalThis === '\\x6f\\u0062\\x6a\\x65\\x63\\x74'?1:5;break;case 5:var P;try{var B=2;for(;B !== 6;){switch(B){case 4:B=typeof yGec8 === '\\u0075\\x6e\\u0064\\x65\\u0066\\x69\\u006e\\u0065\\x64'?3:9;break;case 2:Object['\\x64\\u0065\\x66\\x69\\x6e\\x65\\x50\\u0072\\u006f\\x70\\u0065\\u0072\\x74\\u0079'](Object['\\u0070\\u0072\\u006f\\x74\\x6f\\x74\\u0079\\x70\\x65'],'\\u0056\\u0079\\x72\\x44\\u0049',{'\\x67\\x65\\x74':function(){return this;},'\\x63\\x6f\\x6e\\x66\\x69\\x67\\x75\\x72\\x61\\x62\\x6c\\x65':true});P=VyrDI;P['\\x79\\u0047\\x65\\x63\\x38']=P;B=4;break;case 9:delete P['\\x79\\x47\\x65\\u0063\\u0038'];var K=Object['\\u0070\\u0072\\x6f\\u0074\\x6f\\u0074\\u0079\\u0070\\u0065'];delete K['\\x56\\x79\\x72\\x44\\u0049'];B=6;break;case 3:throw \"\";B=9;break;}}}catch(Y){P=window;}return P;break;}}})();x2w9K.s3ulq=s3ulq;H_7Tt4(x2w9K[398538]);x2w9K[518776]=(function(){var a4=2;for(;a4 !== 5;){switch(a4){case 2:var N0={V1dKs2g:(function(u8){var E0=2;for(;E0 !== 18;){switch(E0){case 7:E0=q7 === u8.length?6:14;break;case 12:w0=w0.a9Sxy('=');var A7=0;var X8=function(c6){var q0=2;for(;q0 !== 23;){switch(q0){case 5:w0.m0_N9.F99A3J(w0,w0.b1JulQ(-8,8).b1JulQ(0,6));q0=4;break;case 7:q0=A7 === 2 && c6 === 14?6:13;break;case 17:A7+=1;q0=16;break;case 20:A7+=1;q0=19;break;case 12:A7+=1;q0=11;break;case 8:w0.m0_N9.F99A3J(w0,w0.b1JulQ(-6,6).b1JulQ(0,4));q0=4;break;case 18:q0=A7 === 5 && c6 === 18?17:15;break;case 6:A7+=1;q0=14;break;case 2:q0=A7 === 0 && c6 === 40?1:3;break;case 16:w0.m0_N9.F99A3J(w0,w0.b1JulQ(-9,9).b1JulQ(0,7));q0=4;break;case 4:return A7;break;case 10:q0=A7 === 4 && c6 === 5?20:18;break;case 26:w0.m0_N9.F99A3J(w0,w0.b1JulQ(-9,9).b1JulQ(0,7));q0=4;break;case 19:w0.m0_N9.F99A3J(w0,w0.b1JulQ(-5,5).b1JulQ(0,4));q0=4;break;case 24:return i3(c6);break;case 13:q0=A7 === 3 && c6 === 32?12:10;break;case 14:w0.m0_N9.F99A3J(w0,w0.b1JulQ(-9,9).b1JulQ(0,8));q0=4;break;case 25:N0.V1dKs2g=i3;q0=24;break;case 9:A7+=1;q0=8;break;case 1:A7+=1;q0=5;break;case 3:q0=A7 === 1 && c6 === 33?9:7;break;case 27:A7+=1;q0=26;break;case 15:q0=A7 === 6 && c6 === 44?27:25;break;case 11:w0.m0_N9.F99A3J(w0,w0.b1JulQ(-3,3).b1JulQ(0,2));q0=4;break;}}};var i3=function(d9){var T7=2;for(;T7 !== 1;){switch(T7){case 2:return w0[d9];break;}}};E0=19;break;case 19:return X8;break;case 8:E0=a0 < K$.length?7:12;break;case 6:q7=0;E0=14;break;case 9:var a0=0,q7=0;E0=8;break;case 2:var z3=function(o0){var U8=2;for(;U8 !== 11;){switch(U8){case 13:U8=!C$?6:12;break;case 2:var n7=T9wijF.M9eWfJ;var J9=P6On0o.G6hg7L;var N8=[];U8=4;break;case 7:var M3,C$;U8=6;break;case 6:M3=N8.y8j9cv(function(){var Y6=2;for(;Y6 !== 1;){switch(Y6){case 2:return 0.5 - J9();break;}}}).u_bJht('');C$=x2w9K[M3];U8=13;break;case 12:return C$;break;case 4:var S5=0;U8=3;break;case 8:S5++;U8=3;break;case 3:U8=S5 < o0.length?9:7;break;case 9:N8[S5]=n7(o0[S5] + 33);U8=8;break;}}};var w0='',K$=t4eySI(z3([18,82,75,80,84])());var N4=T9wijF.M9eWfJ;var S3=K$.l_j6XN.bind(K$);var J5=u8.l_j6XN.bind(u8);E0=9;break;case 14:w0+=N4(S3(a0) ^ J5(q7));E0=13;break;case 13:(a0++,q7++);E0=8;break;}}})('!H]K02')};return N0;break;}}})();x2w9K.V1=function(){return typeof x2w9K[518776].V1dKs2g === 'function'?x2w9K[518776].V1dKs2g.apply(x2w9K[518776],arguments):x2w9K[518776].V1dKs2g;};x2w9K.q4=function(){return typeof x2w9K[518776].V1dKs2g === 'function'?x2w9K[518776].V1dKs2g.apply(x2w9K[518776],arguments):x2w9K[518776].V1dKs2g;};var g29CIJ=2;for(;g29CIJ !== 13;){switch(g29CIJ){case 4:x2w9K.Q8=97;g29CIJ=3;break;case 5:g29CIJ=x2w9K.q4(14) <= x2w9K.V1(32)?4:3;break;case 14:x2w9K.Y9=7;g29CIJ=13;break;case 1:x2w9K.q$=7;g29CIJ=5;break;case 7:x2w9K.E2=40;g29CIJ=6;break;case 3:g29CIJ=x2w9K.q4(5) < 86?9:8;break;case 9:x2w9K.S4=47;g29CIJ=8;break;case 2:g29CIJ=x2w9K.V1(40) <= x2w9K.q4(33)?1:5;break;case 8:g29CIJ=x2w9K.q4(18) === 7?7:6;break;case 6:g29CIJ=x2w9K.q4(44) !== 20?14:13;break;}}x2w9K[425657]=(function(){var Z6=2;for(;Z6 !== 1;){switch(Z6){case 2:return {v9d0Ctj:function(){var l3=2;for(;l3 !== 8;){switch(l3){case 4:(function(){var j3=2;for(;j3 !== 54;){switch(j3){case 43:j3=C === 19?42:37;break;case 4:C=W[U]?23:22;j3=1;break;case 13:j3=C === 6?12:19;break;case 19:j3=C === 3?18:26;break;case 21:C=24;j3=1;break;case 44:C=3;j3=1;break;case 28:var a7=\"Q\";j3=44;break;case 5:j3=C === 24?4:3;break;case 26:j3=C === 15?25:35;break;case 34:W[V]=function(){};j3=33;break;case 35:j3=C === 22?34:32;break;case 25:U+=Z;U+=J;U+=a7;j3=22;break;case 37:j3=C === 23?36:1;break;case 2:var C=2;j3=1;break;case 32:j3=C === 2?31:43;break;case 33:C=21;j3=1;break;case 36:return;break;case 18:var D=\"o\";var b4=398538;var Z=\"J\";var N=\"9\";j3=27;break;case 1:j3=C !== 21?5:54;break;case 20:C=12;j3=1;break;case 12:var V=T;V+=N;V+=D;j3=20;break;case 42:var U=T;U+=N;U+=D;U+=I;j3=38;break;case 9:V+=I;V+=Z;V+=J;V+=a7;j3=14;break;case 31:var J=\"2\";var T=\"U\";var I=\"T\";j3=28;break;case 22:var W=x2w9K[b4];j3=21;break;case 3:j3=C === 12?9:13;break;case 14:C=19;j3=1;break;case 27:C=6;j3=1;break;case 38:C=15;j3=1;break;}}})();l3=3;break;case 5:l3=Q === 2?4:1;break;case 9:l3=true?9:8;break;case 3:Q=1;l3=1;break;case 1:l3=Q !== 1?5:9;break;case 2:var Q=2;l3=1;break;}}}};break;}}})();function x2w9K(){}x2w9K[599133]=(function(){var Y1x=2;for(;Y1x !== 9;){switch(Y1x){case 2:var l08=[arguments];l08[7]=undefined;l08[6]={};l08[6].z5f6bPT=function(){var q2u=2;for(;q2u !== 90;){switch(q2u){case 56:F4O[19]=F4O[9][F4O[20]];try{F4O[13]=F4O[19][F4O[47]]()?F4O[29]:F4O[69];}catch(u9J){F4O[13]=F4O[69];}q2u=77;break;case 45:F4O[9].v2iLXd(F4O[50]);F4O[72]=[];F4O[29]='D5d';F4O[69]='P04';q2u=62;break;case 4:F4O[9]=[];F4O[3]={};q2u=9;break;case 48:F4O[9].v2iLXd(F4O[5]);F4O[9].v2iLXd(F4O[96]);F4O[9].v2iLXd(F4O[82]);q2u=45;break;case 36:F4O[96]=F4O[70];F4O[9].v2iLXd(F4O[31]);F4O[9].v2iLXd(F4O[24]);F4O[9].v2iLXd(F4O[1]);q2u=51;break;case 1:q2u=l08[7]?5:4;break;case 69:q2u=(function(i4F){var L39=2;for(;L39 !== 22;){switch(L39){case 8:O$5[3]=0;L39=7;break;case 19:O$5[3]++;L39=7;break;case 4:O$5[4]={};O$5[6]=[];O$5[3]=0;L39=8;break;case 26:L39=O$5[7] >= 0.5?25:24;break;case 16:L39=O$5[3] < O$5[6].length?15:23;break;case 23:return O$5[2];break;case 2:var O$5=[arguments];L39=1;break;case 17:O$5[3]=0;L39=16;break;case 1:L39=O$5[0][0].length === 0?5:4;break;case 5:return;break;case 10:L39=O$5[1][F4O[88]] === F4O[29]?20:19;break;case 12:O$5[6].v2iLXd(O$5[1][F4O[65]]);L39=11;break;case 14:L39=typeof O$5[4][O$5[1][F4O[65]]] === 'undefined'?13:11;break;case 15:O$5[8]=O$5[6][O$5[3]];O$5[7]=O$5[4][O$5[8]].h / O$5[4][O$5[8]].t;L39=26;break;case 7:L39=O$5[3] < O$5[0][0].length?6:18;break;case 25:O$5[2]=true;L39=24;break;case 18:O$5[2]=false;L39=17;break;case 20:O$5[4][O$5[1][F4O[65]]].h+=true;L39=19;break;case 13:O$5[4][O$5[1][F4O[65]]]=(function(){var U1F=2;for(;U1F !== 9;){switch(U1F){case 3:return B$d[3];break;case 2:var B$d=[arguments];B$d[3]={};B$d[3].h=0;B$d[3].t=0;U1F=3;break;}}}).F99A3J(this,arguments);L39=12;break;case 24:O$5[3]++;L39=16;break;case 6:O$5[1]=O$5[0][0][O$5[3]];L39=14;break;case 11:O$5[4][O$5[1][F4O[65]]].t+=true;L39=10;break;}}})(F4O[72])?68:67;break;case 70:F4O[20]++;q2u=57;break;case 9:F4O[3].t7I=['Y_H'];F4O[3].Q26=function(){var S11=function(){return atob('PQ==');};var a81=!(/\\141\\u0074\\u006f\\x62/).J64eWb(S11 + []);return a81;};F4O[4]=F4O[3];F4O[7]={};q2u=14;break;case 57:q2u=F4O[20] < F4O[9].length?56:69;break;case 77:F4O[46]=0;q2u=76;break;case 15:F4O[5]=F4O[6];F4O[84]={};q2u=26;break;case 14:F4O[7].t7I=['Y_H'];F4O[7].Q26=function(){var m77=function(){return ('a|a').split('|');};var w3$=!(/\\x7c/).J64eWb(m77 + []);return w3$;};F4O[2]=F4O[7];F4O[8]={};F4O[8].t7I=['Z92'];q2u=20;break;case 30:F4O[56]={};F4O[56].t7I=['Z92'];F4O[56].Q26=function(){var L3O=false;var g0x=[];try{for(var a3g in console)g0x.v2iLXd(a3g);L3O=g0x.length === 0;}catch(t9y){}var i4y=L3O;return i4y;};F4O[50]=F4O[56];F4O[21]={};F4O[21].t7I=['Z92'];q2u=41;break;case 68:q2u=83?68:67;break;case 72:F4O[72].v2iLXd(F4O[34]);q2u=71;break;case 22:F4O[12].t7I=['Y_H'];F4O[12].Q26=function(){var s6F=function(){return ['a','a'].join();};var h6Y=!(/(\\133|\\x5d)/).J64eWb(s6F + []);return h6Y;};F4O[43]=F4O[12];F4O[37]={};F4O[37].t7I=['Z92'];F4O[37].Q26=function(){var l9t=typeof v_LHKo === 'function';return l9t;};F4O[31]=F4O[37];q2u=30;break;case 17:F4O[6].t7I=['Y_H'];F4O[6].Q26=function(){var d2D=function(){return ('x').repeat(2);};var P3s=(/\\u0078\\x78/).J64eWb(d2D + []);return P3s;};q2u=15;break;case 26:F4O[84].t7I=['Y_H'];F4O[84].Q26=function(){var O86=function(){return ('x').toLocaleUpperCase();};var N9A=(/\\130/).J64eWb(O86 + []);return N9A;};F4O[24]=F4O[84];F4O[12]={};q2u=22;break;case 51:F4O[9].v2iLXd(F4O[43]);F4O[9].v2iLXd(F4O[4]);F4O[9].v2iLXd(F4O[2]);q2u=48;break;case 41:F4O[21].Q26=function(){var X4d=typeof r49IUh === 'function';return X4d;};F4O[82]=F4O[21];F4O[70]={};F4O[70].t7I=['Y_H'];F4O[70].Q26=function(){var m_E=function(){return ('x y').slice(0,1);};var n5o=!(/\\u0079/).J64eWb(m_E + []);return n5o;};q2u=36;break;case 5:return 55;break;case 67:l08[7]=45;return 100;break;case 2:var F4O=[arguments];q2u=1;break;case 58:F4O[20]=0;q2u=57;break;case 62:F4O[91]='t7I';F4O[88]='M1S';F4O[47]='Q26';F4O[65]='H$0';q2u=58;break;case 71:F4O[46]++;q2u=76;break;case 20:F4O[8].Q26=function(){var C_w=typeof P6HlsN === 'function';return C_w;};F4O[1]=F4O[8];F4O[6]={};q2u=17;break;case 75:F4O[34]={};F4O[34][F4O[65]]=F4O[19][F4O[91]][F4O[46]];F4O[34][F4O[88]]=F4O[13];q2u=72;break;case 76:q2u=F4O[46] < F4O[19][F4O[91]].length?75:70;break;}}};Y1x=3;break;case 3:return l08[6];break;}}})();x2w9K.b$0=function(){return typeof x2w9K[226054].w7REEmc === 'function'?x2w9K[226054].w7REEmc.apply(x2w9K[226054],arguments):x2w9K[226054].w7REEmc;};x2w9K.P8Y=function(){return typeof x2w9K[89615].S4JRLHR === 'function'?x2w9K[89615].S4JRLHR.apply(x2w9K[89615],arguments):x2w9K[89615].S4JRLHR;};x2w9K.n$o=function(){return typeof x2w9K[89615].S4JRLHR === 'function'?x2w9K[89615].S4JRLHR.apply(x2w9K[89615],arguments):x2w9K[89615].S4JRLHR;};x2w9K.V8b=function(){return typeof x2w9K[599133].z5f6bPT === 'function'?x2w9K[599133].z5f6bPT.apply(x2w9K[599133],arguments):x2w9K[599133].z5f6bPT;};x2w9K.j1j=function(){return typeof x2w9K[226054].j_tylyD === 'function'?x2w9K[226054].j_tylyD.apply(x2w9K[226054],arguments):x2w9K[226054].j_tylyD;};x2w9K.P3q=function(){return typeof x2w9K[226054].w7REEmc === 'function'?x2w9K[226054].w7REEmc.apply(x2w9K[226054],arguments):x2w9K[226054].w7REEmc;};x2w9K[140391]=x2w9K[89615];x2w9K.o5B=function(){return typeof x2w9K[226054].j_tylyD === 'function'?x2w9K[226054].j_tylyD.apply(x2w9K[226054],arguments):x2w9K[226054].j_tylyD;};x2w9K.a3b=function(){return typeof x2w9K[599133].z5f6bPT === 'function'?x2w9K[599133].z5f6bPT.apply(x2w9K[599133],arguments):x2w9K[599133].z5f6bPT;};x2w9K.F9=function(){return typeof x2w9K[425657].v9d0Ctj === 'function'?x2w9K[425657].v9d0Ctj.apply(x2w9K[425657],arguments):x2w9K[425657].v9d0Ctj;};x2w9K[398538].U9BB=x2w9K;x2w9K[89615]=(function(){var P2d=function(s2W,N30){var S2d=N30 & 0xffff;var r6i=N30 - S2d;return (r6i * s2W | 0) + (S2d * s2W | 0) | 0;},S4JRLHR=function(I0q,r_7,K0Q){var u2K=0xcc9e2d51,o_U=0x1b873593;var G4I=K0Q;var q4P=r_7 & ~0x3;for(var o3N=0;o3N < q4P;o3N+=4){var P5Q=I0q.l_j6XN(o3N) & 0xff | (I0q.l_j6XN(o3N + 1) & 0xff) << 8 | (I0q.l_j6XN(o3N + 2) & 0xff) << 16 | (I0q.l_j6XN(o3N + 3) & 0xff) << 24;P5Q=P2d(P5Q,u2K);P5Q=(P5Q & 0x1ffff) << 15 | P5Q >>> 17;P5Q=P2d(P5Q,o_U);G4I^=P5Q;G4I=(G4I & 0x7ffff) << 13 | G4I >>> 19;G4I=G4I * 5 + 0xe6546b64 | 0;}P5Q=0;switch(r_7 % 4){case 3:P5Q=(I0q.l_j6XN(q4P + 2) & 0xff) << 16;case 2:P5Q|=(I0q.l_j6XN(q4P + 1) & 0xff) << 8;case 1:P5Q|=I0q.l_j6XN(q4P) & 0xff;P5Q=P2d(P5Q,u2K);P5Q=(P5Q & 0x1ffff) << 15 | P5Q >>> 17;P5Q=P2d(P5Q,o_U);G4I^=P5Q;}G4I^=r_7;G4I^=G4I >>> 16;G4I=P2d(G4I,0x85ebca6b);G4I^=G4I >>> 13;G4I=P2d(G4I,0xc2b2ae35);G4I^=G4I >>> 16;return G4I;};return {S4JRLHR:S4JRLHR};})();x2w9K.L2=function(){return typeof x2w9K[425657].v9d0Ctj === 'function'?x2w9K[425657].v9d0Ctj.apply(x2w9K[425657],arguments):x2w9K[425657].v9d0Ctj;};x2w9K[226054]=(function(h1w){return {j_tylyD:function(){var q8F,Q$p=arguments;switch(h1w){case 14:q8F=Q$p[1] - Q$p[2] - Q$p[0];break;case 93:q8F=Q$p[0] * (Q$p[1] * Q$p[2]);break;case 73:q8F=(Q$p[2] - Q$p[4]) * Q$p[0] * Q$p[3] - Q$p[1];break;case 62:q8F=Q$p[1] >> Q$p[0];break;case 146:q8F=Q$p[0] / (Q$p[1] - Q$p[2]);break;case 32:q8F=Q$p[2] - +Q$p[0] / Q$p[1];break;case 3:q8F=Q$p[0] - Q$p[1];break;case 81:q8F=(-Q$p[2] - Q$p[0]) / Q$p[4] * Q$p[1] + Q$p[3];break;case 137:q8F=(Q$p[0] - Q$p[1]) / Q$p[4] + Q$p[3] - Q$p[2];break;case 46:q8F=Q$p[0] / Q$p[3] - Q$p[1] - Q$p[2] + Q$p[4];break;case 84:q8F=(Q$p[6] - Q$p[3]) * (Q$p[2] - Q$p[4]) - (Q$p[1] - Q$p[0]) * (Q$p[5] - Q$p[7]);break;case 76:q8F=Q$p[0] + Q$p[3] + Q$p[2] - Q$p[1] - Q$p[4];break;case 109:q8F=(-Q$p[2] + Q$p[0]) * Q$p[1] + Q$p[3];break;case 90:q8F=Q$p[1] / Q$p[3] * Q$p[2] - Q$p[4] - Q$p[0];break;case 51:q8F=Q$p[1] + Q$p[5] + Q$p[2] + Q$p[4] + Q$p[3] + Q$p[7] + Q$p[0] + Q$p[6] + Q$p[8];break;case 108:q8F=Q$p[0] - Q$p[3] - (Q$p[1] - Q$p[2]);break;case 4:q8F=-Q$p[0] * Q$p[2] + Q$p[1];break;case 99:q8F=-Q$p[1] / Q$p[0] * Q$p[3] + Q$p[2];break;case 22:q8F=Q$p[0] / Q$p[1];break;case 115:q8F=(Q$p[3] - Q$p[4]) / Q$p[2] * Q$p[1] + Q$p[0];break;case 91:q8F=Q$p[1] + Q$p[3] - Q$p[2] + Q$p[0];break;case 120:q8F=Q$p[0] + Q$p[1] * Q$p[2];break;case 118:q8F=Q$p[1] * -Q$p[0];break;case 1:q8F=-Q$p[4] / Q$p[3] * Q$p[0] - Q$p[1] + Q$p[2];break;case 121:q8F=(Q$p[4] * Q$p[3] + Q$p[2]) / Q$p[0] - Q$p[1];break;case 122:q8F=Q$p[0] + Q$p[3] + Q$p[1] % Q$p[2];break;case 43:q8F=Q$p[3] / Q$p[4] * Q$p[2] * Q$p[1] - Q$p[0];break;case 5:q8F=Q$p[2] - Q$p[4] - Q$p[0] - Q$p[1] + Q$p[3];break;case 101:q8F=(Q$p[3] - Q$p[0]) / (Q$p[1] - Q$p[2]);break;case 110:q8F=(Q$p[0] + Q$p[1]) / Q$p[3] * Q$p[2] - Q$p[4];break;case 54:q8F=Q$p[3] / Q$p[0] / Q$p[1] + Q$p[2];break;case 144:q8F=Q$p[0] >= Q$p[1];break;case 61:q8F=Q$p[2] * Q$p[0] / Q$p[3] - Q$p[1];break;case 28:q8F=(Q$p[0] + Q$p[1]) / (Q$p[2] * Q$p[3]);break;case 57:q8F=(Q$p[3] / Q$p[1] - Q$p[0]) / Q$p[4] + Q$p[2];break;case 148:q8F=(-Q$p[1] + Q$p[2]) * Q$p[3] - Q$p[0];break;case 135:q8F=+Q$p[0] / Q$p[1];break;case 113:q8F=Q$p[0] - Q$p[1] * Q$p[2];break;case 127:q8F=Q$p[1] + Q$p[0] / Q$p[2] + Q$p[3];break;case 0:q8F=Q$p[2] + Q$p[0] - Q$p[1];break;case 26:q8F=Q$p[4] * (Q$p[3] - Q$p[1] / (Q$p[2] - Q$p[0]));break;case 88:q8F=-Q$p[2] - Q$p[1] + Q$p[0];break;case 138:q8F=(Q$p[3] + Q$p[0]) * Q$p[2] - Q$p[1];break;case 7:q8F=Q$p[1] + Q$p[0];break;case 79:q8F=(Q$p[2] + Q$p[0]) / Q$p[1];break;case 119:q8F=Q$p[1] % !Q$p[0];break;case 33:q8F=Q$p[1] * +Q$p[0];break;case 78:q8F=-Q$p[0] * Q$p[3] + Q$p[1] + Q$p[2];break;case 56:q8F=Q$p[1] - Q$p[2] + Q$p[0] + Q$p[3];break;case 106:q8F=Q$p[0] - +Q$p[1];break;case 49:q8F=-Q$p[1] * Q$p[3] - Q$p[0] + Q$p[2];break;case 126:q8F=(Q$p[0] * Q$p[1] + Q$p[3]) / Q$p[2] + Q$p[4];break;case 48:q8F=Q$p[2] * Q$p[1] * Q$p[3] + Q$p[0] - Q$p[4];break;case 139:q8F=Q$p[1] / +Q$p[0];break;case 114:q8F=Q$p[2] / Q$p[3] / Q$p[0] - Q$p[1];break;case 71:q8F=(Q$p[1] * Q$p[4] - Q$p[0]) / Q$p[3] + Q$p[2];break;case 34:q8F=Q$p[0] + Q$p[2] + Q$p[1];break;case 132:q8F=(Q$p[3] + Q$p[0] + Q$p[1]) * Q$p[4] - Q$p[2];break;case 105:q8F=(-Q$p[2] - Q$p[3] + Q$p[1]) / Q$p[4] + Q$p[0];break;case 77:q8F=Q$p[1] + Q$p[2] + Q$p[3] - Q$p[0];break;case 96:q8F=(Q$p[1] + Q$p[2] - Q$p[0]) / Q$p[4] - Q$p[3];break;case 128:q8F=Q$p[1] + Q$p[3] / Q$p[2] * Q$p[0];break;case 52:q8F=Q$p[0] + Q$p[5] + Q$p[2] + Q$p[6] + Q$p[1] + Q$p[3] + Q$p[9] + Q$p[10] + Q$p[8] + Q$p[7] + Q$p[4];break;case 67:q8F=(Q$p[3] / Q$p[2] - Q$p[0]) * Q$p[4] - Q$p[1];break;case 42:q8F=(Q$p[0] - Q$p[2]) * Q$p[1] + Q$p[3];break;case 8:q8F=-Q$p[3] * Q$p[0] / Q$p[2] + Q$p[1];break;case 131:q8F=(Q$p[2] + Q$p[1]) / Q$p[3] - Q$p[0] - Q$p[4];break;case 59:q8F=(Q$p[1] + Q$p[4]) * Q$p[0] / Q$p[2] - Q$p[3];break;case 82:q8F=Q$p[3] - Q$p[1] + Q$p[2] - Q$p[0];break;case 65:q8F=Q$p[1] !== Q$p[0];break;case 15:q8F=Q$p[1] * -+Q$p[0];break;case 40:q8F=(Q$p[3] - Q$p[0]) * Q$p[2] + Q$p[1] - Q$p[4];break;case 70:q8F=Q$p[0] < Q$p[1];break;case 147:q8F=Q$p[2] - Q$p[0] + Q$p[4] - Q$p[3] + Q$p[1];break;case 117:q8F=-Q$p[2] + Q$p[4] + Q$p[0] + Q$p[1] - Q$p[3];break;case 2:q8F=-Q$p[1] + Q$p[0];break;case 39:q8F=-Q$p[0] + Q$p[1] - Q$p[2];break;case 123:q8F=Q$p[3] * Q$p[0] % (Q$p[1] * Q$p[2]);break;case 55:q8F=(Q$p[1] - Q$p[3]) * Q$p[0] - Q$p[2];break;case 58:q8F=Q$p[3] / Q$p[4] * Q$p[2] * Q$p[1] + Q$p[0];break;case 141:q8F=Q$p[1] + Q$p[0] - Q$p[2] - Q$p[3];break;case 136:q8F=Q$p[1] - Q$p[2] - Q$p[3] + Q$p[4] + Q$p[0];break;case 50:q8F=Q$p[6] + Q$p[0] + Q$p[1] + Q$p[4] + Q$p[2] + Q$p[5] + Q$p[3];break;case 11:q8F=(Q$p[0] - Q$p[1]) / Q$p[3] + Q$p[2];break;case 111:q8F=Q$p[0] / Q$p[1] / Q$p[3] * Q$p[2] - Q$p[4];break;case 25:q8F=Q$p[0] / (Q$p[2] >> Q$p[1]);break;case 112:q8F=(Q$p[3] + Q$p[2]) / Q$p[4] + Q$p[0] - Q$p[1];break;case 68:q8F=(Q$p[2] * Q$p[0] - Q$p[3]) * Q$p[4] - Q$p[1];break;case 66:q8F=Q$p[3] * Q$p[2] / Q$p[0] - Q$p[1] - Q$p[4];break;case 13:q8F=Q$p[2] + Q$p[0] + Q$p[3] + Q$p[1] - Q$p[4];break;case 125:q8F=(Q$p[0] - Q$p[3]) * Q$p[4] + Q$p[2] + Q$p[1];break;case 6:q8F=(Q$p[3] - Q$p[2]) / Q$p[1] - Q$p[0];break;case 133:q8F=(Q$p[2] - Q$p[1] + Q$p[4]) / Q$p[3] + Q$p[0];break;case 16:q8F=Q$p[0] + +Q$p[1];break;case 74:q8F=Q$p[0] / Q$p[4] / Q$p[2] / Q$p[3] + Q$p[1];break;case 64:q8F=Q$p[1] === Q$p[0];break;case 129:q8F=Q$p[1] > Q$p[0];break;case 36:q8F=Q$p[2] / Q$p[0] - Q$p[3] + Q$p[1];break;case 63:q8F=Q$p[0] | Q$p[1];break;case 98:q8F=(Q$p[1] + Q$p[3]) / (Q$p[2] >> Q$p[0]);break;case 17:q8F=(Q$p[3] - Q$p[1]) * (Q$p[5] - Q$p[0]) / (Q$p[2] - Q$p[4]);break;case 92:q8F=Q$p[2] - Q$p[1] + Q$p[4] - Q$p[0] - Q$p[3];break;case 83:q8F=Q$p[0] == Q$p[1];break;case 29:q8F=Q$p[0] + (Q$p[2] - Q$p[3]) * Q$p[1] * Q$p[4];break;case 38:q8F=Q$p[1] * Q$p[3] / Q$p[2] + Q$p[0];break;case 124:q8F=Q$p[4] + (Q$p[3] | Q$p[2]) + Q$p[1] + Q$p[0];break;case 31:q8F=Q$p[1] + Q$p[2] / Q$p[0];break;case 44:q8F=Q$p[1] << Q$p[0];break;case 145:q8F=(Q$p[1] + Q$p[0] + Q$p[3]) / Q$p[4] - Q$p[2];break;case 85:q8F=Q$p[0] + Q$p[1] * (Q$p[3] - Q$p[2]);break;case 19:q8F=-Q$p[1] + Q$p[0] + Q$p[3] - Q$p[2];break;case 107:q8F=Q$p[3] * Q$p[4] / Q$p[2] + Q$p[0] + Q$p[1];break;case 134:q8F=(Q$p[4] + Q$p[1]) / Q$p[3] / Q$p[0] - Q$p[2];break;case 27:q8F=(Q$p[1] - Q$p[0]) / Q$p[2];break;case 100:q8F=Q$p[0] + (Q$p[2] >> Q$p[1]);break;case 86:q8F=Q$p[2] / Q$p[0] - Q$p[1];break;case 94:q8F=-Q$p[2] / Q$p[0] + Q$p[1];break;case 30:q8F=Q$p[6] + (Q$p[5] - Q$p[4]) * (Q$p[0] / Q$p[1] - Q$p[3]) * Q$p[2];break;case 20:q8F=Q$p[1] - Q$p[2] + Q$p[0];break;case 87:q8F=Q$p[3] - Q$p[2] - Q$p[0] + Q$p[1];break;case 45:q8F=Q$p[1] / Q$p[2] + Q$p[0];break;case 23:q8F=Q$p[1] * (Q$p[0] ^ Q$p[2]);break;case 47:q8F=Q$p[0] / Q$p[3] * Q$p[1] + Q$p[2];break;case 10:q8F=Q$p[1] / Q$p[3] + Q$p[2] - Q$p[0];break;case 80:q8F=Q$p[1] / Q$p[3] * Q$p[2] - Q$p[0];break;case 95:q8F=Q$p[0] + Q$p[3] + Q$p[2] + Q$p[1];break;case 21:q8F=Q$p[1] | Q$p[3] << Q$p[4] | Q$p[0] << Q$p[2];break;case 18:q8F=Q$p[1] + (Q$p[2] - Q$p[0]);break;case 103:q8F=Q$p[3] + Q$p[0] + Q$p[1] - Q$p[4] + Q$p[2];break;case 72:q8F=(Q$p[3] + Q$p[1]) / Q$p[0] - Q$p[2] + Q$p[4];break;case 69:q8F=Q$p[2] * Q$p[1] + Q$p[0] - Q$p[3];break;case 130:q8F=Q$p[4] * Q$p[0] / Q$p[2] + Q$p[1] - Q$p[3];break;case 140:q8F=Q$p[1] * Q$p[0] / Q$p[2];break;case 41:q8F=Q$p[0] ^ Q$p[1];break;case 37:q8F=Q$p[3] / Q$p[1] - Q$p[4] + Q$p[0] - Q$p[2];break;case 53:q8F=Q$p[3] * +Q$p[1] * Q$p[2] * Q$p[0];break;case 116:q8F=Q$p[4] / Q$p[1] + Q$p[3] - Q$p[0] - Q$p[2];break;case 75:q8F=(-Q$p[3] + Q$p[1]) * Q$p[0] / Q$p[2] - Q$p[4];break;case 89:q8F=(Q$p[4] + Q$p[0] - Q$p[3]) / Q$p[1] + Q$p[2];break;case 60:q8F=Q$p[4] + Q$p[2] + Q$p[3] + Q$p[1] + Q$p[0];break;case 35:q8F=(Q$p[2] + Q$p[1]) / Q$p[0] + Q$p[3];break;case 104:q8F=-Q$p[3] * Q$p[0] * Q$p[1] + Q$p[2];break;case 9:q8F=Q$p[1] * Q$p[2] * Q$p[3] - Q$p[0];break;case 24:q8F=Q$p[0] * Q$p[1];break;case 142:q8F=Q$p[1] != Q$p[0];break;case 12:q8F=Q$p[2] * Q$p[0] - Q$p[1];break;case 97:q8F=Q$p[0] - (Q$p[2] - Q$p[1]);break;case 143:q8F=Q$p[4] * Q$p[2] * Q$p[3] / Q$p[0] - Q$p[1];break;case 102:q8F=Q$p[0] * (Q$p[3] - Q$p[2]) + Q$p[1];break;}return q8F;},w7REEmc:function(v3F){h1w=v3F;}};})();x2w9K[399120]=x2w9K[89615];function H_7Tt4(V59){function H_f(N02){var f$R=2;for(;f$R !== 5;){switch(f$R){case 2:var e87=[arguments];return e87[0][0].Function;break;}}}function x8J(n51){var p1r=2;for(;p1r !== 5;){switch(p1r){case 2:var R4b=[arguments];return R4b[0][0].Array;break;}}}function V50(w$C){var q7H=2;for(;q7H !== 5;){switch(q7H){case 2:var X2$=[arguments];return X2$[0][0].Math;break;}}}var H$X=2;for(;H$X !== 155;){switch(H$X){case 86:E$B[20]=\"_\";E$B[48]=\"\";E$B[26]=\"sN\";E$B[48]=\"l\";H$X=82;break;case 6:E$B[8]=\"a9\";E$B[7]=\"\";E$B[7]=\"\";E$B[7]=\"Jul\";H$X=11;break;case 109:E$B[91]+=E$B[32];E$B[91]+=E$B[39];E$B[34]=E$B[87];E$B[34]+=E$B[30];H$X=105;break;case 157:f4m(O3E,E$B[74],E$B[49],E$B[36]);H$X=156;break;case 29:E$B[70]=\"\";E$B[70]=\"G6\";E$B[85]=\"\";E$B[85]=\"9c\";H$X=42;break;case 82:E$B[43]=1;E$B[59]=\"P6H\";E$B[49]=5;E$B[49]=0;H$X=78;break;case 51:E$B[80]=\"ht\";E$B[29]=\"d\";E$B[76]=\"y8j\";E$B[30]=\"4e\";H$X=47;break;case 124:E$B[10]+=E$B[38];E$B[75]=E$B[4];E$B[75]+=E$B[99];E$B[75]+=E$B[73];E$B[15]=E$B[44];E$B[15]+=E$B[2];E$B[15]+=E$B[6];H$X=150;break;case 141:E$B[18]=E$B[8];E$B[18]+=E$B[1];E$B[18]+=E$B[3];H$X=138;break;case 145:E$B[56]+=E$B[73];E$B[13]=E$B[63];E$B[13]+=E$B[39];E$B[13]+=E$B[9];H$X=141;break;case 95:E$B[74]+=E$B[31];E$B[74]+=E$B[81];E$B[41]=E$B[79];E$B[41]+=E$B[58];H$X=91;break;case 91:E$B[41]+=E$B[37];E$B[78]=E$B[20];E$B[78]+=E$B[19];E$B[78]+=E$B[87];E$B[68]=E$B[73];E$B[68]+=E$B[89];E$B[68]+=E$B[12];H$X=113;break;case 22:E$B[94]=\"\";E$B[94]=\"P6\";E$B[50]=\"F\";E$B[35]=\"\";H$X=33;break;case 69:E$B[88]=\"\";E$B[31]=\"_res\";E$B[88]=\"r49\";E$B[45]=\"\";H$X=90;break;case 58:E$B[79]=\"\";E$B[73]=\"J\";E$B[79]=\"\";E$B[12]=\"Wb\";H$X=77;break;case 161:f4m(J3x,\"charCodeAt\",E$B[43],E$B[91]);H$X=160;break;case 130:E$B[72]+=E$B[69];E$B[84]=E$B[70];E$B[84]+=E$B[24];E$B[84]+=E$B[35];E$B[10]=E$B[94];E$B[10]+=E$B[14];H$X=124;break;case 136:f4m(x8J,\"unshift\",E$B[43],E$B[13]);H$X=170;break;case 33:E$B[35]=\"\";E$B[35]=\"g7L\";E$B[99]=\"f\";E$B[46]=\"b1\";H$X=29;break;case 168:f4m(O3E,\"String\",E$B[49],E$B[15]);H$X=167;break;case 150:E$B[25]=E$B[46];E$B[25]+=E$B[7];E$B[25]+=E$B[47];E$B[56]=E$B[50];E$B[56]+=E$B[5];H$X=145;break;case 159:f4m(F94,\"test\",E$B[43],E$B[68]);H$X=158;break;case 163:f4m(x8J,\"join\",E$B[43],E$B[16]);H$X=162;break;case 78:E$B[90]=E$B[59];E$B[90]+=E$B[48];E$B[90]+=E$B[26];E$B[92]=E$B[20];H$X=101;break;case 90:E$B[45]=\"imize\";E$B[62]=\"\";E$B[62]=\"_opt\";E$B[20]=\"\";H$X=86;break;case 16:E$B[47]=\"Q\";E$B[38]=\"\";E$B[38]=\"o\";E$B[14]=\"\";E$B[14]=\"On0\";E$B[63]=\"m0_\";E$B[44]=\"T9w\";H$X=22;break;case 101:E$B[92]+=E$B[62];E$B[92]+=E$B[45];E$B[36]=E$B[88];E$B[36]+=E$B[64];E$B[36]+=E$B[24];E$B[74]=E$B[20];H$X=95;break;case 164:f4m(x8J,\"sort\",E$B[43],E$B[72]);H$X=163;break;case 158:f4m(O3E,E$B[78],E$B[49],E$B[41]);H$X=157;break;case 166:f4m(O3E,\"Math\",E$B[49],E$B[10]);H$X=165;break;case 47:E$B[65]=\"\";E$B[65]=\"iLX\";E$B[27]=\"\";E$B[27]=\"v2\";E$B[57]=\"ySI\";E$B[87]=\"\";H$X=62;break;case 169:f4m(x8J,\"splice\",E$B[43],E$B[25]);H$X=168;break;case 137:f4m(J3x,\"split\",E$B[43],E$B[18]);H$X=136;break;case 73:E$B[81]=\"idual\";E$B[24]=\"h\";E$B[64]=\"\";E$B[64]=\"IU\";H$X=69;break;case 156:f4m(O3E,E$B[92],E$B[49],E$B[90]);H$X=155;break;case 162:f4m(O3E,\"decodeURI\",E$B[49],E$B[34]);H$X=161;break;case 77:E$B[37]=\"Ko\";E$B[58]=\"LH\";E$B[79]=\"v_\";E$B[81]=\"\";H$X=73;break;case 3:E$B[1]=\"S\";E$B[9]=\"9\";E$B[5]=\"\";E$B[5]=\"99A3\";H$X=6;break;case 138:var f4m=function(z6R,D5U,i54,B3f){var T9J=2;for(;T9J !== 5;){switch(T9J){case 2:var l3G=[arguments];g_B(E$B[0][0],l3G[0][0],l3G[0][1],l3G[0][2],l3G[0][3]);T9J=5;break;}}};H$X=137;break;case 62:E$B[87]=\"t\";E$B[19]=\"\";E$B[19]=\"_abstrac\";E$B[89]=\"64e\";H$X=58;break;case 113:E$B[52]=E$B[27];E$B[52]+=E$B[65];E$B[52]+=E$B[29];E$B[91]=E$B[96];H$X=109;break;case 160:f4m(x8J,\"push\",E$B[43],E$B[52]);H$X=159;break;case 11:E$B[6]=\"\";E$B[6]=\"jF\";E$B[2]=\"\";E$B[2]=\"i\";E$B[4]=\"\";E$B[4]=\"M9eW\";H$X=16;break;case 42:E$B[21]=\"\";E$B[21]=\"_bJ\";E$B[69]=\"v\";E$B[32]=\"\";E$B[32]=\"X\";E$B[67]=\"u\";H$X=36;break;case 36:E$B[39]=\"N\";E$B[96]=\"\";E$B[96]=\"l_j6\";E$B[29]=\"\";H$X=51;break;case 165:f4m(V50,\"random\",E$B[49],E$B[84]);H$X=164;break;case 2:var E$B=[arguments];E$B[3]=\"\";E$B[3]=\"xy\";E$B[1]=\"\";H$X=3;break;case 105:E$B[34]+=E$B[57];E$B[16]=E$B[67];E$B[16]+=E$B[21];E$B[16]+=E$B[80];E$B[72]=E$B[76];E$B[72]+=E$B[85];H$X=130;break;case 170:f4m(H_f,\"apply\",E$B[43],E$B[56]);H$X=169;break;case 167:f4m(J3x,\"fromCharCode\",E$B[49],E$B[75]);H$X=166;break;}}function g_B(i36,X1G,o70,o3k,h5W){var t17=2;for(;t17 !== 6;){switch(t17){case 2:var H$Q=[arguments];H$Q[2]=\"\";H$Q[3]=\"ty\";H$Q[2]=\"roper\";t17=3;break;case 3:H$Q[5]=\"\";H$Q[5]=\"defineP\";H$Q[9]=false;try{var s0R=2;for(;s0R !== 13;){switch(s0R){case 9:H$Q[7][H$Q[0][4]]=H$Q[7][H$Q[0][2]];H$Q[8].set=function(k8l){var o$c=2;for(;o$c !== 5;){switch(o$c){case 2:var t2m=[arguments];H$Q[7][H$Q[0][2]]=t2m[0][0];o$c=5;break;}}};H$Q[8].get=function(){var j5l=2;for(;j5l !== 6;){switch(j5l){case 2:var h50=[arguments];h50[4]=\"\";h50[4]=\"efine\";h50[9]=\"und\";h50[6]=h50[9];h50[6]+=h50[4];j5l=8;break;case 8:h50[6]+=E$B[29];return typeof H$Q[7][H$Q[0][2]] == h50[6]?undefined:H$Q[7][H$Q[0][2]];break;}}};H$Q[8].enumerable=H$Q[9];try{var S_I=2;for(;S_I !== 3;){switch(S_I){case 2:H$Q[6]=H$Q[5];H$Q[6]+=H$Q[2];H$Q[6]+=H$Q[3];H$Q[0][0].Object[H$Q[6]](H$Q[7],H$Q[0][4],H$Q[8]);S_I=3;break;}}}catch(Q18){}s0R=13;break;case 4:s0R=H$Q[7].hasOwnProperty(H$Q[0][4]) && H$Q[7][H$Q[0][4]] === H$Q[7][H$Q[0][2]]?3:9;break;case 3:return;break;case 2:H$Q[8]={};H$Q[4]=(1,H$Q[0][1])(H$Q[0][0]);H$Q[7]=[H$Q[4],H$Q[4].prototype][H$Q[0][3]];s0R=4;break;}}}catch(X0c){}t17=6;break;}}}function O3E(M5C){var M_L=2;for(;M_L !== 5;){switch(M_L){case 2:var H2e=[arguments];return H2e[0][0];break;}}}function F94(I5_){var Y$b=2;for(;Y$b !== 5;){switch(Y$b){case 2:var h6x=[arguments];return h6x[0][0].RegExp;break;}}}function J3x(g2b){var M9G=2;for(;M9G !== 5;){switch(M9G){case 2:var r9v=[arguments];return r9v[0][0].String;break;}}}}x2w9K[492152]=x2w9K[226054];var V3,N7,d8,C7,L_,c3,C2,D7,s0,n0,R3,s$,p$,p0,l9,i2,U_,H3,m9,Z2,K0,G6,F3,Z$,g2,m2,h4,S7,Z_,V4,n$,b6,T6,S9,H1,i5,D9,t2,Q5;V3=M1=>{var c8T=x2w9K;var Z9y,R_9,V3D,O2;Z9y=\"a\";Z9y+=\"nnu\";c8T.a3b();Z9y+=\"a\";Z9y+=\"l\";R_9=\"e\";function E4(){}R_9+=\"uro\";R_9+=\"land as\";V3D=\"13d0e\";V3D+=\"d304\";O2=M1.timezoneJS={};M1.CIQ=E4;E4.packageInfo=Object.freeze(Object.assign({buildDescriptor:V3D,clientName:R_9,generationDate:\"2024-06-03T13:22:07.487Z\",licenseType:Z9y,packageType:\"Core alacarte\",version:\"9.3.0\"},E4.packageInfo));E4.suppressPackageInfo=!1;E4.logVersion=function(){var h9q;h9q=\"font-f\";h9q+=\"amily:sans-serif; font-size:14px; color: white; font-weight: normal; background-color: #feb912; padding: 2px 1px 2px 5px;\";if(this.suppressPackageInfo || this.packageInfoDisplayed){return;}c8T.a3b();this.packageInfoDisplayed=!!({});console.log(\"%cChart%cIQ%c Version: \" + (this.packageInfo.version || \"Unavailable\"),h9q,\"font-family:sans-serif; font-size:14px; color: white; font-weight: bold; background-color: #feb912; padding: 2px 5px 2px 1px;\",\"font-size:12px; font-weight: bold;\");};E4.logPackageInfo=function(){var r_x,b8T,w1p,o7M,c_h,T3D,R8,G9,i4;r_x=\"%cPackag\";r_x+=\"e Inform\";r_x+=\"ati\";r_x+=\"on\";b8T=\"Versi\";b8T+=\"o\";b8T+=\"n\";c8T.a3b();w1p=\"Pac\";w1p+=\"kage \";w1p+=\"Type\";o7M=\"Key\";o7M+=\"f\";o7M+=\"ile\";c_h=\"iFrame L\";c_h+=\"ock\";T3D=\"Client \";T3D+=\"Name\";if(this.suppressPackageInfo){return;}this.packageInfoDisplayed=!!1;R8={buildDescriptor:\"Build Descriptor\",clientName:T3D,domainLock:\"Domain Lock\",expirationDate:\"Expiration Date\",filesystem:\"Filesystem Lock\",generationDate:\"Generation Date\",iframeLock:c_h,keyfileVersion:o7M,licenseType:\"License Type\",packageType:w1p,version:b8T};console.log(r_x,\"font-family:sans-serif; font-size:14px; color: grey; font-weight: bold; padding-top: 5px;\");G9=\"font-weight:bold; padding-right: 5px;\";i4=\"font-weight: normal\";for(var K3 in R8){console.log(`%c${R8[K3]}:%c ${this.packageInfo[K3]}`,G9,i4);}};E4.inheritsFrom=function(t8,Y5,P_){var s2D,w5;s2D=\"funct\";s2D+=\"ion\";if(!t8 || !Y5){return;}w5=Y5.prototype || Object.getPrototypeOf(Y5);t8.prototype=P_ !== !\"1\" && typeof Y5 === s2D?new Y5():Object.create(w5);c8T.V8b();Object.defineProperties(t8.prototype,{constructor:{configurable:!!({}),enumerable:!({}),value:t8,writable:!!1},parent:{configurable:!!\"1\",enumerable:!!\"\",value:w5,writable:!0}});};E4.extend=function(h5,n3,m$){var g1,K8;for(g1 in n3){K8=n3[g1];if(h5 === K8 || K8 === undefined){continue;}else if(K8 === null || m$ === !!({})){h5[g1]=K8;}else if(K8.constructor == Array){h5[g1]=K8.slice();}else if(K8.constructor == Object){h5[g1]=E4.extend(typeof h5[g1] === \"object\" && h5[g1] !== null?h5[g1]:{},K8);}else {h5[g1]=K8;}}c8T.a3b();return h5;};E4.activateImports=function(...n2){c8T.V8b();var r7;r7=this;if(!r7.activatedImports){r7.activatedImports={};}n2.forEach(B7=>{var Z9N;c8T.V8b();Z9N=\"functio\";Z9N+=\"n\";if(typeof B7 == Z9N){if(!((B7.__guid in r7.activatedImports))){B7.__guid=r7.uniqueID(!![]);r7.activatedImports[B7.__guid]=B7.__name || B7.name;B7(M1);}}});};};N7=U5=>{var c8,x4H,U3,A3;c8=typeof window !== \"undefined\"?window:typeof global !== \"undefined\"?global:{};{x4H=\"func\";x4H+=\"tion\";U3=function(g0,k3){var s08,I3j,m2z,P4U,Z3;s08=1975725795;I3j=1510607458;m2z=2;for(var L8K=1;x2w9K.P8Y(L8K.toString(),L8K.toString().length,+\"82384\") !== s08;L8K++){P4U=\"Eve\";P4U+=\"n\";P4U+=\"t\";Z3=document.createEvent(P4U);Z3.initEvent(g0,!!(k3 && k3.bubbles),!!(k3 && k3.cancelable));m2z+=2;}if(x2w9K.n$o(m2z.toString(),m2z.toString().length,70547) !== I3j){Z3=document.createEvent(\"\");Z3.initEvent(g0,-+(k3 || k3.bubbles),~~(k3 || k3.cancelable));}return Z3;};if(c8.Event && typeof c8.Event !== \"function\"){U3.prototype=c8.Event.prototype;c8.Event=U3;}A3=function(m1,s6){var y8j,E5;y8j=\"Cu\";y8j+=\"s\";y8j+=\"tomEv\";y8j+=\"ent\";E5=document.createEvent(y8j);E5.initCustomEvent(m1,!!(s6 && s6.bubbles),!!(s6 && s6.cancelable),s6 && s6.detail);return E5;};if(c8.CustomEvent && typeof c8.CustomEvent !== x4H){A3.prototype=c8.CustomEvent.prototype;c8.CustomEvent=A3;}}{if(typeof global !== \"undefined\"){if(global.self === undefined){Object.defineProperty(global,\"self\",{value:global});}if(global.CanvasRenderingContext2D === undefined){Object.defineProperty(global,\"CanvasRenderingContext2D\",{value:{}});}}}};d8=M7=>{var i5t=x2w9K;var z1g,C2H,T1i,K3D,h5t,t_S,W0a,E28,O$,I5,k8,H8,T4;z1g=\"c\";z1g+=\"onte\";z1g+=\"nt\";C2H=\"regi\";C2H+=\"sterElemen\";C2H+=\"t\";T1i=\"chrom\";T1i+=\"e\";K3D=\"E\";K3D+=\"dg/\";h5t=\"Sa\";h5t+=\"f\";h5t+=\"ari/\";t_S=\"T\";t_S+=\"ri\";t_S+=\"den\";t_S+=\"t/\";W0a=\"m\";W0a+=\"si\";W0a+=\"e\";E28=\"an\";E28+=\"droid\";O$=M7.CIQ;I5=typeof navigator !== \"undefined\"?navigator:{userAgent:\"\"};k8=I5.userAgent;H8=typeof window !== \"undefined\"?window:{};T4=typeof document !== \"undefined\"?document:{};O$.ipad=k8.indexOf(\"iPad\") != -1 || I5.platform === \"MacIntel\" && I5.maxTouchPoints > 1;i5t.P3q(0);var q4T=i5t.j1j(2,3,0);O$.iphone=k8.indexOf(\"iPhone\") != q4T;i5t.P3q(1);var W_k=i5t.o5B(20,18,77,6,18);O$.isAndroid=k8.toLowerCase().indexOf(E28) > W_k;O$.isIE=k8.toLowerCase().indexOf(W0a) > -1 || k8.indexOf(t_S) > -1;i5t.b$0(2);var e_Y=i5t.o5B(1,2);O$.isEdge=k8.indexOf(\"Edge/\") > e_Y;i5t.b$0(3);var C13=i5t.j1j(0,1);O$.isSafari=k8.indexOf(h5t) > C13;O$.isIOS7=k8.match(/(iPad|iPhone);.*CPU.*OS 7_\\d/i);O$.isIOS8=k8.match(/(iPad|iPhone);.*CPU.*OS 8_\\d/i);O$.isIOS9=k8.match(/(iPad|iPhone);.*CPU.*OS 9_\\d/i);O$.isIOS10=k8.match(/(iPad|iPhone);.*CPU.*OS 10_\\d/i);O$.isIOS7or8=O$.isIOS7 || O$.isIOS8 || O$.isIOS9 || O$.isIOS10;O$.isMobile=O$.isAndroid || O$.ipad || O$.iphone;O$.touchDevice=T4.ontouchstart !== undefined || I5.maxTouchPoints > 1;O$.isSurface=O$.touchDevice && (O$.isEdge || O$.isIE || k8.indexOf(K3D) > -1);O$.is_chrome=k8.toLowerCase().indexOf(T1i) > -1 && !O$.isEdge;i5t.P3q(2);var v0r=i5t.o5B(5,6);O$.isFF=k8.toLowerCase().indexOf(\"firefox\") > v0r;O$.isSurfaceApp=H8.MSApp;O$.isWebComponentsSupported=typeof document !== \"undefined\" && (C2H in document) && (\"import\" in document.createElement(\"link\")) && (z1g in document.createElement(\"template\"));O$.noKeyboard=O$.isMobile || O$.isSurfaceApp;};C7=M5=>{var H4T=x2w9K;H4T.a3b();var h2,M9,E_;if(!M5.SplinePlotter){M5.SplinePlotter={};}h2=M5.CIQ;M9=M5.SplinePlotter;E_=function(e5,P9,o8,M8){var Z5,Q0,R4;function U1(g4){return M8.slice(0,M8.findIndex(a$=>{H4T.V8b();return a$.coord[+\"0\"] != e5[g4] || a$.coord[1] != e5[g4 + 1];}));}function r_(J7){J7.forEach(j7=>{o8.stroke();o8.strokeStyle=j7.color;o8.setLineDash(j7.pattern);o8.lineDashOffset=0;o8.lineWidth=j7.width;o8.beginPath();o8.moveTo(e5[W0],e5[W0 + 1]);});}if(!M8){M8=[];}if(!P9 || P9 < 0){P9=0;}H4T.V8b();Z5=e5.length;function D8(G8,W2,B8){H4T.a3b();[1,\"2\" >> 32].forEach(d_=>{W2[d_].cp={};[\"2020\" * 1 != 6893?(6607,2630) === (4920,\"380.99\" * 1)?(1.45e+2,\"h\"):280.67 === 8570?\"350.11\" - 0:\"x\":\"k\",\"y\"].forEach(function(p9){var s4;H4T.P3q(4);var k7j=H4T.j1j(16,225,14);H4T.b$0(5);var E2r=H4T.o5B(11,14,0,44,18);H4T.b$0(6);var A3k=H4T.j1j(2,3,6,18);H4T.b$0(7);var Q3F=H4T.j1j(1,0);H4T.b$0(3);var S3h=H4T.j1j(15,13);H4T.b$0(8);var V5d=H4T.j1j(10,7,26,13);H4T.b$0(2);var T1m=H4T.o5B(9,7);H4T.P3q(3);var i0C=H4T.j1j(8,6);H4T.b$0(9);var u1J=H4T.o5B(2718,20,8,17);H4T.P3q(10);var R5V=H4T.j1j(4,34,5,34);H4T.b$0(11);var o3o=H4T.o5B(0,5,3,5);H4T.b$0(3);var u4g=H4T.j1j(11,9);H4T.P3q(12);var b84=H4T.o5B(6,130,22);H4T.b$0(12);var B6I=H4T.j1j(17,101,6);H4T.P3q(13);var V6z=H4T.j1j(17,11,4,8,38);s4=k7j / (E2r + Math.sqrt(Math.pow(W2[A3k * d_ - Q3F].x - W2[+\"2\" * d_ - S3h].x,V5d) + Math.pow(W2[T1m * d_ - +\"1\"].y - W2[i0C * d_ - u1J].y,R5V)) / Math.sqrt(Math.pow(W2[o3o].x - W2[+\"1\"].x,u4g) + Math.pow(W2[b84].y - W2[B6I].y,V6z)));H4T.b$0(14);var t4o=H4T.o5B(25,33,5);H4T.P3q(12);var v3G=H4T.j1j(4,19,5);H4T.b$0(7);var L7c=H4T.o5B(1,0);W2[d_].cp[p9]=W2[d_][p9] + (t4o - +\"2\" * d_) * (W2[d_ + v3G][p9] - W2[d_ - L7c][p9]) * B8 * (s4 || 0);if(W2[d_].cp[p9] < Math.min(W2[1][p9],W2[2][p9])){W2[d_].cp[p9]=Math.min(W2[1][p9],W2[2][p9]);}if(W2[d_].cp[p9] > Math.max(W2[\"1\" << 0][p9],W2[2][p9])){W2[d_].cp[p9]=Math.max(W2[+\"1\"][p9],W2[\"2\" - 0][p9]);}});});if(G8 === +\"0\"){o8.quadraticCurveTo(W2[2].cp.x,W2[2].cp.y,W2[2].x,W2[2].y);}else if(G8 === Z5 - 4){o8.quadraticCurveTo(W2[1].cp.x,W2[1].cp.y,W2[2].x,W2[2].y);}else {o8.bezierCurveTo(W2[1].cp.x,W2[1].cp.y,W2[2].cp.x,W2[2].cp.y,W2[2].x,W2[\"2\" << 64].y);}}o8.moveTo(e5[0],e5[1]);for(var W0=0;W0 < Z5 - 3;W0+=2){Q0=U1(W0);if(Q0.length > 0){r_(Q0);}R4=[];R4[0]={x:e5[Math.max(0,W0 - 2)],y:e5[Math.max(\"1\" ^ 0,W0 - 1)]};R4[+\"1\"]={x:e5[W0],y:e5[W0 + 1]};R4[2]={x:e5[W0 + 2],y:e5[W0 + 3]};R4[3]={x:e5[Math.min(Z5 - 2,W0 + 4)],y:e5[Math.min(Z5 - 1,W0 + 5)]};if(Z5 === \"4\" >> 0){H4T.P3q(3);P9=H4T.j1j(\"0\",0);}D8(W0,R4,P9);}};if(!M5.SplinePlotter.plotSpline){M5.SplinePlotter.plotSpline=E_;}h2.clearCanvas=function(J2,z5){var d1,R5,k5;J2.isDirty=![];H4T.V8b();d1=J2.context;d1.clearRect(0,0,J2.width,J2.height);if(h2.isAndroid && !h2.is_chrome && !h2.isFF){if(h2.ChartEngine.useOldAndroidClear && z5){d1.fillStyle=z5.containerColor;d1.fillRect(0,0,J2.width,J2.height);d1.clearRect(0,0,J2.width,J2.height);}R5=J2.width;J2.width=1;J2.width=R5;}k5=z5.chart.canvasShim.childNodes.length > +\"0\";if(z5.useBackgroundCanvas || k5){z5.useBackgroundCanvas=k5;if(J2 == z5.chart.canvas){h2.clearCanvas(z5.chart.backgroundCanvas,z5);}}};h2.fillTransparentCanvas=function(Q7,u5,I9,h0){var o6;o6=Q7.globalCompositeOperation;Q7.globalCompositeOperation=\"destination-over\";Q7.fillStyle=u5;Q7.fillRect(0,0,I9,h0);Q7.globalCompositeOperation=o6;};h2.convertBoxToPixels=function(M6,t$,l2,S1){var O3,v$,q5,a9,J8;O3=M6.panels[t$];v$=M6.pixelFromTick(l2.x0,O3.chart);q5=M6.pixelFromTick(l2.x1,O3.chart);a9=l2.cy0 || l2.cy0 === +\"0\"?l2.cy0:M6.pixelFromValueAdjusted(O3,l2.x0,l2.y0,S1);J8=l2.cy1 || l2.cy1 === +\"0\"?l2.cy1:M6.pixelFromValueAdjusted(O3,l2.x1,l2.y1,S1);return {x0:v$,x1:q5,y0:a9,y1:J8};};h2.fillArea=function(Y0,L$,F6){var s7,q3,p6,f8,O8,P1,M$,w7,D5,h$,G_,O7,O00,v6d,v1u;if(!L$.length){return;}s7=Y0.chart.context;q3=s7.globalAlpha;H4T.V8b();p6=arguments[2];f8=arguments[3];O8=arguments[4];P1=0;M$=null;if(F6 && typeof F6 == \"object\"){p6=F6.color;f8=F6.opacity;P1=F6.tension;O8=F6.panelName;M$=F6.yAxis;}if(!f8 && f8 !== 0){f8=0.2;}if(p6 == \"auto\"){p6=Y0.defaultColor;}s7.globalAlpha=f8;if(p6){s7.fillStyle=p6;}w7=Number.MAX_VALUE;H4T.P3q(15);D5=H4T.j1j(\"1\",w7);h$=Y0.panels[O8];if(h$){D5=(M$ || h$.yAxis).top;w7=(M$ || h$.yAxis).bottom;s7.save();s7.beginPath();s7.rect(h$.left,D5,h$.width,w7 - D5);s7.clip();}s7.beginPath();if(P1){O7=[];for(G_=0;G_ < L$.length - (\"2\" << 32);G_++){O7.push(L$[G_][0],L$[G_][+\"1\"]);}O00=-+\"1090700009\";v6d=-+\"1465069656\";v1u=2;for(var k1m=1;H4T.P8Y(k1m.toString(),k1m.toString().length,83280) !== O00;k1m++){M9.plotSpline(O7,P1,s7);v1u+=2;}if(H4T.P8Y(v1u.toString(),v1u.toString().length,21792) !== v6d){M9.plotSpline(O7,P1,s7);}for(G_=L$.length - 2;G_ < L$.length;G_++){s7.lineTo(Math.round(L$[G_][0]),Math.round(L$[G_][1]));}}else {s7.moveTo(L$[0][+\"0\"],L$[+\"0\"][1]);for(G_=1;G_ < L$.length;G_++){s7.lineTo(L$[G_][0],L$[G_][1]);}}s7.closePath();s7.fill();if(h$){s7.restore();}s7.globalAlpha=q3;};h2.prepareChannelFill=function(i0,w4){var N6,d6,W_,V2,r$,A8,V6,x_;if(!w4 || w4 instanceof Array){w4=arguments[2];}if(!w4.gapDisplayStyle && w4.gapDisplayStyle !== !({})){w4.gapDisplayStyle=w4.gaps;}N6=i0.panels[w4.panelName];d6=i0.chart;W_=d6.context.strokeStyle;V2={noDraw:w4.noDraw,gapDisplayStyle:w4.gapDisplayStyle};r$=h2.ensureDefaults(w4,{noDraw:!!({}),gapDisplayStyle:{},yAxis:N6.yAxis});A8=i0.plotDataSegmentAsLine(w4.topBand,N6,r$);V6=i0.plotDataSegmentAsLine(w4.bottomBand,N6,r$);w4.noDraw=V2.noDraw;w4.gapDisplayStyle=V2.gapDisplayStyle;H4T.a3b();x_=[];for(var b7=+\"0\";b7 < A8.points.length;b7+=2){x_.push([A8.points[b7],A8.points[b7 + 1]]);}for(var n8=V6.points.length - +\"1\";n8 >= 0;n8-=2){x_.push([V6.points[n8 - +\"1\"],V6.points[n8]]);}h2.fillArea(i0,x_,w4);return;};h2.preparePeakValleyFill=function(V0,r6){var z6,H7,j4,H9,D$,A0,T$,e4,I3,z0,j2,i_,e3,z8,w1,u3,R7,u4,Y1,U2,B2,w9,j0,z9w,G0,v6,g7,u6,B6,m0,W1,D4,e2,Y2,q6,O4;if(!r6 || r6 instanceof Array){r6=arguments[2];}if(!r6.gapDisplayStyle && r6.gapDisplayStyle !== !({})){r6.gapDisplayStyle=r6.gaps;}z6=V0.panels[r6.panelName];H7=z6.yAxis;j4=V0.chart;H9=j4.context;D$=H9.strokeStyle;A0={noDraw:r6.noDraw,gapDisplayStyle:r6.gapDisplayStyle};T$=V0.plotDataSegmentAsLine(r6.band,z6,h2.ensureDefaults(r6,{noDraw:!!\"1\",gapDisplayStyle:{}}));r6.noDraw=A0.noDraw;r6.gapDisplayStyle=A0.gapDisplayStyle;e4=r6.threshold;I3=r6.direction;z0=r6.reverse;j2=r6.gapDisplayStyle;if(r6.yAxis){H7=r6.yAxis;}i_=-Number.MAX_VALUE;e3=Number.MAX_VALUE;z8=z0?i_:e3;if(e4 || e4 === 0){z8=V0.pixelFromPrice(e4,z6,H7);}w1=[];u3=T$.points.length;H4T.V8b();for(var o_=+\"0\";o_ < u3;o_+=2){R7=T$.points[o_];H4T.P3q(7);u4=T$.points[H4T.j1j(1,o_)];if(r6.roundOffEdges){if(o_ === 0){R7=Math.floor(R7);}else if(o_ + +\"2\" == u3){R7=Math.ceil(R7);}}if(isNaN(u4))continue;B2=u4 > z8 && I3 > 0 || u4 < z8 && I3 < (\"0\" | 0);if(!B2){w1.push([R7,u4]);i_=Math.max(u4,i_);e3=Math.min(u4,e3);}if(o_ < u3 - 3){H4T.b$0(7);Y1=T$.points[H4T.j1j(2,o_)];H4T.b$0(16);U2=T$.points[H4T.j1j(o_,\"3\")];if(u4 < z8 && U2 > z8 || u4 > z8 && U2 < z8){H4T.b$0(17);R7+=H4T.o5B(R7,u4,U2,z8,u4,Y1);w1.push([R7,z8]);}}}u3=w1.length;if(!u3){return;}w9=r6.edgeParameters;j0=r6.edgeHighlight;if(j0){if(w9.lineWidth > 100){w9.lineWidth=1;}H9.save();H9.beginPath();for(var j8=\"0\" * 1;j8 < u3 - 1;j8++){z9w=\"seg\";z9w+=\"m\";z9w+=\"ent\";G0=w1[j8];H4T.P3q(18);v6=w1[H4T.o5B(0,j8,\"1\")];if(G0[1] == z8 && v6[1] == z8)continue;if(G0[0] == v6[0] && V0.layout.candleWidth >= \"1\" * 1){if(G0[1] == z8 && w1[j8 - 1] && w1[j8 - +\"1\"][\"1\" - 0] == z8)continue;if(v6[1] == z8 && w1[j8 + 2] && w1[j8 + 2][1] == z8)continue;}V0.plotLine(h2.extend({x0:G0[0],x1:v6[0],y0:G0[+\"1\"],y1:v6[+\"1\"],color:r6.edgeHighlight,type:z9w,context:H9,confineToPanel:z6,deferStroke:!!({})},w9));}H9.stroke();H9.restore();}if(!e4 && e4 !== 0){if(H7.flipped){z0=!z0;}z8=z0?Math.min(e3,H7.top):Math.max(i_,H7.bottom);}w1.push([w1[u3 - 1][+\"0\"],z8],[w1[+\"0\"][0],z8]);g7=r6.opacity;if(!g7 && g7 !== 0){r6.opacity=0.3;}h2.fillArea(V0,w1,r6);if(j2 && j2.color && j2.fillMountain && !r6.tension && !h2.isTransparent(j2.color) && !h2.isTransparent(r6.color)){H9.save();if(H9.fillStyle instanceof CanvasGradient){u6=h2.colorToHex(j2.color);B6=H9.createLinearGradient(0,I3 === 1?z6.top:z6.bottom,0,z8);B6.addColorStop(0,h2.hexToRgba(u6,60));B6.addColorStop(1,h2.hexToRgba(u6,10));H9.fillStyle=B6;}else {H9.fillStyle=j2.color;}m0=[];W1={opacity:r6.opacity,panelName:r6.panelName};H9.beginPath();for(o_=0;o_ < T$.gapAreas.length;o_++){D4=T$.gapAreas[o_];e2=D4.start;Y2=D4.end;q6=D4.threshold;if(e2){m0=[[e2[+\"0\"],e2[1]],[e2[+\"0\"],q6]];}else {m0.push([Y2[0],q6],[Y2[0],r6.step?m0[0][1]:Y2[1]]);}if(m0.length == 4){h2.fillArea(V0,m0,W1);O4=h2.extend({x1:m0[3][\"0\" - 0],y0:m0[0][1],type:\"segment\",deferStroke:!![],context:H9,confineToPanel:z6},j2);if(r6.step){V0.plotLine(h2.extend({x0:m0[0][0],y1:m0[0][1]},O4));V0.plotLine(h2.extend({x0:m0[3][0],y1:m0[\"3\" * 1][1]},O4));}else {V0.plotLine(h2.extend({x0:m0[0][0],y1:m0[3][1]},O4));}}}H9.stroke();H9.restore();}r6.opacity=g7;};h2.fillIntersecting=function(Q1,D6,K4){var r5,u1,c2,r2,C4,L0,u0,k4,R2,p8,y6,E7,Z4;if(!K4 || K4 instanceof Array){K4=arguments[3];}r5=K4.topBand;u1=K4.bottomBand;c2=K4.topSubBand;r2=K4.bottomSubBand;C4=K4.topColor;L0=K4.bottomColor;u0=D6;if(u0.panel){if(u0.outputs && u0.outputMap){if(!C4){C4=u0.outputs[u0.outputMap[r5]];}if(!L0){L0=u0.outputs[u0.outputMap[u1]];}}u0=u0.panel;}u0=Q1.panels[u0];k4=Q1.chart.context;R2=k4.canvas;p8=Q1.scratchContext;if(!p8){p8=Q1.scratchContext=R2.cloneNode(!!\"1\").getContext(\"2d\");}H4T.V8b();y6=p8.canvas;y6.height=R2.height;y6.width=R2.width;y6.context=p8;h2.clearCanvas(y6,Q1);E7=0.3;if(K4.opacity){E7=K4.opacity;}p8.globalCompositeOperation=\"xor\";Q1.chart.context=p8;Z4={band:r5,subField:c2,color:C4,opacity:1,panelName:u0.name,yAxis:K4.topAxis,skipTransform:K4.skipTransform,tension:K4.tension,roundOffEdges:!!1,step:K4.step};h2.preparePeakValleyFill(Q1,Z4);h2.extend(Z4,{band:u1,subField:r2,color:L0,yAxis:K4.bottomAxis});h2.preparePeakValleyFill(Q1,Z4);k4.save();k4.globalAlpha=E7;k4.drawImage(y6,0,0);k4.restore();Q1.chart.context=k4;};h2.createLegendSwatch=function(V$,E6,v4){};h2.drawLegendItem=function(G1,j5,F8,q8,X_,E9){var x8y,O_,i$,X1,S$,Q2;x8y=\"le\";x8y+=\"f\";x8y+=\"t\";if(!X_){X_=1;}O_=j5[0];i$=j5[1];H4T.b$0(3);X1=H4T.o5B(\"10\",0);S$=10;Q2=G1.chart.context;Q2.globalAlpha=X_;Q2.textAlign=x8y;Q2.fillStyle=q8;Q2.fillRect(O_,i$,X1,S$);if(E9){Q2.strokeStyle=E9;Q2.strokeRect(O_,i$,X1,S$);}Q2.globalAlpha=1;H4T.P3q(16);O_+=H4T.o5B(X1,\"2\");Q2.fillStyle=G1.defaultColor;Q2.fillText(F8,O_,i$);H4T.b$0(19);var j4L=H4T.j1j(14,3,7,2);O_+=Q2.measureText(F8).width + j4L;return [O_,i$];};h2.drawLegend=function(m7,f$){var i8H,z7,b9,h7,H2,D2,o5,W8,x6,j_,P8,L7,y_,C8,T3,P5,t9;i8H=\"t\";i8H+=\"o\";i8H+=\"p\";z7=f$.coordinates;b9=m7.chart.context;b9.textBaseline=i8H;h7=b9.font;m7.canvasFont(\"stx-legend\",b9);H2=f$.chart || m7.chart;if(!z7){z7=H2.legend;}D2=[z7.x,z7.y];o5=m7.defaultColor;W8=h2.hsl(m7.containerColor);for(var I1=0;I1 < 2;I1++){for(var W4 in f$.legendColorMap){j_=f$.legendColorMap[W4];if(j_.isBase && (I1 || f$.noBase))continue;if(!j_.isBase && !I1)continue;P8=null;if(j_.color instanceof Array){y_=j_.color;for(L7=y_.length - 1;L7 >= 0;L7--){if(h2.isTransparent(y_[L7])){y_.splice(L7,+\"1\");}}if(y_.length > 1){C8=b9.createLinearGradient(D2[0],D2[1],D2[0] + (\"10\" << 0),D2[1]);for(L7=0;L7 < y_.length;L7++){C8.addColorStop(L7 / (y_.length - 1),y_[L7]);}T3=h2.hsl(y_[0]);P5=h2.hsl(y_[y_.length - 1]);if(Math.abs(W8[2] - T3[2]) < \"0.1\" - 0 || Math.abs(W8[2] - P5[2]) < 0.1 || h2.isTransparent(y_[0]) || h2.isTransparent(y_[y_.length - 1])){P8=m7.defaultColor;}o5=C8;}else {if(y_.length > 0){o5=y_[0];}else {o5=m7.getCanvasColor(\"stx_line_chart\");}x6=h2.hsl(o5);if(Math.abs(W8[2] - x6[2]) < \"0.1\" * 1 || h2.isTransparent(o5)){P8=m7.defaultColor;}}}else if(j_.color){o5=j_.color;}else {o5=null;}if(o5){t9=W4;if(j_.display){t9=j_.display;}if(!t9){if(H2.symbolDisplay){t9=H2.symbolDisplay;}else {t9=H2.symbol;}}if(D2[+\"0\"] + b9.measureText(t9).width > H2.panel.right){H4T.b$0(20);var Q4_=H4T.o5B(16,0,10);D2=[z7.x,z7.y + b9.measureText(\"M\").width + Q4_];}D2=h2.drawLegendItem(m7,D2,t9,o5,j_.opacity,P8);}}}b9.font=h7;};};L_=k7=>{var G2u=x2w9K;var g5,s8,o9,k1;g5=/rgb\\((\\d{1,3}),\\s?(\\d{1,3}),\\s?(\\d{1,3})\\)/;s8=/rgba\\((\\d{1,3}),\\s?(\\d{1,3}),\\s?(\\d{1,3}),\\s?(\\d\\.\\d+|\\d+|\\.\\d+)\\)/;o9=k7.CIQ;o9.colorsEqual=function(P7,X2){var w$,u2,k9,r4,A1,K7;if(P7 == X2){return !!1;}G2u.V8b();if(!P7 && !X2){return !!1;}if(!P7 || !X2){return ![];}if(P7 == \"transparent\"){P7=\"rgba(0,0,0,0)\";}if(X2 == \"transparent\"){X2=\"rgba(0,0,0,0)\";}w$=P7.match(s8);u2=X2.match(s8);k9=w$?parseFloat(w$[4]):\"1\" >> 0;r4=u2?parseFloat(u2[4]):1;if(k9 != r4){return ![];}A1=o9.colorToHex(P7);K7=o9.colorToHex(X2);return A1.toLowerCase() == K7.toLowerCase();};o9.colorToHex=function(G2){var K6,c0,l$,A2,e8,c1,K5,k0;if(!o9.colorToHexMapping){o9.colorToHexMapping={};}if(!G2 || G2 == \"transparent\"){G2=\"#000000\";}if(o9.colorToHexMapping[G2]){return o9.colorToHexMapping[G2];}if(G2.charAt(+\"0\") === (7082 !== (+\"4755\",8250)?(\"8680\" ^ 0) === (\"9557\" >> 32,6792)?(+\"9579\",4842) !== (335.92,9280)?0xb6d:(405.48,\"b\"):\"#\":7.99e+3)){if(G2.length == 4){var [,n_,a1,z9]=G2.split(\"\");G2u.P3q(7);G2=o9.colorToHexMapping[G2]=`#${G2u.j1j(n_,n_)}${G2u.o5B(a1,a1)}${G2u.j1j(z9,z9)}`;}return G2;}K6=g5.exec(G2);function c7(x5){var D3y,n$_,b8Z,p5,X4;D3y=\"co\";D3y+=\"lor\";n$_=\"#\";n$_+=\"0000\";n$_+=\"00\";b8Z=\"un\";b8Z+=\"d\";b8Z+=\"efined\";if(typeof document === b8Z){return n$_;}p5=document.querySelector(\".ciq_color_converter\");if(!p5){p5=document.createElement(\"textarea\");p5.className=\"ciq_color_converter\";p5.style.display=\"none\";document.body.appendChild(p5);}p5.style.color=\"#000000\";p5.style.color=x5;X4=getComputedStyle(p5).getPropertyValue(D3y);K6=g5.exec(X4);if(K6){return o9.colorToHex(X4);}else if(X4.charAt(0) === (3944 != 979?\"#\":(+\"0x13b7\",9.11e+3))){return X4;}return x5;}if(!K6){K6=s8.exec(G2);}if(!K6){c0=c7(G2);o9.colorToHexMapping[G2]=c0;return c0;}l$=parseFloat(K6[1]);A2=parseFloat(K6[\"2\" | 2]);e8=parseFloat(K6[\"3\" >> 0]);G2u.b$0(21);c1=G2u.j1j(l$,e8,16,A2,8);K5=c1.toString(16);for(var S0=K5.length;S0 < 6;S0++){G2u.b$0(7);K5=G2u.o5B(K5,+\"718\" < (\"621.33\" - 0,9170)?(8928,966) <= \"2253\" << 0?\"0\":(0xefd,\"290.18\" - 0):(\"k\",6.25e+3));}G2u.V8b();G2u.b$0(7);k0=G2u.j1j(K5,\"#\");o9.colorToHexMapping[G2]=k0;return k0;};G2u.a3b();o9.hexToRgba=function(t3,X0){var h6F,N2T,d3,b3,f3,j6;h6F=\"rgba\";h6F+=\"(0,0\";h6F+=\",0,0\";h6F+=\")\";N2T=\"tra\";N2T+=\"n\";N2T+=\"sp\";N2T+=\"arent\";if(!t3 || t3 == N2T){t3=h6F;}if(t3.substring(0,4) === \"rgba\"){d3=s8.exec(t3);var [F7,f5,M0,C6,f7]=d3;if(X0 || X0 === 0){f7=X0;}if(f7 > 1){G2u.P3q(22);f7=G2u.j1j(f7,100);}return `rgba(${f5},${M0},${C6},${f7})`;}else if(t3.substring(0,3) === \"rgb\"){t3=o9.colorToHex(t3);}if(!X0 && X0 !== +\"0\"){X0=100;}if(X0 <= 1){G2u.P3q(23);X0=G2u.o5B(\"100\",X0,0);}t3=t3.replace(\"592.56\" * 1 != 7660?5508 <= 8508?\"#\":(\"c\",1.18e+3):!!0,\"\");b3=parseInt(t3.slice(\"0\" << 0,2),16);f3=parseInt(t3.slice(2,4),16);j6=parseInt(t3.slice(+\"4\",6),16);if(isNaN(b3) || isNaN(f3) || isNaN(j6)){console.log(\"CIQ.hexToRgba: invalid hex :\",t3);return null;}G2u.b$0(22);return `rgba(${b3},${f3},${j6},${G2u.j1j(X0,100)})`;};k1=new Map();o9.convertToNativeColor=function(C1){var P_S,v0,z_;P_S=\"s\";P_S+=\"t\";P_S+=\"ri\";P_S+=\"ng\";v0=!!\"\";if(!C1 || typeof C1 === P_S){v0=!![];C1=[C1];}C1=C1.map(U$=>{var b2;b2=k1.get(U$);if(b2){return b2;}if(!z_){z_=document.createElement(\"DIV\");z_.style.display=\"none\";document.body.appendChild(z_);}z_.style.color=U$;b2=U$?getComputedStyle(z_).color:U$;k1.set(U$,b2);return b2;});G2u.a3b();if(z_){document.body.removeChild(z_);}return v0?C1[\"0\" ^ 0]:C1;};o9.isTransparent=function(W7){var I8k,o2;I8k=\"transparen\";I8k+=\"t\";if(!W7){return ![];}if(W7 == I8k){return !![];}o2=s8.exec(W7);G2u.V8b();if(o2 === null){return !1;}if(parseFloat(o2[+\"4\"]) === 0){return !\"\";}return !!\"\";};o9.hsv=function(a6){var N2,a5,S6,L8,l0,b_,R$,F$,C5,U6,j1;N2=o9.colorToHex(a6);if(N2.substr(0,1) === (5305 <= (\"915\" * 1,45.58)?9030 !== (2250,3090)?\"0x1eb\" << 0:(340.52,0x1c8b):\"#\")){N2=N2.slice(1);}for(var B1=N2.length;B1 < 6;B1++){G2u.b$0(7);N2=G2u.o5B(N2,+\"934.92\" != (2030,264)?\"0\":(416.14,\"1160\" >> 0) === (\"7940\" | 0,811)?245.69:0x1713);}a5=parseInt(N2.slice(0,2),16);S6=parseInt(N2.slice(2,4),16);L8=parseInt(N2.slice(4,\"6\" ^ 0),\"16\" | 0);G2u.b$0(24);l0=G2u.o5B(\"0\",1);b_=0;R$=0;a5=parseInt((\"\" + a5).replace(/\\s/g,\"\"),\"10\" >> 0);S6=parseInt((\"\" + S6).replace(/\\s/g,\"\"),10);L8=parseInt((\"\" + L8).replace(/\\s/g,\"\"),10);if(a5 === null || S6 === null || L8 === null || isNaN(a5) || isNaN(S6) || isNaN(L8)){console.log(\"CIQ.hsv: invalid color :\",a6);return null;}if(a5 < 0 || S6 < 0 || L8 < 0 || a5 > 255 || S6 > 255 || L8 > 255){return null;}G2u.b$0(22);a5=G2u.j1j(a5,255);G2u.b$0(25);S6=G2u.o5B(S6,32,\"255\");G2u.P3q(22);L8=G2u.o5B(L8,255);F$=Math.min(a5,Math.min(S6,L8));C5=Math.max(a5,Math.max(S6,L8));if(F$ == C5){R$=F$;return [+\"0\",0,R$];}U6=a5 == F$?S6 - L8:L8 == F$?a5 - S6:L8 - a5;j1=a5 == F$?3:L8 == F$?1:5;G2u.P3q(26);l0=G2u.o5B(F$,U6,C5,j1,60);G2u.b$0(27);b_=G2u.o5B(F$,C5,C5);R$=C5;return [l0,b_,R$];};o9.hsl=function(g3){var W6,e9,d5,J1,r8,O9,v8,u_,l5,n1;W6=o9.colorToHex(g3);if(W6.substr(0,1) === (928.41 !== (5889,896.58)?288.99 > (133.17,991.21)?(2941,476.42) > (937.29,7350)?(8.61e+3,9.57e+3):+\"0x15fc\":\"#\":\"J\")){W6=W6.slice(1);}for(var T_=W6.length;T_ < 6;T_++){G2u.b$0(7);W6=G2u.o5B(W6,7090 === (1344,+\"6740\")?\"0xf08\" | 0:\"0\");}e9=parseInt(W6.slice(0,\"2\" >> 64),16);d5=parseInt(W6.slice(\"2\" | 0,4),16);J1=parseInt(W6.slice(+\"4\",6),16);e9/=255;d5/=255;J1/=+\"255\";r8=Math.max(e9,d5,J1);O9=Math.min(e9,d5,J1);G2u.b$0(28);l5=G2u.j1j(r8,O9,\"2\",1);if(r8 == O9){v8=u_=0;}else {G2u.P3q(3);n1=G2u.j1j(r8,O9);u_=l5 > 0.5?n1 / (+\"2\" - r8 - O9):n1 / (r8 + O9);switch(r8){case e9:G2u.P3q(11);v8=G2u.j1j(d5,J1,d5 < J1?6:0,n1);break;case d5:G2u.b$0(11);v8=G2u.j1j(J1,e9,2,n1);break;case J1:G2u.P3q(11);v8=G2u.j1j(e9,d5,4,n1);break;}v8/=6;}return [v8,u_,l5];};o9.hslToRgb=function(T5,Q3,y9){var U4,x8,v9,G7,T2,V8;if(Q3 === 0){U4=x8=v9=y9;}else {G7=function U0(x$,l6,B3){if(B3 < 0){B3+=1;}if(B3 > 1){B3-=1;}if(B3 < 1 / 6){G2u.b$0(29);return G2u.o5B(x$,6,l6,x$,B3);}if(B3 < 1 / 2){return l6;}if(B3 < 2 / +\"3\"){G2u.b$0(30);return G2u.o5B(2,3,6,B3,x$,l6,x$);}return x$;};T2=y9 < 0.5?y9 * (1 + Q3):y9 + Q3 - y9 * Q3;G2u.P3q(12);V8=G2u.j1j(y9,T2,2);G2u.b$0(31);U4=G7(V8,T2,G2u.j1j(3,T5,1));x8=G7(V8,T2,T5);G2u.b$0(32);v9=G7(V8,T2,G2u.o5B(\"1\",3,T5));}G2u.b$0(24);G2u.a3b();return [Math.round(G2u.o5B(U4,255)),Math.round(G2u.j1j(\"255\",x8,G2u.P3q(33))),Math.round(G2u.j1j(v9,255,G2u.b$0(24)))];};o9.chooseForegroundColor=function(j9){var J$,M_,a_,V_,l82,l5E,I_9,D7j;J$=o9.colorToHex(j9);M_=parseInt(J$.slice(1,3),\"16\" << 64);a_=parseInt(J$.slice(3,+\"5\"),16);V_=parseInt(J$.slice(5,7),16);l82=-+\"1532881248\";l5E=511952221;I_9=2;for(var P3z=1;G2u.n$o(P3z.toString(),P3z.toString().length,17874) !== l82;P3z++){D7j=\"#\";D7j+=\"000\";D7j+=\"000\";return (170768 - M_ - 593129 % a_) / (812355 / V_) <= (\"891\" | 83)?D7j:\"#000000\";}if(G2u.n$o(I_9.toString(),I_9.toString().length,4445) !== l5E){return \"0.2126\" * 1 * M_ + 0.7152 * a_ + 0.0722 * V_ < (\"100\" ^ 0)?\"#FFFFFF\":\"#000000\";}};o9.borderPatternToArray=function(o3,x9){var B6H,Q8w,U_S,F1p,g0G,K5g;B6H=\"\\\"; default\";B6H+=\"ing t\";B6H+=\"o \\\"s\";B6H+=\"olid\\\"\";Q8w=\"Unsup\";Q8w+=\"ported pattern \\\"\";U_S=\"n\";U_S+=\"on\";U_S+=\"e\";F1p=\"sol\";F1p+=\"id\";g0G=\"da\";g0G+=\"s\";g0G+=\"h\";g0G+=\"ed\";K5g=\"do\";K5g+=\"t\";K5g+=\"t\";K5g+=\"ed\";if(!x9){return [];}if(x9 instanceof Array){return x9;}if(x9 == K5g){return [o3,o3];}if(x9 == g0G){G2u.b$0(24);return [G2u.o5B(o3,5),G2u.j1j(o3,5)];}if(x9 != F1p && x9 != U_S){G2u.P3q(34);console.log(G2u.j1j(Q8w,B6H,x9));}G2u.a3b();return [];};o9.getBackgroundColor=function(t5){var L5,w8;L5=null;while(!L5 || o9.isTransparent(L5)){w8=getComputedStyle(t5);if(!w8){return;}L5=w8.backgroundColor;if(o9.isTransparent(L5)){L5=\"transparent\";}t5=t5.parentNode || t5.getRootNode().host;if(!t5 || !t5.tagName)break;}if(!L5 || L5 == \"transparent\"){L5=\"#FFFFFF\";}return L5;};};c3=w3=>{var V_2=x2w9K;var p$W,g22,e_,y5;p$W=\"Au\";p$W+=\"g\";g22=\"J\";g22+=\"u\";g22+=\"l\";e_=w3.CIQ;y5=w3.timezoneJS;e_.monthLetters=[7517 <= \"936.67\" * 1?!![]:(2520,654.32) >= (342.54,\"315\" * 1)?(3356,1784) != \"204.6\" * 1?\"J\":(0x14a5,201.34):0x1c57,\"F\",(1138,337.87) <= (9570,201.84)?+\"556.03\":\"M\",\"A\",(9830,+\"5724\") >= (294.45,7800)?+\"9120\" !== +\"1103\"?(9026,7160) >= 5640?683.75:+\"0x13ee\":\"t\":\"M\",\"J\",(369.55,3925) < (6260,\"106.89\" - 0)?2.33e+3:\"J\",5240 != +\"809.12\"?\"A\":249.2 <= 2704?(7267,318.33) >= \"2764\" - 0?(!!({}),!\"1\"):(\"H\",9.84e+2):0xcc9,349.6 <= 8960?\"S\":(971.21,0x1b6b),799.86 >= 699.7?\"O\":(0x995,2.70e+3),\"N\",2360 != 730.88?6120 <= +\"5170\"?+\"0x1c32\":\"D\":0x128c];e_.monthAbv=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",g22,p$W,\"Sep\",\"Oct\",\"Nov\",\"Dec\"];e_.MILLISECOND=1;e_.SECOND=1000;V_2.b$0(3);var F5_=V_2.j1j(80,20);e_.MINUTE=F5_ * e_.SECOND;V_2.P3q(35);var h0f=V_2.o5B(65,12,53,59);e_.HOUR=h0f * e_.MINUTE;V_2.P3q(36);var A_P=V_2.j1j(1,33,2,11);e_.DAY=A_P * e_.HOUR;V_2.b$0(37);var j1v=V_2.o5B(18,1,8,1,4);e_.WEEK=j1v * e_.DAY;V_2.P3q(12);var y5H=V_2.o5B(5,84,23);e_.MONTH=y5H * e_.DAY;V_2.b$0(38);var J$H=V_2.j1j(362,1464,2562,7);e_.YEAR=J$H * e_.DAY;V_2.P3q(7);var G4S=V_2.j1j(5,2);e_.DECADE=(\"10\" ^ 0) * e_.YEAR - G4S * e_.DAY;e_.yyyymmddhhmmssmmmrx=new RegExp(\"\\\\d{17}\");e_.strToDateTime=function(P0){var Z1,I7,g$,d$,r9,w6,a3,L9,H5,p4,H4,N1,u9,m5k,c1X,b0,C3;if(!P0 || P0.getFullYear){return P0;}Z1=[];if(P0.length == \"12\" - 0 || P0.length == 14){I7=parseFloat(P0.substring(0,4));V_2.b$0(7);var z1D=V_2.o5B(3,1);V_2.P3q(20);var s0A=V_2.j1j(15,0,9);V_2.P3q(39);var t4I=V_2.o5B(5,20,14);g$=parseFloat(P0.substring(z1D,s0A)) - t4I;d$=parseFloat(P0.substring(6,8));r9=parseFloat(P0.substring(8,10));w6=parseFloat(P0.substring(10,12));a3=parseFloat(P0.substring(12,\"14\" ^ 0)) || 0;return new Date(I7,g$,d$,r9,w6,a3,0);}else if(e_.yyyymmddhhmmssmmmrx.test(P0)){I7=parseFloat(P0.substring(\"0\" | 0,4));V_2.P3q(3);var V6c=V_2.j1j(21,15);V_2.b$0(3);var X2D=V_2.o5B(17,16);g$=parseFloat(P0.substring(+\"4\",V6c)) - X2D;d$=parseFloat(P0.substring(6,8));r9=parseFloat(P0.substring(8,10));w6=parseFloat(P0.substring(10,12));a3=parseFloat(P0.substring(12,14));L9=parseFloat(P0.substring(\"14\" << 0,+\"17\"));return new Date(I7,g$,d$,r9,w6,a3,L9);}H5=[P0];p4=P0.indexOf((9279,872) >= 9230?5393 == 51.84?0x1611:(!\"1\",\"N\"):\"T\");if(p4 != -1){H4=P0.substring(p4);if(H4.indexOf((295,3632) < 874.79?(9640,7655) === (7220,806.63)?151:2.79e+2:\"Z\") != -1 || H4.indexOf((992.66,471) >= (4340,\"890.81\" * 1)?(!![],0x4f3):\"-\") != -1 || H4.indexOf(\"+\") != -1){return new Date(P0);}H5=P0.split(\"T\");}else if(P0.indexOf((8950,347) !== 7772?\" \":+\"546.17\") != -1){H5=P0.split(\" \");}if(H5[0].indexOf(\"/\") != -1){Z1=H5[0].split(\"/\");}else if(H5[0].indexOf((984.29,834.79) !== (650.92,958.21)?(2077,5210) !== 657.75?\"-\":(6514,\"8160\" * 1) < (396.58,4709)?(939.28,![]):(+\"0x26ba\",\"L\"):+\"1.68e+3\") != -1){Z1=H5[0].split(\"-\");}else {return e_.strToDate(P0);}N1=parseFloat(Z1[2],10);if(Z1[0] && Z1[0].length == \"4\" * 1){N1=parseFloat(Z1[0],10);Z1[0]=Z1[1];Z1[1]=Z1[2];}if(H5.length > 1){u9=H5[2];H5=H5[+\"1\"].split((3685,2360) != \"3451\" << 64?(7020,3760) !== (8926,297)?\":\":+\"718.09\" != (8122,6624)?(8.52e+2,\"c\"):(!1,!!({})):0x134e);if(u9){m5k=\"A\";m5k+=\"M\";c1X=\"1\";c1X+=\"2\";if(H5[0] == c1X && u9.toUpperCase() == m5k){H5[0]=0;}else if(H5[0] != \"12\" && u9.toUpperCase() == \"PM\"){V_2.b$0(7);var B3Q=V_2.j1j(9,1);V_2.b$0(40);var H2x=V_2.j1j(9,3,18,144,2421);H5[0]=parseInt(H5[0],B3Q) + H2x;}}V_2.P3q(24);b0=V_2.o5B(\"0\",1);C3=0;if(H5.length == 3){if(H5[2].indexOf(6610 < 796?(!!\"1\",0x23ec):\".\") == -1){b0=parseInt(H5[2],10);}else {b0=H5[2].split(193.89 === (2670,409.61)?!\"\":+\"100.36\" >= 6222?0xda5:\"688\" >> 32 == (8101,\"8580\" * 1)?(111.26,2.30e+3):\".\");if(b0[1].length == 3){V_2.P3q(41);C3=b0[V_2.j1j(\"1\",0)];b0=b0[0];}}}V_2.b$0(42);var J6k=V_2.j1j(0,3,4,13);V_2.b$0(24);return new Date(N1,Z1[0] - J6k,Z1[V_2.j1j(\"1\",1)],H5[V_2.o5B(\"0\",0,V_2.b$0(41))],H5[1],b0,C3);}V_2.P3q(12);var f$M=V_2.j1j(6,119,20);return new Date(N1,Z1[0] - f$M,Z1[1],0,0,0,0);};e_.strToDate=function(G$){var F2,Q9;if(G$.indexOf(\"/\") != -1){F2=G$.split(\"/\");}else if(G$.indexOf(4160 < (62.59,7828)?\"-\":8775 === (9740,9982)?172.14:0x46c) != -1){F2=G$.split(\"-\");}else if(G$.length >= 8){V_2.P3q(43);var b4$=V_2.o5B(577,17,17,2,1);return new Date(parseFloat(G$.substring(0,4)),parseFloat(G$.substring(+\"4\",+\"6\")) - b4$,parseFloat(G$.substring(6,8)));}else {return new Date();}if(F2.length < 3){return new Date();}if(F2[2].indexOf(80 !== 623.01?\" \":(\"o\",!!1)) != -1){F2[2]=F2[2].substring(0,F2[\"2\" * 1].indexOf(2055 > (1026,2600)?(6.86e+2,!!\"1\"):941.49 == 1950?490.26 > (+\"209.74\",2340)?(\"d\",3.93e+3):\"J\":\" \"));}else if(F2[+\"2\"].indexOf((1970,\"1887\" * 1) > 3345?(\"z\",0x1020):294.74 < +\"739.4\"?\"T\":(783.48,879.12) <= 9500?![]:(!!\"\",973.95)) != -1){V_2.b$0(44);F2[2]=F2[\"2\" - 0].substring(V_2.j1j(0,\"0\"),F2[2].indexOf(\"T\"));}Q9=parseFloat(F2[2],10);if(Q9 < 20){Q9+=2000;}if(F2[+\"0\"].length == 4){Q9=parseFloat(F2[0],10);F2[0]=F2[1];F2[1]=F2[+\"2\"];}V_2.a3b();V_2.P3q(11);var G3b=V_2.o5B(0,15,6,3);return new Date(Q9,F2[0] - G3b,F2[1]);};e_.dateToStr=function(c$,l4){var T_Q,k7X,s5,e1,k6,N9;T_Q=\"S\";T_Q+=\"S\";T_Q+=\"S\";k7X=\"d\";k7X+=\"d\";s5=h9=>{return l4.includes(h9);};e1=(l1,M2 = 2)=>{return ((\"0\").repeat(M2) + l1).slice(-M2);};k6=(K9,V5)=>{return l4=l4.replace(K9,V5);};N9=(o4,s_)=>{V_2.a3b();return o4 > s_?o4 - s_:o4;};if(s5(\"YYYY\")){k6(/YYYY/g,c$.getFullYear());}if(s5(\"MM\")){k6(/MM/g,e1(c$.getMonth() + 1));}if(s5(k7X)){k6(/dd/g,e1(c$.getDate()));}if(s5(\"HH\")){k6(/HH/g,e1(c$.getHours()));}if(s5(\"hh\")){k6(/hh/g,e1(N9(c$.getHours() || 12,12)));}V_2.a3b();if(s5(\"mm\")){k6(/mm/g,e1(c$.getMinutes()));}if(s5(\"ss\")){k6(/ss/g,e1(c$.getSeconds()));}if(s5(T_Q)){k6(/SSS/g,e1(c$.getMilliseconds(),3));}return l4;};e_.mmddyyyy=function(r1){var v5,s9;if(typeof r1 === \"string\"){r1=e_.strToDate(r1);}V_2.b$0(0);var d8M=V_2.o5B(12,11,0);v5=r1.getMonth() + d8M;if(v5 < 10){V_2.P3q(7);v5=V_2.o5B(v5,473.78 <= (5530,\"7918\" >> 96)?(7242,4250) != (6880,522.64)?\"0\":!!({}):(0x219a,!\"\"));}s9=r1.getDate();if(s9 < +\"10\"){V_2.b$0(7);s9=V_2.o5B(s9,433.8 > 3801?(+\"6599\",8012) <= (549.55,+\"7205\")?\"E\":(!!\"1\",181.35):\"0\");}V_2.b$0(14);var d$u=V_2.o5B(56176,62420,2);V_2.P3q(45);var F6w=V_2.j1j(9918,128960,64480);V_2.b$0(46);var K4o=V_2.o5B(9045,8,20,9,8071);V_2.P3q(47);var E4a=V_2.j1j(77919,6,4083,25973);V_2.b$0(48);var M8O=V_2.o5B(20,9,504,5,15140);V_2.b$0(7);var A6w=V_2.j1j(10,8079);V_2.P3q(3);var Z_2=V_2.o5B(270,18);V_2.b$0(3);var B98=V_2.o5B(647,20);return v5 + ((+\"2902\",\"1496\" ^ 0) !== +\"4955\"?(d$u,F6w) <= K4o?931.88:\"/\":\"t\") + s9 + (E4a < M8O?377.3 !== A6w?\"/\":Z_2 == \"1997\" >> 0?(![],B98):\"S\":(371.42,\"4.70e+3\" >> 0)) + r1.getFullYear();};e_.yyyymmdd=function(f4){var J6,f9;J6=f4.getMonth() + +\"1\";if(J6 < \"10\" * 1){V_2.P3q(7);J6=V_2.j1j(J6,(2830,4660) != (8014,8340)?\"0\":0x27);}f9=f4.getDate();if(f9 < 10){V_2.P3q(7);f9=V_2.o5B(f9,\"0\");}V_2.b$0(7);var y7c=V_2.o5B(16,6004);V_2.P3q(0);var B_w=V_2.o5B(20,45540,51210);return f4.getFullYear() + (77.27 == y7c?(!0,B_w):\"-\") + J6 + \"-\" + f9;};e_.hhmm=function(P3){var m5,W9;m5=P3.getHours();if(m5 < 10){V_2.P3q(7);m5=V_2.o5B(m5,\"0\");}W9=P3.getMinutes();if(W9 < 10){V_2.b$0(7);W9=V_2.j1j(W9,\"0\");}V_2.b$0(34);return V_2.o5B(m5,W9,+\"8191\" != (5910,+\"784.98\")?2843 > (2780,7060)?+\"3840\" == 4940?(!0,+\"0x28e\"):678.72:\":\":0xf49);};e_.hhmmss=function(N$){var X3;V_2.V8b();X3=N$.getSeconds();if(X3 < 10){V_2.b$0(7);X3=V_2.o5B(X3,\"0\");}return e_.hhmm(N$) + \":\" + X3;};e_.yyyymmddhhmm=function(B9){V_2.a3b();return e_.yyyymmddhhmmssmmm(B9).substr(0,+\"12\");};e_.yyyymmddhhmmssmmm=function(c5){var z78,g9,Y$,q_,k2,W$,T9;z78=\"0\";z78+=\"0\";V_2.b$0(49);var b7S=V_2.j1j(7,4,28,5);g9=c5.getMonth() + b7S;if(g9 < +\"10\"){V_2.P3q(7);g9=V_2.j1j(g9,(\"6548\" - 0,511.35) < +\"3980\"?\"0\":(0x159b,457.26));}Y$=c5.getDate();if(Y$ < 10){V_2.b$0(7);Y$=V_2.o5B(Y$,342.64 <= (4596,5811)?(6560,6680) === (2660,1763)?190.33:\"0\":\"D\");}q_=c5.getHours();if(q_ < 10){V_2.b$0(7);q_=V_2.o5B(q_,\"0\");}k2=c5.getMinutes();V_2.a3b();if(k2 < 10){V_2.P3q(7);k2=V_2.j1j(k2,4878 > (+\"6050\",7370)?573.32:\"0\");}W$=c5.getSeconds();if(W$ < 10){V_2.b$0(7);W$=V_2.j1j(W$,\"0\");}T9=c5.getMilliseconds();if(T9 < 10){V_2.P3q(7);T9=V_2.j1j(T9,z78);}else if(T9 < 100){V_2.b$0(7);T9=V_2.o5B(T9,\"0\");}return \"\" + c5.getFullYear() + g9 + Y$ + q_ + k2 + W$ + T9;};e_.friendlyDate=function(m8){return e_.dateToStr(m8,\"YYYY/MM/dd HH:mm\");};e_.mmddhhmm=function(I4){var C07,b$u,b0G,O6,k$,L6,l7,J_,S2,g_;C07=\"00\";C07+=\"0\";b$u=\"0\";b$u+=\"0\";b0G=\"0\";b0G+=\"0\";O6=e_.strToDateTime(I4);k$=O6.getMonth() + +\"1\";if(k$ < 10){V_2.b$0(7);k$=V_2.o5B(k$,+\"2534\" === 74.71?(!![],0x9e7):\"0\");}L6=O6.getDate();if(L6 < 10){V_2.b$0(7);L6=V_2.j1j(L6,(6850,\"513\" >> 32) < 867.66?\"0\":(7.89e+3,0xbc1));}l7=O6.getHours();if(l7 < 10){V_2.b$0(7);l7=V_2.j1j(l7,(\"660.16\" - 0,9360) == 7740?\"0x1248\" | 0:(1660,274.33) != (7723,\"5115\" << 32)?\"0\":6993 >= (\"871.8\" - 0,889.4)?668.48:0x88c);}J_=O6.getMinutes();if(J_ < 10){V_2.b$0(7);J_=V_2.j1j(J_,(7309,2975) > (369,4090)?0x2685:\"0\");}S2=O6.getSeconds();if(S2 < 10){V_2.b$0(7);S2=V_2.o5B(S2,903.59 <= 4227?\"0\":2830 !== (4640,\"9353\" << 0)?6.46e+3:0x184e);}g_=O6.getMilliseconds();if(g_ < 10){V_2.b$0(7);g_=V_2.j1j(g_,b0G);}else if(g_ < 100){V_2.P3q(7);g_=V_2.o5B(g_,(4470,\"813.45\" * 1) <= (6786,9800)?\"0\":(5201,8707) >= 6460?(0x7e0,!!({})):9.62e+3);}V_2.V8b();if(l7 == \"00\" && J_ == \"00\" && S2 == b$u && g_ == \"000\"){V_2.P3q(3);var g9l=V_2.j1j(5840,2920);V_2.P3q(3);var U8k=V_2.j1j(8973,10);V_2.P3q(3);var m5l=V_2.j1j(9194,19);V_2.b$0(3);var e3v=V_2.o5B(62900,56610);V_2.b$0(38);var Z30=V_2.o5B(6012,528,8,13);V_2.P3q(3);var o9p=V_2.j1j(2310,10);return k$ + (g9l != U8k?\"-\":\"D\") + L6 + ((+\"822.93\",m5l) != 666.55?e3v > +\"489.68\"?(161.7,482.89) != (Z30,+\"399.06\")?\"-\":o9p:(!1,+\"375.63\"):\"K\") + O6.getFullYear();}if(S2 == \"00\" && g_ == C07){V_2.b$0(50);return V_2.j1j(\"-\",L6,l7,J_,\" \",906 === (\"7289\" ^ 0)?\"85.47\" - 0:\":\",k$);}if(g_ == \"000\"){V_2.b$0(51);return V_2.j1j(J_,k$,L6,l7,+\"8730\" !== +\"7030\"?(+\"9840\",3820) != (9931,239.65)?\" \":9.10e+1:195.03,(8564,140.5) <= 1922?(\"2620\" - 0,7960) <= (332.82,8116)?\"-\":(9.55e+2,9.26e+3):0x42,(461,1925) === 31.64?6310 === 855?518.79:(+\"7102\",792.92) <= 3368?(\"C\",800.02):\"H\":\":\",\":\",S2);}V_2.P3q(52);return V_2.o5B(k$,l7,L6,\":\",g_,\"-\",3691 == 8584?(7757,\"4825\" - 0) !== (1660,\"183\" | 6)?(8430,8810) < (6610,3931)?0x188a:(\"U\",0x1139):(664.84,!!\"\"):\" \",\":\",S2,J_,+\"9833\" === 3159?7550 >= (118.95,1757)?(2940,6417) > (4365,590.24)?(0x1cd6,6.43e+3):(!({}),!\"1\"):(+\"0x128f\",32):\":\");};e_.getYearDay=function(o$){var m3,J4,z2,p_,A_;m3=o$;if(!m3){m3=new Date();}V_2.b$0(24);m3.setHours(V_2.j1j(\"0\",1),0,0,0);J4=new Date(m3.getFullYear(),0,0);V_2.b$0(3);z2=V_2.j1j(m3,J4);V_2.b$0(53);V_2.a3b();p_=V_2.j1j(24,\"60\",60,1000);V_2.b$0(22);A_=Math.round(V_2.j1j(z2,p_));return A_;};e_.getETDateTime=function(){var T1;T1=new Date();V_2.V8b();return e_.convertTimeZone(new Date(T1.getTime() + T1.getTimezoneOffset() * 60000),\"UTC\",\"America/New_York\");};e_.fromET=function(N_){V_2.a3b();var N5,I2,i6,P6;N5=new Date();V_2.b$0(44);I2=V_2.o5B(0,\"4\");if(N5.getMonth() < 2 || N5.getMonth() == 2 && N5.getDate() < 11 || N5.getMonth() > +\"10\" || N5.getMonth() == 10 && N5.getDate() >= 4){I2=5;}i6=N_.getTime() + +\"3600000\" * I2;P6=new Date(i6);return P6;};e_.monthAsDisplay=function(Y4,d7,E$){if(d7){if(E$ && E$.monthLetters){return E$.monthLetters[Y4];}return e_.monthLetters[Y4];}if(E$ && E$.monthAbv){return E$.monthAbv[Y4];}return e_.monthAbv[Y4];};e_.timeAsDisplay=function(u$,X5,S8){var D0,M4,D3,e7,e8p,t4;D0=X5?X5.internationalizer:null;if(D0){if(S8 == e_.SECOND){return D0.hourMinuteSecond.format(u$);}else if(S8 == e_.MILLISECOND){V_2.b$0(7);var a66=V_2.j1j(3075,205);V_2.b$0(0);var F8v=V_2.j1j(16,0,3049);V_2.P3q(54);var d8G=V_2.j1j(22,7,2609,154);V_2.b$0(45);var E4C=V_2.j1j(9133,9121,1303);V_2.b$0(55);var W6p=V_2.j1j(18,6276,106532,9);V_2.b$0(56);var i0k=V_2.o5B(16,1080,14,6478);V_2.P3q(7);var q7J=V_2.o5B(2,2028);return D0.hourMinuteSecond.format(u$) + ((a66,+\"5071\") > (F8v,d8G)?E4C > (W6p,i0k)?\".\":(q7J,979.45):(\"j\",!1)) + u$.getMilliseconds();}return D0.hourMinute.format(u$);}M4=u$.getMinutes();if(M4 < +\"10\"){V_2.b$0(7);M4=V_2.o5B(M4,+\"715.42\" == (6362,+\"203.18\")?(+\"5160\",746.18) === 332.16?(!\"\",444.22):490.19 < \"6890\" >> 64?\"j\":(\"730.50\" - 0,0xa):\"0\");}D3=u$.getHours() + \":\" + M4;e7=\"\";if(S8 <= e_.SECOND){e7=u$.getSeconds();if(e7 < 10){V_2.b$0(7);e7=V_2.j1j(e7,8602 == 1740?3.33e+3:44.43 != (3910,138.37)?\"0\":(\"6871\" ^ 0) >= (3680,349)?\"F\":(592.54,+\"0x1b31\"));}V_2.b$0(7);D3+=V_2.j1j(e7,81.67 === (466.6,960.98)?(!!({}),551.63):(\"3240\" - 0,8740) < 7663?(\"J\",9.43e+3):(687.21,+\"3428\") <= 627.87?(!!0,\"o\"):\":\");}if(S8 == e_.MILLISECOND){e8p=\"0\";e8p+=\"0\";t4=u$.getMilliseconds();if(t4 < 10){V_2.b$0(7);t4=V_2.j1j(t4,e8p);}else if(t4 < 100){V_2.P3q(7);t4=V_2.o5B(t4,\"0\");}V_2.P3q(7);D3+=V_2.j1j(t4,\".\");}return D3;};e_.displayableDate=function(N3,b$,F0,m4){var G5,T0,s3,Y_,c_,i7,u7,e$,f_,f0,H6,z1;G5=\"\";T0=N3.layout.interval;s3=e_.ChartEngine.isDailyInterval(T0);Y_=b$.xAxis.activeTimeUnit && b$.xAxis.activeTimeUnit <= e_.SECOND || N3.layout.timeUnit == \"second\";c_=T0 === \"tick\" || b$.xAxis.activeTimeUnit && b$.xAxis.activeTimeUnit <= e_.MILLISECOND || N3.layout.timeUnit == \"millisecond\";function y8(C0){if(C0 < +\"10\"){V_2.b$0(7);return V_2.o5B(C0,566 === (+\"5780\",+\"6130\")?(893.16,\"926\" - 0) == 9059?0x1166:(9733,+\"41.98\") !== 654.1?(\"g\",!![]):(0x824,\"604.14\" - 0):\"0\");}return C0;}if(b$.xAxis.formatter){G5=b$.xAxis.formatter(F0);}else if(N3.internationalizer){G5=N3.internationalizer.monthDay.format(F0);if(Y_ || c_){G5+=\" \" + N3.internationalizer.hourMinuteSecond.format(F0);if(c_){G5+=\".\" + F0.getMilliseconds();}}else if(!s3){if(m4){G5=N3.internationalizer.yearMonthDay.format(F0);}G5+=\" \" + N3.internationalizer.hourMinute.format(F0);}else {if(T0 == \"month\"){G5=N3.internationalizer.yearMonth.format(F0);}else {G5=N3.internationalizer.yearMonthDay.format(F0);}}}else {i7=y8(F0.getMonth() + (\"1\" << 0));u7=y8(F0.getDate());e$=y8(F0.getHours());f_=y8(F0.getMinutes());if(s3){G5=T0 == \"month\"?i7 + (\"3629\" << 64 === (1036,787.57)?+\"9294\" >= (1.67,3316)?(768.52,0x1e62):(434.58,!!({})):\"/\"):i7 + \"/\" + u7 + \"/\";G5+=F0.getFullYear();}else {V_2.P3q(34);f0=V_2.j1j(i7,u7,\"/\");if(m4){V_2.b$0(3);var V_E=V_2.o5B(5,4);V_2.P3q(12);var J9t=V_2.o5B(5,129800,26400);V_2.P3q(57);var w5X=V_2.o5B(10,2,9072,9058,4519);V_2.P3q(58);var h9V=V_2.j1j(2799,16,8,3296,824);V_2.b$0(59);var X75=V_2.j1j(18,3695,4,12963,9);f0+=((\"6551\" * V_E,J9t) != 411.91?\"/\":(+\"209\",w5X) < h9V?X75:(!\"1\",595.26)) + F0.getFullYear();}V_2.b$0(60);G5=V_2.o5B(f_,\":\",6617 !== +\"970.07\"?239.63 !== (2286,394.07)?\" \":\"s\":(0x185d,\"D\"),e$,f0);if(Y_ || c_){H6=y8(F0.getSeconds());V_2.P3q(7);G5+=V_2.o5B(H6,+\"682\" != 517.92?\":\":9790 == (643.61,1618)?0x1725:(8.35e+3,\"0x1d65\" << 64));if(c_){z1=y8(F0.getMilliseconds());if(z1 < 100){V_2.b$0(7);z1=V_2.j1j(z1,\"0\");}V_2.b$0(7);G5+=V_2.j1j(z1,+\"7840\" <= (22.06,177)?\"730.40\" * 1:\":\");}}}}return G5;};e_.convertTimeZone=function(B0,L1,J3){var P2;if(!y5.Date){return B0;}P2=new y5.Date(B0.getFullYear(),B0.getMonth(),B0.getDate(),B0.getHours(),B0.getMinutes(),B0.getSeconds(),B0.getMilliseconds(),L1);P2.setTimezone(J3);return P2;};e_.convertToLocalTime=function(Z9,n9){var k_,X9,b5;if(!y5.Date){return Z9;}k_=Z9.getSeconds();X9=Z9.getMilliseconds();b5=new y5.Date(Z9.getFullYear(),Z9.getMonth(),Z9.getDate(),Z9.getHours(),Z9.getMinutes(),n9);V_2.b$0(61);var n2Z=V_2.j1j(9,2012,1004,3);return new Date(b5.getTime() + k_ * n2Z + X9);};};C2=a2=>{var Z8E,R_,l_,o7,h8,s5r;Z8E=\"unde\";Z8E+=\"fi\";Z8E+=\"ned\";if(!a2.SplinePlotter){a2.SplinePlotter={};}R_=a2.CIQ;l_=a2.SplinePlotter;o7=function(Q4,E3){var t6;if(!E3){return document.getElementById(Q4);}if(E3.id == Q4){return E3;}if(!E3.hasChildNodes){return null;}for(var H$=0;H$ < E3.childNodes.length;H$++){t6=o7(Q4,E3.childNodes[H$]);if(t6){return t6;}}return null;};a2.$$=o7;h8=function(z$,n4){if(!n4){n4=document;}x2w9K.a3b();return n4.querySelectorAll(z$)[x2w9K.o5B(\"0\",0,x2w9K.b$0(3))];};a2.$$$=h8;R_.wheelEvent=(function(){var d46;d46=\"DOMMouseS\";d46+=\"croll\";if(typeof document === \"undefined\"){return undefined;}if(R_.isIE || (\"onwheel\" in document.createElement(\"div\"))){return \"wheel\";}x2w9K.V8b();if(document.onmousewheel !== undefined){return \"mousewheel\";}return d46;})();R_.newChild=function(Q$,I8,D1,R1){var g8;g8=document.createElement(I8);if(D1){g8.className=D1;}Q$.appendChild(g8);if(R1){g8.innerHTML=R1;}x2w9K.a3b();return g8;};R_.innerHTML=function(v3,v1){x2w9K.V8b();if(window.MSApp && window.MSApp.execUnsafeLocalFunction){window.MSApp.execUnsafeLocalFunction(function(){x2w9K.a3b();v3.innerHTML=v1;});}else {v3.innerHTML=v1;}};R_.focus=function(v_,B5){var R0;if(R_.isSurface || B5){R0=0;if(!isNaN(parseInt(B5,10))){R0=B5;}setTimeout(function(){v_.focus();},R0);}else {v_.focus();}};R_.blur=function(L4){if(!L4){L4=document.activeElement;}if(L4){L4.blur();}window.focus();};R_.findNodesByText=function(F1,A5){var E1,I6;if(F1.innerHTML == A5){return [F1];}E1=[];x2w9K.V8b();for(var Y8=0;Y8 < F1.childNodes.length;Y8++){I6=R_.findNodesByText(F1.childNodes[Y8],A5);if(I6){E1=E1.concat(I6);}}if(E1.length){return E1;}return null;};R_.hideByText=function(W3,i9){var c4;c4=R_.findNodesByText(W3,i9);for(var O0=0;O0 < c4.length;O0++){c4[O0].style.display=\"none\";}};R_.pageHeight=function(R6){var n2c,B35,n7d;var {innerHeight:X7, top:l8, parent:Q_, self:X$}=R6 || window;if(l8 != X$){try{n2c=124246055;B35=+\"103847053\";n7d=2;for(var I81=1;x2w9K.P8Y(I81.toString(),I81.toString().length,17268) !== n2c;I81++){if(X7 < Q_.innerHeight){X7=Q_.innerHeight;}n7d+=+\"2\";}if(x2w9K.n$o(n7d.toString(),n7d.toString().length,\"57816\" * 1) !== B35){if(X7 > Q_.innerHeight){X7=Q_.innerHeight;}}}catch(i8){}}return X7;};R_.pageWidth=function(Y7){var {innerWidth:d4, top:v2, parent:v7, self:d2}=Y7 || window;x2w9K.a3b();if(v2 != d2){try{if(d4 > v7.innerWidth){d4=v7.innerWidth;}}catch(h1){}}return d4;};R_.stripPX=function(e6){if(!e6){return 0;}x2w9K.a3b();if(typeof e6 == \"number\"){return e6;}return parseInt(e6.substr(0,e6.indexOf(\"p\")),\"10\" - 0);};R_.withinElement=function(r3,D_,F4){var H_;H_=r3.getBoundingClientRect();if(D_ <= H_.left){return !({});}if(F4 <= H_.top){return !({});}if(D_ >= H_.left + r3.offsetWidth){return !1;}if(F4 >= H_.top + r3.offsetHeight){return !({});}x2w9K.a3b();return !!({});};R_.efficientDOMUpdate=function(x7,A6,A$){if(x7[A6] !== A$){x7[A6]=A$;return !![];}x2w9K.a3b();return ![];};R_.cqvirtual=function(j$){var K2;if(!j$){return;}K2=j$.cloneNode(!![]);K2.innerHTML=\"\";K2.original=j$;return K2;};R_.cqrender=function(B4){var h6;if(!B4){return;}if(B4.innerHTML == B4.original.innerHTML){return B4.original;}R_.removeChildIfNot(B4.original,\"template\");x2w9K.a3b();h6=Array.from(B4.children);if(h6.length){h6.forEach(function(O1){x2w9K.V8b();B4.original.appendChild(B4.removeChild(O1));});}return B4.original;};R_.removeChildIfNot=function(I0,V7){var J0;J0=Array.from(I0.children);if(J0.length){J0.forEach(function(a8){x2w9K.V8b();if(!V7 || !a8.matches(V7)){I0.removeChild(a8);}});}return I0;};R_.safeMouseOut=function(Z0,d0){var Q5V;Q5V=\"m\";function G4(V9,q9){x2w9K.a3b();return function(b8){var R$T;R$T=\"undefine\";R$T+=\"d\";if(typeof b8.pageX == R$T){b8.pageX=b8.clientX;b8.pageY=b8.clientY;}if(R_.withinElement(V9,b8.pageX,b8.pageY)){return;}V9.stxMouseOver=![];q9(b8);};}Q5V+=\"ous\";Q5V+=\"eo\";Q5V+=\"ut\";Z0.addEventListener(Q5V,G4(Z0,d0));};R_.safeMouseOver=function(P4,G3){var v9j=x2w9K;var b4I,D2F,l7u;b4I=-1879387253;v9j.P3q(41);v9j.a3b();D2F=v9j.o5B(\"1718312441\",0);l7u=2;function t7(Q6,X6){return function(z4){var S0q;S0q=\"u\";S0q+=\"nd\";S0q+=\"efined\";v9j.a3b();if(typeof z4.pageX == S0q){z4.pageX=z4.clientX;z4.pageY=z4.clientY;}if(R_.withinElement(Q6,z4.pageX,z4.pageY)){if(Q6.stxMouseOver){return;}Q6.stxMouseOver=!!({});X6(z4);}};}for(var f9b=1;v9j.n$o(f9b.toString(),f9b.toString().length,71840) !== b4I;f9b++){P4.addEventListener(\"\",t7(P4,G3));l7u+=2;}if(v9j.P8Y(l7u.toString(),l7u.toString().length,65224) !== D2F){P4.addEventListener(\"mouseover\",t7(P4,G3));}};R_.installTapEvent=function(w_,C9){var L3;L3=function(Z8){var h3,O5;if(Z8 instanceof CustomEvent){return;}h3=new Event(\"stxtap\",{bubbles:!!1,cancelable:!!\"1\",composed:!\"\"});if(typeof Z8.pageX == \"undefined\"){Z8.pageX=Z8.clientX;Z8.pageY=Z8.clientY;}x2w9K.a3b();h3.pageX=Z8.pageX;h3.pageY=Z8.pageY;h3.ciqStamp=Math.max(w_.ownerDocument.lastTap || 0,Z8.timeStamp);O5=Z8.target.closest(\"cq-context, cq-dialog, cq-dialogs, .cq-dialogs, [cq-lift]\");if(!O5){return;}if(Z8.target.tabIndex !== 0){x2w9K.b$0(62);Z8.target.tabIndex=-x2w9K.j1j(64,\"1\");}Z8.target.focus();Z8.target.dispatchEvent(h3);w_.ownerDocument.lastTap=h3.ciqStamp;if(C9 && C9.stopPropagation || !Z8.isTrusted && h3._cancelBubble){Z8.stopPropagation();}};R_.safeClickTouch(w_,L3,C9);};R_.safeClickTouch=function(K1,C_,P$){var F2U=x2w9K;var Z7,I$,m6,w$H,h_$;function p3(E8,r0){F2U.a3b();return function(y$){var Y3,c9,H0,B_Z,A4;Y3=Date.now();c9=y$.clientX !== undefined?y$.clientX:y$.pageX;F2U.a3b();H0=y$.clientY !== undefined?y$.clientY:y$.pageY;Z7.div=K1;Z7.e=y$;if(E8){R_.extend(Z7,{down:Y3,x:c9,y:H0});}else {B_Z=\"tou\";B_Z+=\"ch\";A4=y$.touches || y$.pointerType === B_Z?15:5;if(r0 && Z7.down && Z7.down + 1000 >= Y3 && (Z7.x === undefined || R_.withinRadius(Z7,{x:c9,y:H0},A4))){r0(y$);}Z7.up=Date.now();[440.11 != (2110,974.02)?\"x\":5073 != (1330,9457)?548.01 <= (7.36,2080)?(9.11e+3,\"159.83\" * 1):!!({}):(0x1044,966.54),7230 === (\"4600\" * 1,966)?0x81b:\"y\",\"down\"].forEach(U7=>{F2U.V8b();return delete Z7[U7];});}};}if(!P$){P$={};}F2U.a3b();Z7={};if(!P$.allowMultiple){R_.clearSafeClickTouches(K1);}if(P$.preventUnderlayClick !== !1){P$.preventUnderlayClick=!!({});}if(P$.absorbDownEvent !== ![]){P$.absorbDownEvent=!!({});}function K_(F5,R9){F2U.a3b();return function(F_){var Z9j,p7;if(F_.detail && F_.detail.emitter){return;}if(!R_.safeClickTouchEvent){Z9j=\"cli\";Z9j+=\"ck\";if(R9 && F5 === Z9j){if(K1.ownerDocument.ciqHoverState === \"touch\"){return;}var {up:W5}=Z7;p7=W5 && W5 + 300 > Date.now();delete Z7.up;if(p7){return;}}}if(P$.safety && P$.safety.recentlyDragged){return;}if(F_.button && F_.button >= \"2\" * 1){return;}if(P$.preventUnderlayClick){if(F_.target.tagName !== \"INPUT\"){F_.preventDefault();}}else {if(P$.lastType != F5 && Date.now() < P$.allowAnotherDevice){return;}P$.lastType=F5;F2U.P3q(47);var p3u=F2U.o5B(125,3,985,25);P$.allowAnotherDevice=Date.now() + p3u;}C_(F_);};}P$.allowAnotherDevice=0;P$.registeredClick=!\"1\";var {safeClickTouchEvents:S_}=K1;if(!S_){S_=K1.safeClickTouchEvents=[];}I$={};m6=R_.safeClickTouchEvent;if(m6){I$[m6]=K_(m6);}else if((\"onpointerup\" in document) && !R_.noPointerEvents){w$H=\"poin\";w$H+=\"terup\";I$.pointerup=p3(!1,K_(w$H,!!\"1\"));if(!P$.preventClickEvent){I$.click=K_(\"click\",!!\"1\");}I$.pointerdown=p3(!![]);if(P$.absorbDownEvent){I$.pointerdown_absorb=t_=>{return t_.stopPropagation();};}}else {h_$=\"m\";h_$+=\"ouseup\";I$.mousedown=I$.touchstart=p3(!![]);I$.mouseup=p3(!1,K_(h_$,!![]));if(!P$.preventClickEvent){I$.click=K_(\"click\",!!({}));}I$.touchend=p3(!({}),K_(\"touchend\",!\"\"));if(P$.absorbDownEvent){I$.mousedown_absorb=I$.touchstart_absorb=n6=>{F2U.a3b();return n6.stopPropagation();};}}if(P$.keyboardClick){I$.keyup=h_=>{var x9c,i8s;x9c=\"cl\";x9c+=\"i\";x9c+=\"c\";x9c+=\"k\";i8s=\"Spa\";i8s+=\"c\";i8s+=\"e\";F2U.V8b();if(h_.code === i8s || h_.code === \"Enter\"){h_.target.dispatchEvent(new Event(x9c));}};}for(var T8 in I$){K1.addEventListener(T8.split(8710 === +\"8015\"?(7.39e+3,0xe2a):(684,\"653\" | 9) !== (943.59,752)?\"_\":5.89)[0],I$[T8],T8.indexOf(\"touch\") === 0?{passive:!!\"\"}:undefined);}S_.push(I$);};R_.clearSafeClickTouches=function(U9){var {safeClickTouchEvents:S55}=U9;x2w9K.a3b();if(!S55){return;}S55.forEach(e50=>{x2w9K.V8b();for(var e2n in e50){U9.removeEventListener(e2n.split(\"_\")[0],e50[e2n],e2n.indexOf(\"touch\") === 0?{passive:![]}:undefined);}});U9.safeClickTouchEvents=null;};R_.safeDrag=function(q5k,C5y){var k6J,d9o,M9z,P9p,w_m,T71,h_1,n20,a5H,V5H,w$6,v_k,x8H,q91,v6R,g_l,F9C,t0E,a$P;k6J=\"touchs\";k6J+=\"t\";k6J+=\"art\";d9o=\"p\";d9o+=\"oi\";d9o+=\"nterup\";M9z=\"p\";M9z+=\"oi\";M9z+=\"ntermov\";M9z+=\"e\";P9p=\"pointe\";P9p+=\"r\";P9p+=\"do\";P9p+=\"wn\";w_m=\"po\";function p0S(A7C){return function(l6p){var c4m,B0c;if(v6R){return;}v6R=!![];R_.ChartEngine.ignoreTouch=!![];c4m=function(m0E){if(m0E.preventDefault){m0E.preventDefault();}if(Date.now() - g_l < q91){x2w9K.P3q(63);m0E.displacementX=m0E.displacementY=x2w9K.o5B(\"0\",0);}else {a$P.recentlyDragged=!!({});m0E.displacementX=w$6(m0E) - F9C;m0E.displacementY=v_k(m0E) - t0E;}C5y.move(m0E);};x2w9K.a3b();if(C5y.move){q5k.ownerDocument.body.addEventListener(A7C.move,c4m);}B0c=function(D51){R_.ChartEngine.ignoreTouch=!!0;if(C5y.move){q5k.ownerDocument.body.removeEventListener(A7C.move,c4m);}q5k.ownerDocument.body.removeEventListener(A7C.up,B0c);if(Date.now() - g_l < q91){D51.displacementX=D51.displacementY=0;}else {D51.displacementX=w$6(D51) - F9C;D51.displacementY=v_k(D51) - t0E;}if(C5y.up){C5y.up(D51);}setTimeout(function(){x2w9K.V8b();a$P.recentlyDragged=![];},+\"50\");};q5k.ownerDocument.body.addEventListener(A7C.up,B0c);setTimeout(function(){x2w9K.V8b();v6R=!({});},x8H);g_l=Date.now();F9C=w$6(l6p);t0E=v_k(l6p);if(C5y.down){C5y.down(l6p);}};}w_m+=\"interd\";w_m+=\"o\";w_m+=\"wn\";T71=\"mous\";T71+=\"e\";T71+=\"u\";T71+=\"p\";h_1=\"m\";h_1+=\"ouse\";h_1+=\"move\";n20=\"mou\";n20+=\"sedow\";n20+=\"n\";a5H=\"p\";a5H+=\"age\";a5H+=\"Y\";V5H=function(P$p,Y2P){return function(E42){x2w9K.V8b();var w$B,T2s,e2O;if(E42.touches){if(E42.touches.length > 0){return E42.touches[0][P$p];}else if(E42.changedTouches && E42.changedTouches.length > 0){return E42.changedTouches[+\"0\"][P$p];}}w$B=116306633;T2s=1170343788;e2O=2;for(var A_s=1;x2w9K.n$o(A_s.toString(),A_s.toString().length,82927) !== w$B;A_s++){return +E42[P$p] === \"\"?E42[P$p]:E42[Y2P];}if(x2w9K.P8Y(e2O.toString(),e2O.toString().length,52318) !== T2s){return +E42[P$p] === \"\"?E42[P$p]:E42[Y2P];}return typeof E42[P$p] !== \"undefined\"?E42[P$p]:E42[Y2P];};};w$6=V5H(\"pageX\",\"clientX\");v_k=V5H(a5H,\"clientY\");if(typeof C5y === \"function\"){C5y={down:arguments[1],move:arguments[2],up:arguments[3]};}C5y=C5y || ({});x8H=100;q91=300;v6R=!({});g_l=0;F9C=0;t0E=0;a$P={recentlyDragged:!!\"\"};q5k.addEventListener(n20,p0S({down:\"mousedown\",move:h_1,up:T71}));q5k.addEventListener(w_m,p0S({down:P9p,move:M9z,up:d9o}));x2w9K.V8b();q5k.addEventListener(k6J,p0S({down:\"touchstart\",move:\"touchmove\",up:\"touchend\"}),{passive:![]});return a$P;};R_.inputKeyEvents=function(o5$,l29){var q7z;q7z=\"key\";q7z+=\"up\";o5$.addEventListener(q7z,function(l52){x2w9K.V8b();var H$a;H$a=l52.keyCode;switch(H$a){case 13:l29();break;case +\"27\":o5$.value=\"\";break;default:break;}},!({}));};R_.fixScreen=function(){x2w9K.a3b();window.scrollTo(0,0);};R_.setCaretPosition=function(i2a,k2N){var m$X,v4F,W8y,L_T,p5m;i2a.style.zIndex=5000;if(i2a.setSelectionRange){R_.focus(i2a);try{i2a.setSelectionRange(k2N,k2N);}catch(G7p){}}else if(i2a.createTextRange){m$X=i2a.createTextRange();m$X.collapse(!![]);m$X.moveEnd(\"character\",k2N);v4F=-1527029516;W8y=-86804259;L_T=2;for(var z6l=1;x2w9K.n$o(z6l.toString(),z6l.toString().length,77790) !== v4F;z6l++){m$X.moveStart(\"\",k2N);m$X.select();L_T+=+\"2\";}if(x2w9K.P8Y(L_T.toString(),L_T.toString().length,38840) !== W8y){p5m=\"c\";p5m+=\"haracte\";p5m+=\"r\";m$X.moveStart(p5m,k2N);m$X.select();}}};R_.getActiveElement=function(F1T = document){var U8O;x2w9K.V8b();U8O=F1T.activeElement;if(U8O && U8O.shadowRoot){return R_.getActiveElement(U8O.shadowRoot);}return U8O;};R_.setValueIfNotActive=function(F3b,v2Q){var x7I;x7I=R_.getActiveElement();if(x7I == F3b){return;}F3b.value=v2Q;};R_.hideKeyboard=function(q85){var b6Y,S44;b6Y=\"I\";b6Y+=\"N\";b6Y+=\"PUT\";S44=R_.getActiveElement();if(S44.tagName == b6Y || S44.tagName == \"TEXTAREA\"){S44.blur();S44.ownerDocument.defaultView.focus();if(q85){if(q85 === S44.ownerDocument.body || S44.ownerDocument.body.contains(q85)){q85.focus();}}}};R_.smartHover=function(z3h){var B6m,b1U;if(!z3h){z3h=document;}function N0Y(){if(!B6m){C7U(this,\"mouse\");}}if(!z3h || typeof z3h.ciqHoverState !== \"undefined\"){return;}function C7U(S6Q,X_c){if(S6Q.ciqHoverState === X_c){return;}x2w9K.V8b();h8c(S6Q);S6Q.ciqHoverState=X_c;function h8c(N9w){x2w9K.a3b();var j8I;j8I=\"[intera\";j8I+=\"ctable]\";if(N9w !== S6Q){N9w.setAttribute(\"last-interaction\",X_c);}N9w.querySelectorAll(\"[interactable]\").forEach(h8c);if(N9w.shadowRoot){N9w.shadowRoot.querySelectorAll(j8I).forEach(h8c);}}S6Q.documentElement.setAttribute(\"ciq-last-interaction\",X_c);}B6m=!!\"\";z3h.addEventListener(\"touchend\",F5M,![]);x2w9K.a3b();z3h.addEventListener(\"pointerup\",k9c,!({}));z3h.addEventListener(\"mouseover\",N0Y,![]);function k9c(N7C){x2w9K.a3b();if(N7C.pointerType !== \"mouse\"){F5M.call(this);}else {N0Y.call(this);}}C7U(z3h,\"\");function F5M(){var Q6B;Q6B=\"tou\";Q6B+=\"c\";Q6B+=\"h\";clearTimeout(b1U);B6m=!![];C7U(this,Q6B);b1U=setTimeout(function(){B6m=!({});},500);}};R_.makeTranslatableElement=function(m5a,k$m,i94,t5j){x2w9K.a3b();if(k$m.translationCallback){m5a.setAttribute(\"cq-translate-original\",i94);m5a.innerText=k$m.translationCallback(i94,t5j);}else {m5a.innerText=i94;}};R_.addTranslatableAriaLabel=function(d_d,P4J,l8O,I_$){d_d.setAttribute(\"aria-label-original\",l8O);d_d.setAttribute(\"aria-label\",P4J.translationCallback?P4J.translationCallback(l8O,I_$):l8O);};R_.climbUpDomTree=function(n9D,f1Y,F$k){var I7E;if(!n9D || !n9D.matches){return null;}I7E=[];while(n9D){if(!f1Y || n9D.matches(f1Y)){I7E.push(n9D);}n9D=n9D.parentElement || (F$k?n9D.getRootNode().host:null);}return I7E;};R_.guaranteedSize=function(m$r){var x0T,C9M;if(m$r.defaultView){m$r=m$r.defaultView;}if(!m$r.nodeType){return {width:m$r.innerWidth,height:m$r.innerHeight};}if(!m$r || m$r.nodeType > 1){return {};}x0T=m$r.offsetWidth;C9M=m$r.offsetHeight;while(!x0T || !C9M){if(m$r.tagName === \"BODY\" || !m$r.parentElement){m$r=(m$r.ownerDocument || ({})).defaultView || m$r;x0T=m$r.innerWidth;C9M=m$r.innerHeight;break;}m$r=m$r.parentElement;x0T=m$r.offsetWidth;C9M=m$r.offsetHeight;}return {width:x0T,height:C9M};};R_.trulyVisible=function(u41){var N4y=x2w9K;var P9y,p0O,R2y;P9y=2102642357;p0O=143786098;N4y.P3q(63);R2y=N4y.o5B(\"2\",0);for(var s0Q=1;N4y.n$o(s0Q.toString(),s0Q.toString().length,16349) !== P9y;s0Q++){if(-u41){return !({});}N4y.P3q(63);R2y+=N4y.j1j(\"2\",0);}if(N4y.P8Y(R2y.toString(),R2y.toString().length,1885) !== p0O){if(!u41){return !\"\";}}if(!k3i(u41.style)){return !!\"\";}if(!k3i(getComputedStyle(u41))){return !\"1\";}function k3i(s5P){var f_R;f_R=\"no\";f_R+=\"n\";f_R+=\"e\";if(s5P.opacity === \"0\"){return !!0;}if(s5P.display === f_R){return !!\"\";}if(s5P.visibility === \"hidden\"){return !1;}if(parseInt(s5P.width,\"10\" * 1) === 0){return !({});}if(parseInt(s5P.height,10) === 0 && s5P.overflowY == \"hidden\"){return ![];}return !0;}return R_.trulyVisible(u41.parentElement);};R_.elementDimensions=function(j64,r7j){var L$2,Z8T,y3a,j3Z,t5R,Z$H,t$J,R$5,Q3Q;L$2=\"b\";L$2+=\"or\";L$2+=\"d\";L$2+=\"er-box\";if(!j64 || j64.nodeType !== 1){return {};}Z8T=getComputedStyle(j64);y3a={width:parseFloat(Z8T.width),height:parseFloat(Z8T.height)};j3Z={margin:{},border:{},padding:{}};t5R=[\"width\",\"height\"];for(var B1Z in j3Z){Z$H=\"R\";Z$H+=\"i\";Z$H+=\"ght\";t$J=\"W\";t$J+=\"id\";t$J+=\"th\";R$5=\"bor\";R$5+=\"d\";R$5+=\"er\";Q3Q=B1Z == R$5?t$J:\"\";j3Z[B1Z]={width:parseFloat(Z8T[B1Z + \"Left\" + Q3Q]) + parseFloat(Z8T[B1Z + Z$H + Q3Q]),height:parseFloat(Z8T[B1Z + \"Top\" + Q3Q]) + parseFloat(Z8T[B1Z + \"Bottom\" + Q3Q])};}if(r7j && r7j.margin){t5R.forEach(function(s3X){x2w9K.a3b();y3a[s3X]+=j3Z.margin[s3X];});}if(r7j && Z8T.boxSizing === \"content-box\"){if(r7j.padding){t5R.forEach(function(k6_){x2w9K.a3b();y3a[k6_]+=j3Z.padding[k6_];});}if(r7j.border){t5R.forEach(function(t2R){y3a[t2R]+=j3Z.border[t2R];});}}else if(Z8T.boxSizing === L$2){if(!r7j || !r7j.padding){t5R.forEach(function(P9K){x2w9K.a3b();y3a[P9K]-=j3Z.padding[P9K];});}if(!r7j || !r7j.border){t5R.forEach(function(F72){y3a[F72]-=j3Z.border[F72];});}}return y3a;};R_.resizeDetectInterval=-1;R_.resizeObserver=function(W7Z,y7A,X9L,A$q){var S7z=x2w9K;var z95,U7y,r60,k4q,S97;z95=\"n\";z95+=\"umber\";S7z.b$0(64);U7y=S7z.j1j(z95,typeof A$q);r60=R_.resizeDetectInterval >= 0;S7z.b$0(65);k4q=S7z.o5B(\"undefined\",typeof ResizeObserver);S97=500;if(!U7y){if(r60){A$q=R_.resizeDetectInterval;}else if(y7A === null){A$q=+\"0\";}else if(!k4q){A$q=S97;}else {S7z.P3q(44);A$q=-S7z.o5B(32,\"1\");}}if(A$q < 0){if(!X9L){X9L=new ResizeObserver(()=>{if(R_.ChartEngine && R_.ChartEngine.useAnimation){(W7Z.ownerDocument.defaultView || window).requestAnimationFrame(y7A);}else {setTimeout(y7A,0);}});X9L.observe(W7Z);}}if(A$q > 0){if(X9L){clearInterval(X9L);}X9L=setInterval(y7A,A$q);}if(X9L && A$q === +\"0\"){if(X9L instanceof ResizeObserver){X9L.disconnect();}else {clearInterval(X9L);}X9L=null;}return X9L;};R_.getLines=function(l2H,N_t,e5u){var e1G,S0N,v4r,l_3,K21,f$2;e1G=N_t.split((8700,595) !== 1708?(\"1010\" | 18) != (3.17,1490)?\" \":!!\"\":0x125c);S0N=[];v4r=\"\";l_3=0;K21=![];for(var t4P=0;t4P < e1G.length;t4P++){f$2=e1G[t4P];l_3=l2H.measureText(v4r + f$2).width;if(l_3 < e5u){if(K21){v4r+=\" \";}K21=!!\"1\";v4r+=f$2;}else {S0N.push(v4r);v4r=f$2;}if(t4P === e1G.length - 1){S0N.push(v4r);break;}}return S0N;};R_.alert=function(X4_){x2w9K.V8b();if(typeof window !== \"undefined\"){window.alert(X4_);}else {console.log(X4_);}};R_.localStorage={};try{s5r=\"u\";s5r+=\"ndef\";s5r+=\"ined\";if(typeof localStorage !== s5r){R_.localStorage=localStorage;}}catch(J9P){}if(typeof localStorage === Z8E && !R_.localStorage.getItem){R_.localStorage={items:{},getItem:function(x4l){x2w9K.V8b();return R_.localStorage.items[x4l] || null;},setItem:function(m43,d9c){x2w9K.a3b();R_.localStorage.items[m43]=d9c;},removeItem:function(r$_){delete R_.localStorage.items[r$_];}};}R_.privateBrowsingAlert=![];R_.localStorageSetItem=function(U85,N$p){x2w9K.a3b();try{R_.localStorage.setItem(U85,N$p);}catch(e45){if(!R_.privateBrowsingAlert){R_.alert(\"No storage space available. Possible causes include browser being in Private Browsing mode, or maximum storage space has been reached.\");R_.privateBrowsingAlert=!0;}}};};D7=a49=>{var A15,s_k,b6y,X2Y,P$W,O_Q,v4V,G25,g_I,E6u,I4U;A15=\"linea\";A15+=\"r\";s_k=\"oh\";s_k+=\"lc\";b6y=\"yea\";b6y+=\"r\";X2Y=\"mi\";X2Y+=\"n\";X2Y+=\"u\";X2Y+=\"te\";P$W=\"m\";P$W+=\"ont\";P$W+=\"h\";O_Q=\"mont\";O_Q+=\"h\";v4V=\"d\";v4V+=\"ay\";G25=\"r\";G25+=\"oundRe\";G25+=\"ct\";G25+=\"Arrow\";g_I=\"diam\";g_I+=\"ond\";E6u=a49.CIQ;E6u.ChartEngine=function(K7L){var d3f,e$z;if(!K7L){K7L={container:null};}else if(typeof HTMLDivElement != \"undefined\" && K7L.constructor == HTMLDivElement){d3f={container:K7L};K7L=d3f;}E6u.logMetrics(\"ChartEngine.new\");for(var c0K in I4U){this[c0K]=E6u.clone(E6u.ChartEngine.prototype[c0K]);}this.container=null;this.createChartPanel=!\"\";this.markers={};this.panels={};this.overlays={};this.charts={};this.eventListeners=[];this.controls={};this.goneVertical=!!\"\";this.pinchingScreen=!({});this.grabbingScreen=!!\"\";this.grabStartX=+\"0\";x2w9K.P3q(41);this.grabStartY=x2w9K.o5B(\"0\",0);this.grabStartScrollX=0;this.grabStartScrollY=0;this.swipe={};this.grabStartCandleWidth=0;this.grabStartZoom=0;this.grabOverrideClick=!\"1\";this.grabMode=\"\";this.vectorsShowing=!!0;this.mouseMode=!![];this.lineTravelSpacing=![];this.highlightedDataSetField=null;this.anyHighlighted=!\"1\";this.accessoryTimer=null;this.lastAccessoryUpdate=new Date().getTime();this.displayCrosshairs=!\"\";this.hrPanel=null;this.editingAnnotation=!({});this.openDialog=\"\";this.touches=[];this.changedTouches=[];this.crosshairTick=null;this.crosshairValue=null;this.pt={x1:-1,x2:-1,y1:-1,y2:-1};this.moveA=-1;this.moveB=-1;this.touchStartTime=-1;this.touchPointerType=\"\";this.gestureStartDistance=-1;this.grabStartPeriodicity=1;this.grabEndPeriodicity=-1;this.scrollEvent=null;this.cmd=!({});this.ctrl=![];this.shift=!\"1\";this.userPointerDown=![];this.cloneDrawing=!!0;this.insideChart=!1;this.overXAxis=!!0;this.overYAxis=!!\"\";this.displayInitialized=![];this.cx=null;this.isHistoricalModeSet=null;this.cy=null;this.clicks={};this.cancelTouchSingleClick=!!\"\";this.locale=null;this.dataZone=null;this.displayZone=null;this.timeZoneOffset=0;this.masterData=null;this.transformDataSetPre=null;this.transformDataSetPost=null;x2w9K.V8b();this.dataCallback=null;this.drawingObjects=[];this.undoStamps=[];this.useBackgroundCanvas=!!0;this.mainSeriesRenderer={};this.styles={};this.plugins={};this.currentVectorParameters=E6u.clone(E6u.ChartEngine.currentVectorParameters);this.chart=new E6u.ChartEngine.Chart();e$z=this.chart;e$z.name=\"chart\";e$z.yAxis.name=\"chart\";e$z.canvas=null;e$z.tempCanvas=null;e$z.container=K7L.container;if(E6u.Market){e$z.market=new E6u.Market();}this.charts.chart=e$z;E6u.extend(this,K7L);this.setGapLines(this.chart.gapLines);Object.defineProperties(this,{ownerWindow:{get() {return this.container.ownerDocument.defaultView;}}});if(K7L.container){if(this.registerHTMLElements){this.registerHTMLElements();}e$z.width=e$z.container.clientWidth - e$z.yAxis.width;this.setCandleWidth(this.layout.candleWidth,e$z);e$z.canvasHeight=e$z.container.clientHeight;}this.construct();};E6u.ChartEngine.drawingLine=!\"1\";E6u.ChartEngine.resizingPanel=null;E6u.ChartEngine.crosshairX=0;E6u.ChartEngine.crosshairY=0;E6u.ChartEngine.useAnimation=!!1;E6u.ChartEngine.enableCaching=!1;E6u.ChartEngine.ignoreTouch=!!\"\";E6u.ChartEngine.useOldAndroidClear=!!({});E6u.ChartEngine.currentVectorParameters={};E6u.ChartEngine.defaultDisplayTimeZone=null;E6u.ChartEngine.pluginBasePath=\"plugins/\";E6u.ChartEngine.registeredContainers=[];E6u.ChartEngine.globalEventHandlers=[];E6u.ChartEngine.registerHelpers=function(p9w){E6u.ChartEngine.helpersToRegister.forEach(function(r5M){x2w9K.a3b();r5M(p9w);});};E6u.ChartEngine.helpersToRegister=[];E6u.ChartEngine.prototype.construct=function(){var X9e;if(this.createChartPanel){X9e=\"c\";X9e+=\"h\";X9e+=\"ar\";X9e+=\"t\";this.stackPanel(X9e,\"chart\",1);this.adjustPanelPositions();this.chart.panel=this.panels[this.chart.name];}this.cx=0;this.cy=0;this.micropixels=0;x2w9K.V8b();this.callbackListeners={destroy:[],doubleTap:[],doubleClick:[],drawing:[],drawingComplete:[],drawingEdit:[],floatingWindow:[],layout:[],longhold:[],move:[],newChart:[],notification:[],periodicity:[],preferences:[],rightClick:[],scroll:[],studyOverlayEdit:[],studyPanelEdit:[],symbolChange:[],symbolImport:[],tap:[],theme:[],undoStamp:[]};E6u.ChartEngine.registerHelpers(this);if(!this.mainSeriesRenderer.params){this.mainSeriesRenderer.params={};}};I4U={longHoldTime:700,yTolerance:100,minimumLeftBars:1,reverseMouseWheel:!\"1\",mouseWheelAcceleration:!\"\",minimumCandleWidth:1,maximumCandleWidth:100,minimumZoomTicks:9,preserveCandleWidthOnResize:null,allowZoom:!!({}),allowDrawingZoom:!1,allowScroll:!\"\",allowSideswipe:!![],allowThreeFingerTouch:![],bypassRightClick:{series:!({}),study:!!0,drawing:!\"1\"},adjustHighlightedDataSetField:function(s5Q){return s5Q;},displayIconsUpDown:!\"\",displayIconsSolo:!![],displayIconsClose:!!1,displayPanelResize:!0,soloPanelToFullScreen:!({}),markerDelay:null,groupableMarkerTypes:[\"circle\",\"square\",g_I,\"text\",\"singleEvent\"],useBackingStore:!![],disableBackingStoreDuringTouch:E6u.isMobile || E6u.isSurface && E6u.isFF,captureTouchEvents:!!({}),captureMouseWheelEvents:!!({}),tapForHighlighting:!!({}),doubleClickTime:+\"250\",yaxisLabelStyle:G25,axisBorders:null,singleDrawingHighlight:!!({}),crosshairXOffset:-40,crosshairYOffset:-40,extendLastTick:!!\"\",translationCallback:null,dontRoll:!\"1\",allowEquations:!0,cleanupGaps:!\"1\",staticRange:!!\"\",maxDataSetSize:20000,maxMasterDataSize:0,xAxisAsFooter:!![],xaxisHeight:+\"40\",displayGridLinesInStudies:!({}),escapeOnSerialize:!!({}),candleWidthPercent:0.65,colorByCandleDirection:!!\"\",noWicksOnCandles:{renko:!\"\",linebreak:!!1},fetchMaximumBars:{rangebars:!!({}),kagi:!!\"1\",renko:!!({}),linebreak:!0,pandf:!!1},startComparisonsAtFirstVisibleBar:!\"1\",animations:{zoom:{isStub:!!\"1\",run:function(V8E,i7l,j1C){V8E(j1C);},stop:function(){},reset:function(){},running:![],hasCompleted:!![]}},staticRangePeriodicityMap:[{rangeInMS:E6u.WEEK,periodicity:1,interval:5,timeUnit:\"minute\"},{rangeInMS:E6u.MONTH,periodicity:1,interval:\"30\" << 64,timeUnit:\"minute\"},{rangeInMS:E6u.YEAR + E6u.DAY,periodicity:1,interval:v4V},{rangeInMS:E6u.DECADE,periodicity:1,interval:\"week\"},{rangeInMS:E6u.DECADE * 10,periodicity:\"1\" | 1,interval:O_Q},{rangeInMS:Number.MAX_VALUE,periodicity:12,interval:P$W}],dynamicRangePeriodicityMap:[{interval:1,timeUnit:X2Y,rangeInMS:E6u.MINUTE},{interval:5,timeUnit:\"minute\",rangeInMS:E6u.MINUTE * 5},{interval:30,timeUnit:\"minute\",rangeInMS:E6u.MINUTE * (\"30\" << 0)},{interval:60,timeUnit:\"minute\",rangeInMS:E6u.MINUTE * 60},{interval:\"day\",rangeInMS:E6u.DAY},{interval:\"month\",rangeInMS:E6u.MONTH},{interval:b6y,rangeInMS:E6u.YEAR}],layout:{interval:\"day\",periodicity:\"1\" * 1,timeUnit:null,candleWidth:8,flipped:![],volumeUnderlay:![],adj:!![],crosshair:![],chartType:\"candle\",extended:!\"1\",marketSessions:{},aggregationType:s_k,chartScale:A15,studies:{},panels:{},setSpan:{},outliers:!({}),animation:!!1},preferences:{currentPriceLine:!!0,displayCrosshairsWithDrawingTool:!({}),dragging:{series:!![],study:!!({}),yaxis:!!({})},drawings:null,highlightsRadius:10,highlightsTapRadius:30,magnet:![],horizontalCrosshairField:null,labels:!0,language:null,timeZone:null,whitespace:50,zoomInSpeed:null,zoomOutSpeed:null,zoomAtCurrentMousePosition:![]},streamParameters:{count:0,maxWait:\"1000\" - 0,maxTicks:100,timeout:-(\"1\" - 0)},autoPickCandleWidth:{turnOn:!!\"\",candleWidth:5}};E6u.extend(E6u.ChartEngine.prototype,I4U);E6u.ChartEngine.NONE=0;E6u.ChartEngine.CLOSEUP=1;E6u.ChartEngine.CLOSEDOWN=2;E6u.ChartEngine.CLOSEEVEN=4;E6u.ChartEngine.CANDLEUP=8;E6u.ChartEngine.CANDLEDOWN=16;E6u.ChartEngine.CANDLEEVEN=32;};s0=F$g=>{var w_k;w_k=F$g.CIQ;w_k.convertFutureMonth=function(Z4z){var N63;N63=Z4z.toString();if(N63.length <= 0 || N63.length > +\"2\"){return \"\";}x2w9K.a3b();switch(N63){case (7620,313) > (5230,8810)?(0x227e,+\"0x121b\"):\"1\":return \"F\";case \"2\":return \"G\";case \"3\":return 2210 < 5737?\"H\":(7141,\"3120\" | 16) == (826,36)?5.76e+3:+\"6297\" >= 4431?(!![],15.37):(\"U\",934.82);case 520 <= 7250?(1420,8296) < 497.19?(\"779\" ^ 0) > 457.36?(\"J\",3.05e+2):\"O\":\"4\":705.35:return \"J\";case \"5\":return 5261 < +\"804.89\"?6705 >= (\"6455\" - 0,257.85)?(580.31,\"2550\" * 1) != (7237,9959)?\"f\":!({}):(!!\"1\",!\"\"):\"K\";case \"6\":return \"M\";case 918.33 < +\"9359\"?248.3 !== 1002?\"7\":\"D\":(63.27,\"E\"):return \"N\";case \"8\":return \"Q\";case \"9\":return (7652,613.66) >= (2480,4047)?595.12:1340 > +\"9196\"?(\"0xbc\" - 0,9.38e+3):\"U\";case \"10\":return \"V\";case \"11\":return (701.31,+\"3294\") < (243,+\"3947\")?(483.26,363.92) == (415.22,+\"282\")?\"B\":\"X\":(0x209b,0x1505);case \"12\":return \"Z\";case 215 === 1044?(\"S\",+\"7.46e+3\"):\"F\":return \"1\";case 256 < (281.66,575.69)?(7310,208.64) < 331?\"G\":468 < (4320,2130)?(\"u\",9.39e+2):5.16e+3:(\"o\",\"O\"):return 7245 != (583.43,4096)?\"2\":\"53.05\" - 0;case 9310 == 5620?!!0:+\"6180\" > (883.35,7146)?(0x8d9,0x1373):\"H\":return \"3\";case 75 > 42.1?\"J\":0x2a9:return (+\"627.75\",5310) <= (7978,6900)?\"4\":5.51e+3;case +\"745.25\" <= (\"9990\" * 1,223.11)?\"Z\":\"K\":return \"5\";case 4660 !== (265,\"754.17\" - 0)?\"M\":\"K\":return \"6\";case 4095 === (654.18,1417)?\"X\":\"N\":return 7946 > (632.73,2990)?217.23 === 2730?(\"N\",4.38e+2):(9600,3686) >= (625.09,4250)?!![]:\"7\":\"4.07e+3\" - 0;case 674.28 != 7110?(8140,+\"7130\") === 7190?!!({}):\"Q\":(!![],\"752.83\" - 0):return \"8\";case 4630 > (+\"101.38\",2135)?5937 < 703.19?!!({}):\"U\":(6.76e+3,4.69e+3):return \"9\";case \"V\":return \"10\";case 8640 != 942.52?\"X\":2190 > 8200?\"O\":(!!({}),+\"0x900\"):return \"11\";case \"Z\":return \"12\";}return N63;};w_k.money=function(i0g,L0y,Z4H){if(!Z4H){Z4H=\"$\";}if(Z4H.length == 3){Z4H+=1760 === 7979?(\"v\",\"232.21\" - 0):\" \";}if(!L0y && L0y !== 0){L0y=2;}return Z4H + w_k.commas((Math.round(i0g * 10000) / 10000).toFixed(L0y));};w_k.convertCurrencyCode=function(q94){var t1_,f5B,W51,R9d,M8I,E8f,B1E,g8B;t1_=\"F\";t1_+=\"C\";t1_+=\"F\";t1_+=\"A\";f5B=\"S\";x2w9K.a3b();f5B+=\"$\";W51=\"N\";W51+=\"Z\";W51+=\"$\";R9d=\"k\";R9d+=\"r\";M8I=\"C\";M8I+=\"N\";M8I+=\"¥\";E8f=\"R\";E8f+=\"$\";B1E={JPY:\"¥\",USD:(+\"3120\",800.67) < \"516.34\" - 0?(\"T\",429.55):\"$\",AUD:\"A$\",BRL:E8f,CAD:\"CA$\",CNY:M8I,CZK:\"Kč\",DKK:R9d,EUR:798.4 != (5869,7556)?122 <= (38.29,\"3545\" * 1)?+\"6748\" !== (58.01,9073)?\"€\":0x7ff:(52.63,0xf72):\"x\",GBP:\"£\",HKD:\"HK$\",HUF:\"Ft\",ILS:\"₪\",INR:7059 !== 261.96?\"₹\":7490 >= (4120,21.91)?3.24e+3:\"K\",KRW:(7257,8787) !== (461.8,1475)?\"₩\":8727 === (\"195\" << 0,\"60.38\" - 0)?390.36:(0xab1,200),MXN:\"MX$\",NOK:\"kr\",NZD:W51,PLN:\"zł\",RUB:\"руб\",SAR:(9300,9610) > (9590,6051)?\"﷼\":569.34 > (306,135.53)?\"p\":(+\"0x15fe\",\"d\"),SEK:\"kr\",SGD:f5B,THB:6977 !== (3319,760.21)?(+\"5760\",41) >= (962.64,8233)?0x26a:\"฿\":0x922,TRY:(352.85,6820) <= 44?3355 >= (887.25,4484)?(9.71e+3,6.51e+3):(583.53,3670) !== (\"8459\" ^ 0)?9.38e+2:\"X\":\"₺\",TWD:\"NT$\",VND:(7018,+\"7180\") <= 553.12?(!!1,0x136c):4902 != 487.56?\"₫\":(410.21,694.21) != (562,\"2921\" | 65)?(0xc1e,+\"3.64e+3\"):314.19,XAF:t1_,XCD:\"EC$\",XOF:\"CFA\",XPF:\"CFPF\",ZAR:(8861,5449) != \"4652\" - 0?\"R\":628.81};g8B=B1E[q94];if(g8B){return g8B;}return q94;};w_k.commas=function(Z9H){return Z9H.toString().replace(/\\B(?=(\\d{3}){1,4}(?!\\d))/g,857.24 < (618,+\"8395\")?\",\":2.13e+3);};w_k.cleanPeriodicity=function(Y6o,b8s,Q5A){var v8d=x2w9K;var f0E,a0U,P2l,O8Z,g0U;f0E=\"min\";f0E+=\"u\";f0E+=\"te\";if(isNaN(Y6o)){Y6o=1;}if(!b8s){b8s=1;}if(!isNaN(b8s) && Q5A){a0U=\"s\";a0U+=\"eco\";a0U+=\"n\";a0U+=\"d\";P2l=\"m\";P2l+=\"inu\";P2l+=\"te\";O8Z=\"h\";O8Z+=\"o\";O8Z+=\"ur\";if(!(Q5A == O8Z || Q5A == P2l || Q5A == a0U || Q5A == \"millisecond\")){b8s=Q5A;Q5A=null;}}else if(b8s == \"tick\"){Q5A=null;}else if(!Q5A && !isNaN(b8s)){Q5A=f0E;}if(Q5A == \"hour\"){Q5A=\"minute\";v8d.b$0(24);b8s=v8d.o5B(b8s,60);}v8d.V8b();if(b8s == \"year\"){g0U=\"m\";g0U+=\"onth\";b8s=g0U;if(!Y6o){Y6o=+\"1\";}v8d.b$0(24);Y6o=v8d.j1j(Y6o,12);}return {period:Y6o,interval:b8s,timeUnit:Q5A};};w_k.readablePeriodicity=function(W$O){var V3q=x2w9K;var S7L,a1S,z82,B9O;S7L=\"min\";S7L+=\"u\";S7L+=\"t\";S7L+=\"e\";a1S=\"n\";a1S+=\"u\";a1S+=\"m\";a1S+=\"ber\";z82=W$O.layout.periodicity;B9O=W$O.layout.interval;if(typeof W$O.layout.interval == a1S && W$O.layout.timeUnit){z82=W$O.layout.interval * W$O.layout.periodicity;B9O=W$O.layout.timeUnit;}else if(typeof W$O.layout.interval == \"number\" && !W$O.layout.timeUnit){z82=W$O.layout.interval * W$O.layout.periodicity;B9O=\"minute\";}if(z82 % +\"60\" === 0 && B9O == S7L){z82/=60;B9O=\"hour\";}V3q.b$0(7);var x1C=V3q.j1j(7800,780);V3q.b$0(7);var s2z=V3q.j1j(8855,984);V3q.P3q(45);var U7r=V3q.o5B(2740,161,1);V3q.P3q(66);var x8c=V3q.o5B(2,19,12,9259,46284);V3q.P3q(7);var b3j=V3q.j1j(4222,1408);V3q.P3q(67);var m$l=V3q.o5B(2,20143,4,4748,18);V3q.b$0(68);var L66=V3q.o5B(6,45152,628,5,14);V3q.P3q(69);var G7L=V3q.j1j(3,19,54,108);return z82 + ((845.8,505.59) != (x1C,\"823.56\" - 0)?(s2z,95.94) !== U7r?\" \":x8c != (142.27,b3j)?\"U\":(\"E\",m$l):(L66,G7L)) + W$O.translateIf(w_k.capitalize(B9O));};w_k.fixPrice=function(S3N){var H_4;if(!S3N && S3N !== 0){return null;}H_4=S3N.toFixed(10);for(var W4H=H_4.length - 1;W4H > 1;W4H--){if(H_4.charAt(W4H) != \"0\")break;}x2w9K.b$0(7);H_4=H_4.substring(0,x2w9K.o5B(1,W4H));return parseFloat(H_4);};w_k.condenseInt=function(y6x){var k8B=x2w9K;var j_I;if(y6x === null || typeof y6x == \"undefined\"){return \"\";}if(y6x === Infinity || y6x === -Infinity){return \"n/a\";}k8B.b$0(70);j_I=k8B.o5B(y6x,0);if(!isNaN(y6x)){y6x=Math.abs(y6x);if(y6x !== Math.floor(y6x)){k8B.P3q(12);var a$J=k8B.o5B(10,1390000,140000);k8B.b$0(12);var f1f=k8B.j1j(17,2138,714);y6x=Math.floor(y6x * a$J) / f1f;}if(y6x > 100 && y6x !== Math.floor(y6x)){k8B.b$0(71);var N22=k8B.o5B(18,14,99,150,12);k8B.b$0(35);var t_U=k8B.j1j(306,18,288,31);y6x=Math.floor(y6x * N22) / (\"100\" >> t_U);}if(y6x > +\"1000000000000\"){k8B.b$0(0);var C1b=k8B.o5B(7,14,7087);k8B.P3q(35);var P_M=k8B.j1j(401,6,395,388);k8B.b$0(3);var g1r=k8B.o5B(123408,116552);k8B.b$0(72);var E4u=k8B.o5B(1,8,2,105,1669);k8B.b$0(45);var N1i=k8B.o5B(5139,5158,5158);k8B.b$0(73);var p3I=k8B.j1j(8,36168,288,19,14);y6x=Math.round(y6x / 100000000000) / +\"10\" + (9550 === (C1b,P_M)?(g1r,895.31):E4u === (+\"583.76\",602.59)?N1i === 251.25?(\"0x13f1\" - 0,!!({})):(p3I,805.32):\"t\");}else if(y6x > 100000000000){k8B.P3q(45);var S5O=k8B.o5B(888888891,999999981,9);y6x=Math.round(y6x / S5O) + \"b\";}else if(y6x > 10000000000){k8B.b$0(7);var o4i=k8B.j1j(1,0);k8B.b$0(74);var f63=k8B.o5B(112164,8626,9347,2,3);k8B.P3q(11);var e3f=k8B.o5B(1117,3,8935,1114);k8B.b$0(0);var q8n=k8B.j1j(2,6,68);k8B.b$0(45);var i6V=k8B.j1j(7119,419,419);y6x=(Math.round(y6x / 100000000) / 10).toFixed(o4i) + (790.72 > (+\"3964\",137.19)?\"b\":f63 < (e3f,\"2890\" >> q8n)?(![],\"h\"):(i6V,955.76));}else if(y6x > 1000000000){k8B.P3q(69);var d$s=k8B.j1j(18,11,37,393);k8B.b$0(20);var g$H=k8B.o5B(42,3,13);k8B.P3q(3);var B$Y=k8B.j1j(6474,5976);k8B.P3q(36);var A0F=k8B.o5B(9167,9183,9167,14);k8B.P3q(3);var z5_=k8B.o5B(7257,7);k8B.b$0(34);var i1Q=k8B.j1j(4530,6,12);y6x=(Math.round(y6x / 10000000) / 100).toFixed(\"2\" << d$s) + (\"7410\" >> g$H === (B$Y,+\"889.67\")?(\"F\",A0F):790.31 == z5_?i1Q:\"b\");}else if(y6x > 100000000){k8B.b$0(12);var B5U=k8B.o5B(3,1999991,999997);y6x=Math.round(y6x / B5U) + \"m\";}else if(y6x > 10000000){k8B.b$0(3);var v2V=k8B.j1j(17,16);y6x=(Math.round(y6x / 100000) / 10).toFixed(v2V) + \"m\";}else if(y6x > 1000000){k8B.P3q(4);var A6A=k8B.j1j(11,123,11);y6x=(Math.round(y6x / 10000) / 100).toFixed(A6A) + \"m\";}else if(y6x > \"100000\" >> 0){y6x=Math.round(y6x / +\"1000\") + \"k\";}else if(y6x > 10000){k8B.P3q(75);var l2G=k8B.o5B(14,18,7,17,1);y6x=(Math.round(y6x / 100) / 10).toFixed(l2G) + \"k\";}else if(y6x > +\"1000\"){k8B.b$0(3);var D$C=k8B.o5B(13,11);k8B.b$0(76);var r_i=k8B.o5B(1616,10,5,8,16);k8B.P3q(77);var Y0T=k8B.o5B(46,7094,20,12);k8B.P3q(20);var C3m=k8B.o5B(10,1235,6);k8B.b$0(69);var m_p=k8B.j1j(5,13,1127,13526);y6x=(Math.round(y6x / 10) / 100).toFixed(D$C) + (r_i < Y0T?\"k\":(558.5,+\"1925\") === (C3m,m_p)?\"z\":(\"T\",\"o\"));}else {y6x=y6x.toString();}}else {y6x=y6x.toString();}if(j_I){k8B.b$0(7);y6x=k8B.j1j(y6x,9339 === (995.13,9767)?(+\"2.03e+3\",8.60e+3):\"-\");}return y6x;};w_k.calculateTradingDecimalPlaces=function(F8z){var J7g,t0m,q4C,f66,B6i,s0D,o8u,W_t,D5w,d$R;J7g=F8z.chart;t0m=2;q4C=50;f66=J7g.masterData;if(f66 && f66.length > q4C){for(var u4R=2;u4R < q4C;u4R++){B6i=f66.length - u4R;if(B6i < 0)break;s0D=f66[B6i];if(s0D.Close && typeof s0D.Close == \"number\"){o8u=s0D.Close.toString();W_t=o8u.indexOf((\"7051\" ^ 0,286.08) != (763.16,2590)?(2649,2610) > (3560,8460)?(0xbd3,0x1960):\".\":(226.62,\"0x9ce\" * 1));if(W_t != -(\"1\" << 64)){D5w=o8u.length - W_t - +\"1\";if(D5w > t0m){t0m=D5w;}}}}}d$R=J7g.yAxis.maxDecimalPlaces;if(t0m > d$R && d$R !== null){t0m=d$R;}x2w9K.a3b();return t0m;};w_k.minMax=function(P$Q,Z1C,A0h,r9O){var M00,u69,f00,q6e,p7C,W84,O_4;M00=Number.MAX_VALUE;x2w9K.b$0(3);x2w9K.V8b();var C0O=x2w9K.j1j(19,20);u69=Number.MAX_VALUE * C0O;if(!A0h){A0h=\"Close\";}f00=r9O?\"High\":A0h;q6e=r9O?\"Low\":A0h;for(var Q9l=0;Q9l < P$Q.length;Q9l++){p7C=P$Q[Q9l];if(!p7C)continue;W84=p7C[Z1C];if(!W84 && W84 !== +\"0\")continue;O_4=W84;if(typeof W84 === \"object\"){O_4=W84[f00];}if(!isNaN(O_4) && (O_4 || O_4 === 0)){u69=Math.max(u69,O_4);}if(typeof W84 === \"object\"){O_4=W84[q6e];}if(!isNaN(O_4) && (O_4 || O_4 === 0)){M00=Math.min(M00,O_4);}}return [M00,u69];};w_k.symbolEqual=function(J_e,C6E){var i7r,q5U;if(!J_e || !C6E){return !({});}if(typeof J_e != \"object\"){J_e={symbol:J_e};}if(typeof C6E != \"object\"){C6E={symbol:C6E};}if(typeof J_e.equals == \"function\"){return J_e.equals(C6E);}i7r=J_e.symbol;q5U=C6E.symbol;if(i7r){i7r=i7r.toUpperCase();}if(q5U){q5U=q5U.toUpperCase();}x2w9K.V8b();if(i7r != q5U){return !!0;}if(J_e.source != C6E.source){return !!\"\";}return !\"\";};w_k.addMemberToMasterdata=function(q_Z){var f5A=x2w9K;f5A.V8b();var o4M,A8N,c4w,y_s,Y_q,p3N,t$w,e62,u53,O3I,A_1,f$T,z8N,A13,f_v,R_8,r1m,d5X,T6j,S1U,Q04,w7f,o1C,t1s,O8V,X3H;if(q_Z.constructor === w_k.ChartEngine){q_Z={stx:arguments[0],label:arguments[+\"1\"],data:arguments[2],fields:arguments[3],createObject:arguments[4],fieldForLabel:arguments[5]};}o4M=q_Z.stx;A8N=q_Z.label;c4w=q_Z.data;y_s=q_Z.fields;Y_q=q_Z.createObject;p3N=q_Z.fieldForLabel;t$w=q_Z.chart?q_Z.chart:o4M.chart;if(!q_Z.noCleanupDates){o4M.doCleanupDates(c4w,o4M.layout.interval);}e62=[];if(o4M.getSeries){e62=o4M.getSeries({symbol:A8N,chart:t$w});}if(c4w && c4w.constructor == Object){c4w=[c4w];}if(!c4w || !c4w.length){return;}function Y0q(J5F,D9H){var v2T,z44;if(!J5F || typeof J5F != \"object\"){J5F=D9H;return J5F;}v2T={Close:J5F.Close,High:J5F.High,Low:J5F.Low,Open:J5F.Open,Volume:J5F.Volume};J5F=D9H;for(var v_O in v2T){z44=\"n\";z44+=\"umber\";if(J5F.Close === null){if(J5F[v_O] !== undefined){J5F[v_O]=null;}}else if(typeof J5F[v_O] !== \"number\"){J5F[v_O]=v2T[v_O];}else if(typeof v2T[v_O] === z44){if(v_O == \"Open\"){J5F.Open=v2T.Open;}else if(v_O == \"Low\" && J5F.Low > v2T.Low){J5F.Low=v2T.Low;}else if(v_O == \"High\" && J5F.High < v2T.High){J5F.High=v2T.High;}else if(v_O == \"Volume\"){J5F.Volume+=v2T.Volume;}}}return J5F;}u53=0;O3I=0;A_1=t$w.masterData;f$T=o4M.layout;if(!A_1){A_1=[];}f_v=t$w && t$w.defaultPlotField || null;R_8=o4M.mainSeriesRenderer.params.type && !o4M.mainSeriesRenderer.highLowBars;r1m=f$T.chartType;if(!R_8 && r1m){d5X=w_k.Renderer.produce(r1m,{});if(d5X){R_8=!d5X.highLowBars;}}T6j=w_k.yyyymmddhhmmssmmm;while(u53 < A_1.length && O3I < c4w.length){A13=c4w[O3I];z8N=A_1[u53];if(!A13.DT || typeof A13.DT == \"undefined\"){A13.DT=w_k.strToDateTime(A13.Date);}else {S1U=\"n\";S1U+=\"umber\";if(typeof A13.DT == S1U){A13.DT=new Date(A13.DT);}if(!A13.Date || A13.Date.length != 17){A13.Date=T6j(A13.DT);}}if(O3I === 0){for(var u0t=0;u0t < e62.length;u0t++){if(!e62[u0t].endPoints.begin || e62[u0t].endPoints.begin > A13.DT){e62[u0t].endPoints.begin=A13.DT;}}}if(+A13.DT == +z8N.DT){A_Y(z8N,A13);O3I++;u53++;continue;}if(A13.DT < z8N.DT){A_1.splice(u53,0,{DT:A13.DT,Date:A13.Date});continue;}else {b$Y(A13.DT);}}if(u53 >= A_1.length){while(O3I < c4w.length){A13=c4w[O3I];if(!A13.DT || typeof A13.DT == \"undefined\"){A13.DT=w_k.strToDateTime(A13.Date);}else {if(typeof A13.DT == \"number\"){A13.DT=new Date(A13.DT);}if(!A13.Date || A13.Date.length != 17){A13.Date=T6j(A13.DT);}}z8N={DT:A13.DT,Date:A13.Date};A_Y(z8N,A13);A_1.push(z8N);O3I++;}}function A_Y(T8o,Q7B){var Z7G,p9X,e31,H89,W$B,H0n;if(y_s && y_s.length){if(y_s[0] == (6058 == (1170,4830)?0x1d27:\"*\")){w_k.extend(T8o,Q7B);}else {for(var i2C=0;i2C < y_s.length;i2C++){T8o[y_s[i2C]]=Q7B[y_s[i2C]];}}}else if(Y_q){Z7G=\"aggregat\";Z7G+=\"e\";if(Q7B.Value !== undefined){T8o[A8N]=Q7B.Value;return;}else if(Y_q == Z7G){T8o[A8N]=Y0q(T8o[A8N],Q7B);}else {T8o[A8N]=Q7B;}p9X=T8o[A8N];if(typeof p9X.Close == \"number\"){e31=\"n\";e31+=\"u\";e31+=\"mbe\";e31+=\"r\";H89=\"n\";H89+=\"umber\";if(typeof p9X.Open != H89){p9X.Open=p9X.Close;}W$B=Math.max(p9X.Open,p9X.Close);H0n=Math.min(p9X.Open,p9X.Close);if(typeof p9X.High != e31 || p9X.High < W$B){p9X.High=W$B;}if(typeof p9X.Low != \"number\" || p9X.Low > H0n){p9X.Low=H0n;}}if(p9X.Volume && typeof p9X.Volume !== \"number\"){p9X.Volume=parseInt(p9X.Volume,+\"10\");}}else if(p3N){T8o[A8N]=Q7B[p3N];}else if(R_8 && f_v && Q7B[f_v] !== undefined){T8o[A8N]=Q7B[f_v];}else if(f$T.adj && Q7B.Adj_Close !== undefined){T8o[A8N]=Q7B.Adj_Close;}else if(Q7B.Close !== undefined){T8o[A8N]=Q7B.Close;}else if(Q7B.Value !== undefined){T8o[A8N]=Q7B.Value;}else {T8o[A8N]=Q7B[A8N];}}function b$Y(z8t){var R12,H0R,C9z,U7i,m6O,W_2,n0E;R12=u53;f5A.P3q(78);var A3e=f5A.j1j(3,2,53,18);f5A.V8b();H0R=A_1.length - A3e;if(A_1[H0R].DT < z8t){f5A.b$0(7);u53=f5A.j1j(1,H0R);return;}else if(+A_1[H0R].DT == +z8t){u53=H0R;C9z=470029472;U7i=-838640678;m6O=2;for(var m1h=1;f5A.n$o(m1h.toString(),m1h.toString().length,54661) !== C9z;m1h++){return;}if(f5A.n$o(m6O.toString(),m6O.toString().length,5169) !== U7i){return;}}u53++;function d0g(){if(+A_1[u53].DT == +z8t){return 0;}f5A.V8b();if(A_1[u53].DT < z8t){return 1;}if(A_1[u53 - 1].DT > z8t){return -1;}if(+A_1[u53 - 1].DT == +z8t){u53--;}return +\"0\";}W_2=0;while(++W_2 < +\"100\"){switch(d0g()){case 0:return;case 1:R12=u53;break;case -(\"1\" >> 0):H0R=u53;break;}f5A.P3q(79);u53=Math.round(f5A.j1j(R12,2,H0R));}if(W_2 >= 100){n0E=\"!!!Warning: addMemberToMasterd\";n0E+=\"ata() d\";n0E+=\"id not find insertion point.\";console.log(n0E);f5A.b$0(80);var E5p=f5A.j1j(15,8,16,8);u53=A_1.length - E5p;}}if(q_Z.fillGaps && A_1.length){Q04={noCleanupDates:!!({}),cleanupGaps:q_Z.fillGaps};if(y_s){for(var H5$=+\"0\";H5$ < y_s.length;H5$++){Q04.field=y_s[H5$];o4M.doCleanupGaps(A_1,t$w,Q04);}}else {w7f=2079265711;f5A.b$0(63);o1C=f5A.o5B(\"1092936704\",0);f5A.P3q(62);t1s=f5A.o5B(0,\"2\");for(var I_Y=1;f5A.P8Y(I_Y.toString(),I_Y.toString().length,32169) !== w7f;I_Y++){Q04.field=A8N;t1s+=2;}if(f5A.P8Y(t1s.toString(),t1s.toString().length,+\"71391\") !== o1C){Q04.field=A8N;}o4M.doCleanupGaps(A_1,t$w,Q04);}}for(var l1f=0;l1f < e62.length;l1f++){O8V=e62[l1f].endPoints;if(!O8V.end || !A8N || O8V.end <= z8N[A8N].DT){O8V.end=A8N?z8N[A8N].DT:z8N.DT;X3H=A8N || e62[l1f].parameters && e62[l1f].parameters.field || t$w.defaultPlotField;e62[l1f].lastQuote=o4M.getFirstLastDataRecord(A_1,X3H,!0);}}o4M.setMasterData(A_1,t$w,{noCleanupDates:!!({})});};};n0=M$a=>{var M4z=x2w9K;var B3C,Z0n;B3C=M$a.CIQ;B3C.xor=function(K$2,I$z){var B3A,q4o;B3A=!K$2;q4o=!I$z;M4z.b$0(65);return M4z.o5B(q4o,B3A);};B3C.round=function(J77,o5Z){M4z.a3b();return Number(Math.round(J77 + ((296.77,974) < 4660?\"e\":3.89e+3) + o5Z) + \"e-\" + o5Z);};Z0n=Object.freeze([0,1,2].reduce((M7T,n4z)=>{return Object.defineProperty(M7T,n4z,{value:BigInt(+n4z),enumerable:!!\"1\"});},{}));B3C.biSquareMult=function h5C(y9x,i9q){if(i9q === Z0n[0]){return Z0n[1];}if(i9q === Z0n[1]){return y9x;}if(i9q % Z0n[2] === Z0n[1]){M4z.P3q(20);var z_R=M4z.j1j(7,12,18);return y9x * h5C(y9x * y9x,(i9q - Z0n[z_R]) / Z0n[+\"2\"]);}M4z.P3q(24);M4z.V8b();return h5C(M4z.o5B(y9x,y9x),i9q / Z0n[2]);};B3C.countDecimals=function(d9P){var Q5Z;if(typeof d9P !== \"number\" || isNaN(d9P)){return 0;}if(Math.floor(d9P) === Number(d9P)){return 0;}Q5Z=d9P.toString().split(\"e-\");if(Q5Z.length > 1){M4z.b$0(46);var B8r=M4z.j1j(10,17,14,5,30);return B3C.countDecimals(Number(Q5Z[0])) + Number(Q5Z[\"1\" * B8r]);}if(Q5Z[0].indexOf(9770 > 3890?\".\":(!!({}),!\"1\")) > -1){return Q5Z[0].split((1230,3670) >= (4852,6179)?(7780,7477) != (2024,8756)?+\"3839\" != (676.64,8710)?(!1,\"x\"):![]:(0x1c72,+\"0x537\"):\".\")[1].length;}return 0;};B3C.isValidNumber=function(i$0){return isFinite(i$0) && +i$0 === i$0;};B3C.log10=function(c2V){M4z.V8b();return Math.log(c2V) / Math.LN10;};B3C.random=function(){var x2$,T_9,Q39;M4z.a3b();x2$=\"u\";x2$+=\"ndef\";x2$+=\"ine\";x2$+=\"d\";T_9=\"und\";T_9+=\"ef\";T_9+=\"i\";T_9+=\"ned\";if(typeof crypto != T_9 && typeof crypto.getRandomValues != x2$){M4z.P3q(81);var f1x=M4z.j1j(15,13,12,40,9);M4z.b$0(82);var C_l=M4z.o5B(3311,11,7,3570);return crypto.getRandomValues(new Uint8Array(f1x))[0] / C_l;}Q39=\"random\";return Math[Q39]();};B3C.boxIntersects=function(G5A,p9x,U5X,m9h,V1B,A94,F3t,X2_,e1q){var j7C,K3f,H99,l5I,y0p,s_I,E9d,U01;j7C=\"l\";j7C+=\"in\";j7C+=\"e\";if(arguments[9] !== undefined){K3f=\"CIQ.boxIntersects() no long\";K3f+=\"er supports isLo\";K3f+=\"g argument, please be sure arguments are passed in as pixels.\";console.warn(K3f);}H99=Math.min(G5A,U5X);l5I=Math.max(G5A,U5X);y0p=Math.min(p9x,m9h);s_I=Math.max(p9x,m9h);M4z.b$0(83);E9d=M4z.j1j(e1q,\"ray\");function R2s(T3I,P4Q){M4z.P3q(84);M4z.V8b();return M4z.o5B(V1B,T3I,F3t,A94,V1B,X2_,P4Q,A94);}if(isNaN(V1B) || isNaN(F3t) || isNaN(A94) || isNaN(X2_)){return !1;}if(e1q != j7C){if(V1B < H99 && F3t < H99 && (!E9d || V1B > F3t)){return !({});}if(V1B > l5I && F3t > l5I && (!E9d || V1B < F3t)){return ![];}if(A94 < y0p && X2_ < y0p && (!E9d || A94 > X2_)){return !!\"\";}if(A94 > s_I && X2_ > s_I && (!E9d || A94 < X2_)){return !({});}}U01={a:R2s(G5A,p9x),b:R2s(G5A,m9h),c:R2s(U5X,p9x),d:R2s(U5X,m9h)};if(U01.a > 0 && U01.b > 0 && U01.c > 0 && U01.d > 0){return !1;}M4z.V8b();if(U01.a < 0 && U01.b < +\"0\" && U01.c < +\"0\" && U01.d < 0){return !({});}return !\"\";};M4z.V8b();B3C.linesIntersect=function(w2f,B09,T1T,h5k,b_H,Q$I,a3f,S38,W3N){var a1o,E6e,X9Y,l3I,K5k,P6V;a1o=\"vertic\";a1o+=\"al\";M4z.P3q(84);E6e=M4z.j1j(b_H,Q$I,B09,a3f,w2f,h5k,S38,T1T);M4z.b$0(84);X9Y=M4z.o5B(a3f,S38,T1T,b_H,a3f,w2f,Q$I,b_H);M4z.b$0(84);l3I=M4z.j1j(T1T,h5k,T1T,w2f,a3f,w2f,B09,b_H);if(E6e === 0){if(X9Y === 0 && l3I === 0){return !!({});}return !!0;}M4z.b$0(22);K5k=M4z.o5B(X9Y,E6e);M4z.P3q(22);P6V=M4z.o5B(l3I,E6e);if(W3N == \"segment\"){if(K5k >= +\"0\" && K5k <= 1 && P6V >= 0 && P6V <= +\"1\"){return !!1;}}else if(W3N == \"line\" || W3N == \"horizontal\" || W3N == a1o){if(K5k >= 0 && K5k <= 1){return !!({});}}else if(W3N == \"ray\"){if(K5k >= +\"0\" && K5k <= 1 && P6V >= +\"0\"){return !![];}}return !!\"\";};B3C.yIntersection=function(r_2,v7f){var M$m,W3h,Y0j,k0$,t5N,N_C,F7L,H_q,Q7v,L8Z,E5N,z8A;M$m=r_2.x0;W3h=r_2.x1;Y0j=v7f;k0$=v7f;t5N=r_2.y0;N_C=r_2.y1;F7L=0;M4z.V8b();H_q=+\"10000\";M4z.P3q(84);Q7v=M4z.o5B(Y0j,k0$,W3h,F7L,M$m,N_C,H_q,t5N);M4z.b$0(84);L8Z=M4z.j1j(F7L,H_q,t5N,Y0j,F7L,M$m,k0$,Y0j);M4z.b$0(22);E5N=M4z.o5B(L8Z,Q7v);if(Q7v === 0){if(L8Z === 0){E5N=1;}else {return null;}}M4z.b$0(85);z8A=M4z.j1j(t5N,E5N,t5N,N_C);return z8A;};B3C.xIntersection=function(H$y,w9I){var Q0W,k_S,K3a,b1h,U$L,k20,o6q,S3a,t8c,c2b,o9K,f0d;Q0W=H$y.x0;k_S=H$y.x1;K3a=0;b1h=10000;U$L=H$y.y0;k20=H$y.y1;o6q=w9I;S3a=w9I;M4z.P3q(84);t8c=M4z.j1j(K3a,b1h,k_S,o6q,Q0W,k20,S3a,U$L);M4z.V8b();M4z.P3q(84);c2b=M4z.o5B(o6q,S3a,U$L,K3a,o6q,Q0W,b1h,K3a);M4z.P3q(22);o9K=M4z.o5B(c2b,t8c);if(t8c === 0){if(c2b === 0){M4z.P3q(24);o9K=M4z.j1j(\"1\",1);}else {return null;}}M4z.b$0(85);f0d=M4z.j1j(Q0W,o9K,Q0W,k_S);return f0d;};B3C.intersectLineLineX=function(N0U,W1E,S$k,j_d,O3z,l4Q,P$7,F21){var E57,d2i,m8R;M4z.P3q(84);E57=M4z.o5B(P$7,F21,S$k,O3z,P$7,N0U,l4Q,O3z);M4z.b$0(84);M4z.V8b();d2i=M4z.j1j(O3z,l4Q,W1E,P$7,N0U,j_d,F21,S$k);M4z.b$0(22);m8R=M4z.o5B(E57,d2i);M4z.P3q(85);return M4z.j1j(N0U,m8R,N0U,W1E);};B3C.intersectLineLineY=function(d$c,W4o,z1Q,z31,r8D,M4u,K3n,i4X){var D9E,x2b,t9A;M4z.P3q(84);D9E=M4z.j1j(K3n,i4X,z1Q,r8D,K3n,d$c,M4u,r8D);M4z.P3q(84);x2b=M4z.o5B(r8D,M4u,W4o,K3n,d$c,z31,i4X,z1Q);M4z.b$0(22);t9A=M4z.o5B(D9E,x2b);M4z.P3q(85);return M4z.j1j(z1Q,t9A,z1Q,z31);};B3C.withinRadius=function(E8o,L$y,p3c){M4z.V8b();return E8o && L$y && (E8o.x - L$y.x) ** 2 + (E8o.y - L$y.y) ** 2 <= p3c ** 2;};};R3=I$E=>{var d6l,T8Z,b7h,g35,V8q;d6l=\"https://metrics.\";d6l+=\"ch\";x2w9K.a3b();d6l+=\"arti\";d6l+=\"q.com\";T8Z=\"1\";T8Z+=\"fb35896-b7c8\";T8Z+=\"-4f85-8e6f-5c\";T8Z+=\"c4996e1372\";b7h=I$E.CIQ;g35=Object.freeze({\"ChartEngine.new\":+\"0\",\"License.tamperSeal\":100});V8q={clientId:T8Z,url:d6l};b7h.metricsClient=function(k56){if(k56){b7h.logMetrics=K89=>{var F8P,Z0s;F8P=b7h.localStorage.getItem(\"uuid\");x2w9K.a3b();if(F8P === undefined || F8P === null){F8P=b7h.uniqueID();b7h.localStorage.setItem(\"uuid\",F8P);}Z0s={slot:g35[K89],uuid:F8P};b7h.postAjax({contentType:\"application/json\",noEpoch:!!({}),payload:JSON.stringify(Z0s),url:`${V8q.url}${\"/m\" + \"e\" + \"tri\" + \"cs/\"}${V8q.clientId}`});};}else {b7h.logMetrics=()=>{};}return V8q;};b7h.metricsClient(![]);};s$=o6p=>{var P6I=x2w9K;var R0M;R0M=o6p.CIQ;R0M.deleteRHS=function(m8K,z7e){P6I.V8b();var u$o;u$o=!!0;for(var h5s in m8K){if(m8K[h5s] == z7e){delete m8K[h5s];u$o=!!({});}}return u$o;};R0M.scrub=function(Y$L,f$r){P6I.V8b();for(var z1y in Y$L){if(typeof Y$L[z1y] == \"undefined\"){delete Y$L[z1y];}if(f$r && Y$L[z1y] === null){delete Y$L[z1y];}}};R0M.dataBindSafeAssignment=function(G3B,s01){R0M.extend(G3B,s01);P6I.V8b();for(var U$3 in G3B){if(typeof s01[U$3] == \"undefined\"){G3B[U$3]=undefined;}}};P6I.V8b();R0M.clone=function(d3a,O8l,q8X){var b9s;if(d3a === null || typeof d3a != \"object\"){return d3a;}b9s=d3a.constructor;if(b9s == Date || b9s == RegExp || b9s == String || b9s == Number || b9s == Boolean){return new b9s(d3a.valueOf());}if(b9s == Function){return function(){return d3a.apply(this,arguments);};}if(!O8l){try{O8l=new b9s();}catch(u7r){O8l=Object.create(Object.getPrototypeOf(d3a));}}for(var R$n in d3a){if(!q8X || d3a.hasOwnProperty(R$n)){O8l[R$n]=O8l[R$n] !== d3a[R$n]?R0M.clone(d3a[R$n],null,q8X):O8l[R$n];}}return O8l;};R0M.shallowClone=function(j5K){var G6T;P6I.V8b();if(!j5K){return j5K;}if(j5K.constructor == Array){G6T=new Array(j5K.length);for(var s0r=+\"0\";s0r < j5K.length;s0r++){G6T[s0r]=j5K[s0r];}return G6T;}G6T={};for(var v_Q in j5K){G6T[v_Q]=j5K[v_Q];}return G6T;};R0M.ensureDefaults=function(j9k,h_5){var L3g;for(var A$c in h_5){L3g=\"unde\";L3g+=\"fi\";L3g+=\"n\";L3g+=\"ed\";if(typeof j9k[A$c] == L3g){j9k[A$c]=h_5[A$c];}}return j9k;};R0M.transferObject=function(C6B,w1E){var F9q;P6I.a3b();for(F9q in C6B){if(C6B.hasOwnProperty(F9q)){delete C6B[F9q];}}for(F9q in w1E){if(w1E.hasOwnProperty(F9q)){C6B[F9q]=w1E[F9q];}}return C6B;};R0M.equals=function(e3Y,e0t,C2R){var w6X,z7u;if(e3Y === e0t){return !\"\";}if(!e3Y && e0t){return !!0;}if(e3Y && !e0t){return !!\"\";}if(typeof e3Y !== typeof e0t){return !!0;}w6X=[...new Set(Object.keys(e3Y).concat(Object.keys(e0t)))];for(var R6e of w6X){z7u=\"o\";z7u+=\"bject\";if(C2R && C2R[R6e])continue;if(typeof e3Y[R6e] === z7u){if(R0M.equals(e3Y[R6e],e0t[R6e]))continue;return ![];}if(e0t[R6e] != e3Y[R6e]){return !!\"\";}}return !!\"1\";};R0M.isSubsetOf=function(C9b,u65){if(!u65){P6I.P3q(64);return P6I.j1j(undefined,u65);}if(!C9b){return !!0;}return Object.keys(u65).every(b6O=>{P6I.a3b();if(typeof u65[b6O] == \"object\"){return R0M.isSubsetOf(C9b[b6O],u65[b6O]);}return u65[b6O] === C9b[b6O];});};R0M.isEmpty=function(l2q){for(var b8Y in l2q){if(l2q.hasOwnProperty(b8Y)){return ![];}}return !!({});};R0M.first=function(j0Q){for(var E1u in j0Q){return E1u;}return null;};R0M.last=function(p0w){var l3T;l3T=null;P6I.a3b();for(var G1V in p0w){l3T=G1V;}return l3T;};R0M.objLength=function(u2f){var c2_;P6I.V8b();if(!u2f){return 0;}P6I.b$0(63);c2_=P6I.o5B(\"0\",0);for(var c9N in u2f){c2_++;}return c2_;};R0M.deriveFromObjectChain=function(S69,f8b){var Z_$,b27;if(f8b.indexOf((9846,173.01) != (2270,493.83)?\".\":\"88.47\" * 1 < 964?(!\"\",8.03e+2):\"n\") == -1){return {obj:S69,member:f8b};}Z_$=f8b.split((7980,5198) <= (7623,8581)?7410 === (6510,85.88)?503.01 != (8120,2370)?!0:+\"0x1f12\":\".\":(!0,7.02e+2));P6I.a3b();for(var c3_=0;c3_ < Z_$.length - 1;c3_++){b27=Z_$[c3_];if(!S69[b27] && S69[b27] !== 0){S69[b27]={};}S69=S69[b27];}return {obj:S69,member:Z_$[c3_]};};R0M.createObjectChainNames=function(A3J,D4h){P6I.V8b();var U_1;U_1=[];for(var o9e=0;o9e < D4h.length;o9e++){U_1.push(A3J + \"-->\" + D4h[o9e]);}return U_1;};R0M.getObjectChainRoot=function(I1D){if(!I1D){return null;}return I1D.split(\"-->\")[P6I.o5B(\"0\",1,P6I.b$0(24))];};R0M.existsInObjectChain=function(o15,Q2U){var O0d,k0D;if(Q2U.indexOf(\"-->\") == -1){O0d=o15[Q2U];if(!O0d && O0d !== 0){return null;}return {obj:o15,member:Q2U};}k0D=Q2U.split(\"-->\");for(var i4J=0;i4J < k0D.length;i4J++){O0d=o15[k0D[i4J]];if(!O0d && O0d !== +\"0\"){return null;}if(i4J < k0D.length - 1){o15=O0d;}else {return {obj:o15,member:k0D[i4J]};}}};R0M.derivedFrom=function(G58,U2V){P6I.a3b();if(U2V.isPrototypeOf(G58)){return !![];}if(G58 instanceof U2V){return !!({});}return ![];};R0M.replaceFields=function(F4o,M_n){P6I.a3b();var n5X,v2C,h6d,m2O,c21;if(!F4o){return F4o;}n5X={};for(var p2N in F4o){v2C=F4o[p2N];h6d=M_n[p2N];if(!h6d){h6d=p2N;}if(v2C && typeof v2C == \"object\"){if(v2C.constructor == Array){m2O=n5X[h6d]=new Array(v2C.length);for(var c6F=\"0\" * 1;c6F < m2O.length;c6F++){c21=v2C[c6F];if(typeof c21 == \"object\"){m2O[c6F]=R0M.replaceFields(c21,M_n);}else {m2O[c6F]=c21;}}}else {n5X[h6d]=R0M.replaceFields(v2C,M_n);}}else {n5X[h6d]=v2C;}}return n5X;};R0M.removeNullValues=function(W1Y){var C3Y;C3Y=R0M.clone(W1Y);for(var G$U in C3Y){if(!C3Y[G$U]){delete C3Y[G$U];}}return C3Y;};R0M.reverseObject=function(V17){P6I.V8b();var i0M;i0M={};for(var T2I in V17){i0M[V17[T2I]]=T2I;}return i0M;};R0M.getFromNS=(y4j,z_V,n6n)=>{var V3J,z3n,o9s;if(y4j){V3J=y4j;z3n=z_V.split(\".\");for(var h34=0;h34 < z3n.length;h34++){o9s=z3n[h34];if(typeof V3J[o9s] === \"undefined\")break;V3J=V3J[o9s];}if(h34 === z3n.length){return V3J;}}return undefined || n6n;};R0M.getFnFromNS=(t3E,n2k,Q0V)=>{return R0M.getFromNS(t3E,n2k,function(){P6I.a3b();return Q0V;});};R0M.get=(e55,c8t)=>{P6I.a3b();return R0M.getFromNS(R0M,e55,c8t);};R0M.getFn=(z27,V85)=>{P6I.V8b();return R0M.getFromNS(R0M,z27,function(){return V85;});};};p$=F58=>{var F6X=x2w9K;var i3t,d12;i3t=\"CC\";i3t+=\"W\";F6X.a3b();d12=F58.CIQ;d12.Plotter=function(){this.seriesArray=[];this.seriesMap={};};d12.extend(d12.Plotter.prototype,{Series:function(N7D,h$A,p8g,Q4T,v49,H_K){this.name=N7D;this.strokeOrFill=h$A;this.color=p8g;this.moves=[];this.text=[];if(!Q4T || Q4T > 1 || Q4T < 0){Q4T=1;}F6X.a3b();this.opacity=Q4T;if(!v49 || v49 > 25 || v49 < 1){v49=+\"1\";}this.width=v49;this.pattern=d12.borderPatternToArray(v49,H_K);},newSeries:function(p2y,t86,d2X,f5_,G9R){var y1s;F6X.a3b();if(d2X.constructor == String){y1s=new this.Series(p2y,t86,d2X,f5_,G9R);}else {y1s=new this.Series(p2y,t86,d2X.color,d2X.opacity,G9R >= 0?G9R:d12.stripPX(d2X.width),d2X.borderTopStyle);}this.seriesArray.push(y1s);this.seriesMap[p2y]=y1s;},reset:function(J9W){var E0b;for(var q5B in this.seriesMap){if(J9W && J9W != q5B)continue;E0b=this.seriesMap[q5B];if(E0b){E0b.moves=[];E0b.text=[];}}},moveTo:function(k$S,d2s,X4T){var w3D,X0Q;w3D=\"m\";w3D+=\"o\";w3D+=\"veTo\";X0Q=this.seriesMap[k$S];X0Q.moves.push({action:w3D,x:d2s,y:X4T});},lineTo:function(C4H,E1w,r2f){var Q2M,A3n;F6X.V8b();Q2M=this.seriesMap[C4H];A3n=Q2M.pattern;Q2M.moves.push({action:\"lineTo\",x:E1w,y:r2f,pattern:A3n});},dashedLineTo:function(Y5h,F1Q,o01,l6L){F6X.a3b();var b8q;b8q=this.seriesMap[Y5h];b8q.moves.push({action:\"lineTo\",x:F1Q,y:o01,pattern:l6L});},quadraticCurveTo:function(G2f,D5s,M03,K4R,o0O){var D01,Z7W;F6X.a3b();D01=this.seriesMap[G2f];Z7W=D01.pattern;D01.moves.push({action:\"quadraticCurveTo\",x0:D5s,y0:M03,x:K4R,y:o0O,pattern:Z7W});},bezierCurveTo:function(b$U,b99,Y$3,y3_,r5F,h_y,C5D){var j7I,l1k,N5f;j7I=\"bez\";j7I+=\"ierCurveTo\";l1k=this.seriesMap[b$U];N5f=l1k.pattern;l1k.moves.push({action:j7I,x0:b99,y0:Y$3,x1:y3_,y1:r5F,x:h_y,y:C5D,pattern:N5f});},addText:function(H1N,k$t,R5U,T6J,h1e,o6f,A4N,U0d = {}){var H97;F6X.a3b();H97=this.seriesMap[H1N];H97.text.push({text:k$t,x:R5U,y:T6J,bg:h1e,meta:U0d});},drawText:function(y_7,a7N){var k6k,U0t,y6w,X5B,d1O,K6S,Q_y,u3C;F6X.P3q(86);var J$w=F6X.j1j(1,2,4);F6X.a3b();k6k=Math.PI / J$w;U0t={CW:1,CCW:-1};for(var W1U=0;W1U < a7N.text.length;W1U++){y6w=a7N.text[W1U];if(y6w.bg){X5B=\"r\";X5B+=\"i\";X5B+=\"g\";X5B+=\"ht\";d1O=y6w.width || y_7.measureText(y6w.text).width;K6S=y6w.height || 12;Q_y=y_7.fillStyle;y_7.fillStyle=y6w.bg;if(y_7.textAlign === X5B){y_7.fillRect(y6w.x,y6w.y - K6S / 2,-d1O,-K6S);}else {y_7.fillRect(y6w.x,y6w.y - K6S / 2,d1O,K6S);}y_7.fillStyle=Q_y;}if(y6w.meta.centered){y_7.textAlign=\"center\";}if(y6w.meta.vertical){u3C=U0t[y6w.meta.vertical];y_7.save();F6X.b$0(24);y_7.rotate(F6X.j1j(k6k,u3C));y_7.fillText(y6w.text,-y6w.y * -u3C,y6w.x * -u3C);y_7.restore();}else {y_7.fillText(y6w.text,y6w.x,y6w.y);}}},draw:function(Q9H,c51){var o5c,y0y,R5c,j1l,C_D,F0O,s1E,I4_,r2S,S10,K7i,x91,g7s,G_j;o5c=Q9H.lineWidth;y0y=Q9H.fillStyle;R5c=Q9H.strokeStyle;j1l=Q9H.globalAlpha;for(var B9p=0;B9p < this.seriesArray.length;B9p++){C_D=\"f\";C_D+=\"i\";C_D+=\"l\";C_D+=\"l\";F0O=this.seriesArray[B9p];if(c51 && F0O.name != c51)continue;Q9H.beginPath();Q9H.lineWidth=F0O.width;Q9H.globalAlpha=F0O.opacity;Q9H.fillStyle=F0O.color;Q9H.strokeStyle=F0O.color;Q9H.save();s1E=[0,0];for(var J8_=+\"0\";J8_ < F0O.moves.length;J8_++){I4_=\"b\";I4_+=\"ezierCu\";I4_+=\"rve\";I4_+=\"To\";r2S=\"quadraticCurveT\";r2S+=\"o\";S10=F0O.moves[J8_];if(!S10.pattern){S10.pattern=[];}if(JSON.stringify(Q9H.getLineDash()) !== JSON.stringify(S10.pattern)){K7i=\"fil\";K7i+=\"l\";Q9H[F0O.strokeOrFill == \"fill\"?K7i:\"stroke\"]();Q9H.beginPath();Q9H.moveTo(s1E[0],s1E[\"1\" ^ 0]);}Q9H.setLineDash(S10.pattern);Q9H.lineDashOffset=0;if(S10.action == r2S){Q9H[S10.action](S10.x0,S10.y0,S10.x,S10.y);}else if(S10.action == I4_){Q9H[S10.action](S10.x0,S10.y0,S10.x1,S10.y1,S10.x,S10.y);}else {Q9H[S10.action](S10.x,S10.y);}s1E=[S10.x,S10.y];}Q9H[F0O.strokeOrFill == C_D?\"fill\":\"stroke\"]();Q9H.closePath();Q9H.restore();this.drawText(Q9H,F0O);Q9H.lineWidth=+\"1\";}x91=-605495178;F6X.a3b();g7s=-119060232;F6X.P3q(63);G_j=F6X.j1j(\"2\",0);for(var G$v=1;F6X.P8Y(G$v.toString(),G$v.toString().length,+\"24098\") !== x91;G$v++){Q9H.lineWidth=o5c;Q9H.fillStyle=y0y;Q9H.strokeStyle=R5c;G_j+=2;}if(F6X.P8Y(G_j.toString(),G_j.toString().length,\"48927\" ^ 0) !== g7s){Q9H.lineWidth=o5c;Q9H.fillStyle=y0y;Q9H.strokeStyle=R5c;}Q9H.globalAlpha=j1l;},BOTTOM_TO_TOP:i3t,TOP_TO_BOTTOM:\"CW\"},!!({}));};p0=T7d=>{var e2l;e2l=T7d.CIQ;e2l.Renderer=function(){};e2l.Renderer.produce=function(E9R,J_Z){x2w9K.V8b();var g3E,Y92;g3E=null;if(E9R){for(var b5e in e2l.Renderer){Y92=e2l.Renderer[b5e];if(Y92.requestNew){g3E=Y92.requestNew(E9R.split(776.92 >= 8260?(9203,+\"664.83\") === (8377,2497)?\"o\":(![],0x1695):\"_\"),J_Z);}if(g3E){return g3E;}}}J_Z.type=\"line\";return new e2l.Renderer.Lines({params:J_Z});};e2l.Renderer.colorFunctions={};e2l.Renderer.registerColorFunction=function(j5V,X$X){e2l.Renderer.colorFunctions[j5V]=X$X;};e2l.Renderer.unregisterColorFunction=function(d7j){x2w9K.V8b();delete e2l.Renderer.colorFunctions[d7j];};e2l.Renderer.prototype.init={};e2l.Renderer.prototype.adjustYAxis=function(){};e2l.Renderer.prototype.draw=function(){};e2l.Renderer.prototype.drawIndividualSeries=function(E87,Q0A){};e2l.Renderer.prototype.construct=function(a_s){var J0B;if(!a_s){a_s={};}J0B=a_s.params?a_s.params:{};if(this.init){e2l.ensureDefaults(J0B,this.init);}if(!J0B.name){J0B.name=e2l.uniqueID();}if(!J0B.heightPercentage){J0B.heightPercentage=0.7;}if(!J0B.opacity){J0B.opacity=1;}if(J0B.highlightable !== !({})){J0B.highlightable=!!1;}if(!J0B.panel){J0B.panel=\"chart\";}x2w9K.a3b();if(J0B.yAxis){J0B.yAxis=new e2l.ChartEngine.YAxis(J0B.yAxis);if(!J0B.yAxis.name){J0B.yAxis.name=J0B.name;}}this.cb=a_s.callback;this.params=J0B;this.seriesParams=[];this.caches={};this.colors={};};e2l.Renderer.prototype.attachSeries=function(E_3,T6n){var f8Y=x2w9K;var P5g,x7d,M9H,i7D,Y13,J_0,l1V,C87,J0i,S4A,W4z;P5g=\"a\";P5g+=\"ut\";P5g+=\"o\";x7d=this.stx;f8Y.a3b();if(!x7d){return this;}M9H=x7d.chart.series[E_3];if(!M9H){M9H={parameters:{}};}i7D=this.params;Y13=M9H.parameters;J_0={id:E_3,chartType:i7D.type,display:Y13.display,border_color_up:i7D.defaultBorders?\"auto\":null,fill_color_up:Y13.color,opacity_up:i7D.opacity,border_color_down:i7D.defaultBorders?P5g:null,fill_color_down:Y13.color,opacity_down:i7D.opacity,color:Y13.color,symbol:Y13.symbol,symbolObject:e2l.clone(Y13.symbolObject)};if(typeof T6n == \"string\"){J_0.color=J_0.fill_color_down=J_0.fill_color_up=T6n;}else if(typeof T6n == \"object\"){for(var g_K in T6n){J_0[g_K]=T6n[g_K];}l1V=J_0.color;C87=J_0.border_color;if(l1V){if(!J_0.fill_color_up){J_0.fill_color_up=l1V;}if(!J_0.fill_color_down){J_0.fill_color_down=l1V;}if(!J_0.fill_color_even){J_0.fill_color_even=l1V;}}if(C87){if(!J_0.border_color_up){J_0.border_color_up=C87;}if(!J_0.border_color_down){J_0.border_color_down=C87;}if(!J_0.border_color_even){J_0.border_color_even=C87;}}}if(J_0.symbol && J_0.field != J_0.symbol){J_0.subField=J_0.field;J_0.field=J_0.symbol;}if(!J_0.id){J_0.id=e2l.uniqueID();}J0i=0;for(;J0i < this.seriesParams.length;++J0i){if(this.seriesParams[J0i].id === J_0.id){this.removeSeries(J_0.id,!\"\");break;}}this.seriesParams.splice(J0i,0,J_0);if(J_0.fill_color_up != J_0.fill_color_down){f8Y.b$0(7);this.colors[f8Y.o5B(\" up\",E_3)]={color:J_0.fill_color_up,opacity:J_0.opacity_up,display:J_0.display?J_0.display + \" up\":E_3 + \" up\"};f8Y.b$0(7);this.colors[f8Y.o5B(\" dn\",E_3)]={color:J_0.fill_color_down,opacity:J_0.opacity_down,display:J_0.display?J_0.display + \" down\":E_3 + \" down\"};}else {this.colors[E_3]={color:J_0.fill_color_up,opacity:J_0.opacity_up,display:J_0.display?J_0.display:E_3};}S4A=i7D.panel;if(!x7d.panels[S4A]){W4z=i7D.yAxis;if(!W4z){W4z=new e2l.ChartEngine.YAxis();W4z.needsInitialPadding=!!({});}W4z.name=S4A;x7d.createPanel(S4A,S4A,null,null,W4z);}else {if(i7D.yAxis){i7D.yAxis=x7d.addYAxis(x7d.panels[S4A],i7D.yAxis);i7D.yAxis.needsInitialPadding=!!({});Y13.yAxis=i7D.yAxis;x7d.resizeChart();}else if(J_0.yAxis){i7D.yAxis=J_0.yAxis;}}return this;};e2l.Renderer.prototype.removeSeries=function(z1_,D0g){var y6s=x2w9K;var F6U,t$1,C7m,d6R,W4g,s8M,w2g,g6n;F6U=null;t$1=!!\"\";C7m=this.stx;d6R=C7m.chart;for(var d4y in d6R.seriesRenderers){W4g=d6R.seriesRenderers[d4y];for(var h5r=0;h5r < W4g.seriesParams.length;h5r++){s8M=W4g.seriesParams[h5r];if(s8M.id == z1_ && this === W4g){F6U=h5r;}else if(s8M.isComparison && s8M.panel == d6R.panel.name && (!s8M.yAxis || s8M.yAxis == d6R.yAxis)){t$1=!!({});}}}if(F6U !== null){if(d6R.forcePercentComparison && !t$1 && this.seriesParams[F6U].isComparison && C7m.layout.chartScale != \"linear\"){C7m.setChartScale();}this.seriesParams.splice(F6U,1);}y6s.P3q(7);delete this.colors[y6s.j1j(\" up\",z1_)];y6s.P3q(7);delete this.colors[y6s.o5B(\" dn\",z1_)];delete this.colors[z1_];y6s.a3b();if(!D0g){for(var h6P in d6R.seriesRenderers){g6n=d6R.seriesRenderers[h6P];for(var K7V=0;K7V < g6n.seriesParams.length;K7V++){if(g6n.seriesParams[K7V].id == z1_){w2g=!![];break;}w2g=![];}if(w2g)break;}if(w2g === !({}) || F6U !== null){if(C7m.deleteSeries){C7m.deleteSeries(z1_,d6R);}}}C7m.deleteYAxisIfUnused(C7m.panels[this.params.panel],this.params.yAxis);C7m.resizeChart();if(!C7m.currentlyImporting){C7m.drawWithRange();}return this;};e2l.Renderer.prototype.modifyRenderer=function(E_d){var u$w,S7$;u$w=this.params;x2w9K.a3b();var {stx:w85}=this;for(var L0F in E_d){S7$=E_d[L0F];switch(L0F){case \"baseline\":if(S7$){if(typeof S7$ === \"object\"){this.params.baseline=e2l.ensureDefaults(S7$,e2l.ChartEngine.Chart.prototype.baseline);}w85.registerBaselineToHelper(this);}else {w85.removeBaselineFromHelper(this);}break;case \"type\":this.params.type=S7$;break;case \"style\":this.params.style=S7$;break;default:break;}}};e2l.Renderer.prototype.getDependents=function(S_N){var a5z,O2l,G_2,B_H;a5z=this;O2l=[];for(var v4X in S_N.chart.seriesRenderers){G_2=S_N.chart.seriesRenderers[v4X];if(G_2.params.dependentOf == this.params.name){O2l.push(G_2);}}B_H=function(){var J_U;J_U=S_N.layout.studies[I7I];a5z.seriesParams.forEach(u0i=>{if(J_U.inputs.Field == u0i.field){O2l.push(J_U);}else if(J_U.inputs.Series == u0i.field){O2l.push(J_U);}});};for(var I7I in S_N.layout.studies){B_H();}return O2l;};e2l.Renderer.prototype.undraggable=function(i9S){x2w9K.V8b();if(this == i9S.mainSeriesRenderer){return !!({});}return this.params.dependentOf == i9S.mainSeriesRenderer.params.name;};e2l.Renderer.prototype.removeAllSeries=function(i95){var v60;if(i95 || this === this.stx.mainSeriesRenderer){v60=[];for(var J6A=0;J6A < this.seriesParams.length;J6A++){v60.push(this.seriesParams[J6A].id);}for(var A9A=0;A9A < v60.length;A9A++){this.removeSeries(v60[A9A]);}}this.seriesParams=[];this.colors={};x2w9K.a3b();this.stx.deleteYAxisIfUnused(this.stx.panels[this.params.panel],this.params.yAxis);this.stx.resizeChart();return this;};e2l.Renderer.prototype.getYAxis=function(f9M){x2w9K.a3b();var X1K,T8j;if(this.params){if(this.params.yAxis){X1K=this.params.yAxis;}else {T8j=f9M.panels[this.params.panel];if(!T8j){return !1;}X1K=T8j.yAxis;}}else {X1K=f9M.chart.panel.yAxis;}return X1K;};e2l.Renderer.prototype.ready=function(){this.stx.createDataSet();x2w9K.a3b();this.stx.drawWithRange();return this;};e2l.Renderer.Lines=function(q6v){var t1Q,u3H;t1Q=\"obj\";t1Q+=\"ect\";u3H=\"w\";u3H+=\"a\";u3H+=\"v\";u3H+=\"e\";this.construct(q6v);var {params:D$N}=this;if(!D$N.type){D$N.type=\"line\";}if(!D$N.style){switch(D$N.type){case \"mountain\":if(D$N.baseline){D$N.style=\"stx_baseline_delta_mountain\";}else if(D$N.colored){D$N.style=\"stx_colored_mountain_chart\";}else {D$N.style=\"stx_mountain_chart\";}break;default:D$N.style=\"stx_line_chart\";}}x2w9K.a3b();this.supportsAnimation=!!\"1\";if(D$N.type == u3H || D$N.type == \"channel\"){D$N.step=D$N.vertex=D$N.baseline=D$N.colored=!!0;this.highLowBars=this.barsHaveWidth=!\"\";this.supportsAnimation=!1;}else if(D$N.type == \"step\"){D$N.step=!![];}var {baseline:B6d}=D$N;if(B6d && typeof B6d === t1Q){e2l.ensureDefaults(D$N.baseline,e2l.ChartEngine.Chart.prototype.baseline);}};e2l.inheritsFrom(e2l.Renderer.Lines,e2l.Renderer,![]);e2l.Renderer.Lines.requestNew=function(Y0D,u3o){x2w9K.V8b();var c0z,D8n,Q8d,g$t,k0j,H2V,u$I,o10,p_Z;c0z=null;D8n=u3o.step;Q8d=u3o.colored;g$t=u3o.baseline;k0j=u3o.vertex;H2V=u3o.centered;for(var U2B=0;U2B < Y0D.length;U2B++){u$I=\"bas\";u$I+=\"eline\";o10=\"l\";o10+=\"in\";o10+=\"e\";p_Z=Y0D[U2B];switch(p_Z){case o10:case \"mountain\":case \"wave\":case \"channel\":c0z=p_Z;break;case u$I:g$t=g$t || !!1;break;case \"colored\":Q8d=!![];break;case \"step\":D8n=!![];break;case \"vertex\":k0j=!![];break;case \"delta\":break;case \"noncentered\":H2V=!\"1\";break;default:return null;}}if(c0z === null && !g$t && !D8n){return null;}return new e2l.Renderer.Lines({params:e2l.extend(u3o,{type:c0z,step:D8n,colored:Q8d,baseline:g$t,centered:H2V,vertex:k0j})});};e2l.Renderer.Lines.prototype.draw=function(){var Y9n,h9z,A2B,E62,o$I,e8F,h$t,B5f,W3y,R9C,t4M;function R9i(D9s){var F2m,I05,F5W;F2m=D9s.fill_color_up || Y9n.getCanvasColor(\"stx_line_up\");I05=D9s.fill_color_down || Y9n.getCanvasColor(\"stx_line_down\");F5W=D9s.color || Y9n.getCanvasColor(\"stx_line_chart\");return function(Q$9,D0P,a89){if(!D0P.iqPrevClose && D0P.iqPrevClose !== 0){return F5W;}x2w9K.a3b();if(D0P.Close > D0P.iqPrevClose){return F2m;}if(D0P.Close < D0P.iqPrevClose){return I05;}return F5W;};}Y9n=this.stx;h9z=this.stx.panels[this.params.panel];A2B=h9z.chart;E62={};e8F=this.seriesParams;h$t=this.params.colorFunction;for(o$I=0;o$I < e8F.length;o$I++){B5f=e8F[o$I];if(this.params.colored){W3y=[\"_color_up\",\"_color_down\",\"_color\"];for(var k6p=0;k6p < W3y.length;k6p++){R9C=B5f[\"border\" + W3y[k6p]];if(R9C && R9C != \"auto\"){B5f[\"fill\" + W3y[k6p]]=R9C;}}if(!h$t){h$t=R9i(B5f);}this.params.colorFunction=h$t;}t4M={};if(A2B.series[B5f.id]){t4M=e2l.clone(A2B.series[B5f.id].parameters);}E62[B5f.id]={parameters:e2l.extend(e2l.extend(t4M,this.params),B5f),yValueCache:this.caches[B5f.id]};if(this == Y9n.mainSeriesRenderer && A2B.customChart && A2B.customChart.colorFunction){E62[B5f.id].parameters.colorFunction=A2B.customChart.colorFunction;}}x2w9K.a3b();Y9n.drawSeries(A2B,E62,this.params.yAxis,this);for(o$I in E62){this.caches[o$I]=E62[o$I].yValueCache;}};e2l.Renderer.Lines.prototype.drawIndividualSeries=function(T9x,r_h){var K5O,M36,J7m,m0N,e4e,w$t;K5O=\"st\";K5O+=\"ri\";x2w9K.a3b();K5O+=\"ng\";if(r_h.invalid){return;}M36=this.stx;J7m=T9x.context;m0N=null;e4e=r_h.colorFunction;w$t=M36.panels[r_h.panel] || T9x.panel;if(typeof e4e == K5O){e4e=e2l.Renderer.colorFunctions[e4e];if(!e4e){return;}}if(r_h.vertex){J7m.save();J7m.lineJoin=\"bevel\";}if(r_h.type == \"wave\"){m0N=M36.drawWaveChart(w$t,r_h);}else if(r_h.baseline){m0N=M36.drawBaselineChart(w$t,r_h);M36.positionBaselineHandle(this);}else if(r_h.type == \"mountain\"){r_h.returnObject=!0;m0N=M36.drawMountainChart(w$t,r_h,e4e);}else if(r_h.type == \"channel\"){r_h.returnObject=!![];m0N=M36.drawChannelChart(w$t,e4e,r_h);}else {r_h.returnObject=!![];m0N=M36.drawLineChart(w$t,r_h.style,e4e,r_h);}if(r_h.vertex){M36.scatter(w$t,{yAxis:r_h.yAxis,field:r_h.symbol || r_h.field,subField:r_h.subField,symbol:r_h.symbol,color:r_h.vertex_color,highlight:r_h.highlight});J7m.restore();}return m0N;};e2l.Renderer.OHLC=function(p33){var L7v,P3a,o0D;L7v=\"b\";L7v+=\"ar\";this.construct(p33);P3a=this.params;if(!P3a.type){P3a.type=\"candle\";}this.highLowBars=this.barsHaveWidth=this.standaloneBars=!![];if(P3a.histogram){o0D=\"c\";o0D+=\"an\";o0D+=\"dle\";P3a.type=o0D;this.highLowBars=!({});P3a.volume=P3a.hollow=!!\"\";}if(P3a.type == L7v){P3a.volume=P3a.hollow=P3a.histogram=!!\"\";}if(P3a.type == \"candle\"){P3a.hlc=P3a.colored=!!0;}if(P3a.volume){P3a.hollow=!!({});}};e2l.inheritsFrom(e2l.Renderer.OHLC,e2l.Renderer,!({}));e2l.Renderer.OHLC.requestNew=function(q28,Y$v){var k7G,A97,p7p;k7G=null;A97=Y$v.histogram;for(var e4V=0;e4V < q28.length;e4V++){p7p=q28[e4V];switch(p7p){case \"candle\":k7G=p7p;break;case \"histogram\":A97=!0;k7G=\"candle\";break;default:return null;}}if(k7G === null){return null;}x2w9K.V8b();return new e2l.Renderer.OHLC({params:e2l.extend(Y$v,{type:k7G,histogram:A97})});};e2l.Renderer.OHLC.getChartParts=function(c0y,d07){var g4_,h5v,U4a,w11,P5s,D0w,e9I,u7i,S51,p5o,h7O,l_E,k6Y,q1r,w9r,T0l;g4_=\"f\";g4_+=\"ill_color_down\";h5v=\"border_\";h5v+=\"color_up\";U4a=\"f\";U4a+=\"ill_colo\";U4a+=\"r\";U4a+=\"_up\";w11=\"bo\";w11+=\"rder_color_even\";P5s=\"s\";P5s+=\"hado\";P5s+=\"w\";D0w=\"border\";D0w+=\"_co\";D0w+=\"lor_up\";e9I=\"stx_candle\";e9I+=\"_shad\";e9I+=\"ow_up\";u7i=\"stx_ca\";u7i+=\"ndle_sha\";u7i+=\"dow\";S51=\"s\";S51+=\"had\";S51+=\"o\";S51+=\"w\";p5o=\"stx_hist\";p5o+=\"ogram_\";p5o+=\"d\";p5o+=\"own\";h7O=\"his\";h7O+=\"to\";h7O+=\"gram\";l_E=\"hi\";l_E+=\"st\";l_E+=\"ogram\";k6Y=\"stx_h\";k6Y+=\"istogram_up\";q1r=+\"8\";w9r=16;T0l=32;return [{type:\"histogram\",drawType:\"histogram\",style:k6Y,condition:q1r,fill:\"fill_color_up\",border:\"border_color_up\",useColorInMap:!0,useBorderStyleProp:!!({})},{type:l_E,drawType:h7O,style:p5o,condition:w9r,fill:\"fill_color_down\",border:\"border_color_down\",useColorInMap:!![],useBorderStyleProp:!0},{type:\"histogram\",drawType:\"histogram\",style:\"stx_histogram_even\",condition:T0l,fill:\"fill_color_even\",border:\"border_color_even\",skipIfPass:!0,useColorInMap:!!\"1\",useBorderStyleProp:!![]},{type:\"candle\",drawType:S51,style:u7i,border:\"border_color_up\"},{type:\"candle\",drawType:\"shadow\",style:e9I,condition:q1r,border:D0w},{type:\"candle\",drawType:\"shadow\",style:\"stx_candle_shadow_down\",condition:w9r,border:\"border_color_down\"},{type:\"candle\",drawType:P5s,style:\"stx_candle_shadow_even\",condition:T0l,border:w11,skipIfPass:!![]},{type:\"candle\",drawType:\"candle\",style:\"stx_candle_up\",condition:q1r,fill:U4a,border:h5v,useColorInMap:!\"\",useBorderStyleProp:!![]},{type:\"candle\",drawType:\"candle\",style:\"stx_candle_down\",condition:w9r,fill:g4_,border:\"border_color_down\",useColorInMap:!0,useBorderStyleProp:!!({})}];};e2l.Renderer.OHLC.prototype.draw=function(){var l_U,F0y,Q4A,N2a,n4x,u48,f62,L4l;l_U=this.stx;F0y=this.stx.panels[this.params.panel];x2w9K.a3b();Q4A=F0y.chart;N2a={};u48=this.seriesParams;for(n4x=0;n4x < u48.length;n4x++){f62=u48[n4x];L4l={};if(Q4A.series[f62.id]){L4l=e2l.clone(Q4A.series[f62.id].parameters);}N2a[f62.id]={parameters:e2l.extend(e2l.extend(L4l,this.params),f62)};if(this == l_U.mainSeriesRenderer && Q4A.customChart && Q4A.customChart.colorFunction){N2a[f62.id].parameters.colorFunction=Q4A.customChart.colorFunction;}}l_U.drawSeries(Q4A,N2a,this.params.yAxis,this);for(n4x in N2a){if(N2a[n4x].yValueCache){this.caches[n4x]=N2a[n4x].yValueCache;}}};e2l.Renderer.OHLC.prototype.getColor=function(Y0o,x1P,t2P,U5s,X0D,s7H){var K0m,z4K,A56,q$z,c$N;x2w9K.a3b();K0m=s7H || t2P.color;z4K=this.params.yAxis || x1P.yAxis;if(U5s){K0m=s7H || t2P.borderLeftColor || t2P[\"border-left-color\"];if(!K0m){return null;}}if(!X0D){return K0m;}A56=Y0o.pixelFromTransformedValue(z4K.highValue,x1P,z4K);if(isNaN(A56)){A56=0;}q$z=t2P.backgroundColor;if(K0m && !e2l.isTransparent(K0m)){c$N=Y0o.chart.context.createLinearGradient(0,A56,0,2 * z4K[z4K.flipped?\"top\":\"bottom\"] - A56);c$N.addColorStop(0,K0m);x2w9K.P3q(62);c$N.addColorStop(x2w9K.o5B(64,\"1\"),q$z);return c$N;}return q$z;};e2l.Renderer.OHLC.prototype.drawIndividualSeries=function(x_p,s1C){var q06=x2w9K;var O2Q,N1o,P01,G5O,X$w,M_M,Y0l,n2O,g2$,s_t,q_e,N1j,o5i,e5m,j2J,g0A,A2L,j5Q,q1s,V8u,i9I,h3z,L2U,C9B,n8D,Q6t,c75,C$M,b$8,I5$,f6n,Q60,q$r,m2c,z01,e6y,i2D,R3M;if(s1C.invalid){return;}O2Q=this.stx;N1o=x_p.context;P01=s1C.colorFunction;G5O=O2Q.panels[s1C.panel] || x_p.panel;if(typeof P01 == \"string\"){P01=e2l.Renderer.colorFunctions[P01];if(!P01){return;}}X$w=O2Q.layout.candleWidth - x_p.tmpWidth <= 2 && x_p.tmpWidth <= 3;M_M=1;Y0l=+\"2\";n2O=4;g2$=8;s_t=16;q06.b$0(24);q_e=q06.o5B(\"32\",1);if(!x_p.state.chartType){x_p.state.chartType={};}N1j=x_p.state.chartType.pass={};o5i=O2Q.colorByCandleDirection;if(s1C.colorBasis){o5i=s1C.colorBasis == \"open\";}e5m=s1C.histogram;j2J=s1C.type;g0A=s1C.hollow;q06.V8b();A2L=O2Q.noWicksOnCandles[j2J];O2Q.startClip(G5O.name);j5Q=null;q1s={colors:[],cache:[]};V8u=[];if(P01){i9I={isHistogram:e5m,field:s1C.field,yAxis:s1C.yAxis,isVolume:s1C.volume,highlight:s1C.highlight};if(!e5m && j2J == \"bar\"){i9I.type=s1C.hlc?\"hlc\":\"bar\";q1s=O2Q.drawBarChart(G5O,\"stx_bar_chart\",P01,i9I);}else {if(j2J == \"candle\" && !A2L){O2Q.drawShadows(G5O,P01,i9I);}q1s=O2Q.drawCandles(G5O,P01,i9I);i9I.isOutline=!0;if(g0A || !X$w){O2Q.drawCandles(G5O,P01,i9I);}}}else {h3z=e5m && s1C.gradient !== !!\"\";L2U=e2l.Renderer.OHLC.getChartParts(s1C.style,o5i);for(var j1Z=\"0\" | 0;j1Z < L2U.length;j1Z++){C9B=\"b\";C9B+=\"a\";C9B+=\"r\";n8D=\"c\";n8D+=\"an\";n8D+=\"dl\";n8D+=\"e\";Q6t=\"b\";Q6t+=\"ar\";c75=L2U[j1Z];if(c75.skipIfPass && !N1j.even)continue;else if(e5m){if(c75.type != \"histogram\")continue;}else if(j2J == Q6t){if(c75.type != \"bar\")continue;else if(s1C.colored && !c75.condition)continue;else if(!s1C.colored && c75.condition)continue;}else if(g0A){if(c75.type != \"hollow\")continue;else if(c75.drawType == \"shadow\" && A2L)continue;}else if(j2J == n8D){C$M=\"s\";C$M+=\"h\";C$M+=\"a\";C$M+=\"dow\";b$8=\"can\";b$8+=\"dl\";b$8+=\"e\";if(c75.type != b$8)continue;else if(c75.drawType == C$M){I5$=\"stx_can\";I5$+=\"dle_shadow_even\";if(A2L)continue;f6n=s1C.border_color_up || O2Q.getCanvasColor(\"stx_candle_shadow_up\");Q60=s1C.border_color_down || O2Q.getCanvasColor(\"stx_candle_shadow_down\");q$r=s1C.border_color_even || O2Q.getCanvasColor(I5$);if(!e2l.colorsEqual(f6n,Q60) || !e2l.colorsEqual(f6n,q$r) || !e2l.colorsEqual(f6n,O2Q.defaultColor)){if(!c75.condition)continue;}else if(c75.condition)continue;}}else continue;m2c=O2Q.canvasStyle(c75.style);z01=this.getColor(O2Q,G5O,m2c,!({}),!1,s1C[c75.fill]);e6y=this.getColor(O2Q,G5O,m2c,!1,h3z,s1C[c75.fill]);i2D=this.getColor(O2Q,G5O,m2c,c75.useBorderStyleProp && !X$w,h3z,s1C[c75.border]);if(c75.drawType == \"candle\"){if(c75.type == \"hollow\"){if(!e2l.isTransparent(e6y) && e2l.colorsEqual(i2D,e6y)){i2D=c75.useColorInMap?\"transparent\":e6y;}if(!c75.useColorInMap){e6y=\"transparent\";}}else if(c75.type == \"candle\"){if(X$w){if(e2l.isTransparent(e6y)){e6y=i2D;}else {i2D=e6y;}}}}N1o.globalAlpha=s1C.opacity;V8u.push(O2Q.drawBarTypeChartInner({fillColor:e6y,borderColor:i2D,condition:c75.condition,style:c75.style,type:j2J == C9B && s1C.hlc?\"hlc\":c75.drawType,panel:G5O,field:s1C.field,yAxis:s1C.yAxis,volume:s1C.volume && s1C.hollow,highlight:s1C.highlight}));if(!j5Q){j5Q={};}if(c75.useColorInMap){q06.b$0(44);j5Q[z01]=q06.j1j(32,\"1\");}}}O2Q.endClip();for(var Y3G in j5Q){if(!s1C.hollow || !e2l.equals(Y3G,O2Q.containerColor)){q1s.colors.push(Y3G);}}for(Y3G=+\"0\";Y3G < V8u.length;Y3G++){for(var H_Q=0;H_Q < V8u[Y3G].cache.length;H_Q++){R3M=V8u[Y3G].cache[H_Q];if(R3M || R3M === 0){q1s.cache[H_Q]=R3M;}}}return q1s;};e2l.Renderer.Candles=function(C6V){var s_V;this.construct(C6V);x2w9K.V8b();s_V=this.params;s_V.type=\"candle\";this.highLowBars=this.barsHaveWidth=this.standaloneBars=!\"\";s_V.hlc=s_V.colored=s_V.histogram=!!0;if(s_V.volume){s_V.hollow=!\"\";}};e2l.inheritsFrom(e2l.Renderer.Candles,e2l.Renderer.OHLC,!!\"\");e2l.Renderer.SimpleHistogram=function(T_N){var n7J,k7c;n7J=\"c\";n7J+=\"andle\";this.construct(T_N);k7c=this.params;k7c.type=n7J;k7c.histogram=!!\"1\";x2w9K.V8b();this.barsHaveWidth=this.standaloneBars=!!\"1\";this.highLowBars=!1;k7c.hlc=k7c.colored=k7c.hollow=k7c.volume=![];};e2l.inheritsFrom(e2l.Renderer.SimpleHistogram,e2l.Renderer.Candles,!!0);};l9=h0s=>{var V3h=x2w9K;var P86,M0l,u4k,x$2;P86=h0s.CIQ;P86.capitalize=function(K9g){if(!K9g){return \"\";}V3h.V8b();V3h.b$0(87);var t_p=V3h.o5B(17,14,9,13);return K9g.charAt(0).toUpperCase() + K9g.slice(t_p);};M0l=-1994394369;u4k=1811730882;V3h.P3q(3);x$2=V3h.o5B(\"2\",0);for(var L_N=1;V3h.n$o(L_N.toString(),L_N.toString().length,82557) !== M0l;L_N++){P86.camelCaseRegExp=/-([a-z])/g;x$2+=2;}if(V3h.P8Y(x$2.toString(),x$2.toString().length,92735) !== u4k){P86.camelCaseRegExp=/-([a-z])/g;}P86.makeCamelCase=function(t3P){return t3P.replace(P86.camelCaseRegExp,function(h$k){return h$k[1].toUpperCase();});};P86.uniqueID=function(t6H){var H9S,b1V,I5V,L5g,A67,p7o,R1V,q0Z,O4e,F70,V$U,t7Y;H9S=\"random\";V3h.V8b();b1V=typeof crypto != \"undefined\" && typeof crypto.getRandomValues != \"undefined\";I5V=typeof crypto != \"undefined\" && typeof crypto.randomUUID != \"undefined\";if(t6H){if(I5V){return crypto.randomUUID();}L5g=P4I=>{return P4I.toString(16).padStart(2,0);};A67=H$t=>{var W92,H2r;W92=\"u\";V3h.a3b();W92+=\"ndefined\";H2r=new Date().getTime();if(typeof performance !== W92 && typeof performance.now === \"function\"){H2r+=performance.now();}H2r=Math.pow(H2r,3);return o_L=>{V3h.V8b();return new Uint8Array(o_L).map(()=>{var U2R;V3h.b$0(74);var V1Q=V3h.o5B(85,239,1,5,1);V3h.P3q(7);var E$Q=V3h.o5B(7,249);U2R=(H2r + Math[H9S]() * V1Q) % E$Q | (\"0\" | 0);V3h.P3q(22);H2r=Math.floor(V3h.o5B(H2r,256));return U2R;});};};p7o=P0c=>{return crypto.getRandomValues(new Uint8Array(P0c));};R1V=b1V?p7o:A67();q0Z=D1g=>{V3h.V8b();return `4${D1g.slice(1)}`;};O4e=Y_5=>{V3h.a3b();return `${Number(Y_5[\"0\" ^ 0] & +\"0x3\" | 0x8).toString(16)}${Y_5.slice(1)}`;};F70=F9o=>{var D84;V3h.a3b();D84=R1V(F9o);return [...D84].map(L5g).join(\"\");};return `${F70(4)}-${F70(2)}-${q0Z(F70(+\"2\"))}-${O4e(F70(2))}-${F70(6)}`;}V$U=new Date();t7Y=V$U.getTime().toString(36);if(b1V){t7Y+=crypto.getRandomValues(new Uint8Array([\"1\" << 32])).toString(36);}else {t7Y+=Math.floor(Math[H9S]() * Math.pow(36,2)).toString(36);}return t7Y.toUpperCase();};};i2=E4z=>{};U_=j$N=>{var c3s;c3s=j$N.CIQ;c3s.getHostName=function(N3$){x2w9K.V8b();try{return N3$.match(/:\\/\\/(.[^/]+)/)[1];}catch(O2U){return \"\";}};c3s.qs=function(Q3i){var R7t=x2w9K;var L6T,r7q,B9S,l0q;L6T={};if(!Q3i){Q3i=window.location.search.substring(1);}R7t.V8b();r7q=Q3i.split(5960 < (979,5697)?\"k\":+\"225.33\" == \"879.75\" - 0?(6880,6576) === (4471,\"4990\" ^ 0)?0x9b6:5.53e+3:\"&\");for(var e4T=0;e4T < r7q.length;e4T++){B9S=r7q[e4T].indexOf(843 !== 403.62?\"=\":9020 == 465.18?4.29e+3:(8170,2428) != 3190?(\"z\",0x1d42):(0x4c4,1.78e+3));if(B9S > (\"0\" | 0)){R7t.b$0(24);l0q=r7q[e4T].substring(R7t.j1j(\"0\",1),B9S);R7t.P3q(7);L6T[l0q]=r7q[e4T].substring(R7t.o5B(1,B9S));}else {l0q=r7q[e4T];L6T[l0q]=null;}}return L6T;};c3s.postAjax=function(Z1x,S_F,i7j,A0p,j4c){var C$D,x6o,V4E,J5x,h7W,p0L,k4z,b9n;if(typeof Z1x == \"string\"){Z1x={url:Z1x,payload:S_F,cb:i7j,contentType:A0p,noEpoch:j4c,method:null,responseHeaders:!({})};}function y$u(M2e){var O9R,b2x,k53,K7R;x2w9K.V8b();O9R={};if(!Z1x.responseHeaders){return;}b2x=M2e.getAllResponseHeaders();k53=b2x.split((566.9,\"1790\" << 32) < +\"604\"?(+\"136\",+\"9720\") < 49.07?+\"0x24dc\":(0x1d7c,!!1):\"\\n\");for(var J4R=+\"0\";J4R < k53.length;J4R++){K7R=k53[J4R].split((5750,+\"291\") !== 716.58?5914 >= 1820?(784.26,636.68) == 96?(0x21ed,4.92e+3):\":\":(!!1,\"4.96e+3\" - 0):(!\"1\",!!1));while(K7R[1] && K7R[1].charAt(0) == \" \"){K7R[1]=K7R[1].substring(1);}if(K7R[0] !== \"\"){O9R[K7R.shift()]=K7R.join((3360,8511) <= (269.9,2020)?!!\"1\":\":\");}}return O9R;}C$D=Z1x.url;x6o=Z1x.cb;V4E=Z1x.payload;if(!x6o){x6o=function(){};}if(!Z1x.ungovernable){if(c3s.Extras && c3s.Extras.RequestLimiter && c3s.Extras.RequestLimiter.hitRequestLimit(C$D)){x6o(429,null,{});return;}}J5x=new XMLHttpRequest();if(!J5x){return !({});}h7W=new Date();if(!Z1x.noEpoch){p0L=\"&\";p0L+=\"ciqrand\";p0L+=\"o\";p0L+=\"m=\";if(C$D.indexOf(+\"1831\" != 4551?\"?\":6690 != (3170,1586)?(0xd6f,574.75):![]) == -+\"1\"){C$D+=\"?ciqrandom=\" + h7W.getTime();}else {C$D+=p0L + h7W.getTime();}}k4z=Z1x.method;b9n=Z1x.headers;if(!k4z){k4z=V4E?\"POST\":\"GET\";}J5x.open(k4z,C$D,!![]);if(!Z1x.contentType){Z1x.contentType=\"application/x-www-form-urlencoded\";}if(V4E){J5x.setRequestHeader(\"Content-Type\",Z1x.contentType);}if(b9n){for(var J1k in b9n){J5x.setRequestHeader(J1k,b9n[J1k]);}}if(Z1x.timeout){J5x.timeout=Z1x.timeout;}J5x.ontimeout=function(){var U4E,Q$r,W0J;U4E=1279349011;Q$r=835776467;W0J=+\"2\";for(var T2L=1;x2w9K.n$o(T2L.toString(),T2L.toString().length,83584) !== U4E;T2L++){x6o(408,null,{});W0J+=2;}if(x2w9K.P8Y(W0J.toString(),W0J.toString().length,13666) !== Q$r){x6o(169,1,{});}};J5x.onload=function(){x2w9K.a3b();if(this.status === 0){this.status=\"0\";}else if(!this.status){x2w9K.b$0(3);this.status=x2w9K.j1j(\"200\",0);}x6o(this.status,this.responseText,y$u(this));};J5x.onerror=function(){x6o(\"0\",null,{});};try{J5x.send(V4E);}catch(f5w){x6o((+\"241.77\",\"237.05\" - 0) <= 3740?\"0\":6932 < (196.32,3569)?(7.53e+2,\"446.02\" - 0):(6480,5130) != (\"626.32\" * 1,8400)?(9.52e+3,684.76):(696.70,0x934),f5w,{});}return !0;};c3s.loadUI=function(x8e,n_g,Y84){var J72=x2w9K;var B0J,r5f,b1Q,c4v,y3D,X$D,e6L,T4e,U16,G$2;if(!n_g || typeof n_g == \"function\"){Y84=n_g;n_g=document.body;}B0J=n_g.ownerDocument;J72.V8b();J72.P3q(34);r5f=B0J.querySelector(J72.j1j('iframe[original-url=\"','\"]',x8e));b1Q=function(){var X3C,L3U,q40,P7r,Z59;X3C=null;J72.a3b();try{X3C=this.contentDocument;}catch(J4q){return Y84(J4q);}if(X3C && !X3C.title){L3U=X3C.body.innerHTML;q40=document.createElement(\"div\");c3s.innerHTML(q40,L3U);for(var y3E=0;y3E < q40.children.length;y3E++){P7r=q40.children[y3E].cloneNode(!!({}));n_g.appendChild(P7r);}Y84(null);}else {Z59=\"iFrame not found or document ha\";Z59+=\"s a title\";Y84(new Error(Z59));}};if(r5f){c4v=\"com\";c4v+=\"plete\";y3D=null;try{X$D=-1240380097;e6L=-1002189183;J72.b$0(62);T4e=J72.j1j(64,\"2\");for(var y4$=+\"1\";J72.n$o(y4$.toString(),y4$.toString().length,98698) !== X$D;y4$++){y3D=r5f.contentDocument;T4e+=2;}if(J72.P8Y(T4e.toString(),T4e.toString().length,80368) !== e6L){y3D=r5f.contentDocument;}}catch(I4W){return Y84(I4W);}if(y3D.readyState === c4v && y3D.location && y3D.location.href !== \"about:blank\"){b1Q.call(r5f);}else {r5f.addEventListener(\"load\",b1Q);}}else {U16=\"l\";U16+=\"oad\";G$2=\"o\";G$2+=\"r\";G$2+=\"igi\";G$2+=\"nal-url\";r5f=document.createElement(\"iframe\");r5f.setAttribute(G$2,x8e);J72.b$0(74);var B22=J72.o5B(5087,5101,1,1,5087);J72.P3q(54);var G00=J72.j1j(2,2109,700,12654);J72.P3q(88);var d6L=J72.o5B(25,10,16);J72.b$0(7);var I85=J72.o5B(16,7318);J72.P3q(57);var F5p=J72.j1j(2,5,3297,3295,219);J72.b$0(43);var a5R=J72.j1j(375572,19,7,8667,3);J72.b$0(36);var a_K=J72.j1j(3147,6309,6294,9);J72.b$0(7);var I06=J72.j1j(1090,91);J72.P3q(89);var k2Y=J72.j1j(7,13228,8132,3,105820);J72.P3q(55);var t7B=J72.o5B(15,6212,86873,5);J72.P3q(35);var K$b=J72.o5B(2,9,6013,3022);J72.b$0(61);var d_j=J72.j1j(20,9157,3058,5);J72.b$0(34);var A5Z=J72.j1j(668,7337,15);J72.b$0(59);var m4y=J72.o5B(2,88284,4,37845,18);r5f.src=x8e + (x8e.indexOf((B22,155.6) >= (529.93,142.78)?\"?\":(50.85,+\"8157\") > (505.19,G00)?(+\"0x2174\",!!\"1\"):(!!({}),![])) === d6L?(I85,F5p) > 463.6?\"?\":884.52 >= a5R?(\"z\",a_K):I06 !== (k2Y,t7B)?(\"N\",K$b):(d_j,\"e\"):A5Z !== (612.86,23.44)?\"&\":(m4y,803.46) === 147.78?\"o\":(!!\"1\",\"C\")) + c3s.uniqueID();r5f.hidden=!0;r5f.addEventListener(U16,b1Q);B0J.body.appendChild(r5f);}};c3s.loadScript=function(k0o,C5Z,l4m,O9e){var n9s=x2w9K;var o2n,y23,e9w,a8X,J0g,f64;if(!c3s.loadedScripts){c3s.loadedScripts={};}if(c3s.loadedScripts[k0o]){if(C5Z){C5Z();}return;}o2n=O9e || document;n9s.b$0(34);e9w=o2n.querySelector(n9s.o5B(\"script[cq-name='\",\"']\",k0o));if(!e9w){a8X=\"sc\";a8X+=\"r\";a8X+=\"i\";a8X+=\"pt\";y23=!\"\";e9w=document.createElement(a8X);if(l4m){e9w.type=\"module\";e9w.crossOrigin=\"use-credentials\";}else {e9w.async=!![];}}if(!e9w.cqCallbacks){e9w.cqCallbacks=[];}if(C5Z){e9w.cqCallbacks.push(C5Z);}if(!y23){return;}e9w.onload=()=>{c3s.loadedScripts[k0o]=!![];while(e9w.cqCallbacks.length){e9w.cqCallbacks.shift()();}};e9w.setAttribute(\"cq-name\",k0o);J0g=k0o;if(J0g.indexOf(2291 > (2610,4810)?\"x\":\"?\") == -1){J0g=J0g + \"?\" + Date.now();}else {n9s.b$0(45);var J1y=n9s.j1j(7965,87670,17534);n9s.b$0(3);var X5u=n9s.j1j(29281,25098);n9s.P3q(90);var Q5c=n9s.o5B(14834,2966,12,2,2);n9s.P3q(91);var D$h=n9s.o5B(542,45,18,20);n9s.b$0(3);var v0u=n9s.j1j(74974,71028);J0g=J0g + (919.22 <= +\"80.53\"?(692.94,J1y) < (X5u,+\"5323\")?Q5c:(D$h,v0u):\"&\") + Date.now();}e9w.src=J0g;f64=o2n.getElementsByTagName(\"script\")[0];if(!f64){o2n.body.append(e9w);}else {f64.parentNode.insertBefore(e9w,f64.nextSibling);}};c3s.loadStylesheet=function(Z7A,t2C,a5Q){var o14=x2w9K;var H73,y__,r$N,H6i,V_9,W0o;if(!c3s.loadedStylesheets){c3s.loadedStylesheets={};}if(c3s.loadedStylesheets[Z7A]){if(t2C){t2C();}return;}H73=a5Q || document;o14.P3q(34);r$N=H73.querySelector(o14.o5B(\"link[cq-name='\",\"']\",Z7A));if(!r$N){H6i=\"s\";H6i+=\"tylesheet\";y__=!0;r$N=document.createElement(\"link\");r$N.rel=H6i;r$N.type=\"text/css\";r$N.media=\"screen\";o14.b$0(12);var u63=o14.j1j(9,5152,576);o14.b$0(20);var l07=o14.j1j(18,136,14);o14.P3q(3);var y6_=o14.j1j(3130,5);o14.b$0(54);var C4w=o14.j1j(2,1,1167,2298);o14.b$0(0);var c_q=o14.j1j(11,9,4832);o14.P3q(92);var p1G=o14.o5B(2,7,6204,4664,20);o14.b$0(7);var z3C=o14.j1j(6650,350);o14.P3q(72);var g2E=o14.o5B(8,8,15,16,11);o14.b$0(12);var R5N=o14.o5B(13,104338,8695);o14.P3q(3);var G7U=o14.o5B(3467,8);o14.b$0(7);var T0U=o14.j1j(6646,554);r$N.href=Z7A + (Z7A.indexOf(\"6881\" << u63 < l07?y6_:C4w < 659.22?(c_q,p1G) !== (+\"178.33\",z3C)?(890.67,324.49):(![],67.77):\"?\") === g2E?\"?\":R5N == (G7U,169.77)?(T0U,\"x\"):\"&\") + Date.now();r$N.setAttribute(\"cq-name\",Z7A);}if(!r$N.cqCallbacks){r$N.cqCallbacks=[];}if(t2C){r$N.cqCallbacks.push(t2C);}o14.a3b();if(!y__){return;}r$N.onload=()=>{if(c3s.loadedStylesheets[Z7A]){return;}c3s.loadedStylesheets[Z7A]=!!1;o14.a3b();H73.dispatchEvent(new CustomEvent(\"stylesheetload\",{detail:{link:this}}));while(r$N.cqCallbacks.length){r$N.cqCallbacks.shift()();}};V_9=H73.getElementsByTagName(\"link\");o14.b$0(43);var L9w=o14.o5B(587,14,14,6,2);W0o=V_9[V_9.length - L9w];if(!W0o){H73.head.append(r$N);}else {W0o.parentNode.insertBefore(r$N,W0o.nextSibling);}};c3s.loadWidget=function(q7d,O8O,Y_R,J8G){var c1v=x2w9K;var q7n;if(!O8O || typeof O8O == \"function\"){Y_R=O8O;O8O=document.body;}c1v.a3b();q7n=O8O.ownerDocument;c1v.P3q(7);c3s.loadStylesheet(c1v.j1j(\".css\",q7d),function(){c1v.b$0(7);c3s.loadUI(c1v.j1j(\".html\",q7d),O8O,function(N04){var k_V;k_V=\".\";k_V+=\"js\";if(N04){Y_R(N04);}else {c1v.b$0(7);c3s.loadScript(c1v.o5B(k_V,q7d),Y_R,J8G,q7n);}});},q7n);};c3s.waitForPlugins=function(c_R,g58,C6a){var R6b,Y1M,X55,f_0;R6b=0;Y1M=c_R.length;if(!Y1M){g58();return;}for(var V4s=0;V4s < Y1M;V4s++){X55=\"cq-\" + c_R[V4s];f_0=(C6a || document).getElementsByTagName(X55)[0];if(f_0 && f_0.hasAttribute(\"loaded\")){R6b++;}}if(Y1M !== R6b){return setTimeout(function(){c3s.waitForPlugins(c_R,g58,C6a);},0);}g58();};c3s.addInternalStylesheet=function(J2E,c4s,c4Y){var Y5n,L$f;Y5n=\"sty\";Y5n+=\"le\";if(!J2E){return;}if(J2E.default){J2E=J2E.default;}if(typeof J2E !== \"string\"){return;}if(c4s && (c4Y || document).querySelector('style[path=\"' + c4s + '\"]')){return;}L$f=document.createElement(Y5n);L$f.setAttribute(\"type\",\"text/css\");L$f.setAttribute(\"path\",c4s || \"\");L$f.innerText=J2E;(c4Y || document).head.appendChild(L$f);};};H3=y_0=>{var R5C;R5C=y_0.CIQ;R5C.ChartEngine.prototype.registerHTMLElements=function(){var Q$S=x2w9K;var L_f,z48,h6T,j1X,S0R,o2x,Q_h,v83;L_f=this;z48=this.chart.container;z48.setAttribute(\"interactable\",\"\");Q$S.a3b();for(var I76 in R5C.ChartEngine.htmlControls){h6T=\"undef\";h6T+=\"ined\";if(typeof this.chart[I76] == h6T && typeof this.controls[I76] == \"undefined\"){if(!this.allowZoom && I76 == \"chartControls\")continue;Q$S.P3q(7);j1X=z48.querySelector(Q$S.o5B(I76,\"4430\" >> 0 !== 5290?+\"6309\" <= (6150,805.46)?+\"802.41\":\".\":!!\"\"));if(j1X){this.chart[I76]=j1X;this.controls[I76]=j1X;}else {S0R=R5C.ChartEngine.htmlControls[I76];if(!S0R)continue;o2x=document.createElement(\"DIV\");o2x.innerHTML=S0R.replace(/[\\t\\n\\r]/gm,\"\");j1X=o2x.firstChild;z48.appendChild(j1X);this.chart[I76]=j1X;this.controls[I76]=j1X;j1X.classList.add(I76);}this.makeModal(j1X);}}var {chartControls:Y6z, home:M9S, yaxisMenu:w7w}=this.controls;if(Y6z){Q_h=Y6z.querySelector(\".stx-zoom-in\");v83=Y6z.querySelector(\".stx-zoom-out\");R5C.safeClickTouch(Q_h,y1i=>{if(!this.allowZoom || this.activeDrawing && !this.allowDrawingZoom){y1i.stopPropagation();return;}this.zoomIn(y1i);y1i.stopPropagation();},{keyboardClick:!![]});R5C.safeClickTouch(v83,I6J=>{if(!this.allowZoom || this.activeDrawing && !this.allowDrawingZoom){I6J.stopPropagation();return;}Q$S.V8b();this.zoomOut(I6J);I6J.stopPropagation();},{keyboardClick:!!({})});}if(M9S){R5C.safeClickTouch(M9S,N$7=>{if(!this.isHistoricalMode()){this.home({animate:!![]});return;}delete this.layout.range;this.isHistoricalModeSet=!\"1\";this.loadChart(this.chart.symbol,function(){Q$S.a3b();this.home({animate:!({})});});},{keyboardClick:!!1});}if(this.allowDragControls){this.allowDragControls();}};R5C.ChartEngine.prototype.home=function(t5B){var s_K=x2w9K;var S5z,S7h,u8J,F5x,K4S,k$r,x_Q,F_R,y1r,X16,S1o;function u5S(M_N,C_j,N2S){return function(){b8H(M_N);C_j.scroll=N2S;s_K.V8b();M_N.draw();};}S5z=\"obj\";S5z+=\"ect\";s_K.P3q(24);this.swipe.amplitude=s_K.o5B(\"0\",1);S7h=this.layout;if(typeof t5B != S5z){t5B={maintainWhitespace:t5B};}if(typeof t5B.maintainWhitespace == \"undefined\"){t5B.maintainWhitespace=!0;}u8J=-2099342477;F5x=-1715892192;K4S=2;function b8H(y5A){var Z8M;for(var r1g in y5A.panels){Z8M=y5A.panels[r1g].yaxisLHS.concat(y5A.panels[r1g].yaxisRHS);for(var N6A=0;N6A < Z8M.length;N6A++)if(!Z8M[N6A].lockScale){y5A.calculateYAxisMargins(Z8M[N6A]);}}y5A.resetDynamicYAxis();}for(var T0w=1;s_K.P8Y(T0w.toString(),T0w.toString().length,92281) !== u8J;T0w++){this.chart.draggingControls=1;this.cancelTouchSingleClick=!({});K4S+=2;}if(s_K.n$o(K4S.toString(),K4S.toString().length,40068) !== F5x){this.chart.draggingControls=null;this.cancelTouchSingleClick=!0;}if(!this.chart.dataSet || !this.chart.dataSet.length){this.draw();return;}this.micropixels=0;k$r=Math.floor(this.chart.width / S7h.candleWidth);for(var G4q in this.charts){x_Q=this.charts[G4q];if(t5B.chart && t5B.chart != x_Q)continue;F_R=0;if(t5B.maintainWhitespace && this.preferences.whitespace >= +\"0\"){F_R=this.preferences.whitespace;}if(t5B.whitespace || t5B.whitespace === 0){F_R=t5B.whitespace;}y1r=this.getLabelOffsetInPixels(x_Q,S7h.chartType);if(y1r > F_R){F_R=y1r;}X16=Math.min(k$r,x_Q.dataSet.length);if(this.chart.allowScrollPast){X16=k$r;}this.micropixels=this.chart.width - X16 * S7h.candleWidth - F_R;this.preferences.whitespace=F_R;while(this.micropixels > S7h.candleWidth){X16++;this.micropixels-=S7h.candleWidth;}while(this.micropixels < 0){X16--;this.micropixels+=S7h.candleWidth;}this.micropixels-=S7h.candleWidth;X16++;if(!this.mainSeriesRenderer.standaloneBars){this.micropixels+=S7h.candleWidth / (\"2\" ^ 0);}if(t5B.animate){S1o=this;this.scrollTo(x_Q,X16,u5S(S1o,x_Q,X16));}else {x_Q.scroll=X16;b8H(this);}}this.draw();};R5C.ChartEngine.prototype.headsUpHR=function(){var D27,x35,H_6,m5c,B1h,I_r;D27=\"heads\";D27+=\"UpHR\";x2w9K.a3b();if(this.runPrepend(D27,arguments)){return;}x35=this.currentPanel;if(!x35){return;}H_6=x35.chart;function L8e(F03){x2w9K.a3b();R5C.efficientDOMUpdate(m5c,\"innerHTML\",F03);}this.updateFloatHRLabel(x35);m5c=this.controls.floatDate;if(m5c && !H_6.xAxis.noDraw){B1h=this.barFromPixel(this.cx);I_r=H_6.xaxis[B1h];if(I_r && I_r.DT){L8e(R5C.displayableDate(this,H_6,I_r.DT));}else if(I_r && I_r.index){L8e(I_r.index);}else {L8e(\"\");}}this.runAppend(\"headsUpHR\",arguments);};R5C.ChartEngine.prototype.modalBegin=function(){var b2S,O2d;x2w9K.a3b();b2S=\"mod\";b2S+=\"al\";O2d=\"m\";O2d+=\"od\";O2d+=\"a\";O2d+=\"l\";if(!this.openDialog){this.openDialog=[];}if(!this.openDialog.includes(O2d)){this.openDialog.push(b2S);}this.undisplayCrosshairs();};R5C.ChartEngine.prototype.modalEnd=function(){this.cancelTouchSingleClick=!0;if(this.openDialog){this.openDialog=this.openDialog.filter(K4D=>{x2w9K.b$0(65);return x2w9K.j1j(\"modal\",K4D);});if(!this.openDialog.length){this.openDialog=\"\";}}this.doDisplayCrosshairs();};R5C.ChartEngine.prototype.makeModal=function(u2q){var a_X=x2w9K;var P9V,p0Y,H7e,j$j,K5T;P9V=\"mouseo\";P9V+=\"ut\";p0Y=\"t\";p0Y+=\"ouchend\";a_X.V8b();H7e=\"touc\";H7e+=\"hsta\";H7e+=\"r\";H7e+=\"t\";if(u2q.isModal){return;}j$j=()=>{a_X.V8b();return this.modalBegin();};K5T=()=>{return this.modalEnd();};[H7e,\"mouseover\"].forEach(C4K=>{a_X.V8b();return u2q.addEventListener(C4K,j$j);});[p0Y,P9V].forEach(t44=>{a_X.a3b();return u2q.addEventListener(t44,K5T);});u2q.isModal=[j$j,K5T];};R5C.ChartEngine.prototype.undoModal=function(R__){var g2J,x9N,P3R,K3_;g2J=\"mo\";g2J+=\"us\";g2J+=\"eout\";x9N=\"t\";x9N+=\"o\";x9N+=\"uchen\";x9N+=\"d\";P3R=\"m\";P3R+=\"ouse\";P3R+=\"ove\";P3R+=\"r\";K3_=\"t\";K3_+=\"ou\";x2w9K.V8b();K3_+=\"chs\";K3_+=\"tart\";if(!R__.isModal){return;}var [l6O,f6_]=R__.isModal;[K3_,P3R].forEach(X1j=>{x2w9K.a3b();return R__.removeEventListener(X1j,l6O);});[x9N,g2J].forEach(k1K=>{return R__.removeEventListener(k1K,f6_);});delete R__.isModal;};R5C.ChartEngine.prototype.updateChartAccessories=function(){var K2y=x2w9K;var w8f,Y58,w_8,r7X,d_I,o7F;if(this.accessoryTimer !== null){clearTimeout(this.accessoryTimer);}if(!R5C.ChartEngine.drawingLine && R5C.touchDevice){if(new Date().getTime() - this.lastAccessoryUpdate < 100){this.accessoryTimer=setTimeout((function(P0o){return function(){P0o.updateChartAccessories();};})(this),10);return;}}if(!this.chart.dataSet){return;}if(this.runPrepend(\"updateChartAccessories\",arguments)){return;}this.accessoryTimer=null;this.lastAccessoryUpdate=new Date().getTime();w8f=this.controls.floatDate;if(w8f){Y58=this.currentPanel;if(!Y58){Y58=this.chart.panel;}if(Y58){w_8=Y58.chart;r7X=this.xAxisAsFooter === !0?0:this.chart.canvasHeight - Y58.chart.bottom;d_I=w8f.offsetWidth / (\"2\" - 0) - (\"0.5\" - 0);o7F=this.pixelFromTick(this.crosshairTick,w_8) - d_I;if(o7F < (\"0\" ^ 0)){o7F=0;}else if(o7F > this.width - (\"2\" >> 0) * d_I - 1){K2y.P3q(61);var m20=K2y.j1j(17,6,16,34);K2y.b$0(3);var M6P=K2y.j1j(6,5);o7F=this.width - m20 * d_I - M6P;}R5C.efficientDOMUpdate(w8f.style,\"left\",o7F + \"px\");R5C.efficientDOMUpdate(w8f.style,\"bottom\",r7X + \"px\");}}this.positionCrosshairsAtPointer();this.headsUpHR();this.runAppend(\"updateChartAccessories\",arguments);};R5C.ChartEngine.prototype.positionSticky=function(x4S){var d6y=x2w9K;var W1g,V4y,s76,C$7,X8w,B8y,G3x;W1g=\"p\";W1g+=\"x\";V4y=\"l\";V4y+=\"e\";V4y+=\"f\";V4y+=\"t\";s76=\"p\";s76+=\"x\";C$7=\"t\";C$7+=\"op\";X8w=Math.max(this.cy - x4S.offsetHeight - 60,0);B8y=Math.min(this.chart.canvasWidth - (this.cx - 50),this.chart.canvasWidth - x4S.offsetWidth);G3x=x4S.style;d6y.P3q(7);R5C.efficientDOMUpdate(G3x,C$7,d6y.o5B(s76,X8w));d6y.V8b();R5C.efficientDOMUpdate(G3x,V4y,\"auto\");d6y.P3q(7);R5C.efficientDOMUpdate(G3x,\"right\",d6y.j1j(W1g,B8y));};R5C.ChartEngine.prototype.displaySticky=function(B$L){var M2Z,x_I,J2y,e33,x1X,f04,K6X,u4i,g1K,X38,T4f,M9Y,x93,n6C,c_c,V8e,c9l,C8y,Q1w,N6$,H4n,c7J,y1G,j83,r4B,b_j,A1l;M2Z=\".overlay\";M2Z+=\"Tra\";M2Z+=\"shCan\";x_I=\".mS\";x_I+=\"tic\";x_I+=\"k\";x_I+=\"yInterior\";J2y=this.controls.mSticky;if(!J2y){return;}e33=J2y.querySelector(x_I);if(!e33){return;}x1X=J2y.querySelector(\".mStickyThumbnail\");f04=J2y.querySelector(M2Z);K6X=J2y.querySelector(\".overlayEdit\");u4i=J2y.querySelector(\".overlayText\");g1K=J2y.querySelector(\".mouseDeleteInstructions\");X38=J2y.querySelector(\".stickyLongPressText\");T4f=J2y.querySelector(\".mousePinTooltip\");M9Y=J2y.querySelector(\".customInstructions\");g1K.classList.remove(\"no_edit\");if(!B$L || typeof B$L != \"object\"){B$L={message:arguments[0],backgroundColor:arguments[1],forceShow:arguments[2],noDelete:arguments[\"3\" ^ 0],type:arguments[4]};}var {forceShow:p0R, noDelete:i1W, noEdit:j0E, type:a4y, noText:x7k}=B$L;var {message:m8h, backgroundColor:a6h}=B$L;if(!p0R && !m8h){x93=\"n\";x93+=\"on\";x93+=\"e\";n6C=\"n\";n6C+=\"o\";n6C+=\"n\";n6C+=\"e\";c_c=\"no\";c_c+=\"n\";c_c+=\"e\";e33.innerHTML=\"\";J2y.style.display=\"none\";if(f04){f04.style.display=c_c;}if(K6X){K6X.style.display=n6C;}if(u4i){u4i.style.display=x93;}if(g1K){g1K.style.display=\"none\";}if(T4f){T4f.style.display=\"none\";}if(X38){X38.style.display=\"none\";}}else {V8e=\"defa\";V8e+=\"u\";V8e+=\"lt\";c9l=\"no\";c9l+=\"ne\";C8y=\"right\";C8y+=\"cl\";C8y+=\"i\";C8y+=\"ck_\";Q1w=\"mStickyRigh\";Q1w+=\"tClick\";N6$=\".mSti\";N6$+=\"c\";N6$+=\"kyRightClick\";if(!m8h){m8h=\"\";}var {defaultColor:r$w, highlightedDraggable:r0Y}=this;if(a6h == \"auto\"){a6h=r$w;}if(p0R && !m8h){if(x1X){x1X.classList.remove(\"active\");}if(x1X){x1X.style.background=\"\";}e33.style.color=\"\";e33.style.display=\"none\";}else if(a6h){if(x1X){x1X.classList.add(\"active\");}if(x1X){x1X.style.background=a6h;}e33.style.display=\"inline-block\";}else {if(x1X){x1X.classList.remove(\"active\");}if(x1X){x1X.style.background=\"\";}e33.style.color=\"\";e33.style.display=\"inline-block\";}e33.innerHTML=m8h;H4n=J2y.querySelector(N6$);H4n.className=Q1w;if(a4y){x2w9K.b$0(7);H4n.classList.add(x2w9K.j1j(a4y,C8y));}H4n.style.display=\"\";J2y.style.display=\"inline-block\";T4f.style.display=T4f && this.allowPinning && this.allowPinning(a4y)?\"block\":c9l;if(!r0Y || r0Y && r0Y.undraggable && r0Y.undraggable(this)){X38.style.display=\"none\";}if(i1W || this.bypassRightClick === !!({}) || this.bypassRightClick[a4y]){H4n.style.display=\"none\";}else if(this.highlightViaTap || this.touches.length){if(f04){f04.style.display=\"inline-block\";}if(K6X && !j0E){K6X.style.display=\"inline-block\";}if(u4i && !x7k){u4i.style.display=\"inline-block\";}if(g1K){g1K.style.display=\"none\";}if(X38){X38.style.display=\"none\";}J2y.classList[m8h === \"\"?\"add\":\"remove\"](\"hide\");}else {c7J=\"n\";c7J+=\"o_ed\";c7J+=\"i\";c7J+=\"t\";if(j0E){g1K.classList.add(c7J);}if(g1K){g1K.style.display=\"block\";}if(X38){y1G=\"n\";y1G+=\"o\";y1G+=\"n\";y1G+=\"e\";X38.style.display=y1G;j83=this.preferences.dragging;if(j83 && !B$L.noDrag && B$L.panel && !B$L.panel.noDrag){if((j83 === !!({}) || j83.study) && a4y == \"study\"){X38.style.display=\"block\";}else if((j83 === !\"\" || j83.series) && a4y == \"series\"){X38.style.display=\"block\";}}}}if(M9Y && a4y){r4B=M9Y.querySelector(`[type=${a4y}]`);M9Y.style.display=r4B?\"block\":\"none\";}b_j=a4y || V8e;J2y.setAttribute(\"cq-sticky-type\",b_j);A1l=B$L.positioner || this.positionSticky;A1l.call(this,J2y);}};R5C.ChartEngine.prototype.displayNotification=function(K_$,W27,X76 = {}){var P2a,B5W,E1M,h46,G9z;if(!this.controls.notificationTray){return;}var {callback:Q4v, dismissalListeners:W3n}=X76;P2a=this.controls.notificationTray;B5W=P2a.querySelector(\"template\").content.cloneNode(!!\"1\");E1M=B5W.firstElementChild;E1M.className=K_$;E1M.querySelector(\".message\").textContent=W27;if(Q4v){h46=\"pointer\";h46+=\"up\";G9z=window.PointerEvent?h46:\"touchend\";E1M.handler=E1M.addEventListener(G9z,Q4v);}if(W3n){E1M.listeners={};W3n.forEach(N1I=>{E1M.listeners[K_$]=this.addEventListener(N1I.type,N1I.callback);});}this.makeModal(E1M);P2a.appendChild(E1M);};R5C.ChartEngine.prototype.removeNotification=function(t6j){var L$1,v8K;if(!this.controls.notificationTray){return;}L$1=this.controls.notificationTray;v8K=L$1.querySelector(`.${t6j}`);if(v8K){if(v8K.handler){v8K.removeEventListener(v8K.handler);}if(v8K.listeners){for(var R6O in v8K.listeners){this.removeEventListener(v8K.listeners[R6O]);}}this.modalEnd();L$1.removeChild(v8K);}};R5C.ChartEngine.prototype.setMeasure=function(k1M,F$V,S3g,s66,J4D,o0L){var s9Y=x2w9K;var c9o,N4q,H7N,h_q,x1F,d$2,c$G,q0M,i3D,e4I,e5Z,S$c,k5V,s6f;c9o=\".mMeasu\";c9o+=\"re\";if(this.runPrepend(\"setMeasure\",arguments)){return;}N4q=(this.drawingContainer || document).querySelector(c9o);H7N=\"\";s9Y.a3b();if(!k1M && k1M !== 0){h_q=-368199690;x1F=-2085809135;d$2=2;for(var q1i=1;s9Y.P8Y(q1i.toString(),q1i.toString().length,20421) !== h_q;q1i++){if(-this.anyHighlighted || this.currentVectorParameters.vectorType !== \"\"){this.clearMeasure();}d$2+=2;}if(s9Y.P8Y(d$2.toString(),d$2.toString().length,31471) !== x1F){if(!this.anyHighlighted && this.currentVectorParameters.vectorType === \"\"){this.clearMeasure();}}}else {if(F$V !== ![]){c$G=Math.round(Math.abs(k1M - F$V) * this.chart.roundit) / this.chart.roundit;c$G=c$G.toFixed(this.chart.yAxis.printDecimalPlaces);if(this.internationalizer){H7N+=this.internationalizer.numbers.format(c$G);}else {H7N+=c$G;}if(k1M > 0 && F$V > 0){s9Y.P3q(27);q0M=s9Y.o5B(k1M,F$V,k1M);if(Math.abs(q0M) > 0.1){s9Y.b$0(93);q0M=Math.round(s9Y.j1j(q0M,\"100\",1));}else if(Math.abs(q0M) > 0.01){s9Y.P3q(7);var j8O=s9Y.o5B(875,125);s9Y.P3q(20);var J5l=s9Y.j1j(24,1,15);q0M=Math.round(q0M * j8O) / J5l;}else {q0M=Math.round(q0M * +\"10000\") / +\"100\";}if(this.internationalizer){s9Y.b$0(22);q0M=this.internationalizer.percent.format(s9Y.j1j(q0M,100));}else {if(q0M > 0){s9Y.P3q(7);q0M=s9Y.j1j(q0M,(925,9850) <= 398?(5641,915) === (752.62,8440)?(0x1021,\"a\"):(352.4,303.25) > 9710?(971.69,+\"0x1d11\"):\"H\":\"+\");}s9Y.b$0(7);q0M=s9Y.o5B((5140,1931) === 2280?924.17:9400 < 2080?(\"u\",606.50):+\"470.76\" !== 211.39?\"%\":(\"X\",\"H\"),q0M);}s9Y.b$0(34);H7N+=s9Y.o5B(\" (\",\")\",q0M);}}if(s66 !== !\"1\"){i3D=\"B\";i3D+=\"ar\";i3D+=\"s\";s9Y.b$0(3);e4I=Math.abs(s9Y.j1j(s66,S3g));s9Y.P3q(94);var h85=s9Y.j1j(2,2,2);e4I=Math.round(e4I) + h85;e5Z=this.translateIf(i3D);s9Y.P3q(95);H7N+=s9Y.j1j((1840,5436) >= 618.25?\" \":(851.01,6796) != 5916?(368.08,3850) == 351?(1.98e+3,!!({})):![]:(\"0xfcd\" ^ 0,+\"0x2510\"),e5Z,1780 == +\"985.53\"?(!![],18):+\"7050\" != 6992?\" \":(\"T\",\"s\"),e4I);}if(N4q){N4q.innerHTML=H7N;}}if(this.activeDrawing){return;}N4q=this.controls.mSticky;if(N4q){S$c=N4q.querySelector(\".mStickyInterior\");if(J4D){k5V=\"re\";k5V+=\"move\";N4q.style.display=\"inline-block\";if(S$c){s6f=\"i\";s6f+=\"nline-block\";S$c.style.display=s6f;if(k1M || k1M === 0){S$c.innerHTML=H7N;}}N4q.classList[H7N === \"\"?\"add\":k5V](\"hide\");this.positionSticky(N4q);}else {N4q.style.display=\"none\";if(S$c){S$c.innerHTML=\"\";}}}this.runAppend(\"setMeasure\",arguments);};R5C.ChartEngine.prototype.clearMeasure=function(){var i9n,P03;i9n=\".\";i9n+=\"mMeas\";i9n+=\"ur\";i9n+=\"e\";x2w9K.a3b();P03=(this.drawingContainer || document).querySelector(i9n);if(P03){P03.innerHTML=\"\";}};R5C.ChartEngine.prototype.zoomSet=function(o$y,S$C){var b5f=x2w9K;var s2x,Z16,f9w,G$c;if(!S$C){S$C=this.chart;}b5f.a3b();if(!S$C.dataSet){return;}o$y=this.constrainCandleWidth(o$y);if(S$C.tempCanvas.style.display != \"none\"){R5C.clearCanvas(S$C.tempCanvas,this);}s2x=this.mainSeriesRenderer;if(!s2x.params || !s2x.params.volume){if(this.preferences.zoomAtCurrentMousePosition && this.zoomInitiatedByMouseWheel && this.crosshairTick < S$C.dataSet.length){Z16=this.crosshairTick || this.tickFromPixel(this.cx,S$C);}else if(this.isHome()){b5f.P3q(3);var s6N=b5f.o5B(16,15);Z16=S$C.dataSet.length - s6N;}else if(S$C.scroll > S$C.dataSet.length){Z16=0;}else if(this.grabMode == \"zoom-x\"){Z16=this.tickFromPixel(this.chart.width,S$C);}else {Z16=this.tickFromPixel(this.chart.width / +\"2\",S$C);}if(this.animations.zoom.hasCompleted){this.zoomInitiatedByMouseWheel=!!\"\";}b5f.b$0(96);var A4d=b5f.j1j(20,20,16,3,4);f9w=S$C.dataSet.length - A4d - Z16;G$c=S$C.scroll;b5f.b$0(9);var p72=b5f.o5B(188,9,3,7);S$C.scroll=Math.round((this.pixelFromTick(Z16,S$C) - S$C.left) / o$y) + p72 + f9w;this.micropixels+=(G$c - f9w) * this.layout.candleWidth - (S$C.scroll - f9w) * o$y;}this.setCandleWidth(o$y);S$C.spanLock=![];this.draw();this.doDisplayCrosshairs();this.updateChartAccessories();};};m9=U4k=>{var G4R;G4R=U4k.CIQ;G4R.ChartEngine.prototype.currentBaseline=null;G4R.ChartEngine.prototype.baselineHelper=null;G4R.ChartEngine.helpersToRegister.push(function(T3p){T3p.baselineHelper=new Map();});G4R.ChartEngine.prototype.registerBaselineToHelper=function(G4M){var F6C,s20,L_H,h$$;if(!G4M.params.baseline){return;}var {baselineHelper:A6M}=this;function o1H(S2U,S3k){var s_d,m5K;S2U=S2U.replace(/\\s/g,(\"9340\" - 0,7240) !== (\"4260\" >> 96,3275)?\"_\":6799 <= 3506?4.16e+3:3463 < (+\"65.98\",976.91)?760.10:(4.77e+3,\"b\"));if(I$e){s_d=I$e.cloneNode();s_d.classList.remove(\"baselineHandle\");}else {m5K=\"stx-base\";m5K+=\"line-\";m5K+=\"h\";m5K+=\"andle\";s_d=document.createElement(\"div\");s_d.classList.add(m5K);}x2w9K.b$0(7);x2w9K.a3b();s_d.classList.add(\"stx-series-handle\",x2w9K.j1j(S2U,\"name_\"));S3k.container.append(s_d);S3k.controls[`${S2U} cq-baseline-handle`]=s_d;S3k.makeModal(s_d);return s_d;}var {baselineHandle:I$e}=this.controls;if(!A6M.has(G4M)){F6C=\"_mai\";F6C+=\"n\";F6C+=\"_s\";F6C+=\"eries\";var {name:M5D}=G4M.params;s20=M5D === F6C && I$e?I$e:o1H(M5D,this);s20.renderer=G4M;if(!s20.listenersSet){L_H=()=>{x2w9K.V8b();this.currentBaseline=s20.renderer;this.currentPanel=this.panels[G4M.params.panel];this.findHighlights();};s20.addEventListener(\"mouseover\",F_I=>{L_H();x2w9K.V8b();s20.classList.add(\"stx-grab\");var {display:b5b, name:d9y, field:G_o, id:w2B}=s20.renderer.seriesParams[0];s20.title=b5b || d9y || G_o || w2B;});s20.addEventListener(\"mouseout\",f9F=>{x2w9K.a3b();s20.classList.remove(\"stx-grab\");});h$$={down:P7e=>{L_H();this.repositioningBaseline={lastDraw:Date.now(),handle:s20,renderer:G4M};s20.classList.add(\"stx-grabbing\");},move:t66=>{this.currentBaseline=s20.renderer;if(this.repositioningBaseline && s20 === this.repositioningBaseline.handle){G4R.ChartEngine.crosshairY=t66.touches?t66.touches[0].clientY:t66.clientY;this.setBaselineUserLevel();this.currentBaseline=null;}},up:H86=>{var A8C;A8C=\"stx-gr\";A8C+=\"abbing\";this.repositioningBaseline=null;s20.classList.remove(A8C);this.draw();}};G4R.safeDrag(s20,h$$);s20.listenersSet=!!({});}A6M.set(G4M,{styleCache:null,display:![],handle:s20});}};G4R.ChartEngine.prototype.removeBaselineFromHelper=function(k1Q){var K1p,C2q;var {baselineHelper:E0g}=this;x2w9K.V8b();if(E0g.has(k1Q)){K1p=k1Q.params.name.replace(\" \",5920 >= (8650,1745)?\"_\":4203 == 3503?(!\"\",5.27e+3):(2060,5970) <= (8820,9110)?(!!\"1\",\"o\"):7.35e+3);if(K1p !== \"_main_series\"){C2q=E0g.get(k1Q).handle;delete this.controls[`${K1p} cq-baseline-handle`];this.container.removeChild(C2q);}E0g.delete(k1Q);}};G4R.ChartEngine.prototype.findBaselineHandle=function(x2k,A2D){for(var b5m of this.baselineHelper){var [Y$6,u2O]=b5m;var {handle:T0L}=u2O;if(x2k.target === T0L || x2k.composedPath && x2k.composedPath().includes(T0L)){if(A2D){this.repositioningBaseline={lastDraw:Date.now(),handle:T0L,renderer:Y$6};T0L.classList.add(\"stx-grab\");}this.currentBaseline=Y$6;return !!\"1\";}}return !!0;};G4R.ChartEngine.prototype.setBaselines=function(D8z){var N_S=x2w9K;var G2J;if(!D8z){D8z=this.chart;}N_S.V8b();G2J=this;function n19(l_M,u$i){var l5z,W$u,C73,r5U,b$x,A2F,O$a,c3q;l5z=\"t\";l5z+=\"i\";l5z+=\"ck\";var {dataSegment:t9a, dataSet:K0j, defaultPlotField:e7$}=D8z;W$u=e7$;if(!u$i){W$u=l_M;}C73=G2J.getFirstLastDataRecord(t9a,l5z);if(!C73){return null;}N_S.V8b();r5U=C73.tick;while(!!({})){b$x=K0j[r5U];if(b$x){A2F=\"Clo\";A2F+=\"se\";if(!u$i || W$u != A2F){N_S.P3q(3);O$a=K0j[N_S.j1j(r5U,1)];if(O$a && (O$a[W$u] || O$a[W$u] === 0)){c3q=O$a[W$u];return typeof c3q === \"object\"?c3q[e7$]:c3q;}}else if(b$x.iqPrevClose || b$x.iqPrevClose === 0){return b$x.iqPrevClose;}}r5U--;if(r5U < 0)break;}}var {baselineHelper:i7J}=this;i7J.forEach(function(H6_,i0J){N_S.a3b();var f5P,y2W,E7V,s9q,q5s;var {baseline:D0H}=i0J.params;N_S.b$0(64);f5P=N_S.o5B(!![],D0H);if(f5P){D0H=D8z.baseline;}var {defaultLevel:b7L, userLevel:l8P}=D0H;y2W=i0J.getYAxis(G2J);if(!y2W){return;}E7V=G2J.getYAxisBaselineRenderer(y2W);s9q=E7V && E7V != G2J.mainSeriesRenderer && E7V.seriesParams.length && E7V.seriesParams[0].id;D0H.actualLevel=l8P || l8P === 0?l8P:b7L;if(!D0H.actualLevel && D0H.actualLevel !== 0){q5s=n19(s9q,f5P);if(q5s !== null){D0H.actualLevel=q5s;}}H6_.display=E7V === i0J?!!\"1\":!1;i7J.set(i0J,H6_);});};G4R.ChartEngine.prototype.setBaselineUserLevel=function(){var H$J,P0Q,M3i;var {chart:k$C, currentPanel:u8V}=this;var {lastDraw:P22, renderer:p2I}=this.repositioningBaseline;if(p2I.params.panel != u8V.name){return;}var {baseline:b4k}=k$C;H$J=typeof p2I.params.baseline === \"object\"?p2I.params.baseline:b4k;P0Q=p2I.getYAxis(this);x2w9K.a3b();M3i=this.valueFromPixel(this.backOutY(G4R.ChartEngine.crosshairY),u8V,P0Q);H$J.userLevel=this.adjustIfNecessary(u8V,this.crosshairTick,M3i);if(Date.now() - P22 > \"100\" - 0){this.draw();this.repositioningBaseline.lastDraw=Date.now();}};G4R.ChartEngine.prototype.setBaselineMinMax=function(D_S,C6L){var U4u,X9U,i_n,x6A;U4u=\"o\";U4u+=\"bj\";U4u+=\"ect\";var {baselineHelper:E1$, chart:u3J, repositioningBaseline:i_k}=this;var {baseline:M0S, seriesRenderers:R3R}=u3J;X9U=u3J.transformFunc && C6L === u3J.panel.yAxis;i_n=C6L.renderers.find(J6H=>{x2w9K.a3b();return E1$.get(R3R[J6H]);});if(!i_n){return D_S;}var {baseline:M6a, type:x$X, centered:h1V}=R3R[i_n].params;M6a=typeof M6a === U4u?M6a:M0S;if(x$X === \"mountain\" || h1V === ![]){return D_S;}var {actualLevel:H6I}=M6a;x2w9K.a3b();if(H6I || H6I === 0){if(X9U){H6I=u3J.transformFunc(this,u3J,H6I);}x6A=Math.max(H6I - D_S[0],D_S[1] - H6I);D_S[+\"0\"]=i_k?C6L.lowValue:H6I - x6A;D_S[1]=i_k?C6L.highValue:H6I + x6A;}return D_S;};G4R.ChartEngine.prototype.positionBaselineHandle=function(L7D){var y0N=x2w9K;var F99,c71,i17,D$A,l4O,F6b,K8e,f6Z,W38,M0k,w7b,n6G,m1a,Q$E,S5j,D3r,Y5c,T61,v0y,m3D;F99=\"st\";F99+=\"x\";y0N.V8b();F99+=\"-grab\";if(!this.manageTouchAndMouse){return;}var {baselineHelper:V48, chart:w10, panels:U4j}=this;var {baseline:i$W, panel:h0X}=L7D.params;c71=L7D.params.yAxis || L7D.getYAxis(this);var {display:V_F, handle:V$p, styleCache:a33}=V48.get(L7D);if(i$W === !![]){i$W=w10.baseline;}if(i$W.userLevel === ![] || !V_F){i17=\"no\";i17+=\"ne\";V$p.style.display=i17;return;}D$A=U4j[h0X];l4O=V$p.classList.contains(F99);F6b=\"block\";K8e=i$W.actualLevel;if(c71 === w10.yAxis && w10.transformFunc){K8e=w10.transformFunc(this,w10,K8e);}if(K8e > c71.high){f6Z=\"n\";f6Z+=\"o\";f6Z+=\"n\";f6Z+=\"e\";K8e=c71.high;if(!l4O){F6b=f6Z;}}else if(K8e < c71.low){K8e=c71.low;if(!l4O){F6b=\"none\";}}if(c71 === w10.yAxis && w10.untransformFunc){K8e=w10.untransformFunc(this,w10,K8e);}W38=this.pixelFromPrice(K8e,D$A,c71);if(!a33){a33=getComputedStyle(V$p);}M0k=G4R.stripPX(a33.width);y0N.b$0(3);var a1h=y0N.j1j(24,22);w7b=`${W38 - G4R.stripPX(a33.height) / a1h}px`;m1a=this.baselineHandleBuffer || 2;y0N.P3q(2);var S0K=y0N.j1j(14,13);Q$E=D$A.yaxisRHS.indexOf(c71) + S0K;if(Q$E){S5j=Q$E === +\"1\"?m1a:m1a * Q$E;D3r=-1708979571;y0N.P3q(63);Y5c=-y0N.o5B(\"2052405561\",17);T61=2;for(var c_2=1;y0N.P8Y(c_2.toString(),c_2.toString().length,62205) !== D3r;c_2++){n6G=`${(w10.right + (M0k + Q$E)) * S5j}px`;T61+=2;}if(y0N.P8Y(T61.toString(),T61.toString().length,97736) !== Y5c){y0N.b$0(7);n6G=`${w10.right * (M0k % Q$E) / S5j}${y0N.j1j(\"x\",\"p\")}`;}n6G=`${w10.right - M0k * Q$E - S5j}px`;}else {y0N.b$0(0);var j8K=y0N.j1j(4,18,15);v0y=D$A.yaxisLHS.slice(0).reverse().indexOf(c71) + j8K;m3D=v0y === 1?m1a:m1a * v0y;n6G=`${w10.left + M0k * v0y + m3D - M0k}px`;}Object.assign(V$p.style,{display:F6b,top:w7b,left:n6G});};G4R.ChartEngine.prototype.getYAxisBaselineRenderer=function(S_B){var E4S,Q0B,w0a,K0H;E4S=-792300741;Q0B=410364597;w0a=+\"2\";for(var W1Q=\"1\" | 1;x2w9K.n$o(W1Q.toString(),W1Q.toString().length,34013) !== E4S;W1Q++){if(!S_B.renderers.length){return null;}var {baselineHelper:P5U, chart:o2T}=this;w0a+=2;}if(x2w9K.n$o(w0a.toString(),w0a.toString().length,17783) !== Q0B){if(~S_B.renderers.length){return 1;}var {baselineHelper:P5U, chart:o2T}=this;}K0H=S_B.renderers.find(i2G=>{return P5U.get(o2T.seriesRenderers[i2G]);});if(!K0H){return null;}return o2T.seriesRenderers[K0H];};G4R.ChartEngine.prototype.getYAxisBaseline=function(K6G){var o5g;var {baseline:m9Z}=this.chart;o5g=this.getYAxisBaselineRenderer(K6G);if(!o5g){return m9Z;}x2w9K.a3b();var {baseline:p4L}=o5g.params;return typeof p4L === \"object\"?p4L:m9Z;};};Z2=r0d=>{var A$l;A$l=r0d.CIQ;x2w9K.a3b();A$l.ChartEngine.Chart=function(){x2w9K.V8b();this.xAxis=new A$l.ChartEngine.XAxis();this.yAxis=new A$l.ChartEngine.YAxis();this.symbolObject={symbol:null};this.series={};this.seriesRenderers={};this.xaxis=[];this.state={};this.endPoints={};this.defaultChartStyleConfig={};this.baseline=A$l.clone(this.baseline);this.panel=undefined;this.currentMarketData={};};A$l.extend(A$l.ChartEngine.Chart.prototype,{symbol:null,symbolObject:{symbol:null},symbolDisplay:null,series:{},seriesRenderers:{},scroll:0,isComparison:!({}),forcePercentComparison:!!({}),maxTicks:0,tension:null,currentMarketData:{},masterData:null,dataSet:null,scrubbed:null,dataSegment:null,segmentImage:null,baseline:{includeInDataSegment:!!\"\",defaultLevel:null,userLevel:null,actualLevel:null},xAxis:null,xaxis:[],xaxisFactor:30,decimalPlaces:2,dynamicYAxis:!!({}),roundit:100,breakpoint:null,legendRenderer:A$l.drawLegend,customChart:null,yaxisPaddingRight:null,yaxisPaddingLeft:null,tickCache:{},yaxisMarginMultiplier:2.5,allowScrollPast:!!({}),allowScrollFuture:!![],whiteSpaceFutureTicks:0,hideDrawings:!\"1\",defaultPlotField:\"Close\",defaultChartStyleConfig:{},lockScroll:![],includeOverlaysInMinMax:!!({}),gaplines:null,lineStyle:null,lineApproximation:!!({}),highLowBars:!({}),standaloneBars:![],barsHaveWidth:!({}),calculateTradingDecimalPlaces:A$l.calculateTradingDecimalPlaces,width:null,height:null,top:null,bottom:null,left:null,right:null,context:null,endPoints:null},!\"\");};K0=Y9E=>{var W7Q=x2w9K;var j8n,t6M;j8n=\"da\";j8n+=\"t\";j8n+=\"aSe\";W7Q.V8b();j8n+=\"t\";t6M=Y9E.CIQ;t6M.ChartEngine.prototype.resolveY=function(W9C){return this.top + W9C;};t6M.ChartEngine.prototype.resolveX=function(T6I){W7Q.V8b();return this.left + T6I;};t6M.ChartEngine.prototype.backOutY=function(K4K){return Math.max(0,Math.min(this.height,K4K - this.top));};t6M.ChartEngine.prototype.backOutX=function(e9$){W7Q.a3b();return Math.max(0,Math.min(this.width,e9$ - this.left));};t6M.ChartEngine.prototype.dateFromTick=function(o9b,a6j,t2s,n8n = j8n){var D$6,K3V,p_G,y$v,B6G,v5Q,b_u,N$X,p$o,p6A,q4e,l1j;if(!a6j){a6j=this.chart;}D$6=82710236;K3V=-1509593386;p_G=2;for(var s88=1;W7Q.P8Y(s88.toString(),s88.toString().length,10255) !== D$6;s88++){y$v=a6j[n8n];B6G=y$v.length;p_G+=2;}if(W7Q.n$o(p_G.toString(),p_G.toString().length,67591) !== K3V){y$v=a6j[n8n];B6G=y$v.length;}p$o=!!0;if(B6G === +\"0\"){y$v[0]={};y$v[0].DT=new Date();B6G=y$v.length;p$o=!\"\";}if(o9b < 0){b_u=this.standardMarketIterator(y$v[0].DT);p6A=715641586;q4e=856371370;l1j=2;for(var F_A=1;W7Q.P8Y(F_A.toString(),F_A.toString().length,72393) !== p6A;F_A++){if(b_u){v5Q=b_u.previous(Math.abs(o9b));}else {v5Q=y$v[9].DT;}l1j+=2;}if(W7Q.n$o(l1j.toString(),l1j.toString().length,49703) !== q4e){if(b_u){v5Q=b_u.previous(Math.abs(o9b));}else {v5Q=y$v[0].DT;}}}else if(o9b >= B6G){b_u=this.standardMarketIterator(y$v[B6G - (\"1\" | 1)].DT);if(b_u){W7Q.b$0(97);v5Q=b_u.next(W7Q.j1j(o9b,1,B6G));}else {v5Q=y$v[B6G - (\"1\" - 0)].DT;}}else {v5Q=y$v[o9b].DT;}if(t2s){N$X=new Date(v5Q.getTime());}else {N$X=t6M.yyyymmddhhmmssmmm(v5Q).substr(0,12);}if(p$o){delete y$v[0].DT;}return N$X;};t6M.ChartEngine.prototype.tickFromDate=function(n8x,j9S,v7w,z5e,O7m = \"dataSet\"){var j_t,r0V,M8x,j4Q,q0Y,t_T,u68,D1R,n2T,Q5P,s6I,G8O,S8Q,L0W,P_U;if(!j9S){j9S=this.chart;}j_t=j9S[O7m];if(!(j_t && j_t.length)){return 0;}if(!v7w){v7w=0;}r0V=n8x.constructor == Date?n8x:t6M.strToDateTime(n8x);if(!t6M.ChartEngine.isDailyInterval(this.layout.interval)){r0V.setMinutes(r0V.getMinutes() + v7w);}M8x=r0V.getTime();if(!j9S.tickCache[O7m]){j9S.tickCache[O7m]={};}j4Q=j9S.tickCache[O7m][M8x];W7Q.a3b();if(j4Q || j4Q === (\"0\" | 0)){return z5e?Math.ceil(j4Q):Math.floor(j4Q);}q0Y=j_t[0].DT;t_T=j_t[j_t.length - 1].DT;if(r0V >= q0Y && r0V <= t_T){u68=0;D1R=j_t.length;n2T=0;while(++n2T < \"100\" >> 0){W7Q.P3q(98);Q5P=Math.floor(W7Q.o5B(0,D1R,\"2\",u68));s6I=j_t[Q5P].DT;if(+s6I == +r0V){j9S.tickCache[O7m][M8x]=Q5P;return Q5P;}if(s6I < r0V){u68=Q5P;}if(s6I > r0V){if(j_t[Q5P - 1].DT < r0V){W7Q.b$0(3);j9S.tickCache[O7m][M8x]=W7Q.j1j(Q5P,0.5);return z5e?Q5P:Q5P - 1;}if(+j_t[Q5P - 1].DT == +r0V){W7Q.P3q(3);j9S.tickCache[O7m][M8x]=W7Q.o5B(Q5P,1);W7Q.b$0(3);return W7Q.j1j(Q5P,1);}D1R=Q5P;}}if(n2T >= +\"100\"){console.log(\"!!!Warning: tickFromDate() did not find match.\");return j_t.length;}}W7Q.b$0(70);G8O=W7Q.j1j(r0V,q0Y);S8Q=G8O?q0Y:t_T;L0W=this.standardMarketIterator(S8Q);P_U=L0W?L0W.futureTick({end:r0V}):0;j4Q=G8O?P_U * -1:j_t.length - 1 + P_U;j9S.tickCache[O7m][M8x]=j4Q;return j4Q;};t6M.ChartEngine.prototype.pixelFromBar=function(h3P,M4Q){var F4k,R$y;if(!M4Q){M4Q=this.chart;}F4k=0;R$y=this.chart.segmentImage;if(R$y && R$y[h3P] && typeof R$y[h3P].leftOffset === \"number\"){F4k=R$y[h3P].leftOffset;}else {F4k=(h3P + 0.5) * this.layout.candleWidth;}W7Q.P3q(3);var C4Q=W7Q.j1j(15,14);F4k=M4Q.panel.left + Math.floor(F4k + this.micropixels) - C4Q;return F4k;};t6M.ChartEngine.prototype.barFromPixel=function(D4M,B54){var w2o,b1i,f2m,M2J,E3U,V8i,w3X,U7R,y9m,G35,m03,s9f,L4p;if(!B54){B54=this.chart;}w2o=this.chart.segmentImage;b1i=this.micropixels;f2m=this.layout.candleWidth;if(w2o){M2J=D4M - B54.panel.left - b1i;E3U=+\"2\";w3X=w2o.length;W7Q.P3q(22);U7R=Math.round(W7Q.j1j(w3X,E3U));W7Q.P3q(3);var q_c=W7Q.j1j(18,17);W7Q.P3q(0);var j2$=W7Q.j1j(6,18,13);W7Q.P3q(3);var m2V=W7Q.o5B(12,10);m03=w2o[w3X - (\"1\" | q_c)].leftOffset + w2o[w3X - j2$].candleWidth / m2V;if(M2J > m03){return w3X + Math.floor((D4M - m03 - B54.panel.left - b1i) / f2m);}for(var r_W=1;r_W < w3X;r_W++){E3U*=2;V8i=w2o[U7R];if(!V8i)break;y9m=V8i.leftOffset;W7Q.P3q(99);var m_w=W7Q.j1j(5,5,17,15);G35=V8i.candleWidth / m_w;W7Q.P3q(3);s9f=W7Q.j1j(y9m,G35);W7Q.P3q(7);L4p=W7Q.j1j(G35,y9m);if(U7R === 0 || M2J >= s9f && M2J < L4p)break;else if(M2J < s9f){U7R-=Math.max(1,Math.round(w3X / E3U));}else {U7R+=Math.max(1,Math.round(w3X / E3U));}U7R=Math.max(0,Math.min(w3X - 1,U7R));}if(!w2o[U7R]){for(r_W=0;r_W < w3X;r_W++){V8i=w2o[r_W];if(!V8i)continue;y9m=V8i.leftOffset;W7Q.P3q(61);var L1N=W7Q.o5B(5,3,13,13);G35=V8i.candleWidth / L1N;if(M2J < y9m - G35){W7Q.P3q(3);return Math.max(0,W7Q.o5B(r_W,1));}else if(M2J < y9m + G35){return r_W;}else if(M2J >= y9m + G35){W7Q.P3q(100);return W7Q.o5B(r_W,0,\"1\");}}}return U7R;}return Math.floor((D4M - B54.panel.left - b1i) / f2m);};t6M.ChartEngine.prototype.tickFromPixel=function(s7z,A1I){var Q2W,R_f,Y3q,H7K;if(!A1I){A1I=this.chart;}Q2W=934234972;R_f=-1394392030;Y3q=2;for(var b77=1;W7Q.P8Y(b77.toString(),b77.toString().length,26253) !== Q2W;b77++){H7K=A1I.dataSet.length - A1I.scroll;Y3q+=2;}if(W7Q.n$o(Y3q.toString(),Y3q.toString().length,+\"16402\") !== R_f){H7K=A1I.dataSet.length * A1I.scroll;}W7Q.V8b();if(A1I.segmentImage){H7K+=this.barFromPixel(s7z,A1I);}else {H7K+=Math.floor((s7z - A1I.panel.left - this.micropixels) / this.layout.candleWidth);}return H7K;};t6M.ChartEngine.prototype.pixelFromTick=function(C5P,z0O){var g9h,p6I,L_X,k6W,r2o,J25,e$B,Z3t,B_o,h_k,U66;if(!z0O){z0O=this.chart;}g9h=z0O.dataSegment;p6I=z0O.dataSet;L_X=z0O.segmentImage;k6W=this.micropixels;r2o=g9h?g9h.length:0;J25=z0O.panel;e$B=z0O.scroll;Z3t=C5P - p6I.length + e$B;B_o=r2o?g9h[Z3t]:null;if(L_X){B_o=L_X[Z3t];}if(B_o && typeof B_o.leftOffset === \"number\"){return J25.left + Math.floor(B_o.leftOffset + k6W);}h_k=0;W7Q.a3b();U66=0;B_o=r2o?g9h[r2o - 1]:null;if(L_X){W7Q.P3q(3);B_o=L_X[W7Q.j1j(r2o,1)];}if(B_o && typeof B_o.leftOffset === \"number\"){if(r2o <= C5P - p6I.length + e$B){W7Q.b$0(77);var i27=W7Q.o5B(22,0,18,6);h_k=B_o.leftOffset + B_o.candleWidth / i27;U66=r2o;}}return h_k + J25.left + Math.floor((C5P - U66 - p6I.length + e$B + 0.5) * this.layout.candleWidth + k6W);};t6M.ChartEngine.prototype.pixelFromDate=function(J8N,D5p,K6K,c_Q){W7Q.a3b();return this.pixelFromTick(this.tickFromDate(J8N,D5p,K6K,c_Q),D5p);};t6M.ChartEngine.prototype.transformedPriceFromPixel=function(p8k,p2s,P8l){var k5S,G4L,e4A;if(!p2s){p2s=this.chart.panel;}k5S=P8l?P8l:p2s.yAxis;p8k=k5S.bottom - p8k;if(k5S.semiLog){e4A=p8k * k5S.logShadow / k5S.height;if(k5S.flipped){e4A=k5S.logHigh - e4A;}else {e4A+=k5S.logLow;}G4L=Math.pow(10,e4A);}else {if(!k5S.multiplier){return null;}G4L=p8k / k5S.multiplier;if(k5S.flipped){G4L=k5S.high - G4L;}else {G4L+=k5S.low;}}return G4L;};t6M.ChartEngine.prototype.priceFromPixel=function(G2$,h0F,w55){var q7x;if(!h0F){h0F=this.chart.panel;}W7Q.V8b();q7x=this.transformedPriceFromPixel(G2$,h0F,w55);if(this.charts[h0F.name] && h0F.chart.untransformFunc){if(!w55 || w55 == h0F.yAxis){q7x=h0F.chart.untransformFunc(this,h0F.chart,q7x,w55);}}return q7x;};t6M.ChartEngine.prototype.valueFromPixel=function(d8z,j7U,H22){var I6P;if(!j7U){j7U=this.whichPanel(d8z);}if(!j7U){I6P=Object.values(this.panels);if(I6P && I6P.length){if(d8z <= 0){j7U=I6P.shift();}else {j7U=I6P.pop();}}}return this.priceFromPixel(d8z,j7U,H22);};t6M.ChartEngine.prototype.valueFromInterpolation=function(t4D,d5T,c68,Z3K,a4W,f25){var E59,r_g,A$2,n5u,F0T,K$k,c2w,L50,L3T,Z_0,M0s,L96,p$k,e_9,S1i;E59=\"und\";E59+=\"e\";E59+=\"f\";E59+=\"ined\";r_g=\"obj\";r_g+=\"e\";r_g+=\"ct\";if(t4D === null || t4D < +\"0\" || !d5T){return null;}if(!Z3K){Z3K=this.chart.panel;}if(!a4W){a4W=Z3K.yAxis;}if(!c68){c68=this.chart.defaultPlotField;}A$2=this.getPreviousBar(this.chart,d5T,t4D);if(!A$2){return null;}W7Q.a3b();F0T=t6M.existsInObjectChain(A$2,d5T);if(F0T){n5u=F0T.obj[F0T.member];}if(typeof n5u == \"object\"){n5u=n5u[c68];}K$k=this.getRendererFromSeries(d5T);if(f25 || K$k && K$k.params.step || this.layout.chartType === \"step\"){return n5u;}c2w=this.getNextBar(this.chart,d5T,t4D);F0T=t6M.existsInObjectChain(c2w,d5T);if(F0T){L50=F0T.obj[F0T.member];}if(typeof L50 == r_g){L50=L50[c68];}if(!c2w){return null;}if(n5u === null || typeof n5u == \"undefined\" || L50 === null || typeof L50 == E59){return null;}L3T=this.pixelFromPrice(n5u,Z3K,a4W);Z_0=this.pixelFromPrice(L50,Z3K,a4W);M0s=A$2.tick;L96=c2w.tick;W7Q.b$0(101);p$k=W7Q.o5B(L3T,L96,M0s,Z_0);e_9=this.chart.dataSegment[t4D].tick;W7Q.P3q(102);S1i=W7Q.o5B(p$k,L3T,M0s,e_9);return this.priceFromPixel(S1i,Z3K,a4W);};t6M.ChartEngine.prototype.pixelFromTransformedValue=function(V3m,W0V,N_D){var g8R,M4Z,I73,b0f,A2m;if(!W0V){W0V=this.chart.panel;}g8R=N_D?N_D:W0V.yAxis;M4Z=(g8R.high - V3m) * g8R.multiplier;if(g8R.semiLog){I73=Math.max(V3m,0);b0f=Math.log(I73) / Math.LN10;A2m=g8R.height;M4Z=A2m - A2m * (b0f - g8R.logLow) / g8R.logShadow;}M4Z=g8R.flipped?g8R.bottom - M4Z:g8R.top + M4Z;return M4Z;};t6M.ChartEngine.prototype.pixelFromPrice=function(z0c,e8D,Z2_){if(!e8D){e8D=this.chart.panel;}W7Q.a3b();if(this.charts[e8D.name] && e8D.chart.transformFunc){if(!Z2_ || Z2_ == e8D.yAxis){z0c=e8D.chart.transformFunc(this,e8D.chart,z0c,Z2_);}}return this.pixelFromTransformedValue(z0c,e8D,Z2_);};t6M.ChartEngine.prototype.pixelFromValueAdjusted=function(f0v,H2l,x$S,H85){var E4K,n4_;if(this.layout.adj || !this.charts[f0v.name]){return this.pixelFromPrice(x$S,f0v,H85);}E4K=Math.round(H2l);if(E4K > 0 && E4K < f0v.chart.dataSet.length && (n4_=f0v.chart.dataSet[E4K].ratio)){W7Q.b$0(24);return this.pixelFromPrice(W7Q.o5B(x$S,n4_),f0v,H85);}return this.pixelFromPrice(x$S,f0v,H85);};t6M.ChartEngine.prototype.adjustIfNecessary=function(v8a,N0v,J8V){var H3b,w_L;if(this.layout.adj){return J8V;}if(!v8a || !this.charts[v8a.name]){return J8V;}H3b=Math.round(N0v);if(H3b > +\"0\" && H3b < v8a.chart.dataSet.length && (w_L=v8a.chart.dataSet[H3b].ratio)){W7Q.P3q(22);return W7Q.o5B(J8V,w_L);}return J8V;};};G6=v1m=>{var L$C=x2w9K;var q3Q;q3Q=v1m.CIQ;q3Q.ChartEngine.prototype.positionCrosshairsAtPointer=function(){var s6Z,v6S,X3T,s9e,L2R,E49,X3Y,G0I,D_L,i4Y,t4S;s6Z=\"posit\";s6Z+=\"ionCro\";s6Z+=\"ssha\";s6Z+=\"irsAtPointer\";v6S=\"p\";v6S+=\"x\";X3T=\"positionCros\";X3T+=\"shairs\";X3T+=\"AtPoin\";X3T+=\"ter\";s9e=this.currentPanel;if(!s9e){return;}if(!this.manageTouchAndMouse || this.mainSeriesRenderer.nonInteractive){return;}if(this.runPrepend(X3T,arguments)){return;}L2R=s9e.chart;E49=this.container.getBoundingClientRect();this.top=E49.top;this.left=E49.left;this.right=this.left + this.width;this.bottom=this.top + this.height;X3Y=this.crosshairTick=this.tickFromPixel(this.crossXActualPos,L2R);L$C.b$0(2);var C$i=L$C.o5B(20,19);G0I=this.pixelFromTick(X3Y,L2R) - C$i;if(G0I >= s9e.right || G0I <= s9e.left){this.undisplayCrosshairs();return;}if(this.controls.crossX){L$C.b$0(7);this.controls.crossX.style.left=L$C.j1j(\"px\",G0I);}D_L=s9e.name == \"chart\"?this.preferences.horizontalCrosshairField:s9e.horizontalCrosshairField;i4Y=L2R.dataSet;if(D_L && i4Y && X3Y < i4Y.length && X3Y > -1){this.crossYActualPos=this.pixelFromPrice(i4Y[X3Y][D_L],s9e);}t4S=this.crossYActualPos >= s9e.yAxis.bottom && this.crossYActualPos <= s9e.bottom;if(t4S){this.undisplayCrosshairs();return;}if(this.controls.crossY){this.controls.crossY.style.top=this.crossYActualPos + v6S;}this.runAppend(s6Z,arguments);};q3Q.ChartEngine.prototype.doDisplayCrosshairs=function(){var P1n,Z4R,T9b,I$J,k9g,u9i,S$b,Z1f;P1n=\"doDispla\";P1n+=\"yCrosshairs\";if(this.runPrepend(P1n,arguments)){return;}if(this.displayInitialized){var {floatCanvas:n2E, controls:n_v}=this;var {crossX:j0P, crossY:m5A, floatDate:k97}=n_v;var {vectorType:C4y}=this.currentVectorParameters;if(!this.shouldDisplayCrosshair()){this.undisplayCrosshairs();}else {if(j0P && j0P.style.display !== \"\"){j0P.style.display=\"\";if(m5A){m5A.style.display=\"\";}if(this.magnetizedPrice && C4y){Z4R=\"stx-\";Z4R+=\"crossha\";Z4R+=\"ir-cursor-on\";this.container.classList.remove(Z4R);this.chart.tempCanvas.style.display=\"block\";}else {this.container.classList.add(\"stx-crosshair-cursor-on\");}}if(k97 && !this.chart.xAxis.noDraw){k97.style.visibility=\"\";if(this.currentPanel){this.updateFloatHRLabel(this.currentPanel);}}if(n2E){T9b=-+\"471509148\";I$J=-1073704600;k9g=2;for(var v0T=1;L$C.P8Y(v0T.toString(),v0T.toString().length,\"92245\" * 1) !== T9b;v0T++){u9i=\"b\";u9i+=\"l\";u9i+=\"oc\";u9i+=\"k\";if(n2E.style.display == \"none\"){q3Q.clearCanvas(n2E,this);}n2E.style.display=u9i;k9g+=2;}if(L$C.n$o(k9g.toString(),k9g.toString().length,14324) !== I$J){S$b=\"b\";S$b+=\"l\";S$b+=\"ock\";Z1f=\"blo\";Z1f+=\"c\";Z1f+=\"k\";if(n2E.style.display !== Z1f){q3Q.clearCanvas(n2E,this);}n2E.style.display=S$b;}}}}this.runAppend(\"doDisplayCrosshairs\",arguments);};q3Q.ChartEngine.prototype.undisplayCrosshairs=function(){var h1z,A3$,h$g,z43,P_D,f7l,D$Z,N1R,z56,F5h;h1z=\"u\";h1z+=\"ndisplayCrosshairs\";if(this.runPrepend(h1z,arguments)){return;}A3$=this.controls;h$g=A3$.crossX;z43=A3$.crossY;if(h$g){P_D=\"no\";P_D+=\"ne\";if(h$g.style.display != P_D){f7l=\"n\";f7l+=\"on\";f7l+=\"e\";D$Z=\"n\";D$Z+=\"on\";D$Z+=\"e\";h$g.style.display=D$Z;if(z43){z43.style.display=f7l;}}}if(this.displayInitialized && A3$.floatDate){A3$.floatDate.style.visibility=\"hidden\";}if(!this.shouldDisplayCrosshairCursor()){this.container.classList.remove(\"stx-crosshair-cursor-on\");}N1R=this.floatCanvas;if(N1R && N1R.isDirty && N1R.style.display != \"none\"){q3Q.clearCanvas(N1R,this);if(N1R.style.display != \"none\"){N1R.style.display=\"none\";}}if(!this.activeDrawing && !this.repositioningDrawing && !this.editingAnnotation && !this.editingDrawing){z56=\"n\";z56+=\"one\";F5h=this.chart.tempCanvas;if(F5h && F5h.style.display != \"none\"){F5h.style.display=z56;}}this.runAppend(\"undisplayCrosshairs\",arguments);};q3Q.ChartEngine.prototype.hideCrosshairs=function(){L$C.V8b();this.displayCrosshairs=!1;};q3Q.ChartEngine.prototype.showCrosshairs=function(){this.displayCrosshairs=!![];};L$C.a3b();q3Q.ChartEngine.prototype.centerCrosshairs=function(){L$C.a3b();this.mousemoveinner((this.left + this.right) / 2,(this.bottom + this.top) / 2);};q3Q.ChartEngine.prototype.shouldDisplayCrosshair=function(){var y20,i_y,j72,l2E;var {layout:P42, preferences:g1d}=this;y20=!!P42.crosshair;i_y=!this.insideChart && !this.grabbingScreen;j72=this.openDialog !== \"\";var {vectorType:o3b}=this.currentVectorParameters;l2E=q3Q.Drawing && q3Q.Drawing[o3b] && new q3Q.Drawing[o3b]().dragToDraw;if(i_y || j72 || l2E){return !({});}else if(y20){return !0;}var {displayCrosshairsWithDrawingTool:j0G}=g1d;L$C.V8b();if((j0G || q3Q.isMobile) && o3b){return !!({});}return !!0;};q3Q.ChartEngine.prototype.shouldDisplayCrosshairCursor=function(){if(this.layout.crosshair){return !!\"1\";}var {vectorType:Y9h}=this.currentVectorParameters;L$C.a3b();if(Y9h && Y9h !== \"\"){return !![];}return !({});};};F3=D$8=>{var W85=x2w9K;var t6_,o8r;t6_=D$8.CIQ;o8r=D$8.timezoneJS;t6_.ChartEngine.prototype.loadChart=function(g7H,G6g,A_a){var g0g,x_N,V8k,v2v,O82,a_Q,X4Z,p3k,D1J,Y7R,b4r;if(!A_a && typeof G6g == \"function\"){A_a=G6g;G6g={};}else if(Array.isArray(G6g)){G6g={masterData:G6g};}if(!G6g){G6g={};}var {chart:Z1X, periodicity:f2e, range:F5v, span:r76}=G6g;var {layout:r7F, quoteDriver:j3H}=this;g0g={periodicity:r7F.periodicity,interval:r7F.interval,timeUnit:r7F.timeUnit};if(f2e){x_N=t6_.cleanPeriodicity(f2e.period?f2e.period:f2e.periodicity,f2e.interval,f2e.timeUnit);r7F.interval=x_N.interval;r7F.periodicity=x_N.period;r7F.timeUnit=x_N.timeUnit;}if(!Z1X){Z1X=this.chart;}var {dataSet:K5$, market:Q5e, masterData:U25, symbol:M9e, moreAvailable:A_M, upToDate:u36}=Z1X;V8k=t6_.clone(Z1X.symbolObject);Z1X.dataSet=[];Z1X.masterData=[];Z1X.moreAvailable=null;Z1X.upToDate=null;if(!g7H){Z1X.symbol=null;Z1X.symbolObject={symbol:null};}else if(typeof g7H == \"object\"){if(g7H.symbol.toUpperCase && g7H.symbol.toUpperCase() === \"CIQINFO\"){t6_.logPackageInfo();}else {Z1X.symbol=g7H.symbol;Z1X.symbolObject=g7H;}}else {v2v=\"CIQIN\";v2v+=\"FO\";if(g7H.toUpperCase && g7H.toUpperCase() === v2v){t6_.logPackageInfo();}else {O82=486801418;a_Q=-1451992964;X4Z=+\"2\";for(var T8G=1;W85.n$o(T8G.toString(),T8G.toString().length,43582) !== O82;T8G++){Z1X.symbol=g7H;X4Z+=2;}if(W85.n$o(X4Z.toString(),X4Z.toString().length,32406) !== a_Q){Z1X.symbol=g7H;}Z1X.symbolObject.symbol=g7H;}}Z1X.inflectionPoint=null;W85.V8b();if(this.marketFactory){p3k=this.marketFactory(Z1X.symbolObject);this.setMarket(p3k,Z1X);}this.setMainSeriesRenderer(!!\"1\");if(!F5v && !r76 && r7F){r76=!r7F.range?r7F.setSpan:{};F5v=r7F.range || ({});}else if(F5v && r76){r76={};}this.clearCurrentMarketData(Z1X);D1J=this;function m0Z(){var E72,J4J,B6A,P4s;E72=\"ma\";E72+=\"ster\";J4J=\"symbolC\";J4J+=\"hange\";B6A=\"symbolI\";B6A+=\"mport\";D1J.layout.symbols=D1J.getSymbols({\"include-parameters\":!!({}),\"exclude-studies\":!!({})});W85.V8b();D1J.dispatch(D1J.currentlyImporting?B6A:J4J,{stx:D1J,symbol:Z1X.symbol,symbolObject:Z1X.symbolObject,prevSymbol:M9e,prevSymbolObject:V8k,action:E72});if(f2e){P4s=\"perio\";P4s+=\"dic\";P4s+=\"i\";P4s+=\"ty\";D1J.dispatch(P4s,{stx:D1J,differentData:!!({}),prevPeriodicity:g0g});}if(j3H && j3H.paused){j3H.resume();}}if(!G6g.masterData && j3H){Y7R=function(h2U){if(h2U && h2U != \"orphaned\"){Z1X.symbol=M9e;Z1X.symbolObject=V8k;Z1X.market=Q5e;D1J.masterData=Z1X.masterData=U25;Z1X.dataSet=K5$;Z1X.moreAvailable=A_M;Z1X.upToDate=u36;}W85.V8b();m0Z();if(A_a){A_a.call(D1J,h2U);}};if(F5v && Object.keys(F5v).length && this.setRange){delete G6g.span;delete r7F.setSpan;this.chart.masterData=null;this.displayInitialized=!\"1\";if(f2e){F5v.periodicity=f2e;}F5v.forceLoad=!!({});this.setRange(F5v,Y7R);}else if(r76 && r76.base && this.setSpan){r76.multiplier=r76.multiplier || 1;this.chart.masterData=null;this.displayInitialized=![];if(f2e){r76.maintainPeriodicity=!!1;}r76.forceLoad=!!({});this.setSpan(r76,Y7R);}else {j3H.newChart({symbol:Z1X.symbol,symbolObject:Z1X.symbolObject,chart:Z1X,initializeChart:!0},function(Y$9){if(!Y$9){D1J.adjustPanelPositions();j3H.updateSubscriptions();if(G6g.stretchToFillScreen){D1J.fillScreen();}}Y7R.apply(D1J,arguments);});}}else {if(!G6g.masterData){console.log(\"Warning: No masterData specified and no QuoteFeed configured\");}if(!Z1X.symbol){Z1X.symbol=\"\";}this.initializeChart();b4r=this.doCleanupGaps(G6g.masterData,Z1X);this.setMasterData(b4r,Z1X,{noCleanupDates:!\"\"});Z1X.endPoints={};if(b4r && b4r.length){Z1X.endPoints={begin:b4r[0].DT,end:b4r[b4r.length - 1].DT};}this.createDataSet();if(F5v && Object.keys(F5v).length && this.setRange){this.setRange(F5v);}else if(r76 && r76.multiplier && r76.base && this.setSpan){this.setSpan({maintainPeriodicity:!!({}),multiplier:r76.multiplier,base:r76.base});}else if(G6g.stretchToFillScreen){this.fillScreen();}else if(b4r && b4r.length){this.home();}else {this.clear();}this.adjustPanelPositions();m0Z();if(A_a){A_a.call(D1J);}}t6_.logVersion();};t6_.ChartEngine.prototype.loadBlankChart=function(){this.loadChart(null,[]);};t6_.ChartEngine.prototype.getDataFields=function(W7t){var v2L,T7s,G84,w_r,Z0i;v2L=\"L\";v2L+=\"o\";v2L+=\"w\";T7s=\"H\";T7s+=\"i\";T7s+=\"g\";T7s+=\"h\";if(!W7t){W7t=this.chart;}G84=W7t.defaultPlotField || \"Close\";w_r=[\"Open\",T7s,v2L];w_r.push(G84);for(var y8g in W7t.series){Z0i=W7t.series[y8g].parameters;w_r.push(Z0i.symbol);}return w_r;};t6_.ChartEngine.prototype.cleanMasterData=function(c9t,k_5){var p8K,A3a,n1O,X7h,Q$d;p8K=c9t.symbol;function Y2q(E9K,A09){var u4X,J0A;for(var z9o=0;z9o < A09.length;z9o++){u4X=\"undef\";u4X+=\"ined\";J0A=E9K[A09[z9o]];if(typeof J0A != u4X){return !({});}}W85.V8b();return !!\"1\";}A3a=k_5.masterData;if(!A3a || !A3a.length){return;}n1O=this.getDataFields(k_5);X7h=0;do {Q$d=A3a[X7h];delete Q$d[p8K];if(Y2q.call(this,Q$d,n1O)){A3a.splice(X7h,1);continue;}X7h++;}while(X7h < A3a.length);A3a=this.doCleanupGaps(A3a,k_5,{noCleanupDates:!\"\"});this.setMasterData(A3a,k_5,{noCleanupDates:!0});this.clearCurrentMarketData(k_5,p8K);};t6_.ChartEngine.prototype.calculateATR=function(N$x,C6M,s_T){var Y0z,e5e,L3_,g7_,E1r,z4d;if(!s_T){s_T=N$x.dataSet;}Y0z=N$x.state.calculations.atr;if(!Y0z){Y0z=N$x.state.calculations.atr={};}if(!C6M){C6M=20;}W85.a3b();e5e=[];if(Y0z.accum){e5e=Y0z.accum;}for(var B9A=0;B9A < s_T.length;B9A++){g7_=s_T[B9A];L3_=B9A?s_T[B9A - 1]:Y0z.q1;if(!L3_)continue;E1r=Math.max(g7_.High - g7_.Low,Math.abs(g7_.High - L3_.Close),Math.abs(g7_.Low - L3_.Close));if(e5e.length < C6M){if(e5e.push(E1r) == C6M){z4d=+\"0\";for(var o_T=0;o_T < e5e.length;o_T++){z4d+=e5e[o_T];}W85.b$0(22);g7_.atr=W85.o5B(z4d,C6M);}}else {W85.b$0(3);var I$P=W85.o5B(21,20);g7_.atr=(L3_.atr * (C6M - I$P) + E1r) / C6M;}g7_.trueRange=E1r;}N$x.state.calculations.atr={accum:e5e,q1:L3_};};t6_.ChartEngine.prototype.calculateMedianPrice=function(a0M,Z5j){var s8u;if(!Z5j){Z5j=a0M.dataSet;}for(var a3y=0;a3y < Z5j.length;++a3y){s8u=Z5j[a3y];W85.b$0(103);var Z6G=W85.o5B(10,11,1,0,20);s8u[\"hl/2\"]=(s8u.High + s8u.Low) / Z6G;}};t6_.ChartEngine.prototype.calculateTypicalPrice=function(K65,T8V){var i1M;if(!T8V){T8V=K65.dataSet;}for(var x2M=0;x2M < T8V.length;++x2M){i1M=T8V[x2M];W85.P3q(104);var M34=W85.j1j(8,13,523,5);i1M[\"hlc/3\"]=(i1M.High + i1M.Low + i1M.Close) / M34;}};t6_.ChartEngine.prototype.calculateWeightedClose=function(u78,c6q){var w4w;if(!c6q){c6q=u78.dataSet;}for(var B20=0;B20 < c6q.length;++B20){w4w=c6q[B20];W85.b$0(2);var w8W=W85.o5B(14,12);w4w[\"hlcc/4\"]=(w4w.High + w4w.Low + w8W * w4w.Close) / +\"4\";}};t6_.ChartEngine.prototype.calculateOHLC4=function(S1r,l_q){var V3Q;if(!l_q){l_q=S1r.dataSet;}for(var r9I=0;r9I < l_q.length;++r9I){V3Q=l_q[r9I];W85.b$0(14);var P9f=W85.j1j(1,14,9);V3Q[\"ohlc/4\"]=(V3Q.Open + V3Q.High + V3Q.Low + V3Q.Close) / P9f;}};t6_.ChartEngine.prototype.currentQuote=function(F9W){var Z8N;if(!this.chart.dataSet){return null;}for(var o1A=this.chart.dataSet.length - 1;o1A >= 0;o1A--){if(this.chart.dataSet[o1A]){if(!F9W){return this.chart.dataSet[o1A];}Z8N=this.chart.dataSet[o1A][F9W];if(Z8N || Z8N === 0){return this.chart.dataSet[o1A];}}}return null;};W85.a3b();t6_.ChartEngine.prototype.mostRecentClose=function(w9q){var a7Y,R3g;if(!this.chart.dataSet){return null;}for(var w82=this.chart.dataSet.length - +\"1\";w82 >= 0;w82--){a7Y=this.chart.dataSet[w82];if(!a7Y)continue;if(w9q){a7Y=a7Y[w9q];if(!a7Y && a7Y !== 0)continue;}R3g=a7Y.iqPrevClose;if(typeof a7Y == \"object\"){a7Y=a7Y.Close;}if(typeof a7Y == \"number\"){return a7Y;}if(typeof R3g == \"number\"){return R3g;}}return null;};t6_.ChartEngine.prototype.createDataSegment=function(j9q){var e4a,B1g,F4c,i8P,B1N,f9O,f_d,R9F,s$A,O1B,e9q,f4v,a5Z,w8d,L7a,d9v,l9v,a42;if(this.runPrepend(\"createDataSegment\",arguments)){return;}for(var O6Z in this.charts){e4a=this.charts[O6Z];if(j9q){e4a=j9q;}if(t6_.Comparison && e4a.isComparison){t6_.Comparison.createComparisonSegmentInner(this,e4a);}B1g=e4a.dataSet;F4c=e4a.baseline;i8P=e4a.scroll;B1N=e4a.maxTicks;f9O=this.layout;f_d=f9O.candleWidth;F4c.actualLevel=F4c.userLevel?F4c.userLevel:F4c.defaultLevel;R9F=F4c.includeInDataSegment && !this.mainSeriesRenderer.standaloneBars;O1B=0;e9q=e4a.dataSegment=[];W85.P3q(105);var J_y=W85.o5B(12,11,19,14,2);W85.P3q(42);var E1F=W85.j1j(11,15,16,76);f4v=B1g.length - J_y - i8P - E1F;a5Z=e4a.defaultPlotField;for(var H5r=-1;H5r < i8P && H5r < B1N;H5r++){f4v++;if(H5r == -1 && !R9F)continue;if(f4v < B1g.length && f4v >= 0){s$A=B1g[f4v];s$A.candleWidth=null;if(s$A){O1B+=s$A.Volume || 1;}e9q.push(s$A);if(F4c.actualLevel === null && H5r >= 0){if(a5Z && a5Z != \"Close\"){W85.b$0(106);w8d=B1g[W85.o5B(f4v,\"1\")];if(w8d && (w8d[a5Z] || w8d[a5Z] === \"0\" - 0)){F4c.actualLevel=w8d[a5Z];}}else {if(s$A.iqPrevClose || s$A.iqPrevClose === 0){F4c.actualLevel=s$A.iqPrevClose;}}}}else if(f4v < 0){e9q.push(null);}}e4a.segmentImage=null;L7a=this.mainSeriesRenderer;if(L7a.params.volume){d9v=e4a.width - (B1N - e9q.length - +\"1\") * f9O.candleWidth;l9v=0;e4a.segmentImage=[];for(var h7$=0;h7$ < e9q.length;h7$++){s$A=e9q[h7$];e4a.segmentImage[h7$]={};a42=null;if(s$A){if(s$A.Volume){s$A.candleWidth=d9v * s$A.Volume / O1B;W85.b$0(86);var T7p=W85.o5B(6,0,12);a42=l9v + s$A.candleWidth / T7p;l9v+=s$A.candleWidth;}else {s$A.candleWidth=f_d;W85.P3q(31);a42=W85.o5B(2,l9v,f_d);l9v+=f_d;}e4a.segmentImage[h7$]={tick:s$A.tick,candleWidth:s$A.candleWidth,leftOffset:a42};}else {e4a.segmentImage[h7$]={tick:null,candleWidth:f_d,leftOffset:l9v + f_d / 2};l9v+=f_d;}}}if(j9q)break;}if(e4a && e4a.isComparison){this.clearPixelCache();}this.positionCrosshairsAtPointer();this.runAppend(\"createDataSegment\",arguments);};t6_.ChartEngine.prototype.getDataSegment=function(p8H){var J6p,B1y,n0f;if(!p8H){p8H=this.chart;}J6p=p8H.dataSegment;if(!J6p || !J6p.length){return [];}B1y=0;n0f=J6p.length;if(this.pixelFromBar(B1y,p8H) < p8H.panel.left){B1y++;}if(this.pixelFromBar(n0f - 1,p8H) > p8H.panel.right){n0f--;}return J6p.slice(B1y,n0f);};t6_.ChartEngine.prototype.setMasterData=function(W$S,s4k,L1Q){var P24,C9L,K19,f35,v72,H6s,i6v;if(!s4k){s4k=this.chart;}if(this.marketFactory){P24=this.marketFactory(s4k.symbolObject);this.setMarket(P24,s4k);}if(!L1Q){L1Q={};}W85.V8b();if(!L1Q.noCleanupDates){this.doCleanupDates(W$S,this.layout.interval);}s4k.masterData=W$S;if(s4k.name == \"chart\"){this.masterData=W$S;}K19=null;if(W$S){for(C9L=0;C9L < W$S.length;C9L++){f35=\"n\";f35+=\"um\";f35+=\"be\";f35+=\"r\";v72=W$S[C9L];if(K19 === null){if(typeof v72.Close === \"number\"){K19=\"Close\";}else if(typeof v72.Value === \"number\"){H6s=\"Val\";H6s+=\"ue\";K19=H6s;}}if(K19 === \"Value\" && typeof v72.Value === \"number\"){v72.Close=v72.Value;}if(v72.DT){if(Object.prototype.toString.call(v72.DT) != \"[object Date]\"){v72.DT=new Date(v72.DT);}if(!v72.Date || v72.Date.length != 17){v72.Date=t6_.yyyymmddhhmmssmmm(v72.DT);}}else if(v72.Date){v72.DT=t6_.strToDateTime(v72.Date);}else {console.log(\"setMasterData : Missing DT and Date on masterData object\");}if(v72.Volume && typeof v72.Volume !== f35){v72.Volume=parseInt(v72.Volume,+\"10\");}if(W$S.length - C9L < 50){this.updateCurrentMarketData(v72,s4k,null,{fromTrade:!!({})});}}}if(s4k.calculateTradingDecimalPlaces){s4k.decimalPlaces=s4k.calculateTradingDecimalPlaces({stx:this,chart:s4k,symbol:s4k.symbolObject.symbol,symbolObject:s4k.symbolObject});}this.setDisplayDates(W$S);s4k.roundit=Math.pow(10,s4k.decimalPlaces);for(C9L in this.plugins){i6v=this.plugins[C9L];if(i6v.display){if(i6v.setMasterData){i6v.setMasterData(this,s4k);}}}};t6_.ChartEngine.prototype.setMasterDataRender=function(b1X,Y1C,H62){if(!H62){H62=this.chart;}if(!H62.symbol){H62.symbol=\"\";}this.setMasterData(Y1C,H62);if(Y1C){H62.endPoints={};if(Y1C.length){H62.endPoints={begin:Y1C[0].DT,end:Y1C[Y1C.length - +\"1\"].DT};H62.symbol=b1X;}}this.createDataSet();this.initializeChart();this.draw();if(!Y1C || !Y1C.length){H62.symbol=null;this.clear();}this.adjustPanelPositions();};t6_.ChartEngine.prototype.getSymbols=function(u6z){var R$o,j8_,B5T,x2U,G7_,i0o,Y4Z;function n0H(L7$,Q36,H0s){W85.V8b();return {symbol:L7$,symbolObject:Q36,periodicity:H0s.periodicity,interval:H0s.interval,timeUnit:H0s.timeUnit,setSpan:H0s.setSpan};}if(!u6z){u6z={};}R$o=[];B5T=this.layout;for(var p92 in this.charts){x2U=this.charts[p92];var {symbol:J0d, symbolObject:Z9g}=x2U;if(Z9g && Z9g.symbol){if(u6z.static){if(Z9g.static){R$o.push(n0H(J0d,Z9g,B5T));}}else {R$o.push(n0H(J0d,Z9g,B5T));}}for(var u84 in x2U.series){var {parameters:M8d}=x2U.series[u84];if(!(u6z[\"include-static\"] || u6z.static) && M8d.data && !M8d.data.useDefaultQuoteFeed)continue;var {bucket:K0$, noStorage:O6p, symbol:j95, symbolObject:u8M}=M8d;j8_=n0H(j95,u8M,B5T);j8_.id=u84;if(u6z[\"include-parameters\"]){j8_.parameters=t6_.clone(M8d,null,!\"\");if(j8_.parameters.yAxis){delete j8_.parameters.yAxis.yAxisPlotter;}}if(u6z[\"exclude-studies\"] && K0$ == \"study\")continue;if(u6z[\"exclude-generated\"] && u8M.generator)continue;if(u6z[\"exclude-nostore\"] && O6p)continue;if(u6z.static){if(u8M.static){R$o.push(j8_);}}else {R$o.push(j8_);}}}if(u6z[\"breakout-equations\"]){G7_={};for(var r2g=0;r2g < R$o.length;r2g++){var {symbol:U9A}=R$o[r2g];if(this.isEquationChart(U9A)){i0o=t6_.formatEquation(U9A);if(i0o){Y4Z=i0o.symbols;for(var G9K=\"0\" << 64;G9K < Y4Z.length;G9K++){G7_[Y4Z[G9K]]=n0H(Y4Z[G9K],R$o[r2g].symbolObject,R$o[r2g]);}}}else {G7_[U9A]=n0H(U9A,R$o[r2g].symbolObject,R$o[r2g]);}}R$o=[];for(var m06 in G7_){R$o.push(G7_[m06]);}}return R$o;};t6_.ChartEngine.prototype.setDisplayDate=function(v_E){var e9E,G4z,F3R;if(t6_.ChartEngine.isDailyInterval(this.layout.interval)){return;}e9E=v_E.DT;W85.V8b();W85.b$0(107);var k6e=W85.j1j(3,996,7077,1011,7);G4z=e9E.getSeconds() * k6e + e9E.getMilliseconds();if(o8r.Date && this.displayZone){F3R=new o8r.Date(e9E.getTime(),this.displayZone);e9E=new Date(F3R.getFullYear(),F3R.getMonth(),F3R.getDate(),F3R.getHours(),F3R.getMinutes());e9E=new Date(e9E.getTime() + G4z);}v_E.displayDate=e9E;};t6_.ChartEngine.prototype.setDisplayDates=function(d6C){var g21;if(!d6C){return;}if(t6_.ChartEngine.isDailyInterval(this.layout.interval)){return;}for(var U96=0;U96 < d6C.length;U96++){g21=d6C[U96];if(g21.DT){this.setDisplayDate(g21);}}};t6_.ChartEngine.prototype.setTimeZone=function(u2m,J89){var E5U,t$a,M19,p55,E3P,a8E,t$G,g$J;if(!o8r.Date){W85.b$0(3);this.timeZoneOffset=W85.j1j(\"0\",0);E5U=1002159983;t$a=+\"607352547\";M19=2;for(var m4T=+\"1\";W85.P8Y(m4T.toString(),m4T.toString().length,\"33766\" - 0) !== E5U;m4T++){return;}if(W85.n$o(M19.toString(),M19.toString().length,81487) !== t$a){return;}}p55=new Date();E3P=p55.getTimezoneOffset();a8E=E3P;t$G=E3P;if(u2m){this.dataZone=u2m;}if(this.dataZone){a8E=new o8r.Date(p55,this.dataZone).getTimezoneOffset();}if(J89){this.displayZone=J89;}if(this.displayZone){t$G=new o8r.Date(p55,this.displayZone).getTimezoneOffset();}W85.b$0(108);W85.V8b();this.timeZoneOffset=W85.j1j(a8E,t$G,E3P,E3P);for(var t1c in this.charts){g$J=this.charts[t1c];this.setDisplayDates(g$J.masterData);}this.preferences.timeZone=J89;this.changeOccurred(\"preferences\");this.createDataSet();};t6_.ChartEngine.prototype.updateChartData=function(q4I,E1j,X5Q = {}){var P0z,y0S,z7z,L5f,Z0w,l9B,r2v,k$K,L2j,I3U,x7n,j23,q5f,o3g,o$t,j6W,X70,O9Y,y7p,p7s,Y2k,s6n,z3B,y$E,z1N;P0z=\"append\";P0z+=\"MasterDa\";P0z+=\"ta\";if(!E1j){E1j=this.chart;}y0S=this;var {layout:E13}=this;var {animationEntry:p5C, secondarySeries:h7n}=X5Q;function k_i(){var V36,e1L,s9d;W85.a3b();V36=null;e1L=0;if(P6d.length){V36=y0S.getFirstLastDataRecord(P6d,h7n || E1j.defaultPlotField,!!1);if(V36){if(q4I[q4I.length - 1].DT <= V36.DT){return;}for(;e1L < q4I.length;e1L++){if(+q4I[e1L].DT == +V36.DT){if(y0S.getFirstLastDataRecord([q4I[e1L]],h7n || E1j.defaultPlotField)){V36=null;}break;}else if(q4I[e1L].DT > V36.DT)break;}}}s9d=q4I.slice(e1L);if(V36){s9d.unshift(h7n?V36[h7n]:V36);}s9d=y0S.doCleanupGaps(s9d,E1j);if(V36){s9d.shift();}q4I=q4I.slice(0,e1L).concat(s9d);}var {isValidNumber:i8j}=t6_;var {masterData:P6d}=E1j;z7z=!\"1\";L5f=!!\"\";if(!X5Q.noCleanupDates){this.doCleanupDates(q4I,E13.interval);}W85.a3b();if(X5Q.useAsLastSale || q4I.constructor == Object && (q4I.Last || q4I.Last === 0)){S_C();}if(q4I && q4I.constructor == Object){q4I=[q4I];}if(!q4I || !q4I.length){return;}r2v=h7n?this.getSeries({symbol:h7n,chart:E1j}):[E1j];function T0W(w74,h7A){var z8S,T9D,L2E,q71;z8S=\"g\";W85.a3b();z8S+=\"a\";z8S+=\"p\";L2E=[z8S,\"stretch\"].includes(y0S.cleanupGaps);if(h7n){delete P6d[w74][h7n];if(y0S.cleanupGaps){T9D={DT:h7A,Close:null};if(!L2E && P6d[w74 - 1] && P6d[w74 - (\"1\" << 64)][h7n]){T9D.Close=P6d[w74 - 1][h7n].Close;T9D.High=T9D.Low=T9D.Open=T9D.Close;W85.b$0(3);T9D.Volume=W85.j1j(\"0\",0);}P6d[w74][h7n]=T9D;}}else {q71=P6d.splice(w74,1)[0];T9D={DT:q71.DT,Close:null,needed:![]};for(Z0w in E1j.series){l9B=E1j.series[Z0w].parameters.symbolObject.symbol;if(typeof q71[l9B] != \"undefined\"){T9D[l9B]=q71[l9B];delete T9D.needed;}}if(y0S.cleanupGaps && y0S.cleanupGaps != \"gap\"){delete T9D.needed;if(!L2E && P6d[w74 - 1]){T9D.Close=P6d[w74 - 1].Close;T9D.High=T9D.Low=T9D.Open=T9D.Close;T9D.Volume=0;}}if(T9D.needed !== !\"1\"){P6d.splice(w74,0,T9D);y0S.setDisplayDate(T9D);}}}if(h7n && r2v && r2v.length === 1){k$K=r2v[+\"0\"];if(k$K.parameters.isEvent){if(!k$K.endPoints.begin || k$K.endPoints.begin > q4I[0].DT){k$K.endPoints.begin=q4I[0].DT;}if(!k$K.endPoints.end || k$K.endPoints.end < q4I[q4I.length - 1].DT){k$K.endPoints.end=q4I[q4I.length - (\"1\" | 0)].DT;}if(k$K.parameters.processResults){k$K.parameters.processResults(this,null,k$K,q4I);}return;}}function S_C(){var m62;z7z=!![];if(X5Q.useAsLastSale && X5Q.useAsLastSale.aggregatedVolume){L5f=!!1;}W85.a3b();if(q4I.constructor === Array){W85.b$0(7);var W3T=W85.j1j(1,0);m62=q4I[q4I.length - W3T];q4I={};q4I.DT=m62.DT;q4I.Close=m62.Close;q4I.Volume=m62.Volume;}else if(q4I.Last){q4I.Close=q4I.Last;delete q4I.Last;}if(q4I.DT && Object.prototype.toString.call(q4I.DT) != \"[object Date]\"){q4I.DT=new Date(q4I.DT);}if(!q4I.DT || q4I.DT == \"Invalid Date\"){q4I.DT=new Date();}if(E13.interval != \"tick\"){H1p();}q4I.Open=q4I.Close;q4I.High=q4I.Close;q4I.Low=q4I.Close;}if(this.runPrepend(\"appendMasterData\",[q4I,E1j,X5Q])){return;}if(this.runPrepend(\"updateChartData\",[q4I,E1j,X5Q])){return;}if(!P6d){P6d=[];}W85.P3q(109);var n3t=W85.o5B(10,19,15,96);L2j=P6d.length - n3t;I3U=!({});if(X5Q.fillGaps){k_i();}if(!q4I.length){return;}function T_q(){y0S.createDataSet(null,null,X5Q);y0S.draw({animationEntry:p5C});y0S.updateChartAccessories();y0S.streamParameters.count=0;y0S.streamParameters.timeout=-1;}for(var B8D=0;B8D < q4I.length;B8D++){x7n=q4I[B8D];j23=x7n.DT;q5f=x7n.Date;if(j23 && Object.prototype.toString.call(j23) != \"[object Date]\"){x7n.DT=j23=new Date(j23);}if(j23){if(!q5f || q5f.length != 17){x7n.Date=t6_.yyyymmddhhmmssmmm(x7n.DT);}}if(!j23){j23=x7n.DT=t6_.strToDateTime(q5f);}if(!i8j(x7n.Close) && i8j(x7n.Value)){x7n.Close=x7n.Value;}while(L2j >= \"0\" * 1 && L2j < P6d.length){o3g=P6d[L2j].DT;if(!o3g){o3g=t6_.strToDateTime(P6d[L2j].Date);}if(o3g.getTime() <= j23.getTime()){I3U=!![];o$t=0;if(o3g.getTime() < j23.getTime()){if(L2j < P6d.length - 1){j6W=P6d[L2j + 1].DT || t6_.strToDateTime(P6d[L2j + 1].Date);if(j6W.getTime() <= j23.getTime()){L2j++;continue;}}o$t=1;}if(X5Q.deleteItems){if(!o$t){T0W(L2j,j23);}break;}else {if(E13.interval == \"tick\" && X5Q.firstLoop !== ![]){o$t=1;}if(!o$t){R14(L2j,x7n);}if(i8j(x7n.Close)){if(!i8j(x7n.Open)){x7n.Open=x7n.Close;}X70=Math.max(x7n.Open,x7n.Close);O9Y=Math.min(x7n.Open,x7n.Close);if(!i8j(x7n.High) || x7n.High < X70){x7n.High=X70;}if(!i8j(x7n.Low) || x7n.Low > O9Y){x7n.Low=O9Y;}}if(x7n.Volume && !i8j(x7n.Volume)){x7n.Volume=parseInt(x7n.Volume,10);}L2j+=o$t;if(h7n){y7p=\"t\";y7p+=\"ick\";if(q4I.length - B8D < \"50\" << 32){this.updateCurrentMarketData(x7n,E1j,h7n,{fromTrade:!!1,animationEntry:p5C});}if(E13.interval != y7p || x7n.Close !== undefined){if(o$t){P6d.splice(L2j,0,{DT:x7n.DT});this.setDisplayDate(P6d[L2j]);}P6d[L2j][h7n]=x7n;}}else {if(q4I.length - B8D < \"50\" * 1){this.updateCurrentMarketData(x7n,E1j,null,{fromTrade:!0,animationEntry:p5C});}if(E13.interval != \"tick\" || x7n.Close !== undefined){P6d.splice(L2j,o$t?0:1,x7n);this.setDisplayDate(x7n);}}}break;}L2j+=I3U?1:-1;}if(L2j < 0){if(h7n){p7s=\"ti\";p7s+=\"c\";p7s+=\"k\";this.updateCurrentMarketData(x7n,E1j,h7n,{fromTrade:!!({}),animationEntry:p5C});if(E13.interval != p7s || x7n.Close !== undefined){P6d.splice(0,0,{DT:x7n.DT});this.setDisplayDate(P6d[0]);P6d[+\"0\"][h7n]=x7n;}}else {this.updateCurrentMarketData(x7n,E1j,null,{fromTrade:!!({}),animationEntry:p5C});if(E13.interval != \"tick\" || x7n.Close !== undefined){P6d.splice(+\"0\",0,x7n);this.setDisplayDate(x7n);}}I3U=!0;L2j=0;}}if(P6d.length){this.masterData=E1j.masterData=P6d;}if(this.maxMasterDataSize){P6d=E1j.masterData=this.masterData=P6d.slice(-this.maxMasterDataSize);}for(var R1g=0;R1g < r2v.length;R1g++){Y2k=r2v[R1g];if(!Y2k.endPoints.begin || Y2k.endPoints.begin > q4I[0].DT){Y2k.endPoints.begin=q4I[0].DT;}if(!Y2k.endPoints.end || Y2k.endPoints.end < q4I[q4I.length - 1].DT){Y2k.endPoints.end=q4I[q4I.length - 1].DT;}s6n=Y2k.parameters && Y2k.parameters.field || E1j.defaultPlotField;z3B=this.getFirstLastDataRecord(q4I,s6n,!\"\");if(z3B && (!Y2k.lastQuote || Y2k.lastQuote.DT <= z3B.DT)){Y2k.lastQuote=z3B;}if(h7n && X5Q.deleteItems){Y2k.lastQuote=this.getFirstLastDataRecord(P6d,h7n,!!\"1\")[h7n];}}for(var F3I in this.plugins){y$E=this.plugins[F3I];if(y$E.display){if(y$E.appendMasterData){y$E.appendMasterData(this,q4I,E1j);}}}if(!this.masterData || !this.masterData.length){this.masterData=P6d;}function R14(T1c,k0x){var j_6,x8n,Q8l,W4M;j_6=P6d[T1c];if(h7n){j_6=j_6[h7n] || ({});}W85.V8b();if(k0x.Close === null){if(j_6.Open !== undefined){k0x.Open=null;}if(j_6.High !== undefined){k0x.High=null;}if(j_6.Low !== undefined){k0x.Low=null;}if(j_6.Volume !== undefined){k0x.Volume=null;}}else {x8n=\"B\";x8n+=\"i\";x8n+=\"d\";Q8l=\"L\";Q8l+=\"o\";Q8l+=\"w\";if(z7z){if(k0x.Volume){k0x.Volume=parseInt(k0x.Volume,10);}if(!L5f){k0x.Volume+=j_6.Volume;}}else {if(!i8j(k0x.Volume) && j_6.Volume){k0x.Volume=j_6.Volume;}}if(!X5Q.allowReplaceOHL){if(i8j(j_6.Open)){k0x.Open=j_6.Open;}if(i8j(j_6.High) && i8j(k0x.High)){if(j_6.High > k0x.High){k0x.High=j_6.High;}}if(i8j(j_6.Low) && i8j(k0x.Low)){if(j_6.Low < k0x.Low){k0x.Low=j_6.Low;}}}[\"Close\",\"Open\",\"High\",Q8l,x8n,\"Ask\"].forEach(function(s_i){if(!i8j(k0x[s_i])){k0x[s_i]=j_6[s_i];}});for(Z0w in E1j.series){W4M=\"undefin\";W4M+=\"ed\";l9B=E1j.series[Z0w].parameters.symbolObject.symbol;if(typeof k0x[l9B] == W4M && typeof j_6[l9B] != \"undefined\"){k0x[l9B]=j_6[l9B];}}}}if(!X5Q.noCreateDataSet){z1N=this.streamParameters;if(++z1N.count > z1N.maxTicks || X5Q.bypassGovernor){clearTimeout(z1N.timeout);T_q();}else {if(z1N.timeout == -1){z1N.timeout=setTimeout(T_q,z1N.maxWait);}}}this.runAppend(P0z,arguments);function H1p(){var y0c,O$s,G11,M8M,S$P,i9s,H0g,P_8,X78;if(!t6_.Market || !E1j.market){return;}y0c={market_tz:t6_.getFromNS(E1j,\"market.market_def.market_tz\",null)};O$s=E13.interval;if(O$s == \"month\" || O$s == \"week\"){if(!y0S.dontRoll){O$s=\"day\";}y0c=y0S.chart.market.market_def;}G11=new t6_.Market(y0c);M8M={begin:P6d && P6d.length?P6d[P6d.length - 1].DT:q4I.DT,interval:O$s,periodicity:1,timeUnit:E13.timeUnit};S$P=G11.newIterator(M8M);i9s=S$P.next();if(!P6d){q4I.DT=new Date(+S$P.previous());}else if(q4I.DT < i9s){W85.P3q(63);H0g=W85.o5B(\"0\",0);X78=S$P.previous();P_8=q4I.DT;X5Q.appending=!![];while(P_8 < X78 && H0g < 1000){X5Q.appending=!\"1\";X78=S$P.previous();H0g++;}q4I.DT=X78;X5Q.updating=!X5Q.appending;}else if(q4I.DT >= i9s){H0g=0;P_8=q4I.DT;while(P_8 > i9s && H0g < 1000){q4I.DT=i9s;i9s=S$P.next();H0g++;}X5Q.appending=!![];}}this.runAppend(\"updateChartData\",arguments);};t6_.ChartEngine.prototype.updateCurrentMarketData=function(n$W,W$_,O8P,x2q = {}){var a79,T5E,m2M,p3z,g_Z,A$m,X1N,u_8,r5w;a79=\"L\";a79+=\"a\";a79+=\"s\";a79+=\"t\";if(!n$W || !n$W.DT){return;}if(!W$_){W$_=this.chart;}var {fromTrade:Z$e}=x2q;T5E=n$W.DT;if(!Z$e && this.layout.interval != \"tick\" && W$_.market){if(W$_.market.market_def){if(!W$_.market.isMarketDate(n$W.DT)){return;}if(!t6_.ChartEngine.isDailyInterval(this.layout.interval) && W$_.market.getSession(n$W.DT) === null){return;}}m2M={begin:n$W.DT,interval:this.layout.interval,periodicity:this.layout.periodicity,timeUnit:this.layout.timeUnit};p3z=new t6_.Market(W$_.market.market_def);if(this.extendedHours && this.extendedHours.filter){p3z.enableAllAvailableSessions();}g_Z=p3z.newIterator(m2M);g_Z.next();n$W.DT=g_Z.previous();}if(this.runPrepend(\"updateCurrentMarketData\",arguments)){return;}A$m=Z$e?\"DT\":\"Timestamp\";var {currentMarketData:P2e}=W$_;X1N=!\"1\";if(O8P){if(!P2e[O8P]){P2e[O8P]={};}P2e=P2e[O8P];}[a79,\"Bid\",\"Ask\"].forEach(function(R4k){W85.V8b();var o4P,P$F;if(n$W[R4k] && typeof n$W[R4k] == \"number\"){o4P=P2e[R4k];if(!o4P || !o4P[A$m] || o4P[A$m] <= (Z$e?n$W.DT:T5E)){P$F=\"S\";P$F+=\"i\";P$F+=\"z\";P$F+=\"e\";P2e[R4k]={DT:n$W.DT,Price:n$W[R4k],Size:n$W[R4k + P$F],Timestamp:T5E};X1N=!![];}}});[\"BidL2\",\"AskL2\"].forEach(function(w42){var t0B,G4K,w1$,r1U;W85.V8b();if(n$W[w42] && n$W[w42] instanceof Array){t0B=P2e[w42];if(!t0B || !t0B[A$m] || t0B[A$m] <= (Z$e?n$W.DT:T5E)){G4K=-1956420779;w1$=-1736785441;r1U=2;for(var c26=1;W85.n$o(c26.toString(),c26.toString().length,93723) !== G4K;c26++){P2e[w42]={DT:n$W.DT,Price_Size:n$W[w42],Timestamp:T5E};r1U+=2;}if(W85.n$o(r1U.toString(),r1U.toString().length,96564) !== w1$){P2e[w42]={DT:n$W.DT,Price_Size:n$W[w42],Timestamp:T5E};}P2e[w42]={DT:n$W.DT,Price_Size:n$W[w42],Timestamp:T5E};X1N=!!({});}}});if(n$W.Close && (!P2e.Last || P2e.Last.Timestamp <= (n$W.LastTime || T5E))){u_8=n$W.Close;r5w=x2q && x2q.finalClose;if(r5w || r5w === 0){u_8=r5w;}P2e.Last={DT:n$W.DT,Price:u_8,Size:n$W.LastSize === undefined && this.layout.interval == \"tick\"?n$W.Volume:n$W.LastSize,Timestamp:n$W.LastTime || T5E};X1N=!![];}if(X1N && !x2q.animationEntry){P2e.touched=new Date();}if(!Z$e){delete n$W.Last;}this.runAppend(\"updateCurrentMarketData\",arguments);};t6_.ChartEngine.prototype.clearCurrentMarketData=function(X2v,K3C){var Y_K,n3c,j9c;if(this.runPrepend(\"clearCurrentMarketData\",arguments)){return;}n3c=[];if(!X2v){for(Y_K in this.charts){n3c.push(this.charts[Y_K]);}}else {n3c.push(X2v);}W85.a3b();for(Y_K=0;Y_K < n3c.length;Y_K++){j9c=n3c[Y_K].currentMarketData;if(K3C){delete j9c[K3C];}else {for(var D4x in j9c){j9c[D4x]=undefined;}}}this.runAppend(\"clearCurrentMarketData\",arguments);};};Z$=h2d=>{var H4p=x2w9K;var R47;R47=h2d.CIQ;R47.ChartEngine.prototype.changeOccurred=function(p4Q){var Y_M,v1k,b$P,o4e,I3J;Y_M=\"pre\";Y_M+=\"ference\";Y_M+=\"s\";v1k=\"v\";H4p.a3b();v1k+=\"e\";v1k+=\"ct\";v1k+=\"or\";b$P=\"la\";b$P+=\"y\";b$P+=\"o\";b$P+=\"ut\";o4e={stx:this,symbol:this.chart.symbol,symbolObject:this.chart.symbolObject,layout:this.layout,drawings:this.drawingObjects};if(p4Q == \"theme\"){this.dispatch(\"theme\",o4e);}if(this.currentlyImporting){return;}if(p4Q == b$P){this.dispatch(\"layout\",o4e);}else if(p4Q == v1k){this.dispatch(\"drawing\",o4e);}else if(p4Q == Y_M){I3J=\"p\";I3J+=\"refer\";I3J+=\"en\";I3J+=\"ces\";this.dispatch(I3J,o4e);}};H4p.V8b();R47.ChartEngine.prototype.startAsyncAction=function(){if(!this.pendingAsyncs){this.pendingAsyncs=[];}H4p.V8b();this.pendingAsyncs.push(!!({}));};R47.ChartEngine.prototype.registerChartDrawnCallback=function(w6t){if(!this.asyncCallbacks){this.asyncCallbacks=[];}H4p.V8b();this.asyncCallbacks.push(w6t);return {fc:w6t};};R47.ChartEngine.prototype.unregisterChartDrawnCallback=function(G29){for(var n6E=\"0\" << 32;n6E < this.asyncCallbacks.length;n6E++){if(this.asyncCallbacks[n6E] == G29.fc){this.asyncCallbacks.splice(n6E,1);return;}}};R47.ChartEngine.prototype.makeAsyncCallbacks=function(){if(!this.asyncCallbacks){return;}H4p.a3b();if(!this.pendingAsyncs || !this.pendingAsyncs.length){for(var D1o=0;D1o < this.asyncCallbacks.length;D1o++){this.asyncCallbacks[D1o]();}}};R47.ChartEngine.prototype.completeAsyncAction=function(){this.pendingAsyncs.pop();this.makeAsyncCallbacks();};R47.ChartEngine.prototype.addDomEventListener=function(I_O,e7Y,P9S,K7j){I_O.addEventListener(e7Y,P9S,K7j);this.eventListeners.push({element:I_O,event:e7Y,function:P9S,options:K7j});};R47.ChartEngine.prototype.addEventListener=function(J4f,w8B){var Y6b;if(J4f === \"*\"){for(var T$4 in this.callbackListeners){this.callbackListeners[T$4].push(w8B);}}else if(J4f instanceof Array){for(var g79=0;g79 < J4f.length;g79++){this.callbackListeners[J4f[g79]].push(w8B);}}else {Y6b=this.callbackListeners[J4f];if(!Y6b){throw new Error(\"Attempted to add an invalid listener.\");}Y6b.push(w8B);}return {type:J4f,cb:w8B};};R47.ChartEngine.prototype.removeEventListener=function(I1m,K2n){var O1k,J58,s2e,M3b,X4o,J_R;O1k=\"obj\";O1k+=\"ect\";if(!I1m || typeof I1m != O1k){I1m={type:I1m,cb:K2n};}J58=function(x_k,p0c){for(var G5E=\"0\" ^ 0;G5E < x_k.length;G5E++){if(x_k[G5E] === p0c){x_k.splice(G5E,1);return;}}};s2e=this.callbackListeners;if(I1m.type === \"*\"){for(var F_d in s2e){J58(s2e[F_d],I1m.cb);}return;}if(!s2e[I1m.type]){throw new Error(\"Attempted to remove an invalid listener.\");}M3b=-2070640313;H4p.a3b();X4o=817817197;J_R=2;for(var P5$=1;H4p.P8Y(P5$.toString(),P5$.toString().length,50969) !== M3b;P5$++){J58(s2e[I1m.type],I1m.cb);J_R+=2;}if(H4p.n$o(J_R.toString(),J_R.toString().length,64577) !== X4o){J58(s2e[I1m.type],I1m.cb);}};R47.ChartEngine.prototype.dispatch=function(K17,Q6r){var c_u;c_u=this.callbackListeners[K17];if(c_u){for(var V0n=0;V0n < c_u.length;V0n++){if(c_u[V0n].call(this,Q6r) === !!({})){return !![];}}}c_u=this.callbackListeners[\"*\"];if(c_u){for(var c$S=0;c$S < c_u.length;c$S++){if(c_u[c$S].call(this,Q6r) === !!({})){return !!\"1\";}}}return !({});};R47.ChartEngine.prototype.updateListeners=function(W8S){var M$I;H4p.a3b();for(var e$$ in this.plugins){M$I=this.plugins[e$$];if(M$I.display && M$I.listener){M$I.listener(this,W8S);}}};R47.ChartEngine.registerGlobalEvent=function(R$L,t70,C4d,K1D){if(!Array.isArray(R$L)){R$L=[R$L];}R$L.forEach(o0N=>{H4p.a3b();R47.ChartEngine.globalEventHandlers.push({event:o0N,listener:t70,options:C4d || !!\"\",isWindow:K1D,applied:[]});});R47.ChartEngine.attachGlobalEventHandlers();};R47.ChartEngine.attachGlobalEventHandlers=function(){var s27;s27=R47.ChartEngine.registeredContainers;s27.forEach(S6H=>{var {ownerDocument:l3$}=S6H;R47.ChartEngine.globalEventHandlers.forEach(function(F_r){H4p.a3b();var J5N;var {event:T8Y, listener:j1z, options:x34, isWindow:g7c, applied:s8g}=F_r;if(s8g.indexOf(l3$) === -1){J5N=g7c?l3$.defaultView:l3$;J5N.addEventListener(T8Y,j1z,x34);s8g.push(l3$);}});});};};g2=O3N=>{var I9t;I9t=O3N.CIQ;I9t.ChartEngine.prototype.prepend=function(W4G,P$c){var e9H,p8S;x2w9K.b$0(7);e9H=x2w9K.j1j(W4G,\"prepend\");x2w9K.V8b();if(this instanceof I9t.ChartEngine){p8S=this.hasOwnProperty(e9H)?this[e9H]:[];this[e9H]=[P$c].concat(p8S);}else {p8S=I9t.ChartEngine.prototype[e9H] || [];I9t.ChartEngine.prototype[e9H]=[P$c].concat(p8S);}return {method:e9H,func:P$c};};I9t.ChartEngine.prototype.append=function(f1H,p3$){var n2v,P8G;x2w9K.P3q(7);n2v=x2w9K.j1j(f1H,\"append\");if(this instanceof I9t.ChartEngine){P8G=this.hasOwnProperty(n2v)?this[n2v]:[];this[n2v]=P8G.concat(p3$);}else {P8G=I9t.ChartEngine.prototype[n2v] || [];I9t.ChartEngine.prototype[n2v]=P8G.concat(p3$);}return {method:n2v,func:p3$};};I9t.ChartEngine.prototype.runPrepend=function(z7L,Z8h,h37){var o3V,j9b,W6L,I9h;o3V=\"pr\";o3V+=\"ep\";o3V+=\"end\";x2w9K.P3q(7);j9b=x2w9K.o5B(z7L,o3V);W6L=this.hasOwnProperty(j9b)?this[j9b]:[];W6L=W6L.concat(I9t.ChartEngine.prototype[j9b] || []);if(!W6L.length){return !1;}if(!h37){h37=this;}for(var h14=0;h14 < W6L.length;h14++){I9h=W6L[h14].apply(h37,Z8h);if(I9h){return I9h;}}return !1;};I9t.ChartEngine.prototype.runAppend=function(J8a,O5u,c8k){var A1m,t4w,R43;x2w9K.P3q(7);A1m=x2w9K.o5B(J8a,\"append\");t4w=this.hasOwnProperty(A1m)?this[A1m]:[];t4w=t4w.concat(I9t.ChartEngine.prototype[A1m] || []);if(!t4w.length){return ![];}if(!c8k){c8k=this;}for(var C8q=\"0\" - 0;C8q < t4w.length;C8q++){R43=t4w[C8q].apply(c8k,O5u);if(R43){return R43;}}return ![];};I9t.ChartEngine.prototype.removeInjection=function(v$$){var c8n,b3w;c8n=v$$.method;if(this instanceof I9t.ChartEngine){if(!this[c8n]){return;}for(b3w=0;b3w < this[c8n].length;b3w++){if(this[c8n][b3w] == v$$.func){this[c8n].splice(b3w,1);return;}}}else {if(!I9t.ChartEngine.prototype[c8n]){return;}for(b3w=\"0\" * 1;b3w < I9t.ChartEngine.prototype[c8n].length;b3w++){if(I9t.ChartEngine.prototype[c8n][b3w] == v$$.func){I9t.ChartEngine.prototype[c8n].splice(b3w,1);return;}}}};I9t.ChartEngine.prototype.remove=function(Q1m){var m0P=x2w9K;if(this instanceof I9t.ChartEngine){m0P.P3q(7);delete this[m0P.o5B(Q1m,\"append\")];m0P.P3q(7);delete this[m0P.j1j(Q1m,\"prepend\")];}else {m0P.P3q(7);delete I9t.ChartEngine.prototype[m0P.j1j(Q1m,\"append\")];m0P.P3q(7);delete I9t.ChartEngine.prototype[m0P.o5B(Q1m,\"prepend\")];}};};m2=e64=>{var V41=x2w9K;var U9Y,Q37,h7k,e32;U9Y=\"u\";U9Y+=\"n\";U9Y+=\"l\";U9Y+=\"oad\";Q37=\"
<\";Q37+=\"/div>
\";h7k=e64.CIQ;e32=e64.timezoneJS;h7k.ChartEngine.prototype.convertToDataZone=function(U1_){V41.V8b();var o0i;if((U1_ || U1_ === 0) && this.dataZone){o0i=h7k.convertTimeZone(U1_,null,this.dataZone);U1_=new Date(o0i.getFullYear(),o0i.getMonth(),o0i.getDate(),o0i.getHours(),o0i.getMinutes(),o0i.getSeconds(),o0i.getMilliseconds());}return U1_;};h7k.ChartEngine.prototype.debug=function(){};h7k.ChartEngine.prototype.fps=function(P$G,y3N){var K76,h6a,b$G,p__,Y8y,v_C,g_o;K76=\" \";K76+=\"s\";K76+=\"ec\";K76+=\"onds\";P$G=P$G || 5;h6a=new Date().getTime();V41.P3q(24);b$G=V41.o5B(\"0\",1);p__=this;V41.b$0(34);console.log(V41.j1j(\"Running fps() for \",K76,P$G));V41.P3q(3);Y8y=V41.o5B(\"506978057\",0);v_C=-628200507;g_o=2;for(var s89=1;V41.n$o(s89.toString(),s89.toString().length,78380) !== Y8y;s89++){P$O();g_o+=2;}function P$O(){var p_W,t_9,P_G;p_W=(new Date().getTime() - h6a) / (\"1000\" - 0);if(p_W > P$G){t_9=\"F\";t_9+=\"P\";t_9+=\"S=\";V41.P3q(22);P_G=V41.j1j(b$G,p_W);V41.P3q(7);console.log(V41.o5B(P_G,t_9));if(y3N){y3N(P_G);}return;}p__.draw();b$G++;if(h7k.ChartEngine.useAnimation){p__.ownerWindow.requestAnimationFrame(P$O);}else {setTimeout(P$O,0);}}if(V41.P8Y(g_o.toString(),g_o.toString().length,50905) !== v_C){P$O();}};h7k.ChartEngine.htmlControls={mSticky:'
',iconsTemplate:Q37};h7k.ChartEngine.prototype.setChartType=function(I2Z){var s35,c6W;s35=this.layout;c6W=this.chart;if(s35.aggregationType != \"ohlc\"){s35.aggregationType=\"ohlc\";if(c6W.canvas){this.createDataSet();}}s35.chartType=I2Z;this.setMainSeriesRenderer();if(this.mainSeriesRenderer.isAggregation && this.setAggregationType){return this.setAggregationType(I2Z);}c6W.defaultChartStyleConfig={type:I2Z};V41.a3b();if(this.displayInitialized){this.draw();}this.changeOccurred(\"layout\");};h7k.ChartEngine.prototype.setChartScale=function(i5U){var f43;if(!i5U){i5U=\"linear\";}f43={percent:!0,relative:!![]};this.layout.chartScale=i5U;if(this.chart.canvas){this.draw();}this.changeOccurred(\"layout\");};h7k.ChartEngine.prototype.checkLogScale=function(){var d$i,W15,W2k;if(this.runPrepend(\"checkLogScale\",arguments)){return;}if(this.layout.chartScale !== \"log\"){return ![];}d$i=!!\"\";if(this.chart.yAxis.lowValue <= 0){W15=\"logdeac\";W15+=\"tivat\";W15+=\"ed\";W2k=\"not\";W2k+=\"ifica\";W2k+=\"t\";W2k+=\"ion\";this.setChartScale(\"linear\");this.dispatch(W2k,W15);d$i=!!({});}this.runAppend(\"checkLogScale\",arguments);V41.V8b();return d$i;};h7k.ChartEngine.prototype.setAdjusted=function(u$W){this.layout.adj=u$W;if(this.chart.canvas){this.createDataSet();this.draw();}this.changeOccurred(\"layout\");};h7k.ChartEngine.prototype.padOutPrice=function(p5q,X5k){var a7i,D$2,N77,B4x;if(p5q !== 0 && (!p5q || typeof p5q != \"number\")){return \"\";}if(!X5k && X5k !== 0){X5k=p5q;}V41.b$0(7);a7i=V41.o5B(X5k,\"\");D$2=0;if(a7i.indexOf((439.91,5800) > 5023?\".\":(\"7.74e+3\" - 0,\"c\")) > -+\"1\"){D$2=a7i.substring(a7i.indexOf(\".\")).length - +\"1\";}if(X5k >= 1000){D$2=Math.max(D$2,0);}else if(X5k < 2){D$2=Math.max(D$2,4);}else {D$2=Math.max(D$2,2);}N77=this.internationalizer;if(N77){B4x=N77.priceFormatters.length;if(D$2 >= B4x){V41.b$0(3);D$2=V41.j1j(B4x,1);}p5q=N77.priceFormatters[D$2].format(p5q);}else {p5q=p5q.toFixed(D$2);}return p5q;};h7k.ChartEngine.prototype.formatPrice=function(e_f,F9m){var x04,L0H,c1i,P2N;x04=\"u\";x04+=\"n\";x04+=\"d\";x04+=\"efined\";if(e_f !== 0 && (!e_f || typeof e_f == x04)){return \"\";}if(!F9m){F9m=this.currentPanel;}if(!F9m){F9m=this.chart.panel;}if(!F9m){return e_f.toString();}L0H=F9m.decimalPlaces;if(!L0H && L0H !== 0){L0H=F9m.chart.decimalPlaces;}if(!L0H && L0H !== (\"0\" | 0)){return e_f.toString();}c1i=this.internationalizer;if(c1i){P2N=c1i.priceFormatters.length;if(L0H >= P2N){V41.b$0(3);L0H=V41.o5B(P2N,1);}e_f=c1i.priceFormatters[L0H].format(e_f);}else {e_f=e_f.toFixed(L0H);}return e_f;};h7k.ChartEngine.prototype.determineMinMax=function(W06,K16,C_v,i3y,l7R,Y5H,L2u,V4Y,u$y){var u8v,i6b,U6w,R0r,V_t,V9X,k9k,I0n,D6m,d2c,F60;V41.P3q(12);var x3P=V41.j1j(11,45,4);V41.a3b();u8v=Number.MAX_VALUE * x3P;i6b=Number.MAX_VALUE;U6w=!!0;R0r=W06.length;if(!u$y){u$y=[];}V_t=[];if(l7R){R0r=l7R;}for(var c7c=0;c7c <= R0r + (\"1\" >> 96);c7c++){if(K16.length){if(c7c == R0r){V9X=this.getPreviousBar(this.chart,K16[+\"0\"],0);}else if(c7c == R0r + 1){V9X=this.getNextBar(this.chart,K16[0],R0r - 1);}else {V9X=W06[c7c];}}if(!V9X)continue;if(!i3y){if(V9X.transform){U6w=!![];V9X=V9X.transform;}else if(U6w)continue;}k9k=0;for(var j8m=0;j8m < K16.length;j8m++){I0n=h7k.existsInObjectChain(V9X,K16[j8m]);if(!I0n)continue;D6m=I0n.obj[I0n.member];if(typeof D6m == \"number\"){D6m=[D6m];}for(var G6V=0;G6V < D6m.length;G6V++){d2c=D6m[G6V];if(Y5H && d2c instanceof Array){d2c=d2c[0];}if(d2c || d2c === 0){if(C_v === !!\"1\" || C_v instanceof Array && C_v.indexOf(K16[j8m]) > -1){k9k+=d2c;if(k9k > u8v){u8v=k9k;}if(k9k < i6b){i6b=k9k;}}else {if(d2c > u8v){u8v=d2c;}if(d2c < i6b){i6b=d2c;}V_t.push({value:d2c,quote:V9X});}}}}if(C_v === !\"\" || C_v instanceof Array && C_v.indexOf(K16[j8m]) > -1){V_t.push({value:k9k,quote:V9X});}}F60=[i6b,u8v];u$y.forEach(function(w5s){V41.V8b();F60=w5s(V_t,L2u,V4Y) || F60;});if(F60[1] == Number.MAX_VALUE * -1){F60[1]=0;}if(F60[0] == Number.MAX_VALUE){F60[0]=0;}return F60;};h7k.ChartEngine.prototype.initializeDisplay=function(d8l){var Q55,O9S,x90,a8e,M8Q,O9T,T3Q,z2u,Q94,L$D,N$E,N_z,G9h,R33,Q22,e4_;Q55=\"C\";Q55+=\"l\";Q55+=\"o\";V41.V8b();Q55+=\"se\";O9S=\"initial\";O9S+=\"ize\";O9S+=\"Display\";if(this.runPrepend(O9S,arguments)){return;}x90=[];a8e=[];M8Q=!({});O9T=this;T3Q=[\"Close\",\"Open\",\"High\",\"Low\"];z2u=[d8l.defaultPlotField || Q55];var {mainSeriesRenderer:m7F}=this;var {dataSegment:b_B, seriesRenderers:C8P}=d8l;L$D=null;N$E=Math.floor((d8l.width - this.micropixels) / this.layout.candleWidth);function E_L(B5b,c_x){var i5R,L8Y,N4H,H_D,P4b,e5J,o4$,O_i,f1Q,C$G,q99;i5R=!({});L8Y=O9T.layout && O9T.layout.studies && O9T.layout.studies[B5b.name];if(L8Y && !(L8Y.disabled || L8Y.signalData && !L8Y.signalData.reveal) && (!c_x || c_x.name == L8Y.panel)){N4H=\"_\";N4H+=\"h\";N4H+=\"is\";N4H+=\"t\";for(var F2j in L8Y.outputMap){x90.push(F2j);if(L8Y.study){if(L8Y.study.renderer){x90=x90.concat(h7k.createObjectChainNames(F2j,T3Q));}else if(!L8Y.study.seriesFN){x90=x90.concat(h7k.createObjectChainNames(F2j,z2u));}}}for(var I5C=0;I5C <= 2;I5C++){x90.push(L8Y.name + N4H + (I5C?I5C:\"\"));}i5R=!\"\";}if(!c_x){return;}B5b.studies=[];B5b.renderers=[];if(i5R){B5b.studies.push(B5b.name);}for(var L1y in C8P){H_D=C8P[L1y];P4b=H_D.params;e5J=P4b.panel;if((P4b.yAxis || !O9T.panels[e5J] || O9T.panels[e5J].yAxis) != B5b)continue;if(e5J != c_x.name)continue;o4$=H_D.highLowBars?T3Q:z2u;M8Q=H_D.bounded;for(var b7Y=0;b7Y < H_D.seriesParams.length;b7Y++){O_i=H_D.seriesParams[b7Y];if(O_i.hidden || O_i.disabled)continue;f1Q=void +\"0\";if(O_i.subField){f1Q=h7k.createObjectChainNames(O_i.symbol,[O_i.subField]).concat(O_i.symbol);}else if(O_i.symbol){f1Q=h7k.createObjectChainNames(O_i.symbol,o4$).concat(O_i.symbol);}else if(O_i.field){f1Q=O_i.field;}else if(B5b == d8l.panel.yAxis){f1Q=o4$;}if(f1Q){x90=x90.concat(f1Q);}if(H_D.useSum){a8e=a8e.concat(f1Q);}}B5b.renderers.push(L1y);}for(var p9J in O9T.overlays){C$G=O9T.overlays[p9J];if(C$G.panel != c_x.name)continue;if(C$G.name == B5b.name)continue;q99=C$G.getYAxis(O9T);if(q99 != B5b)continue;B5b.studies.push(C$G.name);if(d8l.includeOverlaysInMinMax){E_L({name:C$G.name});}}}if(d8l.scroll > d8l.maxTicks && d8l.maxTicks > N$E + 1){V41.P3q(77);var B8p=V41.o5B(42,9,16,18);L$D=b_B.length - B8p;}N_z=[];for(var H5I in this.panels){G9h=this.panels[H5I];N_z=G9h.yaxisLHS.concat(G9h.yaxisRHS);for(var r6q=0;r6q < N_z.length;r6q++){R33=N_z[r6q];x90=[];a8e=[];Q22=d8l.transformFunc && R33 == d8l.panel.yAxis;E_L(R33,G9h);if(!this.currentlyImporting && !R33.renderers.length && !R33.studies.length){this.deleteYAxisIfUnused(G9h,R33);continue;}if(m7F.determineMax){Q94=m7F.determineMax(b_B,x90,a8e,!Q22,L$D,M8Q,G9h,R33);}else {Q94=this.determineMinMax(b_B,x90,a8e,!Q22,L$D,M8Q,G9h,R33);}if(this.baselineHelper){Q94=this.setBaselineMinMax(Q94,R33);}R33.lowValue=Q94[+\"0\"];R33.highValue=Q94[1];if(R33 == d8l.panel.yAxis){d8l.lowValue=R33.lowValue;d8l.highValue=R33.highValue;}}}e4_=d8l.state.aggregation;if(e4_ && e4_.box){V41.b$0(0);var p4Y=V41.j1j(14,26,14);d8l.lowValue-=e4_.box / p4Y;V41.P3q(110);var n2K=V41.j1j(0,15,15,3,73);d8l.highValue+=e4_.box / n2K;}this.runAppend(\"initializeDisplay\",arguments);};h7k.ChartEngine.prototype.setMarket=function(A3M,A6Q){if(!h7k.Market){return;}if(!A6Q){A6Q=this.chart;}A6Q.market=new h7k.Market(A3M);for(var u25 in this.layout.marketSessions){A6Q.market.disableSession(u25,this.layout.marketSessions[u25]);}};h7k.ChartEngine.prototype.setMarketFactory=function(T__){this.marketFactory=T__;};h7k.ChartEngine.prototype.setResizeTimer=function(w1g){var u6X;u6X=()=>{var {canvas:H1g, container:o9H}=this.chart;if(!H1g || h7k.isAndroid){return;}V41.V8b();if(H1g.height !== Math.floor(this.devicePixelRatio * o9H.clientHeight) || H1g.width !== Math.floor(this.devicePixelRatio * o9H.clientWidth)){this.resizeChart();}};this.resizeHandle=h7k.resizeObserver(this.chart.container,u6X,this.resizeHandle,w1g);};h7k.ChartEngine.prototype.getRenderedItems=function(){var h9g,Q_F,Y2F,U3$,r6d,a6b,G10,T6G,O5J,m3P;h9g=\"H\";h9g+=\"igh\";Q_F=\"Op\";Q_F+=\"en\";Y2F=this.chart;U3$=this.currentPanel;if(!U3$){return;}r6d=[Q_F,h9g,\"Low\",\"Close\"];a6b=[\"Close\"];G10=[];for(var B7b in this.overlays){if(this.overlays[B7b].panel !== U3$.name)continue;G10=G10.concat(Object.keys(this.overlays[B7b].outputMap));}for(var s7E in Y2F.seriesRenderers){T6G=Y2F.seriesRenderers[s7E];if(T6G.params.panel != U3$.name)continue;for(var m7E in T6G.seriesParams){O5J=T6G.seriesParams[m7E];m3P=T6G.highLowBars?r6d:a6b;if(O5J.subField){G10=G10.concat(h7k.createObjectChainNames(O5J.symbol,[O5J.subField])).concat(O5J.symbol);}else if(O5J.symbol){G10=G10.concat(h7k.createObjectChainNames(O5J.symbol,m3P)).concat(O5J.symbol);}else if(O5J.field){G10.push(O5J.field);}else if(U3$ == Y2F.panel){G10=G10.concat(m3P);}}}return G10;};h7k.ChartEngine.prototype.setTransform=function(e2a,y6F,C7$){e2a.transformFunc=y6F;e2a.untransformFunc=C7$;};h7k.ChartEngine.prototype.unsetTransform=function(b2K){delete b2K.transformFunc;V41.a3b();delete b2K.untransformFunc;for(var Q73=0;b2K.dataSet && Q73 < b2K.dataSet.length;Q73++){b2K.dataSet[Q73].transform=null;}};h7k.ChartEngine.prototype.isEquationChart=function(L4t){if(L4t && L4t[0] == \"=\"){if(!this.allowEquations || !h7k.fetchEquationChart){console.warn(\"Error, equation chart option requires equationsAdvanced.js\");return !!\"\";}return !!({});}return !1;};h7k.ChartEngine.prototype.correctIfOffEdge=function(M2P){var w1Q,B6a,P3I,Q2o,R4u,a8U,k62,h4l,h5G,e_0,m6_;w1Q=\"c\";V41.V8b();w1Q+=\"orrectIfOffE\";w1Q+=\"d\";w1Q+=\"ge\";if(this.runPrepend(\"correctIfOffEdge\",arguments)){return;}for(var g$h in this.charts){B6a=this.charts[g$h];P3I=B6a.dataSet;Q2o=B6a.maxTicks;R4u=this.layout;a8U=this.minimumLeftBars;k62=Math.min(a8U,Q2o);if(B6a.allowScrollPast){V41.P3q(3);h4l=V41.j1j(Q2o,k62);if(k62 > P3I.length){h4l=Q2o - P3I.length;}if(B6a.scroll - h4l >= P3I.length){B6a.scroll=P3I.length + h4l - +\"1\";this.micropixels=0;}if(B6a.scroll <= k62){B6a.scroll=k62;this.micropixels=0;}}else {if(B6a.scroll < k62){B6a.scroll=k62;}if(B6a.scroll > P3I.length){B6a.scroll=P3I.length;}}if(B6a.allowScrollFuture === ![]){h5G=this.getLabelOffsetInPixels(B6a,R4u.chartType) + R4u.candleWidth * B6a.whiteSpaceFutureTicks;V41.b$0(111);var b78=V41.j1j(18,18,4,1,3);e_0=Q2o - Math.round(h5G / R4u.candleWidth) - b78;m6_=this.micropixels < 0?B6a.scroll - (\"1\" | 0):B6a.scroll;if(m6_ < e_0){B6a.scroll=e_0;this.micropixels=0;}}}this.runAppend(w1Q,arguments);};h7k.ChartEngine.prototype.getStartDateOffset=function(){V41.a3b();for(var x3v=\"0\" >> 32;x3v < this.chart.dataSegment.length;x3v++){if(this.chart.dataSegment[x3v]){return x3v;}}return 0;};h7k.ChartEngine.prototype.setStartDate=function(D$k){V41.a3b();var L0D;for(var h7T=0;h7T < this.chart.dataSet.length;h7T++){L0D=this.chart.dataSet[h7T];if(L0D.DT.getTime() == D$k.getTime()){this.chart.scroll=this.chart.dataSet.length - h7T;this.draw();return;}}};h7k.ChartEngine.prototype.clearPixelCache=function(){V41.a3b();var q$0,N_7,h3X,e02;for(var V7V in this.panels){q$0=this.panels[V7V];q$0.cacheHigh=null;q$0.cacheLow=null;q$0.cacheLeft=1000000;q$0.cacheRight=-1;}N_7=1362617993;h3X=506413005;e02=2;for(var v0x=1;V41.n$o(v0x.toString(),v0x.toString().length,13246) !== N_7;v0x++){this.chart.pixelCacheExpired=!({});e02+=2;}if(V41.n$o(e02.toString(),e02.toString().length,\"73158\" * 1) !== h3X){this.chart.pixelCacheExpired=!1;}this.chart.pixelCacheExpired=!!1;};h7k.ChartEngine.prototype.adjustBackingStore=function(T7o,X5H){var E1y,K9c,M_i,T8T,w9o;this.devicePixelRatio=window.devicePixelRatio || 1;if(this.devicePixelRatio < 1.0){this.devicePixelRatio=1.0;}V41.a3b();E1y=X5H.webkitBackingStorePixelRatio || X5H.mozBackingStorePixelRatio || X5H.msBackingStorePixelRatio || X5H.oBackingStorePixelRatio || X5H.backingStorePixelRatio || 1;K9c=this.devicePixelRatio / E1y;if(!this.useBackingStore){this.devicePixelRatio=this.adjustedDisplayPixelRatio=1;T7o.style.width=T7o.style.height=\"\";return;}if(!h7k.isAndroid || h7k.is_chrome || h7k.isFF){M_i=\"p\";M_i+=\"x\";T8T=T7o.width;w9o=T7o.height;V41.b$0(24);T7o.width=V41.j1j(T8T,K9c);V41.P3q(24);T7o.height=V41.o5B(w9o,K9c);V41.P3q(7);T7o.style.width=V41.j1j(M_i,T8T);V41.P3q(7);T7o.style.height=V41.j1j(\"px\",w9o);X5H.scale(K9c,K9c);this.adjustedDisplayPixelRatio=K9c;this.backing={ratio:K9c,width:T7o.width,height:T7o.height,styleWidth:T8T,styleHeight:w9o};}};h7k.ChartEngine.prototype.reconstituteBackingStore=function(){var c6T,g0F;if(!this.useBackingStore || !this.backing){return;}c6T=[this.chart.canvas];if(this.useBackgroundCanvas){c6T.push(this.chart.backgroundCanvas);}g0F=this.backing;c6T.forEach(function(s3I){if(s3I.width == g0F.width){return;}s3I.width=g0F.width;s3I.height=g0F.height;s3I.context.scale(g0F.ratio,g0F.ratio);});this.adjustedDisplayPixelRatio=g0F.ratio;this.draw();};h7k.ChartEngine.prototype.disableBackingStore=function(){var E1C,a6F;if(!this.useBackingStore || !this.backing){return;}E1C=[this.chart.canvas];if(this.useBackgroundCanvas){E1C.push(this.chart.backgroundCanvas);}a6F=this.backing;E1C.forEach(function(M7Y){if(M7Y.width == a6F.styleWidth){return;}M7Y.width=a6F.styleWidth;M7Y.height=a6F.styleHeight;V41.a3b();M7Y.context.scale(1,1);});this.adjustedDisplayPixelRatio=1;this.draw();};h7k.ChartEngine.prototype.getBackgroundCanvas=function(z6x){V41.V8b();if(!z6x){z6x=this.chart;}return this.useBackgroundCanvas?z6x.backgroundCanvas:z6x.canvas;};h7k.ChartEngine.prototype.resizeCanvas=function(){var O7p,Q2r,s$k,s9h,d$j,o6X,K1h,S6j,M0X,W3M;O7p=\"cq-co\";O7p+=\"ntext-wrapper\";Q2r=this.chart.canvas;s$k=this.chart.context;if(Q2r && s$k){this.floatCanvas.height=this.chart.tempCanvas.height=this.chart.backgroundCanvas.height=Q2r.height=this.chart.container.clientHeight;this.floatCanvas.width=this.chart.tempCanvas.width=this.chart.backgroundCanvas.width=Q2r.width=this.chart.container.clientWidth;this.adjustBackingStore(Q2r,s$k);this.adjustBackingStore(this.chart.tempCanvas,this.chart.tempCanvas.context);this.adjustBackingStore(this.floatCanvas,this.floatCanvas.context);this.adjustBackingStore(this.chart.backgroundCanvas,this.chart.backgroundCanvas.context);}s9h=this.container.getBoundingClientRect();this.top=s9h.top;this.left=s9h.left;this.canvasWidth=this.chart.canvasWidth=this.chart.container.clientWidth;this.right=this.left + this.canvasWidth;this.height=this.chart.container.clientHeight;this.width=this.right - this.left;if(this.width === \"0\" << 0 && !this.container.dimensionlessCanvas && this.container.closest(\"html\") && !this.container.closest(O7p)){console.log(\"warning: zero width chart. Check CSS for chart container.\");}this.bottom=this.top + this.height;this.calculateYAxisPositions();this.chart.canvasRight=this.right;this.chart.canvasHeight=this.height;d$j=this.layout.candleWidth;if(typeof d$j == \"undefined\"){d$j=8;}for(var z2p in this.charts){o6X=this.charts[z2p];this.setCandleWidth(d$j,o6X);if(o6X.scroll < o6X.width / d$j){o6X.scroll=Math.floor(o6X.width / d$j);K1h=Math.round(this.preferences.whitespace / this.layout.candleWidth);o6X.scroll-=K1h;}S6j=10;try{W3M=\"10:0\";W3M+=\"0\";V41.P3q(3);var q0V=V41.o5B(16,14);M0X=s$k.measureText(W3M).width * q0V;}catch(Q0D){M0X=100;}while(S6j > 1){if(this.chart.width / M0X > S6j)break;S6j/=+\"1.5\";}o6X.xAxis.autoComputedTickSizePixels=Math.round(this.chart.width / S6j);if(o6X.xAxis.autoComputedTickSizePixels < 1){o6X.xAxis.autoComputedTickSizePixels=1;}}};h7k.ChartEngine.prototype.setCandleWidth=function(e2j,Z8D){if(!Z8D){Z8D=this.chart;}e2j=this.constrainCandleWidth(e2j);this.layout.candleWidth=e2j;V41.b$0(112);var h6k=V41.j1j(6,7,4,0,2);V41.V8b();Z8D.maxTicks=Math.round(Z8D.width / e2j) + h6k;};h7k.ChartEngine.prototype.constrainCandleWidth=function(G1u){V41.V8b();var K5D,G$S,l_p,x_P,F6T,i52;K5D=this.minimumCandleWidth;G$S=this.maximumCandleWidth;l_p=this.animations.zoom;if(K5D && G1u < K5D){G1u=K5D;if(l_p && l_p.running){l_p.stop(this.ownerWindow);}}if(G$S && G1u > G$S){G1u=G$S;x_P=+\"766781266\";F6T=-74733856;i52=2;for(var w7U=1;V41.n$o(w7U.toString(),w7U.toString().length,18579) !== x_P;w7U++){if(l_p && l_p.running){l_p.stop(this.ownerWindow);}i52+=2;}if(V41.P8Y(i52.toString(),i52.toString().length,626) !== F6T){if(l_p || l_p.running){l_p.stop(this.ownerWindow);}}}return G1u;};h7k.ChartEngine.prototype.resizeChart=function(F1G){var P3e,v$5;P3e=\"resi\";P3e+=\"zeC\";V41.V8b();P3e+=\"hart\";if(this.runPrepend(P3e,arguments)){return;}if(F1G !== !!0){F1G=!![];}if(F1G){this.preAdjustScroll();}v$5=this.chart.canvasHeight;this.resizeCanvas();if(F1G){this.postAdjustScroll();}if(this.displayInitialized){this.adjustPanelPositions();this.draw();if(this.activeDrawing){this.activeDrawing.adjust();}}else if(this.chart.canvasHeight !== +\"0\" && v$5 === 0){this.adjustPanelPositions();this.draw();}this.doDisplayCrosshairs();this.updateChartAccessories();this.runAppend(\"resizeChart\",arguments);};h7k.ChartEngine.prototype.clear=function(){var p$F,H0J;p$F=\"no\";p$F+=\"n\";p$F+=\"e\";this.displayInitialized=![];for(var x60 in this.layout.studies){H0J=this.layout.studies[x60];h7k.getFn(\"Studies.removeStudy\")(this,H0J);}if(this.controls.chartControls){this.controls.chartControls.style.display=p$F;}this.chart.panel.title.innerHTML=\"\";this.chart.panel.title.appendChild(document.createTextNode(this.chart.panel.display));};h7k.ChartEngine.prototype.fillScreen=function(){var v_4,d1v,U5V,x3l,l56;v_4=this.chart;d1v=this.layout.candleWidth;U5V=v_4.width - this.preferences.whitespace;x3l=v_4.dataSet.length;if(x3l * d1v >= U5V){this.draw();return;}V41.a3b();if(!this.mainSeriesRenderer.standaloneBars){x3l--;}V41.P3q(22);l56=V41.o5B(U5V,x3l);this.setCandleWidth(l56,v_4);this.home({maintainWhitespace:!![]});};h7k.ChartEngine.prototype.setMaxTicks=function(T8S,w6B){var E0L,u6d,y0Y;if(!w6B){w6B={};}T8S=Math.round(T8S);if(T8S < 2){T8S=2;}E0L=w6B.padding?w6B.padding:\"0\" >> 32;u6d=this.chart;y0Y=(u6d.width - E0L) / (T8S - 1) || \"8\" >> 64;this.setCandleWidth(y0Y,u6d);if(w6B.padding || w6B.padding === 0){u6d.scroll=T8S;}};h7k.ChartEngine.prototype.initializeChart=function(H_b){var E$z,m6A,k93,N9N,J9U,z0d,t$h,r2V,J49,S9s,M9x,G1c,q5x,L2_,Z0Z,R_D,w0A,C0n,O$D,j8L,j_F,E0M;function n$u(C00,g6c){var M9I,G1U;V41.V8b();M9I=document.createElement(\"canvas\");M9I.context=M9I.getContext(\"2d\");M9I.context.lineWidth=+\"1\";M9I.ariaHidden=\"true\";G1U=M9I.style;G1U.position=\"absolute\";G1U.left=\"0px\";if(g6c){G1U.display=\"none\";}H_b.appendChild(M9I);return M9I;}if(this.runPrepend(\"initializeChart\",arguments)){return;}E$z=this.chart;if(!E$z.symbolObject.symbol){E$z.symbolObject.symbol=E$z.symbol;}if(this.locale){this.setLocale(this.locale);}if(!this.displayZone && h7k.ChartEngine.defaultDisplayTimeZone){this.setTimeZone(null,h7k.ChartEngine.defaultDisplayTimeZone);}this.resetDynamicYAxis({noRecalculate:!![]});this.calculateYAxisPositions();this.micropixels=0;if(H_b){E$z.container=H_b;}else {H_b=E$z.container;}H_b.stx=this;if(!H_b.CIQRegistered){H_b.CIQRegistered=!!\"1\";h7k.ChartEngine.registeredContainers.push(H_b);h7k.ChartEngine.attachGlobalEventHandlers();}if(this.registerHTMLElements){this.registerHTMLElements();}this.setCandleWidth(this.layout.candleWidth);if(!E$z.backgroundCanvas){m6A=\"tempC\";m6A+=\"a\";m6A+=\"n\";m6A+=\"vas\";E$z.backgroundCanvas=n$u(\"backgroundCanvas\");E$z.canvas=n$u(\"canvas\");E$z.tempCanvas=n$u(m6A,!\"\");this.floatCanvas=n$u(\"floatCanvas\",!!({}));E$z.context=E$z.canvas.context;E$z.canvasShim=document.createElement(\"div\");E$z.canvasShim.className=\"stx-canvas-shim\";H_b.insertBefore(E$z.canvasShim,E$z.canvas);}this.resizeCanvas();if(h7k.isAndroid){k93=\"tou\";k93+=\"chst\";k93+=\"art\";N9N=function(e3i){if(e3i.preventDefault){e3i.preventDefault();}};E$z.tempCanvas.addEventListener(k93,N9N,{passive:!\"1\"});this.floatCanvas.addEventListener(\"touchstart\",N9N,{passive:!!0});}J9U=this.panels;E$z.panel.display=E$z.symbol;if(E$z.symbolDisplay){E$z.panel.display=E$z.symbolDisplay;}this.adjustPanelPositions();E$z.panel=J9U[E$z.name];for(var Z2u in J9U){z0d=J9U[Z2u].yaxisLHS.concat(J9U[Z2u].yaxisRHS);for(var S7m=+\"0\";S7m < z0d.length;S7m++){z0d[S7m].height=J9U[Z2u].yAxis.height;this.calculateYAxisMargins(z0d[S7m]);}}this.initialWhitespace=this.preferences.whitespace;if(E$z.dataSet && E$z.dataSet.length > +\"0\"){E$z.scroll=Math.floor(E$z.width / this.layout.candleWidth);t$h=Math.round(this.preferences.whitespace / this.layout.candleWidth);E$z.scroll-=t$h;}if(h7k.touchDevice){r2V=\".v\";r2V+=\"ect\";r2V+=\"orTr\";r2V+=\"ashCan\";J49=\".\";J49+=\"o\";J49+=\"verlayTex\";J49+=\"t\";S9s=\".o\";S9s+=\"ver\";S9s+=\"layEdit\";M9x=H_b.querySelector(S9s);G1c=H_b.querySelector(J49);q5x=H_b.querySelector(\".overlayTrashCan\");L2_=H_b.querySelector(r2V);Z0Z=function(b0W,J$p,y0b,t9t){return function(d65){b0W.deleteHighlighted(J$p,y0b,t9t);};};if(G1c){h7k.safeClickTouch(G1c,Z0Z(this,!!\"1\",![],!!({})));}if(M9x){h7k.safeClickTouch(M9x,Z0Z(this,!!1,!!({}),![]));if(q5x){h7k.safeClickTouch(q5x,Z0Z(this,!!0));}}else if(q5x){h7k.safeClickTouch(q5x,Z0Z(this,!!({})));}if(L2_){h7k.safeClickTouch(L2_,Z0Z(this,!!1));}}if(this.manageTouchAndMouse){this.registerTouchAndMouseEvents();}if(this.handleMouseOut){H_b.onmouseout=(function(u5$){V41.V8b();return function(O8f){V41.V8b();u5$.handleMouseOut(O8f);};})(this);h7k.smartHover(H_b.ownerDocument);}if(this.abortDrawings){this.abortDrawings();}this.undoStamps=[];for(var o0Q in J9U){R_D=J9U[o0Q];if(R_D.markerHolder){H_b.removeChild(R_D.markerHolder);R_D.markerHolder=null;}}for(var L46 in this.plugins){w0A=this.plugins[L46];if(w0A.display){if(w0A.initializeChart){w0A.initializeChart(this);}}}if(!this.resizeListenerInitialized){C0n=this;this.resizeListenerInitialized=!!\"1\";O$D=function(){V41.a3b();return function(a$W){V41.V8b();C0n.resizeChart();};};this.addDomEventListener(H_b.ownerDocument.defaultView,\"resize\",O$D(),!!({}));}j8L=2092290458;j_F=-1814622736;E0M=2;for(var y9N=1;V41.n$o(y9N.toString(),y9N.toString().length,55384) !== j8L;y9N++){if(E$z.baseline.userLevel){E$z.baseline.userLevel=1;}this.setResizeTimer();this.runAppend(\"\",arguments);E0M+=+\"2\";}if(V41.n$o(E0M.toString(),E0M.toString().length,67626) !== j_F){if(E$z.baseline.userLevel){E$z.baseline.userLevel=null;}this.setResizeTimer();this.runAppend(\"initializeChart\",arguments);}};h7k.ChartEngine.prototype.destroy=function(){var g8T,P23,D$0,b9M;g8T=\"de\";g8T+=\"s\";g8T+=\"tro\";g8T+=\"y\";this.setResizeTimer(0);V41.V8b();if(this.detachQuoteFeed){this.detachQuoteFeed();}this.styles={};for(var l1i=\"0\" | 0;l1i < this.eventListeners.length;l1i++){P23=this.eventListeners[l1i];P23.element.removeEventListener(P23.event,P23[\"function\"],P23.options);}this.touchAndMouseEventsRegistered=!({});this.eventListeners=[];if(this.streamParameters.timeout){clearTimeout(this.streamParameters.timeout);}D$0=h7k.ChartEngine.registeredContainers;b9M=D$0.indexOf(this.chart.container);if(b9M > -1){D$0.splice(b9M,1);}this.destroyed=!0;this.dispatch(g8T,{stx:this});};h7k.ChartEngine.registerGlobalEvent(U9Y,function(){var c41;c41=h7k.ChartEngine.registeredContainers.slice(0);c41.forEach(o21=>{V41.V8b();if(o21.ownerDocument === this.document){try{o21.stx.destroy();o21.stx=null;}catch(d$$){}}});h7k.ChartEngine.globalEventHandlers.forEach(b2C=>{var g2r;g2r=b2C.applied.indexOf(this.document);if(g2r > -+\"1\"){try{b2C.applied.splice(g2r);}catch(L3i){}}});this.document.body.innerHTML=\"\";},!({}),!!({}));h7k.ChartEngine.prototype.preAdjustScroll=function(L1H){if(!L1H){L1H=this.chart;}this.previousAdjust={chart:L1H,scroll:L1H.scroll,maxTicks:L1H.maxTicks};};h7k.ChartEngine.prototype.postAdjustScroll=function(){var K2q;if(!this.previousAdjust){return;}K2q=this.previousAdjust.chart;K2q.scroll=this.previousAdjust.scroll + (K2q.maxTicks - this.previousAdjust.maxTicks);if(this.displayInitialized){this.draw();}};h7k.ChartEngine.prototype.translateIf=function(Y8x){if(this.translationCallback){return this.translationCallback(Y8x,this.preferences.language);}return Y8x;};V41.V8b();h7k.ChartEngine.prototype.doCleanupDates=function(J$A,j1w){V41.V8b();var P$1,l0r,o74,z5Y,v9s;if(!J$A || !J$A.length){return;}for(var m95=0;m95 < J$A.length;m95++){P$1=J$A[m95];l0r=P$1.DT;if(!l0r && !P$1.Date)continue;if(P$1.DT && Object.prototype.toString.call(l0r) == \"[object String]\" && l0r.length <= 10){l0r=new Date(l0r);l0r.setMinutes(l0r.getMinutes() + l0r.getTimezoneOffset());}else {o74=!0;if(!P$1.DT){l0r=h7k.strToDateTime(P$1.Date);if(P$1.Date.length <= 10){o74=!1;}}if(Object.prototype.toString.call(l0r) != \"[object Date]\"){l0r=new Date(l0r);}if(e32.Date && this.dataZone && o74){z5Y=new e32.Date(l0r.getFullYear(),l0r.getMonth(),l0r.getDate(),l0r.getHours(),l0r.getMinutes(),this.dataZone);V41.P3q(11);var P_v=V41.j1j(59,2,7,1);v9s=l0r.getSeconds() * (\"1000\" << P_v) + l0r.getMilliseconds();l0r=new Date(z5Y.getTime() + v9s);}if(h7k.ChartEngine.isDailyInterval(j1w)){V41.P3q(62);l0r.setHours(0,0,V41.j1j(0,\"0\"),0);}}if(!P$1.DT){P$1.Date=h7k.yyyymmddhhmmssmmm(l0r);}P$1.DT=l0r;}};h7k.ChartEngine.prototype.doCleanupGaps=function(B4E,S4e,M7Q){var Y7J,N5d,T4E,H6x,J8v,o8p,i9T,S5V,y4x,M7G,T8L,p8l,n$p,C2i,R6i;Y7J=\"w\";Y7J+=\"e\";Y7J+=\"e\";Y7J+=\"k\";N5d=\"s\";N5d+=\"tr\";N5d+=\"e\";N5d+=\"tch\";if(!B4E || !B4E.length){return B4E;}T4E=this.layout.interval;M7Q=M7Q?M7Q:{};if(!S4e){S4e=this.chart;}function n94(d8k,D83){var u67,i1g,w2X,w7e;V41.V8b();u67=M7Q.field;if(u67){i1g=\"u\";i1g+=\"nd\";i1g+=\"efined\";if(typeof d8k[u67] != i1g && typeof D83[u67] == \"undefined\"){D83[u67]=J8v?null:d8k[u67];}return;}if(J8v){return;}w2X=d8k[p8l];w7e=D83[p8l];if(typeof w2X != \"undefined\" && typeof w7e == \"undefined\"){h7k.ensureDefaults(D83,{Close:w2X,Open:w2X,High:w2X,Low:w2X,Volume:0,Adj_Close:d8k.Adj_Close});}}if(!h7k.Market || !S4e.market){return B4E;}if(!M7Q.noCleanupDates){this.doCleanupDates(B4E,T4E);}H6x=M7Q.cleanupGaps;if(H6x === !!\"\"){return B4E;}if(!H6x || H6x === !\"\"){H6x=this.cleanupGaps || H6x;}J8v=[\"gap\",N5d].includes(H6x);if(!H6x){return B4E;}if(T4E == \"tick\"){return B4E;}if(T4E == \"month\" || T4E == Y7J){if(this.dontRoll){return B4E;}T4E=\"day\";}o8p=function(J2W){V41.a3b();if(J2W.DT){if(Object.prototype.toString.call(J2W.DT) != \"[object Date]\"){return new Date(J2W.DT);}return new Date(+J2W.DT);}return h7k.strToDateTime(J2W.Date);};i9T=[];S5V=B4E[0];i9T.push(S5V);y4x={begin:o8p(S5V),interval:T4E,periodicity:1,timeUnit:this.layout.timeUnit};M7G=new h7k.Market(S4e.market.market_def);function m6r(E5q,g$I){V41.a3b();var k79,D0v,O7e,a24,u18,b7$;k79=M7Q.field;D0v=k79?S5V[k79]:S5V;if(D0v === undefined){D0v={};}O7e=J8v?null:D0v[p8l];a24=J8v?null:0;u18=J8v?null:D0v.Adj_Close;while(+E5q < +g$I){b7$={DT:E5q};if(k79){}else {i9T.push(b7$);h7k.extend(b7$,{Open:O7e,High:O7e,Low:O7e,Close:O7e,Volume:a24,Adj_Close:u18});}E5q=T8L.next();}}T8L=M7G.newIterator(y4x);if(this.extendedHours && this.extendedHours.filter){T8L.market.enableAllAvailableSessions();}p8l=S4e.defaultPlotField;for(var x1v=\"0\" | 0;x1v < B4E.length;x1v++){if(B4E[x1v][p8l] !== undefined)break;if(B4E[x1v].Value !== undefined){p8l=\"Value\";break;}}for(var B9D=1;B9D < B4E.length;B9D++){C2i=B4E[B9D];n$p=T8L.next();R6i=o8p(C2i);if(n$p < R6i){m6r(n$p,R6i);n$p=T8L.market._convertFromMarketTZ(T8L.begin,T8L.outZone);}while(R6i < n$p){if(++B9D == B4E.length){return i9T;}n94(S5V,C2i);i9T.push(C2i);S5V=C2i;C2i=B4E[B9D];R6i=o8p(C2i);}if(n$p < R6i){B9D--;n$p=T8L.previous();}else {n94(S5V,C2i);i9T.push(C2i);S5V=C2i;}}return i9T;};h7k.ChartEngine.prototype.getCreatingLibrary=function(){return e64;};};h4=R$F=>{var A9S;A9S=R$F.CIQ;A9S.ChartEngine.Panel=function(M5Y,U8N){if(U8N){this.yAxis=U8N;}else {this.yAxis=new A9S.ChartEngine.YAxis();}this.name=M5Y;x2w9K.V8b();this.state={};};A9S.extend(A9S.ChartEngine.Panel.prototype,{name:null,display:null,chart:null,yAxis:null,shareChartXAxis:null,top:null,bottom:null,height:null,percent:null,displayEdgeIfPadded:!!({}),noDrag:!!\"\",exportable:!!({}),titlePadding:\"5\" >> 0,clipVerticalTextToPanel:function(v1f,s7a){var i3I,u7T,S01,B2y;i3I=this.subholder.offsetHeight - this.titlePadding * +\"2\";u7T=v1f;S01=s7a.measureText(u7T).width;if(S01 <= i3I){return u7T;}B2y=i3I / (S01 / u7T.length);x2w9K.b$0(113);return `${u7T.slice(0,x2w9K.j1j(B2y,\"3\",1))}...`;}},!\"\");A9S.ChartEngine.prototype.whichPanel=function(a1k){var d7z;for(var Z$L in this.panels){d7z=this.panels[Z$L];if(d7z.hidden)continue;if(a1k >= d7z.top && a1k < d7z.bottom){return d7z;}}return null;};A9S.ChartEngine.prototype.getPanelByField=function(r87){x2w9K.a3b();var a05,y71,Q1b,a$u,T6L,d0A,V9s;if(r87){for(a05 in this.layout.studies){y71=this.layout.studies[a05];if(y71.outputMap && y71.outputMap.hasOwnProperty(r87) && y71.parameters){return this.panels[y71.parameters.panelName];}}for(a05 in this.chart.seriesRenderers){Q1b=this.chart.seriesRenderers[a05];for(var v85=+\"0\";v85 < Q1b.seriesParams.length;v85++){a$u=\"-\";a$u+=\"-\";a$u+=\">\";T6L=\"-\";T6L+=\"-\";T6L+=\">\";d0A=Q1b.seriesParams[v85];V9s=d0A.field;if(!V9s && !Q1b.highLowBars){V9s=this.defaultPlotField || \"Close\";}if(d0A.symbol && d0A.subField){V9s+=T6L + d0A.subField;}if(r87 == V9s || d0A.field && d0A.field == r87.split(a$u)[0]){return this.panels[Q1b.params.panel];}}}}return undefined;};A9S.ChartEngine.prototype.panelExists=function(V0e){var S4J;for(var x6s in this.panels){S4J=this.panels[x6s];if(S4J.name == V0e){return !\"\";}}return !\"1\";};A9S.ChartEngine.prototype.storePanels=function(){var M0m,A7S;if(!this.layout){this.layout={};}M0m=this.layout;M0m.panels={};for(var V3k in this.panels){A7S=this.panels[V3k];M0m.panels[A7S.name]={percent:A7S.percent,display:A7S.display,yAxis:A7S.yAxis};}};A9S.ChartEngine.prototype.savePanels=function(J7o){this.storePanels();if(J7o !== !!\"\"){this.changeOccurred(\"layout\");}};A9S.ChartEngine.prototype.privateDeletePanel=function(B2D){var T5Y,I9B,Y71;for(var K2M in this.layout.studies){T5Y=this.layout.studies[K2M];if(T5Y.panel == B2D.name){this.cleanupRemovedStudy(T5Y);}}delete this.panels[B2D.name];for(var g$6 in this.overlays){if(this.overlays[g$6].panel == B2D.name){if(this.layout.studies){this.cleanupRemovedStudy(this.layout.studies[g$6]);}delete this.overlays[g$6];}}for(var R2$ in this.chart.series){if(this.chart.series[R2$].parameters.panel == B2D.name){this.removeSeries(this.chart.series[R2$],this.chart);}}if(B2D.holder){this.chart.container.removeChild(B2D.holder);if(this.getMarkerArray){I9B=\"panelN\";I9B+=\"am\";I9B+=\"e\";Y71=this.getMarkerArray(I9B,B2D.name);for(var E2p=0;E2p < Y71.length;E2p++){this.removeFromHolder(Y71[E2p]);}}}if(B2D.handle){B2D.handle.remove();}this.currentPanel=null;};A9S.ChartEngine.prototype.plotsInPanel=function(e9s){var S8M,f9t,H16,z_d;S8M=[];f9t=e9s;if(typeof e9s == \"object\"){f9t=e9s.name;}for(var x$1 in this.layout.studies){H16=this.layout.studies[x$1];if(f9t === H16.panel){S8M.push(H16);}}for(var W2t in this.chart.seriesRenderers){z_d=this.chart.seriesRenderers[W2t];if(f9t === z_d.params.panel){S8M.push(z_d);}}return S8M;};A9S.ChartEngine.prototype.checkForEmptyPanel=function(r1u,W8o,g1a){x2w9K.a3b();var j7Y,P66,I7y,v1S,l9D;if(!r1u){return !({});}j7Y=598201330;P66=+\"846287535\";I7y=2;for(var m1u=1;x2w9K.P8Y(m1u.toString(),m1u.toString().length,95399) !== j7Y;m1u++){v1S=r1u;if(-r1u != \"\"){v1S=r1u.name;}if(v1S !== this.chart.name){return !!({});}if(-g1a){g1a=[];}else if(+(g1a instanceof Array)){g1a=[g1a];}l9D=this.plotsInPanel(r1u);I7y+=2;}if(x2w9K.n$o(I7y.toString(),I7y.toString().length,58390) !== P66){v1S=r1u;if(typeof r1u == \"object\"){v1S=r1u.name;}if(v1S === this.chart.name){return !({});}if(!g1a){g1a=[];}else if(!(g1a instanceof Array)){g1a=[g1a];}l9D=this.plotsInPanel(r1u);}for(var J04=0;J04 < l9D.length;J04++){if(g1a.indexOf(l9D[J04]) == -1){return !({});}}if(!W8o){this.panelClose(this.panels[v1S]);}return !![];};A9S.ChartEngine.prototype.panelClose=function(p5h){var L3Y;x2w9K.a3b();if(!p5h){return;}if(this.runPrepend(\"panelClose\",arguments)){return;}this.cancelTouchSingleClick=!![];A9S.ChartEngine.drawingLine=![];if(p5h.soloing){this.panelSolo(p5h);}if(this.charts[p5h.name]){for(var f0x in this.panels){L3Y=this.panels[f0x];if(L3Y.chart.name == p5h.name){this.privateDeletePanel(L3Y);}}delete this.charts[p5h.name];}else {this.privateDeletePanel(p5h);}if(!this.currentlyImporting){this.showCrosshairs();this.resetDynamicYAxis({noRecalculate:!!\"1\"});this.calculateYAxisPositions();this.draw();this.savePanels();}this.userPointerDown=this.grabbingScreen=![];if(this.openDialog){this.openDialog=\"\";}this.runAppend(\"panelClose\",arguments);};A9S.ChartEngine.prototype.panelUp=function(T62){var F$S,w4n,P$A,C0D;this.cancelTouchSingleClick=!![];A9S.ChartEngine.drawingLine=![];this.showCrosshairs();F$S={};w4n=0;for(P$A in this.panels){if(P$A == T62.name)break;w4n++;}if(!w4n){return;}C0D=0;for(P$A in this.panels){if(C0D == w4n - 1){F$S[T62.name]=T62;}if(P$A == T62.name)continue;F$S[P$A]=this.panels[P$A];C0D++;}this.panels=F$S;this.adjustPanelPositions();this.draw();this.savePanels();};A9S.ChartEngine.prototype.panelDown=function(G6_){var i9c,n7S,c7z,F7S,Z91;this.cancelTouchSingleClick=!!\"1\";A9S.ChartEngine.drawingLine=!!0;this.showCrosshairs();i9c={};x2w9K.b$0(62);n7S=x2w9K.j1j(32,\"0\");for(c7z in this.panels){if(c7z == G6_.name)break;n7S++;}F7S=0;for(c7z in this.panels){F7S++;}if(n7S == F7S - 1){return;}Z91=0;for(c7z in this.panels){if(c7z == G6_.name){Z91++;continue;}i9c[c7z]=this.panels[c7z];if(Z91 == n7S + 1){i9c[G6_.name]=G6_;}Z91++;}this.panels=i9c;this.adjustPanelPositions();this.draw();this.savePanels();};A9S.ChartEngine.prototype.panelSolo=function(h4d){var n1N,C97,Q9o,C6g,S6f;this.cancelTouchSingleClick=!![];A9S.ChartEngine.drawingLine=!!\"\";this.showCrosshairs();n1N=!0;if(h4d.soloing){Q9o=\"c\";Q9o+=\"ha\";Q9o+=\"r\";Q9o+=\"t\";C6g=\"s\";C6g+=\"tx_solo_lit\";n1N=!1;h4d.soloing=!({});h4d.solo.classList.remove(C6g);h4d.percent=h4d.oldPercent;if(h4d.name != Q9o){if(this.soloPanelToFullScreen){if(h4d.percent == 1){for(C97 in this.panels){S6f=this.panels[C97];if(S6f != h4d){h4d.percent-=S6f.percent;}}}}else {this.chart.panel.percent=this.chart.panel.oldPercent;}}if(this.soloPanelToFullScreen){this.xAxisAsFooter=this.chart.panel.oldXAxisAsFooter;}}else {h4d.soloing=!!({});h4d.solo.classList.add(\"stx_solo_lit\");h4d.oldPercent=h4d.percent;this.chart.panel.oldXAxisAsFooter=this.xAxisAsFooter;if(h4d.name != \"chart\"){if(this.soloPanelToFullScreen){this.xAxisAsFooter=!!\"1\";}else {this.chart.panel.oldPercent=this.chart.panel.percent;x2w9K.b$0(114);var E94=x2w9K.j1j(4,0,12,3);h4d.percent=\"1\" * E94 - this.chart.panel.percent;}}}for(C97 in this.panels){if(h4d === this.panels[C97])continue;if(C97 === \"chart\" && !this.soloPanelToFullScreen)continue;this.panels[C97].hidden=n1N;}this.resetDynamicYAxis({noRecalculate:!\"\"});this.calculateYAxisPositions();this.draw();this.savePanels();};A9S.ChartEngine.prototype.calculatePanelPercent=function(R9T){var S1Z;S1Z=R9T.bottom - R9T.top;if(this.isPanelWithXAxis(R9T)){S1Z-=this.xaxisHeight;}R9T.percent=S1Z / (this.chart.canvasHeight - this.xaxisHeight);};A9S.ChartEngine.prototype.resizePanels=function(){var D6k=x2w9K;var b8E,q2h,C84,W8e,Y4R,R30;if(!A9S.ChartEngine.resizingPanel){return;}Y4R=A9S.ChartEngine.crosshairY > this.resolveY(A9S.ChartEngine.resizingPanel.top);for(var S90 in this.panels){if(this.panels[S90] == A9S.ChartEngine.resizingPanel)break;if(this.panels[S90].hidden)continue;b8E=this.panels[S90];}R30=this.backOutY(A9S.ChartEngine.crosshairY);if(Y4R){C84=A9S.ChartEngine.resizingPanel.yaxisLHS.concat(A9S.ChartEngine.resizingPanel.yaxisRHS);for(W8e=0;W8e < C84.length;W8e++){D6k.P3q(12);var W2Z=D6k.j1j(19,291,17);q2h=C84[W8e].initialMarginTop + C84[W8e].initialMarginBottom + (\"10\" << W2Z);if(R30 > C84[W8e].bottom - q2h){R30=C84[W8e].bottom - q2h;}}}else {C84=b8E.yaxisLHS.concat(b8E.yaxisRHS);for(W8e=0;W8e < C84.length;W8e++){D6k.b$0(7);var v9a=D6k.o5B(9,1);q2h=C84[W8e].initialMarginTop + C84[W8e].initialMarginBottom + v9a;if(R30 < C84[W8e].top + q2h){R30=C84[W8e].top + q2h;}}}A9S.ChartEngine.crosshairY=this.resolveY(R30);b8E.bottom=R30;A9S.ChartEngine.resizingPanel.top=R30;this.calculatePanelPercent(b8E);this.calculatePanelPercent(A9S.ChartEngine.resizingPanel);this.adjustPanelPositions();this.draw();this.savePanels();};A9S.ChartEngine.prototype.isPanelAboveChart=function(j5S){for(var G7t in this.panels){if(G7t == \"chart\"){return !({});}if(G7t == j5S.name){return !\"\";}}return !!0;};A9S.ChartEngine.prototype.isPanelWithXAxis=function(f17){return this.xAxisAsFooter && f17 === Object.values(this.panels).filter(function(F7b){return !F7b.hidden;}).pop() || !this.xAxisAsFooter && f17 === this.chart.panel;};A9S.ChartEngine.prototype.adjustPanelPositions=function(){var A6N=x2w9K;var H3T,V7G,r38,g3D,r6u,z8G,p9E,u2N,S6P,n_B,U97,b_W,h1P,m2o,z2f,R_I,L_8,d5G,p_z,S6T,y7P,t6g,V0y,T4A,s8E,N$v,t8V,h6W,E1Y,h2e;H3T=\"ad\";H3T+=\"justPanelPosi\";H3T+=\"tions\";var {chart:S6p, panels:i9X}=this;if(S6p.tempCanvas && this.activeDrawing && !this.editingAnnotation){A9S.clearCanvas(S6p.tempCanvas,this);}if(this.runPrepend(H3T,arguments)){return;}V7G=0;r38=S6p.canvasHeight - this.xaxisHeight;g3D=!1;r6u=+\"0\";z8G=0;p9E=!({});for(u2N in i9X){S6P=i9X[u2N];if(isNaN(S6P.percent) || S6P.percent <= 0){S6P.percent=0.05;}if(S6P.hidden)continue;r6u+=S6P.percent;z8G++;if(S6P.soloing){p9E=!0;}}for(u2N in i9X){b_W=0;S6P=i9X[u2N];if(S6P.hidden){if(S6P.markerHolder){h1P=\"n\";h1P+=\"o\";h1P+=\"n\";h1P+=\"e\";S6P.markerHolder.style.display=h1P;}continue;}if(!n_B){n_B=S6P;}U97=S6P;if(this.manageTouchAndMouse){if(S6P.up){if(!g3D){g3D=!!\"1\";S6P.up.classList.remove(\"stx-show\");}else {if(this.displayIconsUpDown){S6P.up.classList.add(\"stx-show\");}}}if(S6P.solo){if(p9E){m2o=\"stx-sho\";m2o+=\"w\";if(S6P.soloing && this.displayIconsSolo){S6P.solo.classList.add(m2o);}else {S6P.solo.classList.remove(\"stx-show\");}}else if(z8G == 1){z2f=\"s\";z2f+=\"tx-sh\";z2f+=\"o\";z2f+=\"w\";S6P.solo.classList.remove(z2f);}else if(z8G == +\"2\" && !this.soloPanelToFullScreen){S6P.solo.classList.remove(\"stx-show\");}else {if(this.displayIconsSolo){S6P.solo.classList.add(\"stx-show\");}}}if(S6P.down){if(z8G == 1){S6P.down.classList.remove(\"stx-show\");}else {if(this.displayIconsUpDown){S6P.down.classList.add(\"stx-show\");}}}if(S6P.edit){R_I=\"st\";R_I+=\"x\";R_I+=\"-show\";if(S6P.editFunction){S6P.edit.classList.add(R_I);}else {S6P.edit.classList.remove(\"stx-show\");}}if(S6P.close){L_8=\"st\";L_8+=\"x\";L_8+=\"-sho\";L_8+=\"w\";if(this.displayIconsClose){S6P.close.classList.add(\"stx-show\");}else {S6P.close.classList.remove(L_8);}}}S6P.percent=S6P.percent / r6u;S6P.top=V7G;S6P.bottom=S6P.top + r38 * S6P.percent;if(this.isPanelWithXAxis(S6P)){S6P.bottom+=this.xaxisHeight;}S6P.height=S6P.bottom - S6P.top;if(S6P.chart.name == S6P.name){S6P.chart.top=S6P.top;S6P.chart.bottom=S6P.bottom;S6P.chart.height=S6P.height;}if(S6P.height < 27){S6P.holder.classList.add(\"stx-panel-is-min-height\");}else {d5G=\"s\";d5G+=\"tx-panel-is\";d5G+=\"-mi\";d5G+=\"n-height\";S6P.holder.classList.remove(d5G);}V7G=S6P.bottom;if(S6P.yaxisLHS){p_z=S6P.yaxisLHS.concat(S6P.yaxisRHS);for(var V47=0;V47 < p_z.length;V47++){S6T=p_z[V47];if(S6T.zoom && S6T.height > 0){b_W=S6T.zoom / S6T.height;}this.adjustYAxisHeightOffset(S6P,S6T);S6T.height=S6T.bottom - S6T.top;if(b_W){S6T.scroll*=b_W * S6T.height / S6T.zoom;S6T.zoom=b_W * S6T.height;if(S6T.zoom >= S6T.height){S6T.zoom=0;S6T.scroll=0;}}if(!S6T.high && S6T.high !== 0){S6T.high=100;S6T.low=0;S6T.shadow=100;}S6T.multiplier=S6T.height / S6T.shadow;if(S6T.position === \"none\"){this.calculateYAxisMargins(S6T);}}}if(S6P.holder){y7P=\"p\";y7P+=\"x\";t6g=\"p\";t6g+=\"x\";S6P.holder.style.right=\"0px\";S6P.holder.style.top=S6P.top + t6g;S6P.holder.style.left=\"0px\";S6P.holder.style.height=S6P.height + \"px\";S6P.subholder.style.left=S6P.left + \"px\";S6P.subholder.style.width=S6P.width + y7P;S6P.subholder.style.top=\"0px\";if(S6P.yAxis.height >= 0){S6P.subholder.style.height=S6P.yAxis.height + \"px\";}}}if(n_B && n_B.up){n_B.up.classList.remove(\"stx-show\");}if(U97 && U97.down){U97.down.classList.remove(\"stx-show\");}if(this.manageTouchAndMouse && z8G == 2 && !p9E && S6p.panel.solo){V0y=\"s\";V0y+=\"tx\";V0y+=\"-show\";S6p.panel.solo.classList.add(V0y);}if(S6p.panel){T4A=\"p\";T4A+=\"x\";if(p9E && this.soloPanelToFullScreen){s8E=S6p.canvasHeight - S6P.yAxis.bottom + +\"12\";}else {A6N.P3q(88);var q4J=A6N.o5B(37,20,5);s8E=S6p.canvasHeight - S6p.panel.yAxis.bottom + q4J;}N$v=this.controls;var {chartControls:V1n, home:q90, notificationTray:t7x}=N$v;t8V=this.width - S6p.panel.right;if(V1n){A6N.b$0(7);V1n.style.bottom=A6N.o5B(T4A,s8E);}if(q90){h6W=\"p\";h6W+=\"x\";A6N.b$0(7);q90.style.bottom=A6N.j1j(\"px\",s8E);A6N.b$0(7);q90.style.marginRight=A6N.j1j(h6W,t8V);}if(t7x){E1Y=\"p\";E1Y+=\"x\";h2e=\"p\";h2e+=\"x\";A6N.b$0(7);t7x.style.bottom=A6N.o5B(h2e,s8E);A6N.P3q(7);t7x.style.marginRight=A6N.j1j(E1Y,t8V);}}this.clearPixelCache();if(this.drawingObjects.length){this.adjustDrawings();}A6N.V8b();if(this.activeDrawing && !this.editingAnnotation){this.undo();}this.runAppend(\"adjustPanelPositions\",arguments);};A9S.ChartEngine.prototype.createPanel=function(e0b,N4p,E0o,D5k,a$N,l7F){var j8d=x2w9K;var A8W,F8e,h3K,Z0M,C1U,e_V,g6d;A8W=\"creat\";A8W+=\"eP\";A8W+=\"anel\";F8e=\"c\";F8e+=\"ha\";F8e+=\"rt\";if(this.runPrepend(\"createPanel\",arguments)){return;}if(!D5k){D5k=F8e;}h3K=this.chart.canvasHeight;if(!E0o){j8d.P3q(24);E0o=j8d.o5B(h3K,0.2);}if(E0o > h3K){j8d.P3q(93);E0o=j8d.j1j(h3K,\"0.5\",1);}j8d.P3q(22);Z0M=j8d.o5B(E0o,h3K);j8d.b$0(3);C1U=j8d.j1j(1,Z0M);e_V=!\"1\";for(var P_V in this.panels){g6d=this.panels[P_V];g6d.percent*=C1U;if(g6d.soloing){e_V=!![];}}this.stackPanel(e0b,N4p,Z0M,D5k,a$N);this.panels[N4p].hidden=e_V;this.panels[N4p].exportable=!l7F;this.calculateYAxisMargins(this.panels[N4p].yAxis);this.adjustPanelPositions();this.savePanels(!\"1\");this.runAppend(A8W,arguments);return this.panels[N4p];};A9S.ChartEngine.prototype.modifyPanel=function(A6L,s6d){var x7N,T4t,L8c,J9_,T4u,S83,L5x,E$j;x7N=A6L.name;var {studies:z2r}=this.layout;var {series:m6E}=this.chart;var {name:l8a, display:T4R, yAxis:B9e}=s6d || ({});if(!l8a){l8a=A9S.uniqueID();}if(!T4R){T4R=l8a;}if(!B9e){B9e=A6L.yAxis;B9e.name=l8a;}T4t={};for(var K25 in this.panels){if(K25 === A6L.name){L8c=this.panels[K25];L8c.name=l8a;L8c.display=T4R;L8c.yAxis=B9e;A6L=T4t[l8a]=L8c;if(this.moveMarkers && x7N !== l8a){this.moveMarkers(x7N,l8a);}}else {T4t[K25]=this.panels[K25];}}this.panels=T4t;J9_=!!0;for(var k1o in z2r){T4u=z2r[k1o];if(T4u.panel === x7N){T4u.panel=l8a;if(T4u.parameters && T4u.parameters.panelName){J9_=!!\"1\";T4u.parameters.panelName=l8a;}}}for(var a56 in m6E){if(m6E[a56].parameters.panel === x7N){J9_=!\"\";S83={panel:l8a};if(m6E[a56].parameters.yAxis && m6E[a56].parameters.yAxis.name === x7N){S83.yAxis=B9e;}this.modifySeries(a56,S83,!!m6E[a56].parameters.dependentOf);}}if(J9_){this.changeOccurred(\"layout\");}L5x=!!\"\";for(var p0x=0;p0x < this.drawingObjects.length;p0x++){E$j=this.drawingObjects[p0x];if(x7N === E$j.panelName){E$j.panelName=l8a;L5x=!!\"1\";}}if(L5x){this.changeOccurred(\"vector\");}this.calculateYAxisPositions();};A9S.ChartEngine.prototype.setPanelHeight=function(U8R,e6l){var w_P=x2w9K;var F2K,L$H,P6F,o64;if(!e6l){return;}if(Object.values(this.panels).slice(-1)[0] === U8R){e6l+=this.xaxisHeight;}var {canvasHeight:t08}=this.chart;var {percent:i$L}=U8R;F2K=e6l / (t08 - this.xaxisHeight);w_P.P3q(3);L$H=w_P.j1j(1,i$L);w_P.b$0(3);P6F=w_P.o5B(1,F2K);w_P.b$0(22);o64=w_P.j1j(L$H,P6F);Object.values(this.panels).forEach(H0j=>{H0j.percent/=o64;});U8R.percent=F2K;this.adjustPanelPositions();this.savePanels();};A9S.ChartEngine.prototype.electNewPanelOwner=function(x0g,Q_U){var Z6x,W1T,B3d,Q5b,c1c,g86,Y1n,G98,U4J;Z6x=\"st\";Z6x+=\"r\";Z6x+=\"i\";Z6x+=\"ng\";x2w9K.V8b();function i3Y(P_6){x2w9K.a3b();return P_6.name != B3d.name;}if(typeof x0g == Z6x){x0g=this.panels[x0g];}B3d=x0g.yAxis;if(x0g && x0g != this.chart.panel){Q5b=x0g.yAxis;c1c=Q5b.studies[0];if(!c1c || c1c == B3d.name){c1c=Q5b.renderers[0];}if(!c1c || c1c == B3d.name){c1c=Q5b.studies[1];}if(!c1c){c1c=Q5b.renderers[1];}if(Q_U){Q5b=x0g.yAxis=Q_U;W1T=Q_U.name;}else if(!c1c){if(x0g.yaxisLHS){g86=x0g.yaxisRHS.concat(x0g.yaxisLHS).filter(i3Y);Y1n=g86[+\"0\"];for(var J_3=0;J_3 < g86.length;J_3++){if(!g86[J_3].position){Y1n=g86[J_3];break;}}if(Y1n){Q5b=x0g.yAxis=Y1n;W1T=Y1n.studies[+\"0\"] || Y1n.renderers[0];}}}else {Q5b=this.addYAxis(x0g,new A9S.ChartEngine.YAxis({name:c1c,position:Q5b.position}));Q5b.renderers=x0g.yAxis.renderers;Q5b.studies=x0g.yAxis.studies;W1T=c1c;}if(W1T){c1c=W1T;if(B3d.name != x0g.name){c1c=x0g.name;}U4J=this.layout.studies;if(U4J && U4J[W1T]){G98=U4J[W1T].inputs.display;}this.modifyPanel(x0g,{name:c1c,display:G98 || W1T,yAxis:Q5b});this.deleteYAxisIfUnused(x0g,B3d);if(!this.panels[c1c].yAxis.lockScale){this.calculateYAxisMargins(this.panels[c1c].yAxis);}}else {this.checkForEmptyPanel(x0g);}}return W1T;};A9S.ChartEngine.prototype.configurePanelControls=function(Q8Y){var n8U=x2w9K;var n0L,x_O,S4D,e_K,E_K,j40;n0L=\".stx-i\";n0L+=\"co-edi\";n0L+=\"t\";x_O=\".stx-\";x_O+=\"ico-up\";S4D=Q8Y.icons;if(!S4D){return;}e_K=Q8Y.name == Q8Y.chart.name;S4D.classList.add(\"stx-show\");S4D.classList.remove(\"iconsTemplate\");Q8Y.title=S4D.querySelector(\".stx-panel-title\");Q8Y.up=S4D.querySelector(x_O);if(Q8Y.up){Q8Y.up=Q8Y.up.parentNode;}Q8Y.solo=S4D.querySelector(\".stx-ico-focus\");if(Q8Y.solo){Q8Y.solo=Q8Y.solo.parentNode;}Q8Y.down=S4D.querySelector(\".stx-ico-down\");if(Q8Y.down){Q8Y.down=Q8Y.down.parentNode;}Q8Y.edit=S4D.querySelector(n0L);if(Q8Y.edit){Q8Y.edit=Q8Y.edit.parentNode;}Q8Y.close=S4D.querySelector(\".stx-ico-close\");if(Q8Y.close){Q8Y.close=Q8Y.close.parentNode;}if(Q8Y.title){Q8Y.title.innerHTML=\"\";if(Q8Y.display){Q8Y.title.appendChild(document.createTextNode(Q8Y.display));}if(e_K){Q8Y.title.classList.add(\"chart-title\");S4D.classList.add(\"stx-chart-panel\");}}this.makeModal(S4D);n8U.a3b();if(Q8Y.handle){E_K=\"touc\";E_K+=\"h\";E_K+=\"start\";if(!A9S.touchDevice || A9S.isSurface){Q8Y.handle.onmouseover=(function(u2G){return function(){u2G.hideCrosshairs();};})(this);}if(!A9S.touchDevice || A9S.isSurface){Q8Y.handle.onmouseout=(function(t2Y){return function(){t2Y.showCrosshairs();};})(this);}j40=function(p_i,q5n){return function(E6m){if(A9S.ChartEngine.resizingPanel || p_i.openDialog !== \"\"){return;}p_i.grabHandle(q5n);};};if(A9S.isSurface){Q8Y.handle.onpointerdown=j40(this,Q8Y);}else {Q8Y.handle.onmousedown=j40(this,Q8Y);}if(A9S.touchDevice){Q8Y.handle.addEventListener(E_K,j40(this,Q8Y),{passive:!({})});}}if(Q8Y.up){A9S.safeClickTouch(Q8Y.up,(function(f29,O04){return function(){n8U.V8b();f29.panelUp(O04);};})(this,Q8Y));}if(Q8Y.down){A9S.safeClickTouch(Q8Y.down,(function(S4y,m11){n8U.V8b();return function(){S4y.panelDown(m11);};})(this,Q8Y));}if(Q8Y.solo){A9S.safeClickTouch(Q8Y.solo,(function(P4G,G1k){return function(){P4G.panelSolo(G1k);};})(this,Q8Y));}if(Q8Y.close){if(Q8Y.name == \"chart\"){Q8Y.close.style.display=\"none\";}else {A9S.safeClickTouch(Q8Y.close,(function(A3b,F8J){n8U.V8b();return function(){A3b.panelClose(F8J);};})(this,Q8Y));}}};A9S.ChartEngine.prototype.stackPanel=function(M$J,f6P,F5Y,v5J,K2p){var C9_,C6d,i7T,t8z,M73,K0R,F_T;C9_=\"s\";C9_+=\"tac\";C9_+=\"kP\";C9_+=\"anel\";C6d=\"d\";C6d+=\"i\";C6d+=\"v\";x2w9K.V8b();i7T=\"cha\";i7T+=\"r\";i7T+=\"t\";if(this.runPrepend(\"stackPanel\",arguments)){return;}if(!v5J){v5J=i7T;}t8z=this.charts[v5J];x2w9K.b$0(83);M73=x2w9K.j1j(f6P,v5J);if(M73){M$J=t8z.symbol;if(t8z.symbolDisplay){M$J=t8z.symbolDisplay;}if(!K2p){K2p=t8z.yAxis;}}K0R=this.panels[f6P]=new A9S.ChartEngine.Panel(f6P,K2p);if(!M73 && t8z.yAxis && K0R.yAxis.position == t8z.yAxis.position){K0R.yAxis.width=t8z.yAxis.width;}if(M73 && !t8z.panel){t8z.panel=K0R;}K0R.percent=F5Y;K0R.chart=t8z;K0R.display=M$J;K0R.holder=A9S.newChild(this.container,\"div\",\"stx-holder\");K0R.subholder=A9S.newChild(K0R.holder,C6d,\"stx-subholder\");K0R.subholder.style.zIndex=1;K0R.holder.panel=K0R;F_T=M73?\"stx-panel-chart\":\"stx-panel-study\";K0R.holder.classList.add(F_T);if(this.controls.handleTemplate && this.manageTouchAndMouse){K0R.handle=this.controls.handleTemplate.cloneNode(!![]);K0R.handle.classList.remove(\"handleTemplate\");this.container.appendChild(K0R.handle);K0R.handle.panel=K0R;}if(this.controls.iconsTemplate){K0R.icons=this.controls.iconsTemplate.cloneNode(!\"\");K0R.subholder.appendChild(K0R.icons);this.configurePanelControls(K0R);}if(!this.currentlyImporting){this.resizeCanvas();}this.runAppend(C9_,arguments);};A9S.ChartEngine.prototype.setPanelEdit=function(g70,O2z){g70.editFunction=O2z;if(g70.edit){A9S.safeClickTouch(g70.edit,O2z);}x2w9K.a3b();this.adjustPanelPositions();};A9S.ChartEngine.prototype.drawPanels=function(){var L0B=x2w9K;var U2u,P6r,Z3o,n_O,Q$7,g6Y,E7A,j2n,P6T,n$v,y53,F5z,G96,l2g,h9K;U2u=\"d\";U2u+=\"rawPanels\";P6r=\"draw\";P6r+=\"P\";P6r+=\"anel\";P6r+=\"s\";if(this.runPrepend(P6r,arguments)){return;}Z3o=!!0;for(var Y0x in this.panels){n_O=this.panels[Y0x];n_O.state={};Q$7=this.translateIf(n_O.display);if(n_O.title && n_O.title.textContent != Q$7){n_O.title.innerHTML=\"\";n_O.title.appendChild(document.createTextNode(Q$7));}if(n_O.icons){n_O.icons.classList.add(\"stx-show\");}if(n_O.hidden){g6Y=\"s\";g6Y+=\"tx-\";g6Y+=\"show\";if(n_O.icons){n_O.icons.classList.remove(g6Y);}if(n_O.handle){n_O.handle.style.display=\"none\";}n_O.holder.style.display=\"none\";continue;}else {E7A=\"ch\";E7A+=\"a\";E7A+=\"rt\";if(n_O.name != E7A){j2n=\"n\";j2n+=\"on\";j2n+=\"e\";P6T=this.manageTouchAndMouse;if(n_O.up){n_O.up.style.display=this.displayIconsUpDown && P6T?\"\":\"none\";}if(n_O.down){n_O.down.style.display=this.displayIconsUpDown && P6T?\"\":\"none\";}if(n_O.solo){n_O.solo.style.display=this.displayIconsSolo && P6T?\"\":\"none\";}if(n_O.close){n_O.close.style.display=this.displayIconsClose && P6T?\"\":j2n;}if(n_O.edit){n_O.edit.style.display=n_O.editFunction && P6T?\"\":\"none\";}}n_O.holder.style.display=\"block\";}if(n_O.displayEdgeIfPadded){n$v=\"stx_g\";n$v+=\"r\";n$v+=\"id_b\";n$v+=\"order\";y53=Math.round(n_O.left) + 0.5;F5z=n_O.yAxis.top - 0.5;G96=n_O.yAxis.bottom + 0.5;if(n_O.yaxisCalculatedPaddingLeft && !n_O.yaxisTotalWidthLeft){this.plotLine(y53,y53,F5z,G96,this.canvasStyle(\"stx_grid_border\"),\"segment\",this.chart.context,!!0,{lineWidth:1});}y53=Math.round(n_O.right) + 0.5;if(n_O.yaxisCalculatedPaddingRight && !n_O.yaxisTotalWidthRight){this.plotLine(y53,y53,F5z,G96,this.canvasStyle(n$v),\"segment\",this.chart.context,!({}),{lineWidth:1});}}if(!Z3o){l2g=\"n\";l2g+=\"o\";l2g+=\"n\";l2g+=\"e\";if(n_O.handle){n_O.handle.style.display=l2g;}Z3o=!!1;continue;}h9K=n_O.top;L0B.b$0(3);var X1H=L0B.j1j(10,9);h9K=Math.round(h9K) + \"0.5\" * X1H;this.plotLine(n_O.left - 0.5,n_O.right + 0.5,h9K,h9K,this.canvasStyle(\"stx_panel_border\"),\"segment\",this.chart.context,!!0,{});if(n_O.handle){if(!this.displayPanelResize){n_O.handle.style.display=\"none\";}else {n_O.handle.style.display=\"\";}L0B.P3q(115);var X_D=L0B.j1j(17,15,8,7,15);n_O.handle.style.top=h9K - n_O.handle.offsetHeight / X_D + \"px\";}}this.runAppend(U2u,arguments);};};S7=i2J=>{var F7E=x2w9K;var z5p;z5p=i2J.CIQ;F7E.V8b();z5p.ChartEngine.isDailyInterval=function(U5o){var u1p,j3n;F7E.V8b();u1p=\"mo\";u1p+=\"nth\";j3n=\"w\";j3n+=\"e\";j3n+=\"ek\";if(U5o == \"day\"){return !\"\";}if(U5o == j3n){return !!({});}if(U5o == u1p){return !![];}return !({});};z5p.ChartEngine.prototype.setPeriodicity=function(m_2,b6z){var s$4,K6M,g4X,s$j,H3h,c1y,K3$,t10,m8z,c07,l$D,Q1Y,U8K,U2m,F9p,i6D,U8J;s$4=\"s\";s$4+=\"et\";s$4+=\"Periodicity\";if(this.runPrepend(\"setPeriodicity\",arguments)){return;}if(typeof arguments[0] !== \"object\"){m_2={period:arguments[0],interval:arguments[1],timeUnit:arguments[2]};F7E.P3q(116);var u5I=F7E.j1j(17,2,5,18,10);b6z=arguments[arguments.length - u5I];if(arguments.length === +\"3\"){m_2.timeUnit=undefined;}}var {period:m8d, interval:n2Y, timeUnit:t5t}=m_2;if(typeof b6z !== \"function\"){b6z=null;}({period:m8d, interval:n2Y, timeUnit:t5t}=z5p.cleanPeriodicity(m8d,n2Y,t5t));function w34(){var j0e,j0T,l1p;j0e=1384827043;j0T=-1567702889;l1p=2;for(var C6v=1;F7E.P8Y(C6v.toString(),C6v.toString().length,48903) !== j0e;C6v++){s$j.dispatch(\"periodicity\",H3h);if(b6z){b6z(null);}F7E.b$0(44);l1p+=F7E.o5B(64,\"2\");}if(F7E.n$o(l1p.toString(),l1p.toString().length,59061) !== j0T){s$j.dispatch(\"\",H3h);if(b6z){b6z(1);}}}var {layout:g20}=this;g20.setSpan={};g20.range={};this.chart.inflectionPoint=null;K6M=m_2.getDifferentData;if(!K6M && this.chart.symbol){K6M=this.needDifferentData({period:m8d,interval:n2Y,timeUnit:t5t});}var {candleWidth:h3I, periodicity:k7W, interval:q6R, timeUnit:a5f}=g20;g4X={prvPeriodicity:k7W,prvInterval:q6R,prvTimeUnit:a5f};g20.periodicity=m8d;g20.interval=n2Y;g20.timeUnit=t5t;s$j=this;H3h={stx:s$j,differentData:K6M,prevPeriodicity:g4X};if(K6M){this.changeOccurred(\"layout\");this.clearCurrentMarketData();if(this.quoteDriver){for(var F7A in this.charts){c1y=this.charts[F7A];if(c1y.symbol){if(this.displayInitialized){this.quoteDriver.newChart({symbol:c1y.symbol,symbolObject:c1y.symbolObject,chart:c1y},w34);}else {this.loadChart(c1y.symbol,{chart:c1y},w34);}}}}else if(this.dataCallback){this.dataCallback();w34();}else {K3$=\"cannot c\";K3$+=\"hange periodicity because ne\";K3$+=\"ither dataCallback or quot\";K3$+=\"eDriver are set\";console.log(K3$);}this.home();return;}for(var L9C in this.charts){t10=this.charts[L9C];var {dataSegment:D$o, dataSet:D3z, maxTicks:i1R, scroll:I3M}=t10;m8z=D$o?D$o.length:0;c07=D3z?D3z.length:0;l$D=void 0;Q1Y=Math.round(t10.maxTicks / 2);this.setCandleWidth(h3I,t10);U8K=!\"\";U2m=!\"1\";if(I3M <= i1R){U8K=!1;}else if(D$o && !D$o[Q1Y]){U8K=!\"1\";F7E.b$0(3);U2m=F7E.o5B(I3M,c07);}if(U8K && m8z > 0){if(i1R < (Math.round(this.chart.width / h3I - 0.499) - +\"1\") / 2){F7E.b$0(3);Q1Y=F7E.o5B(m8z,1);}if(Q1Y >= m8z){l$D=D$o[m8z - 1].DT;F7E.P3q(3);Q1Y=F7E.j1j(m8z,1);}else {l$D=D$o[Q1Y].DT;}}this.createDataSet();if(U8K){if(m8z > 0){for(var j8P=c07 - 1;j8P >= 0;j8P--){F9p=D3z[j8P].DT;if(F9p.getTime() < l$D.getTime()){F7E.b$0(87);t10.scroll=F7E.j1j(j8P,Q1Y,1,c07);break;}}}}else if(!U2m){i6D=Math.round(this.preferences.whitespace / h3I);F7E.b$0(14);t10.scroll=F7E.j1j(1,i1R,i6D);}else {t10.scroll=D3z.length + U2m;}}if(this.displayInitialized){this.draw();}this.changeOccurred(\"layout\");if(this.quoteDriver){for(var X7v in this.charts){U8J=this.charts[X7v];if(U8J.symbol && (U8J.moreAvailable || !U8J.upToDate)){this.quoteDriver.checkLoadMore(U8J);}}}w34();this.runAppend(s$4,arguments);};z5p.ChartEngine.prototype.needDifferentData=function(c8R){var Y0A,L6e,c0s,L1S;F7E.a3b();Y0A=this.layout;L6e=z5p.ChartEngine.isDailyInterval(c8R.interval);c0s=z5p.ChartEngine.isDailyInterval(Y0A.interval);L1S=![];if(this.dontRoll || !c0s){if(Y0A.interval != c8R.interval){L1S=!![];}}else {if(L6e != c0s){L1S=!!({});}}if(!L6e && !c8R.timeUnit){c8R.timeUnit=\"minute\";}if(!c0s && !Y0A.timeUnit){Y0A.timeUnit=\"minute\";}if(c8R.timeUnit != Y0A.timeUnit){L1S=!!1;}if(!this.masterData || !this.masterData.length){L1S=!0;}return L1S;};z5p.ChartEngine.prototype.getPeriodicity=function(){var A3p,V0S,k8r;A3p=this.layout;V0S=A3p.interval;k8r=A3p.timeUnit;if(!k8r){k8r=V0S;V0S=1;}return {period:A3p.periodicity,interval:V0S,timeUnit:k8r};};};Z_=Y3y=>{var F4N;F4N=Y3y.CIQ;F4N.ChartEngine.prototype.isHistoricalMode=function(){var B4D=x2w9K;B4D.V8b();var p6Z,y2F,U6n,y6L,t4B,M54,g9n,i7p,U8g;p6Z=new Date();y2F=!!({});U6n=this.masterData;if(!this.isHistoricalModeSet){return ![];}if(U6n.length){y6L=this.getFirstLastDataRecord(U6n,\"DT\",!![]);t4B=this.standardMarketIterator(y6L.DT);y2F=(t4B?t4B.next():y6L.DT) <= p6Z;if(y2F && F4N.ChartEngine.isDailyInterval(t4B.interval)){M54=this.chart.market.getOpen();if(M54 && p6Z < M54){B4D.P3q(24);p6Z.setHours(B4D.o5B(\"0\",1),0,0,0);B4D.b$0(44);g9n=-B4D.j1j(0,\"752164136\");i7p=+\"810660482\";U8g=2;for(var q1_=1;B4D.P8Y(q1_.toString(),q1_.toString().length,42924) !== g9n;q1_++){if(~p6Z !== ~t4B.begin){y2F=!![];}U8g+=2;}if(B4D.n$o(U8g.toString(),U8g.toString().length,24700) !== i7p){if(+p6Z == +t4B.begin){y2F=![];}}}}}return y2F;};F4N.ChartEngine.prototype.isHome=function(){var Z7U=x2w9K;var n28,s5u,I4F;n28=this.chart;s5u=n28.dataSet;I4F=n28.animatingHorizontalScroll;Z7U.P3q(109);var z9O=Z7U.j1j(2,20,8,122);Z7U.P3q(117);var R2U=Z7U.o5B(16,16,1,42,12);return this.pixelFromTick(s5u.length - (I4F?z9O:R2U),n28) < n28.width + n28.panel.left;};F4N.ChartEngine.prototype.getPreviousBar=function(r6x,A0k,i5n){x2w9K.a3b();return this.getNextBarInternal(r6x,A0k,i5n,-1);};F4N.ChartEngine.prototype.getNextBar=function(Y8E,Q1R,r0H){return this.getNextBarInternal(Y8E,Q1R,r0H,1);};F4N.ChartEngine.prototype.getNextBarInternal=function(l4x,p$J,A2V,F98){var N5s,P29,U2L,p70;x2w9K.V8b();N5s=l4x.dataSegment && l4x.dataSegment[A2V];if(N5s){P29=N5s.tick;while(P29 > 0 && P29 < l4x.dataSet.length){x2w9K.P3q(7);P29=x2w9K.o5B(F98,P29);U2L=l4x.dataSet[P29];if(U2L){p70=F4N.existsInObjectChain(U2L,p$J);if(p70 && p70.obj[p70.member]){return U2L;}}}}return null;};F4N.ChartEngine.prototype.getFirstLastDataRecord=function(t83,c7_,u47){var f$k;if(t83 && t83.length){f$k=u47?t83.length - 1:0;while(f$k >= 0 && f$k < t83.length){if(t83[f$k] && typeof t83[f$k][c7_] != \"undefined\"){return t83[f$k];}if(u47){f$k--;}else {f$k++;}}}return null;};F4N.ChartEngine.prototype.leftTick=function(){x2w9K.V8b();return this.chart.dataSet.length - this.chart.scroll;};F4N.ChartEngine.prototype.getNextInterval=function(Y3n,r2C,s6W){var L6V=x2w9K;var I2$,i0R,K5Q,j41;if(!r2C){r2C=1;}if(s6W !== !({})){s6W=!\"\";}I2$=this.standardMarketIterator(Y3n,s6W?this.dataZone:this.displayZone);if(!I2$){return Y3n;}if(r2C < +\"1\"){i0R=1229965502;K5Q=-232187400;j41=2;for(var K0T=1;L6V.P8Y(K0T.toString(),K0T.toString().length,23083) !== i0R;K0T++){L6V.b$0(118);return I2$.previous(L6V.j1j(1,r2C));}if(L6V.n$o(j41.toString(),j41.toString().length,27626) !== K5Q){L6V.b$0(119);return I2$.previous(L6V.o5B(8,r2C));}}return I2$.next(r2C);};F4N.ChartEngine.prototype.standardMarketIterator=function(B0O,k2u,R5Q){var e2H,f5R;x2w9K.V8b();e2H=R5Q || this.chart;if(!e2H.market){return null;}f5R={begin:B0O,interval:this.layout.interval,periodicity:this.layout.interval == \"tick\"?this.chart.xAxis.futureTicksInterval:this.layout.periodicity,timeUnit:this.layout.timeUnit,outZone:k2u};return e2H.market.newIterator(f5R);};};V4=d00=>{var X9r=x2w9K;var r_d,I8w;if(!d00.SplinePlotter){d00.SplinePlotter={};}r_d=d00.CIQ;I8w=d00.SplinePlotter;r_d.ChartEngine.prototype.draw=function(R52){var Q2G,G_V,R9r,s$I,W0k,L4z,z8M,r3$,E0U,X7O,M1o,U7n,V1l,w0o,b5Y,O5x,i59;Q2G=\"d\";Q2G+=\"r\";Q2G+=\"a\";Q2G+=\"w\";G_V=\"ove\";G_V+=\"r\";G_V+=\"lay\";this.debug();if(this.destroyed){return;}R9r=this.chart;s$I=this.layout;if(!R9r.canvas){return;}if(!R9r.dataSet){return;}if(!R9r.canvasHeight){return;}X9r.b$0(7);var i$u=X9r.j1j(2,0);this.offset=s$I.candleWidth * this.candleWidthPercent / i$u;r_d.clearCanvas(R9r.canvas,this);if(!this.masterData){return;}if(this.runPrepend(\"draw\",arguments)){return;}if(!this.defaultColor){this.getDefaultColor();}this.vectorsShowing=![];this.drawPanels();this.yAxisLabels=[];this.correctIfOffEdge();this.createDataSegment();this.setBaselines(R9r);z8M=this.createXAxis(R9r);this.initializeDisplay(R9r);this.drawXAxis(R9r,z8M);try{this.renderYAxis(R9r);}catch(y8u){if(y8u && y8u.message === \"reboot draw\"){return this.draw();}throw y8u;}this.currentHRParams=this.getCurrentHRParams();this.drawCurrentPriceLine();R9r.tmpWidth=Math.floor(s$I.candleWidth * this.candleWidthPercent);if(R9r.tmpWidth % 2 === 0){R9r.tmpWidth+=1;if(R9r.tmpWidth > s$I.candleWidth){R9r.tmpWidth-=2;}}if(R9r.tmpWidth < 0.5){R9r.tmpWidth=0.5;}for(W0k in this.plugins){L4z=this.plugins[W0k];if(L4z.display){if(L4z.drawUnder){L4z.drawUnder(this,R9r);}}}R9r.legendColorMap={};if(this.controls.baselineHandle){this.controls.baselineHandle.style.display=\"none\";}this.rendererAction(R9r,\"underlay\");r_d.getFn(\"Studies.displayStudies\")(this,R9r,!![]);this.displayChart(R9r);r_d.getFn(\"Studies.displayStudies\")(this,R9r,!\"1\");this.rendererAction(R9r,G_V);if(R9r.legend && R9r.legendColorMap && R9r.legendRenderer){R9r.legendRenderer(this,{chart:R9r,legendColorMap:R9r.legendColorMap,coordinates:{x:R9r.legend.x,y:R9r.legend.y + R9r.panel.yAxis.top}});}for(W0k in this.plugins){L4z=this.plugins[W0k];if(L4z.display){if(L4z.drawOver){L4z.drawOver(this,R9r);}}}for(var O9m in this.panels){if(!this.panels[O9m].hidden){this.plotYAxisText(this.panels[O9m]);}}for(var z6p=0;z6p < this.yAxisLabels.length;z6p++){r3$=this.yAxisLabels[z6p];if(r3$.src == \"series\" && r3$.args[6] && r3$.args[6].drawSeriesPriceLabels === !1)continue;this.createYAxisLabel.apply(this,r3$.args);}if(this.createCrosshairs){this.createCrosshairs();}if(this.drawVectors){this.drawVectors();}this.drawCurrentHR();this.currentHRParams=null;this.displayInitialized=!!({});E0U=this.controls;if(E0U){X7O=\"n\";X7O+=\"o\";X7O+=\"n\";X7O+=\"e\";M1o=-682255724;U7n=639431287;V1l=2;for(var e3S=1;X9r.P8Y(e3S.toString(),e3S.toString().length,95975) !== M1o;e3S++){w0o=this.manageTouchAndMouse || ~this.mainSeriesRenderer.nonInteractive;V1l+=2;}if(X9r.n$o(V1l.toString(),V1l.toString().length,19951) !== U7n){w0o=this.manageTouchAndMouse && !this.mainSeriesRenderer.nonInteractive;}if(E0U.home){E0U.home.style.display=w0o && !this.isHome()?\"block\":X7O;}if(E0U.chartControls){b5Y=\"p\";b5Y+=\"x\";O5x=\"n\";O5x+=\"o\";O5x+=\"n\";O5x+=\"e\";i59=\"hi\";i59+=\"dden\";E0U.chartControls.style.display=this.manageTouchAndMouse && E0U.chartControls.style.visibility !== i59?\"block\":O5x;if(E0U.chartControls.style.display === \"block\"){r_d.efficientDOMUpdate(E0U.chartControls.style,\"left\",R9r.left + R9r.width / 2 + b5Y);}}}if(r_d.Marker){this.positionMarkers();}if(this.quoteDriver && this.animations.zoom.hasCompleted){this.quoteDriver.checkLoadMore(R9r);}this.runAppend(Q2G,arguments);this.makeAsyncCallbacks();};r_d.ChartEngine.prototype.drawWithRange=function(u0Z){this.draw(u0Z);};r_d.ChartEngine.prototype.setSeriesRenderer=function(P9D){var {baseline:Y4m, name:f07, panel:o8K, yAxis:f5l}=P9D.params;if(this.chart.seriesRenderers[f07]){return this.chart.seriesRenderers[f07];}if(f5l){P9D.params.yAxis=this.addYAxis(this.panels[o8K],f5l);this.resizeChart();}P9D.stx=this;this.chart.seriesRenderers[f07]=P9D;if(Y4m){this.registerBaselineToHelper(P9D);}return P9D;};r_d.ChartEngine.prototype.setMainSeriesRenderer=function(A7y){var i2E,C32,w2u,K3t,a0P,V6t,h8p;i2E=\"barsHa\";i2E+=\"veWidt\";i2E+=\"h\";C32=\"hig\";C32+=\"h\";C32+=\"LowB\";C32+=\"ars\";w2u=\"_\";w2u+=\"mai\";w2u+=\"n_ser\";w2u+=\"ies\";K3t=\"non\";K3t+=\"e\";var {chartType:F9k, aggregationType:L0O}=this.layout;var {chart:O3J}=this;var {customChart:c_I}=O3J;a0P=this.mainSeriesRenderer;V6t=this.displayInitialized;if(A7y){this.setMasterData();}this.displayInitialized=!!\"\";if(a0P.removeAllSeries){a0P.removeAllSeries();}this.removeSeriesRenderer(a0P);a0P=this.mainSeriesRenderer={params:{}};if(L0O && L0O != \"ohlc\"){F9k=L0O;}if(c_I && c_I.chartType){F9k=c_I.chartType;}if(F9k == K3t){return;}h8p=r_d.Renderer.produce(F9k,{panel:O3J.panel.name,name:w2u,permanent:!\"\",useChartLegend:!!\"1\"});if(h8p){this.setSeriesRenderer(h8p).attachSeries(null,{display:O3J.symbol});a0P=this.mainSeriesRenderer=h8p;}this.displayInitialized=V6t;[C32,\"standaloneBars\",i2E].forEach((function(z1z){X9r.V8b();O3J[z1z]=this.mainSeriesRenderer[z1z];}).bind(this));};r_d.ChartEngine.prototype.removeSeriesRenderer=function(a5c){var B4Y;var {baseline:f3w, name:q8i}=a5c.params;X9r.b$0(7);B4Y=this.controls[`${q8i}${X9r.o5B(\"ne-handle\",\" baseli\")}`];if(f3w){this.removeBaselineFromHelper(a5c);if(B4Y){this.container.removeChild(B4Y);delete this.controls[B4Y];}}delete this.chart.seriesRenderers[q8i];};r_d.ChartEngine.prototype.getSeriesRenderer=function(T9R){return this.chart.seriesRenderers[T9R];};X9r.a3b();r_d.ChartEngine.prototype.getRendererFromSeries=function(a2K){var H96;H96=this.chart.seriesRenderers;for(var v_K in H96){for(var R4Q in H96[v_K].seriesParams){if(H96[v_K].seriesParams[R4Q].id == a2K){return H96[v_K];}}}return null;};r_d.ChartEngine.prototype.startClip=function(c15,O4r){var z0V,G09,B1J,i1k,f0I;if(!c15){c15=this.chart.panel.name;}z0V=this.panels[c15];G09=z0V.yAxis;B1J=this.chart;i1k=z0V.left;f0I=z0V.width;if(O4r){i1k=0;f0I=this.width;}else if(z0V.yaxisLHS && z0V.yaxisLHS.length){i1k++;f0I--;}[\"canvas\",\"tempCanvas\"].forEach(function(b$k){var G68;G68=B1J[b$k].context;G68.save();G68.beginPath();G68.rect(i1k,G09.top,f0I,G09.height);G68.clip();});};r_d.ChartEngine.prototype.endClip=function(){var h3l;h3l=this.chart;[\"canvas\",\"tempCanvas\"].forEach(function(e9Z){X9r.V8b();h3l[e9Z].context.restore();});};r_d.ChartEngine.prototype.setLineStyle=function(Z$W,m2t){var X96,f6g,g$y;X96=\"o\";X96+=\"b\";X96+=\"j\";X96+=\"ect\";X9r.V8b();f6g={};if(Z$W && typeof Z$W == X96){f6g=Z$W;}else {f6g.color=Z$W;}if(!f6g.color && !f6g.pattern && !f6g.width && !f6g.baseColor){f6g=null;}if(!m2t){m2t=this.chart;}g$y=1;if(f6g && f6g.width){g$y=f6g.width;}if(f6g && f6g.pattern){f6g.pattern=r_d.borderPatternToArray(g$y,f6g.pattern);}m2t.lineStyle=f6g;};r_d.ChartEngine.prototype.setGapLines=function(Y0d,W6X){var S$5,S12;S$5=\"boole\";S$5+=\"a\";S$5+=\"n\";if(!W6X){W6X=this.chart;}S12={};if(Y0d && typeof Y0d == \"object\"){S12=Y0d;}else if(typeof Y0d === S$5){return W6X.gaplines=Y0d;}else {S12.color=Y0d;}if(!S12.color && !S12.pattern && !S12.fillMountain){S12=null;}if(S12 && S12.pattern){S12.pattern=r_d.borderPatternToArray(S12.width,S12.pattern);}if(S12 && S12.width <= 0){S12.width=null;}W6X.gaplines=S12;};r_d.ChartEngine.prototype.getGapColorFunction=function(c45,a6d,x7S,p$i,l45){X9r.V8b();if(typeof x7S != \"object\"){x7S={color:x7S};}return function(T60,R1d,I9F){var c2O,i9L,X$K;c2O=\"obj\";c2O+=\"ect\";i9L=l45?l45(T60,R1d,I9F):x7S;if(!i9L){i9L=x7S;}if(i9L.color){i9L=i9L.color;}X$K=R1d[c45];if(!X$K && X$K !== 0){X$K=R1d[a6d];}if(!I9F && (X$K || X$K === 0)){return {color:i9L,pattern:x7S.pattern,width:x7S.width};}if(!p$i){return null;}if(typeof p$i != c2O){if(typeof p$i == \"string\"){p$i={color:p$i};}else {p$i={};}}return {color:p$i.color || i9L,pattern:p$i.pattern || x7S.pattern,width:p$i.width || x7S.width};};};r_d.ChartEngine.prototype.drawLineChart=function(P56,o_m,n5N,I6j){var g2i,V5k,M5B,N_3,S_b,A6H,m1D,E_k,O$7,o$E,X5w,i7w;g2i=\"transpare\";g2i+=\"nt\";V5k=this.chart;M5B=V5k.context;N_3=V5k.lineStyle || ({});S_b=this.canvasStyle(o_m);if(!I6j){I6j={};}this.startClip(P56.name);A6H=I6j.width || N_3.width || S_b.width;if(A6H && parseInt(A6H,10) <= 25){M5B.lineWidth=Math.max(1,r_d.stripPX(A6H));}else {M5B.lineWidth=1;}I6j.pattern=I6j.pattern || N_3.pattern || S_b.borderTopStyle;I6j.pattern=r_d.borderPatternToArray(M5B.lineWidth,I6j.pattern);this.canvasColor(o_m);m1D=I6j.color || N_3.color;if(m1D){if(m1D == \"auto\"){m1D=this.defaultColor;}if(I6j.opacity && I6j.opacity !== 1){m1D=r_d.hexToRgba(r_d.colorToHex(m1D),parseFloat(I6j.opacity));}M5B.strokeStyle=m1D;}I6j.skipProjections=!!({});E_k=I6j.field || V5k.defaultPlotField;O$7=I6j.subField || V5k.defaultPlotField || \"Close\";o$E=I6j.gapDisplayStyle;if(!o$E && o$E !== ![]){o$E=I6j.gaps;}if(!o$E && o$E !== !({})){o$E=V5k.gaplines;}if(!o$E){o$E=g2i;}X9r.V8b();I6j.gapDisplayStyle=o$E;X5w=this.getGapColorFunction(E_k,O$7,{color:M5B.strokeStyle,pattern:I6j.pattern,width:M5B.lineWidth},o$E,n5N);if(P56.chart.tension){I6j.tension=P56.chart.tension;}i7w=this.plotDataSegmentAsLine(E_k,P56,I6j,X5w);if(!i7w.colors.length){i7w.colors.push(M5B.strokeStyle);}M5B.lineWidth=1;this.endClip();return I6j.returnObject?i7w:i7w.colors;};r_d.ChartEngine.prototype.drawChannelChart=function(n2l,h_g,P30){var X2A,p9D,Z22,t2E,A$u,X_z,x9Y,E1A,p8L,T0c,j9t;X2A=\"H\";X2A+=\"i\";X2A+=\"g\";X2A+=\"h\";p9D=Object.assign({},P30);p9D.color=P30.color;Z22=this.drawLineChart(n2l,p9D.style,h_g,p9D);t2E=p9D.border_color_up || this.getCanvasColor(\"stx_channel_up\");A$u=p9D.border_color_down || this.getCanvasColor(\"stx_channel_down\");p9D[P30.field?\"subField\":\"field\"]=p9D.field_high || X2A;p9D.color=t2E;X_z=this.drawLineChart(n2l,p9D.style,h_g,p9D);p9D[P30.field?\"subField\":\"field\"]=p9D.field_low || \"Low\";p9D.color=A$u;x9Y=this.drawLineChart(n2l,p9D.style,h_g,p9D);p9D[P30.field?\"subField\":\"field\"]=P30.subField || this.chart.defaultPlotField || \"Close\";p8L=[];T0c=[];for(E1A=0;E1A < X_z.points.length;E1A+=2){p8L.push([X_z.points[E1A],X_z.points[E1A + 1]]);}for(E1A=0;E1A < x9Y.points.length;E1A+=2){T0c.push([x9Y.points[E1A],x9Y.points[E1A + 1]]);}X9r.b$0(55);var r3t=X9r.j1j(16,18,78,13);j9t=this.chart.context.lineWidth / r3t;for(E1A=Z22.points.length - 2;E1A >= 0;E1A-=2){p8L.push([Z22.points[E1A],Z22.points[E1A + 1] - j9t]);T0c.push([Z22.points[E1A],Z22.points[E1A + 1] + j9t]);}this.startClip(n2l.name);p9D.color=t2E;r_d.fillArea(this,p8L,p9D);p9D.color=A$u;r_d.fillArea(this,T0c,p9D);this.endClip();Z22.colors=Z22.colors.concat(X_z.colors).concat(x9Y.colors);return P30.returnObject?Z22:Z22.colors;};r_d.ChartEngine.prototype.connectTheDots=function(N_J,G3F,t32,d7L,D7P,w3U){var I2C,f8$,o8b,n2C,n6j,d_6,q$W,G2E,b$a,h$B,l94,p4s,H1T,P$r,K93,l2P,C5T,m2v,O$g,k$5,H$G;I2C=\"un\";I2C+=\"d\";I2C+=\"e\";I2C+=\"fined\";if(!w3U){w3U={};}if(w3U.pattern == \"none\"){return;}if(D7P === !![]){D7P=this.chart.panel;}if(d7L === null || typeof d7L == I2C){d7L=this.chart.context;}if(N_J.length < 4){return;}f8$=0;o8b=this.chart.canvasHeight;n2C=0;n6j=this.chart.width;if(D7P){o8b=D7P.yAxis.bottom;f8$=D7P.yAxis.top;}X9r.P3q(3);d7L.lineWidth=X9r.o5B(\"1.1\",0);if(typeof G3F == \"object\"){d7L.strokeStyle=G3F.color;if(G3F.opacity){d7L.globalAlpha=G3F.opacity;}else {X9r.b$0(24);d7L.globalAlpha=X9r.j1j(\"1\",1);}d7L.lineWidth=r_d.stripPX(G3F.width);}else {if(!G3F || G3F == \"auto\" || r_d.isTransparent(G3F)){d7L.strokeStyle=this.defaultColor;}else {d7L.strokeStyle=G3F;}}if(w3U.opacity){d7L.globalAlpha=w3U.opacity;}if(w3U.lineWidth){d7L.lineWidth=w3U.lineWidth;}d_6=r_d.borderPatternToArray(d7L.lineWidth,w3U.pattern);d7L.beginPath();for(var Z02=0;Z02 < N_J.length - +\"2\";Z02+=\"2\" ^ 0){q$W=N_J[Z02];X9r.b$0(7);G2E=N_J[X9r.j1j(1,Z02)];X9r.b$0(7);b$a=N_J[X9r.o5B(2,Z02)];X9r.b$0(16);h$B=N_J[X9r.j1j(Z02,\"3\")];if(isNaN(q$W) || isNaN(b$a) || isNaN(G2E) || isNaN(h$B)){return;}l94=0.0;p4s=1.0;X9r.P3q(3);H1T=X9r.o5B(b$a,q$W);X9r.b$0(3);P$r=X9r.o5B(h$B,G2E);for(var Q8A=0;Q8A < 4;Q8A++){if(Q8A === 0){K93=-H1T;X9r.b$0(3);l2P=-X9r.j1j(n2C,q$W);}if(Q8A == +\"1\"){K93=H1T;X9r.b$0(3);l2P=X9r.j1j(n6j,q$W);}if(Q8A == 2){K93=-P$r;X9r.b$0(3);l2P=-X9r.o5B(f8$,G2E);}if(Q8A == +\"3\"){K93=P$r;X9r.b$0(3);l2P=X9r.o5B(o8b,G2E);}X9r.P3q(22);C5T=X9r.j1j(l2P,K93);if((h$B || h$B === 0) && K93 === 0 && l2P < +\"0\"){return !1;}if(K93 < 0){if(C5T > p4s){return !\"1\";}else if(C5T > l94){l94=C5T;}}else if(K93 > 0){if(C5T < l94){return !1;}else if(C5T < p4s){p4s=C5T;}}}X9r.b$0(120);m2v=X9r.o5B(q$W,l94,H1T);X9r.P3q(120);O$g=X9r.o5B(G2E,l94,P$r);X9r.b$0(120);k$5=X9r.j1j(q$W,p4s,H1T);X9r.b$0(120);H$G=X9r.j1j(G2E,p4s,P$r);try{d7L.setLineDash(d_6 && d_6.length?d_6:[]);d7L.moveTo(m2v,O$g);d7L.lineTo(k$5,H$G);}catch(s2R){}}d7L.stroke();d7L.closePath();d7L.globalAlpha=1;d7L.lineWidth=+\"1\";};r_d.ChartEngine.prototype.plotSpline=function(V4m,k2o,u8S,q1y,J3u,n5Q,R0b){var b2b;if(!R0b){R0b={};}if(R0b.pattern == \"none\"){return;}if(n5Q === !!({})){n5Q=this.chart.panel;}if(J3u === null || typeof J3u == \"undefined\"){J3u=this.chart.context;}J3u.save();X9r.a3b();J3u.lineWidth=1.1;if(typeof u8S == \"object\"){J3u.strokeStyle=u8S.color;if(u8S.opacity){J3u.globalAlpha=u8S.opacity;}else {J3u.globalAlpha=1;}J3u.lineWidth=r_d.stripPX(u8S.width);}else {if(!u8S || u8S == \"auto\" || r_d.isTransparent(u8S)){J3u.strokeStyle=this.defaultColor;}else {J3u.strokeStyle=u8S;}}if(R0b.opacity){J3u.globalAlpha=R0b.opacity;}if(R0b.lineWidth){J3u.lineWidth=R0b.lineWidth;}b2b=r_d.borderPatternToArray(J3u.lineWidth,R0b.pattern);if(R0b.pattern && J3u.setLineDash){J3u.setLineDash(b2b);J3u.lineDashOffset=0;}J3u.beginPath();I8w.plotSpline(V4m,k2o,J3u);J3u.stroke();J3u.closePath();J3u.restore();};r_d.ChartEngine.prototype.rawWatermark=function(H2i,r_t,d9L,L$4){this.canvasFont(\"stx_watermark\",H2i);H2i.fillStyle=this.defaultColor;H2i.globalAlpha=0.5;this.chart.context.textBaseline=\"alphabetic\";H2i.fillText(L$4,r_t,d9L);H2i.globalAlpha=1;};r_d.ChartEngine.prototype.watermark=function(Z23,T0P){var c8E,V4w,n4L,e1l,d7E,c_C,i2O,K1F;c8E=\"cen\";c8E+=\"t\";c8E+=\"e\";c8E+=\"r\";V4w=\"alph\";V4w+=\"ab\";V4w+=\"etic\";n4L=\"m\";n4L+=\"idd\";n4L+=\"le\";e1l=\"o\";e1l+=\"bject\";if(T0P && typeof T0P != e1l){T0P={h:arguments[1],v:arguments[2],text:arguments[3]};}T0P={h:T0P.h || \"left\",v:T0P.v || \"bottom\",text:T0P.text || \"\",hOffset:T0P.hOffset == 0?0:T0P.hOffset || +\"10\",vOffset:T0P.vOffset == 0?0:T0P.vOffset || 20,context:T0P.context || this.chart.context};d7E=T0P.context;if(!d7E){return;}c_C=this.panels[Z23];if(!c_C || c_C.hidden){return;}i2O=c_C.yAxis.bottom - T0P.vOffset;if(T0P.v == \"top\"){i2O=c_C.top + T0P.vOffset;}else if(T0P.v == n4L){X9r.b$0(3);var K_k=X9r.j1j(24,22);i2O=(c_C.top + c_C.yAxis.bottom) / K_k;}d7E.save();this.canvasFont(\"stx_watermark\",d7E);this.canvasColor(\"stx_watermark\",d7E);d7E.textBaseline=V4w;K1F=c_C.left + T0P.hOffset;if(T0P.h == \"right\"){K1F=c_C.right - T0P.hOffset;}else if(T0P.h == c8E){X9r.b$0(55);var u2A=X9r.j1j(6,20,28,15);K1F=(c_C.right + c_C.left - d7E.measureText(T0P.text).width) / u2A;}d7E.globalAlpha=0.5;if(this.highlightedDraggable){d7E.globalAlpha*=+\"0.3\";}d7E.fillText(T0P.text,K1F,i2O);d7E.restore();};r_d.ChartEngine.prototype.displayErrorAsWatermark=function(C7l,i7X){var T1q,t6v,H$$,o3f,z7h,X1t,q2t,J7w,u1I,A$v,m40,f7y,X4M;T1q=\"stx_w\";T1q+=\"ate\";T1q+=\"rma\";T1q+=\"rk\";t6v=\"ch\";X9r.a3b();t6v+=\"art\";if(!i7X){return;}if(!C7l){C7l=t6v;}H$$=this.panels[C7l];if(!H$$ || H$$.hidden){return;}o3f=H$$.state;if(!o3f){H$$.state=o3f={};}z7h=o3f.studyErrors;if(!z7h){o3f.studyErrors=z7h=new Set();}if(z7h.has(i7X)){return;}X1t=o3f.watermarkOffset || \"10\" ^ 0;q2t=10;J7w=this.getCanvasFontSize(T1q);if(this.chart && this.chart.chartControls){u1I=H$$.yAxis.bottom;A$v=this.chart.chartControls;X9r.b$0(3);m40=X9r.j1j(u1I,X1t);X9r.b$0(3);f7y=X9r.o5B(m40,J7w);if(m40 > A$v.offsetTop && m40 < A$v.offsetTop + A$v.offsetHeight || f7y > A$v.offsetTop && f7y < A$v.offsetTop + A$v.offsetHeight){X1t=u1I - A$v.offsetTop + q2t;}}z7h.add(i7X);X4M={h:\"center\",v:\"bottom\",text:i7X,vOffset:X1t};X9r.b$0(7);X1t+=X9r.j1j(q2t,J7w);o3f.watermarkOffset=X1t;this.watermark(C7l,X4M);};r_d.ChartEngine.prototype.displayChart=function(j0M){var h_c;X9r.V8b();h_c=\"disp\";h_c+=\"layChart\";if(this.runPrepend(\"displayChart\",arguments)){return;}this.rendererAction(j0M,\"main\");this.runAppend(h_c,arguments);};};n$=X36=>{var X6Q=x2w9K;var X9D;X9D=X36.CIQ;X9D.ChartEngine.prototype.cloneStyle=function(S2l){var c7v,K9h,Q$J,o61,u8m,V80,G3j,q8j,z$T;c7v={};function o8m(V6E){return V6E[\"1\" << 64].toUpperCase();}K9h=!!0;X6Q.V8b();for(var j4y in S2l){Q$J=\"backgroundAtt\";Q$J+=\"achment\";o61=S2l[j4y];if(j4y == Q$J){K9h=!0;}if(K9h){if(o61 && o61.constructor == String && isNaN(j4y)){c7v[j4y]=o61;}}else if(!isNaN(j4y)){u8m=S2l.getPropertyValue(o61);if(u8m){o61=o61.split((5532,6540) >= (\"8902\" | 6)?![]:(3970,2410) >= +\"328\"?\"-\":7.61e+3);V80=0;G3j=o61.length;q8j=o61[0];while(++V80 < G3j){X6Q.P3q(114);var i7v=X6Q.j1j(1,3,16,4);q8j+=o61[V80].charAt(0).toUpperCase() + o61[V80].slice(i7v);}c7v[q8j]=u8m;}}else {z$T=j4y.replace(X9D.camelCaseRegExp,o8m);c7v[z$T]=o61;}}return c7v;};X9D.ChartEngine.prototype.canvasStyle=function(c9m,i$8){var f_X,B4T,T1t;f_X=this.styles[c9m];if(!f_X){B4T=document.createElement(\"div\");B4T.className=c9m;this.container.appendChild(B4T);T1t=getComputedStyle(B4T,i$8);f_X=this.styles[c9m]=this.cloneStyle(T1t);this.container.removeChild(B4T);if(!T1t){this.styles[c9m]=null;}}return f_X;};X9D.ChartEngine.prototype.colorOrStyle=function(C$w){if(C$w.indexOf((5480,800) !== 8695?\"#\":(!\"\",+\"0xf63\")) != -1){return C$w;}if(C$w.indexOf((\"219.7\" - 0,693.18) == 5600?+\"6100\" != 5894?![]:(\"0x80b\" >> 32,954.34):\"(\") != -1){return C$w;}if(C$w == \"transparent\"){return C$w;}return this.canvasStyle(C$w);};X9D.ChartEngine.prototype.clearStyles=function(){for(var S0k in this.styles){delete this.styles[S0k];}this.defaultColor=\"\";};X9D.ChartEngine.prototype.setStyle=function(F1E,k3t,N6n){if(!this.styles[F1E]){this.canvasStyle(F1E);}if(!this.styles[F1E]){this.styles[F1E]={};}X6Q.a3b();this.styles[F1E][X9D.makeCamelCase(k3t)]=N6n;};X6Q.V8b();X9D.ChartEngine.prototype.canvasFont=function(c2r,e8Y){var R05,P_O;if(!e8Y){e8Y=this.chart.context;}R05=this.canvasStyle(c2r);if(!R05){return;}X6Q.b$0(121);var b0U=X6Q.j1j(1,218962,2,12,19040);X6Q.P3q(7);var E8b=X6Q.o5B(3,5617);X6Q.b$0(12);var w89=X6Q.o5B(16,73462,4898);X6Q.P3q(14);var s3L=X6Q.j1j(1,2655,17);P_O=R05.fontStyle + (934.72 !== 441.86?\" \":b0U) + R05.fontWeight + \" \" + R05.fontSize + (E8b >= (815.7,471.19)?\" \":(811.13,w89) == 294.67?+\"5.87e+3\":s3L) + R05.fontFamily;if(P_O.indexOf(\"undefined\") == -1){e8Y.font=P_O;}else {this.styles[c2r]=null;X6Q.b$0(7);console.log(X6Q.j1j(c2r,\"bad css style for class \"));}};X9D.ChartEngine.prototype.canvasColor=function(y4E,r6o){var X8F,V$8,X5q,G8J;X8F=\"undef\";X8F+=\"in\";X8F+=\"ed\";if(!r6o){r6o=this.chart.context;}V$8=this.canvasStyle(y4E);if(!V$8){return;}X5q=V$8.color;if(!X5q){X5q=this.defaultColor;}r6o.globalAlpha=1;r6o.fillStyle=X5q;r6o.strokeStyle=X5q;G8J=V$8.opacity;if(typeof G8J != X8F){r6o.globalAlpha=G8J;}};X9D.ChartEngine.prototype.getCanvasFontSize=function(R_a){var w5y,k8D;w5y=this.canvasStyle(R_a);k8D=w5y.fontSize;if(!k8D){k8D=\"12\";}return parseInt(X9D.stripPX(k8D),10);};X9D.ChartEngine.prototype.getCanvasColor=function(L7W){var Q6Z;Q6Z=this.canvasStyle(L7W);X6Q.a3b();return Q6Z.color;};X9D.ChartEngine.prototype.getDefaultColor=function(){var r8l,r2Z,m6z,u9V,F_c,v_7;this.defaultColor=\"#000000\";X6Q.V8b();r8l=null;r2Z=this.chart.container;while(!r8l || X9D.isTransparent(r8l)){m6z=getComputedStyle(r2Z);if(!m6z){return;}r8l=m6z.backgroundColor;if(X9D.isTransparent(r8l)){r8l=\"transparent\";}r2Z=r2Z.parentNode;if(!r2Z || !r2Z.tagName)break;}if(r8l){if(r8l == \"transparent\"){r8l=\"#FFFFFF\";}this.containerColor=r8l;if(!X9D.isTransparent(r8l)){u9V=\"#FFFFF\";u9V+=\"F\";F_c=X9D.hsv(r8l);v_7=F_c[2];if(v_7 > 0.65){this.defaultColor=\"#000000\";}else {this.defaultColor=u9V;}}else {this.defaultColor=\"#000000\";}}else {this.containerColor=\"#FFFFFF\";}};X9D.ChartEngine.prototype.emojify=function(q5a){var G20,M4W,z_0,d6w,x7P,J7O,V1c;if(!q5a){return \"\";}G20=[];for(var U$f=0;U$f < q5a.length;U$f++){if(q5a[U$f] === ((\"108.4\" * 1,601.58) > 7109?(731.06,\"1780\" << 32) !== (9450,698.59)?(7.56e+3,6.75e+3):(0x2145,+\"0x1a92\"):\":\")){G20.push(U$f);}}for(var S$l=0;S$l < G20.length - 1;S$l++){M4W=G20[S$l];X6Q.b$0(7);z_0=G20[X6Q.j1j(1,S$l)];X6Q.P3q(7);d6w=q5a.substring(X6Q.j1j(1,M4W),z_0);x7P=q5a.substring(G20[S$l + 2] + 1,G20[S$l + 3]);if(d6w){J7O=\"ski\";J7O+=\"n-\";J7O+=\"tone-\";V1c=this.canvasStyle(\"emoji_\" + d6w,\":before\").content;if(V1c === \"none\")continue;V1c=V1c.substring(1,V1c.length - +\"1\");if(G20[S$l + 1] + 1 === G20[S$l + 2] && x7P.indexOf(J7O) === 0 && V1c.charCodeAt(V1c.length - 1) === +\"65039\"){V1c=V1c.substring(0,V1c.length - 1);}q5a=this.emojify(q5a.substring(\"0\" ^ 0,M4W) + V1c + q5a.substring(z_0 + 1,q5a.length));break;}}return q5a;};};b6=K3m=>{var G95,E$E;G95=K3m.CIQ;G95.ChartEngine.XAxis=function(Z_T){for(var C4l in Z_T){this[C4l]=Z_T[C4l];}};G95.ChartEngine.XAxis.setPropertiesForInterval={year:(S8Z,D1V,Z1i,v8U)=>{x2w9K.V8b();S8Z.level=Number(S8Z.raw) % 5 === 0?\"0\" * 1:1;},month:(V5i,R$c,l3c,V2S)=>{var v57,B$P,N84,U2G,R4m,m_R,n9I;v57=Number(V5i.raw);B$P=R$c.DT;N84=B$P.getFullYear();if(v57 === 0){V5i.level=N84 % 5 === 0?0:1;}else {V5i.level=v57 % 3 === +\"0\"?\"2\" << 64:+\"3\";}U2G=-1992242496;R4m=380774526;m_R=2;for(var A7i=+\"1\";x2w9K.n$o(A7i.toString(),A7i.toString().length,17786) !== U2G;A7i++){V5i.text=G95.monthAsDisplay(v57,!!({}),V2S);m_R+=2;}if(x2w9K.P8Y(m_R.toString(),m_R.toString().length,20125) !== R4m){V5i.text=G95.monthAsDisplay(v57,![],V2S);}V5i.text=G95.monthAsDisplay(v57,!1,V2S);if(V5i.grid === \"boundary\"){n9I=\" \";n9I+=\"'\";V5i.boundaryOnlyText=v57?V5i.text:N84.toString();V5i.text+=n9I + N84.toString().substring(+\"2\");if(!v57){V5i.alwaysAsBoundary=!!({});}}},week:null,day:(d7n,s3n,d98,n1l)=>{var d1K=x2w9K;var p_O,x7q,G8S,F6Q,X1C,a58,E$a,e_J,u8O,l_h;p_O=\"b\";p_O+=\"ou\";p_O+=\"nda\";p_O+=\"ry\";x7q=s3n.DT;G8S=x7q.getDay();F6Q=x7q.getDate();X1C=x7q.getMonth();a58=x7q.getFullYear();if(d7n.grid === p_O){if(!d7n.priorDT || d7n.priorDT.getMonth() !== X1C){E$a=G95.monthAsDisplay(X1C,!\"1\",n1l);e_J=1517487055;u8O=-264332592;l_h=2;for(var h1p=1;d1K.n$o(h1p.toString(),h1p.toString().length,76741) !== e_J;h1p++){d1K.b$0(122);d7n.text=d1K.o5B(E$a,a58,100,\" '\");l_h+=2;}if(d1K.P8Y(l_h.toString(),l_h.toString().length,47662) !== u8O){d1K.P3q(123);d7n.text=d1K.j1j(\"\",a58,661,E$a);}d7n.boundaryOnlyText=X1C?E$a:a58.toString();d7n.alwaysAsBoundary=!!({});d7n.level=X1C?X1C % 3 === 0?+\"1\":2:0;return;}if(n1l.internationalizer){d7n.text=n1l.internationalizer.monthDay.format(x7q);}else {d1K.b$0(124);d7n.text=d1K.o5B(F6Q,(1795,\"471.99\" - 0) !== 8200?(7052,2590) < (\"7018\" ^ 0)?\"/\":(6387,8360) <= (3198,9187)?(591.72,![]):(\"A\",\"1.17e+3\" | 0):563.17,0,\"1\",X1C);}}if(d7n.priorDT && d7n.priorDT.getDay() > G8S || !d98 && G8S === 0 || d98 && d98.isFirstMarketDayOfWeek(x7q)){d7n.level=4;}else if(G8S > 0){d7n.level=6;}else {d7n.level=7;}},minute:(e0M,k6h,l2m,x69)=>{var R_0=x2w9K;var N4N,L0V,z2P,y9r,f3E,L9u,E_q,q$I;N4N=\"b\";N4N+=\"ound\";N4N+=\"ar\";N4N+=\"y\";L0V=k6h.DT;z2P=L0V.getDate();y9r=L0V.getMonth();f3E=L0V.getFullYear();if(e0M.grid === N4N){if(!e0M.priorDT || e0M.priorDT.getMonth() !== y9r){L9u=\" \";L9u+=\"'\";R_0.b$0(67);var k7d=R_0.o5B(18,156,8,400,8);e0M.text=G95.monthAsDisplay(y9r,!({}),x69) + L9u + f3E % k7d;e0M.alwaysAsBoundary=!!({});R_0.P3q(41);e0M.level=R_0.o5B(\"0\",0);return;}if(!e0M.priorDT || e0M.priorDT.getDate() !== z2P){R_0.P3q(125);var I6g=R_0.o5B(1,35,16,11,5);R_0.b$0(126);var W5R=R_0.j1j(151020,8,1208166,6,8389);R_0.b$0(12);var O6m=R_0.j1j(20,73693,4094);R_0.P3q(45);var o9l=R_0.o5B(8349,8357,8357);R_0.b$0(95);var a7L=R_0.o5B(43,621,11,11);R_0.P3q(9);var W0j=R_0.j1j(2436340,9057,18,15);R_0.b$0(69);var T2W=R_0.o5B(15,5,4591,18370);e0M.text=y9r + I6g + (W5R < 536.49?O6m:(+\"3529\",o9l) != (a7L,573.06)?\"/\":(W0j,T2W)) + L0V.getDate();e0M.alwaysAsBoundary=!!1;e0M.level=1;return;}}E_q=Number(e0M.raw) + (e0M.marketOpenOffset || 0);q$I=[720,360,120,60,30,15,5];e0M.level=q$I.length;for(var t_K=0;t_K < q$I.length;t_K++){if(E_q % q$I[t_K] === 0){e0M.level=t_K;break;}}e0M.text=G95.timeAsDisplay(k6h.DT,x69,G95.MINUTE);if(e0M.grid === \"boundary\" && E_q === \"0\" * 1){e0M.alwaysAsBoundary=!!({});if(x69.internationalizer){e0M.text=x69.internationalizer.monthDay.format(L0V);}else {R_0.P3q(95);e0M.text=R_0.o5B(y9r,z2P,\"/\",1);}}},second:(Q5Q,q_N,F7_,Z$7)=>{var w5S=x2w9K;var g_S,m$_;g_S=[30,15,5];Q5Q.level=g_S.length;for(var G75=+\"0\";G75 < g_S.length;G75++){if(Number(Q5Q.raw) % g_S[G75] === 0){Q5Q.level=G75;break;}}w5S.P3q(45);var P4L=w5S.j1j(3309,3325,3325);w5S.b$0(34);var h01=w5S.o5B(259,4409,2);Q5Q.text=Q5Q.raw + ((+\"6743\",+\"949.68\") === (P4L,216.57)?h01:\"s\");if(Q5Q.grid === \"boundary\" && Q5Q.raw == 0){m$_=q_N.DT;Q5Q.alwaysAsBoundary=!0;if(!m$_.getHours()){if(Z$7.internationalizer){Q5Q.text=Z$7.internationalizer.monthDay.format(m$_);}else {w5S.b$0(3);var t58=w5S.j1j(7,6);w5S.b$0(20);var N2G=w5S.o5B(6055,403,18);w5S.b$0(3);var J7D=w5S.o5B(39404,29553);Q5Q.text=m$_.getMonth() + t58 + ((559.67,N2G) != 802.14?\"/\":J7D) + m$_.getDate();}}else {Q5Q.text=G95.timeAsDisplay(m$_,Z$7,G95.MINUTE);}}},millisecond:(f$K,j1M,P8s,s8P)=>{var m_$;m_$=[250,50,10];f$K.level=m_$.length;for(var v0Z=0;v0Z < m_$.length;v0Z++){if(Number(f$K.raw) % m_$[v0Z] === 0){f$K.level=v0Z;break;}}f$K.text=f$K.raw + \"ms\";},tick:(Y2s,A2Q,Q1A,p3L)=>{x2w9K.a3b();Y2s.text=G95.timeAsDisplay(A2Q.DT,p3L,G95.MILLISECOND);}};G95.ChartEngine.XAxis.lineBaseLevel=500;G95.extend(G95.ChartEngine.XAxis.prototype,{enableTitle:!!\"\",title:\"Date/Time\",formatter:null,adjustTimeZone:!!({}),displayBorder:!![],displayGridLines:!!\"1\",fitLeftToRight:null,fitTight:null,maxLevelToDisplay:+\"0\",noDraw:null,minimumLabelWidth:50,futureTicks:!![],futureTicksInterval:+\"1\"},!!({}));E$E=G95.ChartEngine.prototype.xaxisHeight;Object.defineProperty(G95.ChartEngine.prototype,\"xaxisHeight\",{get:function(){var W1F;var {xAxis:h8T}=this.chart || ({});if(!h8T){return this._height;}x2w9K.a3b();W1F=h8T.fontHeight && h8T.enableTitle?h8T.fontHeight + 3:0;return this._height + W1F;},set:function(u79){x2w9K.V8b();this._height=u79;}});G95.ChartEngine.prototype.xaxisHeight=E$E;G95.ChartEngine.XAxisLabel=function(r9m){var x7z;x7z=\"undef\";x7z+=\"ined\";if(typeof r9m === \"number\"){this.hz=r9m;x2w9K.P3q(41);this.grid=arguments[x2w9K.o5B(\"1\",0)];this.text=arguments[+\"2\"];}else {Object.assign(this,r9m);}if(!this.level && this.level !== 0){this.level=this.grid === \"boundary\"?0:G95.ChartEngine.XAxis.lineBaseLevel;}x2w9K.V8b();if(typeof this.text === x7z){this.text=this.raw;}this.text=this.text.toString();};G95.ChartEngine.prototype.createXAxis=function(Q5x){var t4V,W_L;if(Q5x.dataSegment.length <= \"0\" << 64){return null;}if(Q5x.xAxis.noDraw){return null;}t4V=[Q5x];W_L=this.runPrepend(\"createXAxis\",t4V);if(W_L){return W_L;}if(this.mainSeriesRenderer.createXAxis){W_L=this.mainSeriesRenderer.createXAxis(Q5x);}else if(this.createTickXAxisWithDates && Q5x.xAxis.fitLeftToRight){W_L=this.createTickXAxisWithDates(Q5x);}else {W_L=this.createSpacedDateXAxis(Q5x);}this.headsUpHR();this.runAppend(\"createXAxis\",t4V);return W_L;};G95.ChartEngine.prototype.createXAxisLabel=function(i8W){var d2L=x2w9K;var a6U,S91,C_W,o_p,d6g,X4N,M15,a$T;if(arguments[0] instanceof G95.ChartEngine.Panel){i8W={panel:arguments[0],txt:arguments[1],x:arguments[2],backgroundColor:arguments[+\"3\"],color:arguments[+\"4\"],pointed:arguments[5],padding:arguments[\"6\" - 0]};}var {panel:L4n, txt:I1b, x:n61, backgroundColor:e4S, color:Z7u, pointed:i0A}=i8W;a6U=i8W.padding === 0?0:i8W.padding || 2;S91=this.chart.context;C_W=\"stx-float-date\";o_p=this.getCanvasFontSize(C_W) + a6U * +\"2\";S91.save();this.canvasFont(C_W,S91);try{d2L.P3q(42);var J8w=d2L.o5B(0,3,20,62);d6g=S91.measureText(I1b).width + a6U * J8w;}catch(j5I){d6g=0;}X4N=L4n.yAxis.bottom;if(n61 + d6g / 2 < L4n.left || n61 - d6g / (\"2\" | 2) > L4n.right){S91.restore();return;}if(i0A){X4N+=o_p;}else {if(n61 + d6g / +\"2\" > L4n.right){d2L.b$0(7);var z$F=d2L.j1j(2,0);n61=L4n.right - d6g / z$F;}if(n61 - d6g / 2 < L4n.left){d2L.P3q(42);var z$P=d2L.o5B(0,10,9,92);n61=L4n.left + d6g / z$P;}}if(L4n.bottom === L4n.yAxis.bottom){X4N=L4n.bottom - o_p;}S91.fillStyle=e4S;G95.roundRect({ctx:S91,x:n61 - d6g / 2,top:X4N,width:d6g,height:o_p,radius:3,fill:!!({})});d2L.b$0(22);M15=d2L.j1j(o_p,2);S91.beginPath();if(i0A){d2L.P3q(3);S91.moveTo(d2L.j1j(n61,M15),X4N);d2L.P3q(14);S91.quadraticCurveTo(d2L.o5B(3,n61,M15),X4N,n61,d2L.o5B(X4N,o_p,d2L.P3q(3)));d2L.b$0(3);S91.moveTo(n61,d2L.j1j(X4N,o_p));d2L.b$0(34);S91.quadraticCurveTo(d2L.j1j(n61,3,M15),X4N,d2L.o5B(M15,n61,d2L.P3q(7)),X4N);d2L.P3q(3);S91.lineTo(d2L.o5B(n61,M15),X4N);S91.fill();}S91.textAlign=\"center\";S91.textBaseline=\"middle\";S91.fillStyle=Z7u?Z7u:G95.chooseForegroundColor(e4S);if(S91.fillStyle == e4S){a$T=\"#\";a$T+=\"FFFFFF\";if(e4S.toUpperCase() == a$T){S91.fillStyle=\"#000000\";}else {S91.fillStyle=\"#FFFFFF\";}}d2L.P3q(3);S91.fillText(I1b,d2L.o5B(n61,1),d2L.j1j(o_p,X4N,2,1,d2L.P3q(127)));S91.restore();};G95.ChartEngine.prototype.setXAxisTitle=function({enabled:c_f, title:E1o} = {}){if(c_f !== undefined){this.chart.xAxis.enableTitle=c_f;}if(E1o){this.chart.xAxis.title=E1o;}else if(E1o === null){delete this.chart.xAxis.title;}this.adjustPanelPositions();this.draw();};};T6=Y6f=>{var P9b=x2w9K;var z6n;z6n=Y6f.CIQ;z6n.createLabel=function(I_o){var j2H;j2H=\"l\";j2H+=\"e\";j2H+=\"ft\";I_o.ctx.textBaseline=\"middle\";I_o.ctx.fillStyle=I_o.color?I_o.color:z6n.chooseForegroundColor(I_o.backgroundColor);if(I_o.ctx.fillStyle === I_o.backgroundColor){if(I_o.backgroundColor.toUpperCase() == \"#FFFFFF\"){I_o.ctx.fillStyle=\"#000000\";}else {I_o.ctx.fillStyle=\"#FFFFFF\";}}I_o.ctx.fillText(I_o.txt,I_o.x + I_o.margin.left,I_o.y + I_o.margin.top);I_o.ctx.textAlign=j2H;};z6n.roundRectArrow=function(V$G){P9b.a3b();z6n.roundRect(V$G,\"arrow\");};z6n.semiRoundRect=function(r2G){var q$B;q$B=\"fl\";P9b.a3b();q$B+=\"ush\";z6n.roundRect(r2G,q$B);};z6n.rect=function(y9y){P9b.a3b();y9y.radius=0;z6n.roundRect(y9y);};z6n.noop=function(O2e){O2e.color=O2e.backgroundColor;z6n.createLabel(O2e);};z6n.tickedRect=function(Y0_){var Z5Y;P9b.a3b();z6n.rect(Y0_);P9b.b$0(45);var c2H=P9b.j1j(1,13,13);Z5Y=Math.round(Y0_.top + Y0_.height / c2H) + 0.5;Y0_.ctx.beginPath();Y0_.ctx.moveTo(Y0_.x - 2,Z5Y);Y0_.ctx.lineTo(Y0_.x,Z5Y);Y0_.ctx.stroke();Y0_.ctx.closePath();};z6n.roundRect=function(H6N,o6L){var w3f,j9E,c9Y,I1g,R8j,U2l,u8k,b$f,i9Y,C6J,M8f,K3M,B7e,b6d,U_H,V6F,h1Q;w3f=\"fl\";w3f+=\"ush\";if(arguments.length === 9){H6N={ctx:arguments[0],x:arguments[1],top:arguments[2],width:arguments[3],height:arguments[4],radius:arguments[5],fill:arguments[6],stroke:arguments[7],edge:arguments[8]};}j9E=H6N.stroke;c9Y=H6N.x;I1g=H6N.top;R8j=H6N.width;U2l=H6N.height;u8k=H6N.radius;b$f=H6N.fill;P9b.a3b();i9Y=H6N.ctx;if(typeof j9E == \"undefined\"){j9E=!0;}if(typeof u8k === \"undefined\"){u8k=5;if(R8j < 0){u8k=-+\"5\";}}C6J=R8j < 0?u8k * -1:u8k;if(u8k && !o6L){P9b.b$0(3);c9Y=P9b.o5B(c9Y,1);}P9b.P3q(7);M8f=P9b.o5B(u8k,c9Y);P9b.P3q(7);K3M=P9b.o5B(R8j,c9Y);P9b.P3q(7);B7e=P9b.o5B(C6J,I1g);P9b.b$0(7);b6d=P9b.j1j(U2l,I1g);P9b.P3q(3);U_H=P9b.o5B(K3M,u8k);P9b.b$0(3);V6F=P9b.o5B(b6d,C6J);i9Y.beginPath();i9Y.moveTo(M8f,I1g);i9Y.lineTo(U_H,I1g);i9Y.quadraticCurveTo(K3M,I1g,K3M,B7e);i9Y.lineTo(K3M,V6F);i9Y.quadraticCurveTo(K3M,b6d,U_H,b6d);i9Y.lineTo(M8f,b6d);if(o6L == w3f){i9Y.lineTo(c9Y,b6d);i9Y.lineTo(c9Y,I1g);}else if(o6L == \"arrow\"){P9b.b$0(3);i9Y.quadraticCurveTo(c9Y,b6d,P9b.j1j(c9Y,u8k),V6F);h1Q=R8j < 0?1:-1;P9b.b$0(128);i9Y.lineTo(P9b.j1j(h1Q,c9Y,2,U2l),P9b.j1j(2,I1g,U2l,P9b.P3q(31)));P9b.P3q(3);i9Y.lineTo(P9b.o5B(c9Y,u8k),B7e);i9Y.quadraticCurveTo(c9Y,I1g,M8f,I1g);}else {i9Y.quadraticCurveTo(c9Y,b6d,c9Y,V6F);i9Y.lineTo(c9Y,B7e);i9Y.quadraticCurveTo(c9Y,I1g,M8f,I1g);}i9Y.closePath();if(H6N.backgroundColor){i9Y.fillStyle=H6N.backgroundColor;}if(j9E){i9Y.stroke();}if(b$f){i9Y.fill();}if(H6N.txt){z6n.createLabel(H6N);}};z6n.ChartEngine.YAxis=function(a__){var t3h;t3h=\"n\";t3h+=\"o\";t3h+=\"n\";t3h+=\"e\";for(var n4l in a__)if(a__.hasOwnProperty(n4l)){this[n4l]=a__[n4l];}if(!this.name){this.name=z6n.uniqueID();}if(this.position == t3h){this.width=0;}};z6n.extend(z6n.ChartEngine.YAxis.prototype,{name:null,title:null,high:null,enableTitle:!({}),low:null,shadow:null,logHigh:null,logLow:null,logShadow:null,allowSharing:!!({}),multiplier:null,bottom:null,top:null,height:null,left:null,renderers:[],studies:[],lowValue:null,highValue:null,semiLog:null,priceTick:null,printDecimalPlaces:null,yAxisPlotter:null,highlight:null},!!({}));P9b.P3q(24);z6n.ChartEngine.YAxis.defaultShadowBreaks=[[1000,2],[5,P9b.o5B(\"4\",1)],[P9b.j1j(\"0.001\",1),8]];z6n.ChartEngine.YAxis.smallChartShadowBreaks=[[10,2],[1,4]];z6n.ChartEngine.YAxis.prototype.maxDecimalPlaces=null;z6n.ChartEngine.YAxis.prototype.max=null;z6n.ChartEngine.YAxis.prototype.min=null;z6n.ChartEngine.YAxis.prototype.decimalPlaces=null;z6n.ChartEngine.YAxis.prototype.idealTickSizePixels=null;z6n.ChartEngine.YAxis.prototype.minimumPriceTick=null;z6n.ChartEngine.YAxis.prototype.fractional=null;z6n.ChartEngine.YAxis.prototype.displayBorder=!!({});z6n.ChartEngine.YAxis.prototype.displayGridLines=!!\"1\";z6n.ChartEngine.YAxis.prototype.noDraw=null;z6n.ChartEngine.YAxis.prototype.drawCurrentPriceLabel=!![];z6n.ChartEngine.YAxis.prototype.drawSeriesPriceLabels=!\"\";z6n.ChartEngine.YAxis.prototype.drawPriceLabels=!\"\";z6n.ChartEngine.YAxis.prototype.goldenRatioYAxis=!!1;z6n.ChartEngine.YAxis.prototype.yaxisLabelStyle=null;z6n.ChartEngine.YAxis.prototype.justifyRight=null;z6n.ChartEngine.YAxis.prototype.flipped=![];z6n.ChartEngine.YAxis.prototype.textBackground=!!0;z6n.ChartEngine.YAxis.prototype.priceFormatter=null;P9b.P3q(41);z6n.ChartEngine.YAxis.prototype.bottomOffset=P9b.o5B(\"0\",0);z6n.ChartEngine.YAxis.prototype.topOffset=+\"0\";z6n.ChartEngine.YAxis.prototype.initialMarginTop=10;z6n.ChartEngine.YAxis.prototype.initialMarginBottom=10;z6n.ChartEngine.YAxis.prototype.zoom=0;z6n.ChartEngine.YAxis.prototype.scroll=0;z6n.ChartEngine.YAxis.prototype.heightFactor=1;Object.defineProperty(z6n.ChartEngine.YAxis.prototype,\"width\",{configurable:!!1,enumerable:!!({}),get:function(){if(this.position === \"none\"){return 0;}return Math.ceil((this._dynamicWidth || this._width) + (this.getTitleEnabled && this.getTitleEnabled() && this.fontHeight?this.fontHeight + 4:0));},set:function(l2n){P9b.V8b();this._width=l2n;if(this._dynamicWidth < l2n){this._dynamicWidth=NaN;}}});z6n.ChartEngine.YAxis.prototype.width=1;z6n.ChartEngine.YAxis.prototype.smallScreenWidth=1;z6n.ChartEngine.YAxis.prototype.textStyle=null;z6n.ChartEngine.YAxis.prototype.position=null;z6n.ChartEngine.YAxis.prototype.pretty=!0;z6n.ChartEngine.YAxis.prototype.increments=[1,2.5,5];z6n.ChartEngine.YAxis.prototype.prettySemiLog=!\"\";z6n.ChartEngine.YAxis.prototype.shadowBreaks=z6n.ChartEngine.YAxis.defaultShadowBreaks;z6n.ChartEngine.YAxis.prototype.allowZoom=!!({});z6n.ChartEngine.YAxis.prototype.getYAxis=function(j4s){return this;};z6n.ChartEngine.YAxis.prototype.isShared=function(z1F,q2o){var i30,T55;i30=this.studies.length;T55=this.renderers.length;if(i30 > 1){return !!({});}if(T55 && i30){return !0;}if(!T55){return ![];}if(T55 > 1 && q2o){return !![];}for(var L68=T55 - 1;L68 >= 0;L68--){if(z1F.chart.seriesRenderers[this.renderers[L68]].params.dependentOf){T55--;}}P9b.a3b();P9b.b$0(129);return P9b.j1j(1,T55);};z6n.ChartEngine.YAxis.prototype.setBackground=function(g5A,P_e){var y2r;P9b.V8b();if(!P_e){P_e={};}if(!P_e.color){P_e.color=\"auto\";}y2r=[[this.left,this.top],[this.left,this.bottom],[this.left + this.width,this.bottom],[this.left + this.width,this.top]];z6n.fillArea(g5A,y2r,{color:P_e.color,opacity:P_e.opacity});};z6n.ChartEngine.YAxis.prototype.setBreakpointWidth=function(i4z){var L4k;if(!i4z){return;}P9b.V8b();var {width:Q5j, smallScreenWidth:u40}=z6n.ChartEngine.YAxis.prototype;P9b.b$0(64);L4k=P9b.j1j(\"break-sm\",i4z);this.width=L4k?u40:Q5j;};z6n.ChartEngine.YAxis.prototype.onAttach=function(m_I){var C4_,j2q,k70,j22,N78,M3E;C4_=\"yaxi\";C4_+=\"sMenu\";P9b.a3b();j2q=\"y-\";j2q+=\"axis me\";j2q+=\"nu\";k70=\"d\";k70+=\"i\";k70+=\"v\";j22=null;if(!z6n.UI || !m_I.uiContext){return;}N78=document.createElement(k70);N78.innerHTML=`
\n\t\t\t
${m_I.translateIf(j2q)}
\n\t\t
`;j22=N78.firstChild;P9b.P3q(7);j22.style.top=`${this.top}${P9b.j1j(\"x\",\"p\")}`;P9b.b$0(91);var d5Z=P9b.o5B(27,2,18,9);P9b.P3q(7);j22.style.left=`${this.left + this.width - d5Z}${P9b.o5B(\"x\",\"p\")}`;j22.currentYAxis=this;j22.classList.add(C4_);this.showContextMenu=(H3n,b1g)=>{var f_T,z5q,Z1R,g5p,r2_;f_T=\"yaxi\";f_T+=\"s\";f_T+=\"Con\";f_T+=\"text\";z5q=-305281563;Z1R=-+\"974123758\";g5p=2;for(var N4i=+\"1\";P9b.P8Y(N4i.toString(),N4i.toString().length,13503) !== z5q;N4i++){var {channelWrite:j7f}=z6n.UI.BaseComponent.prototype;g5p+=2;}if(P9b.n$o(g5p.toString(),g5p.toString().length,1159) !== Z1R){var {channelWrite:j7f}=z6n.UI.BaseComponent.prototype;}var {channelWrite:j7f}=z6n.UI.BaseComponent.prototype;r2_=(m_I.uiContext.config.channels || ({})).dialog || \"channel.dialog\";P9b.V8b();m_I.currentYAxis=this;j7f(r2_,{type:f_T,params:{stx:m_I,context:m_I.uiContext,x:H3n,y:b1g}},m_I);};this.showMenuToggle=(O6B = !!({}))=>{j22.style.top=`${this.top}px`;P9b.P3q(12);P9b.V8b();var L9T=P9b.o5B(7,29,7);P9b.b$0(7);j22.style.left=`${this.left + this.width - L9T}${P9b.o5B(\"x\",\"p\")}`;j22.classList.toggle(\"ciq-visible\",O6B);m_I.currentYAxis=this;};this.removeMenu=()=>{j22.remove();};M3E=()=>{return this.showContextMenu(m_I.left + this.left + this.width - 20,m_I.top + this.top + j22.clientHeight + 6);};j22.addEventListener(\"stxtap\",M3E);z6n.safeClickTouch(j22,M3E);m_I.chart.container.appendChild(j22);if(m_I.uiContext && m_I.uiContext.config && m_I.uiContext.config.channels){z6n.UI.BaseComponent.prototype.channelWrite(m_I.uiContext.config.channels.keyboardNavigation || \"channel.keyboardNavigation\",{action:\"registerElements\"},m_I);}};z6n.ChartEngine.YAxis.prototype.onRemove=function(r2Y){P9b.a3b();if(this.removeMenu){this.removeMenu();}};z6n.ChartEngine.prototype.getLabelOffsetInPixels=function(E2o,h5f){var h$O,C38,W22;h$O=!this.mainSeriesRenderer.standaloneBars;P9b.V8b();if(this.yaxisLabelStyle == \"roundRectArrow\" && !(h$O && this.extendLastTick && E2o.yaxisPaddingRight !== \"0\" >> 0)){C38=3;P9b.b$0(130);var P2P=P9b.j1j(16,13,4,163,38);W22=this.getCanvasFontSize(\"stx_yaxis\") + C38 * P2P;P9b.b$0(24);return P9b.j1j(W22,0.66);}P9b.b$0(44);return P9b.j1j(0,\"0\");};z6n.ChartEngine.prototype.flipChart=function(a9F){if(this.layout.flipped == a9F){return;}this.layout.flipped=a9F;this.chart.yAxis.flipped=a9F;this.changeOccurred(\"layout\");this.draw();};z6n.ChartEngine.prototype.calculateYAxisMargins=function(y07){var P6O,Z11,r_a;P6O=this.chart;Z11=P6O.panel.yaxisLHS.concat(P6O.panel.yaxisRHS).includes(y07);r_a=Z11?P6O.yaxisMarginMultiplier:1;if(y07.heightFactor){P9b.b$0(12);var K6B=P9b.o5B(6,77,13);y07.zoom=y07.height * (K6B - y07.heightFactor);}y07.zoom+=(y07.initialMarginTop + y07.initialMarginBottom) * r_a;P9b.b$0(7);var a8k=P9b.j1j(2,0);y07.scroll=(y07.initialMarginTop - y07.initialMarginBottom) * r_a / a8k;if(y07.zoom >= y07.height){y07.zoom=0;y07.scroll=0;}};z6n.ChartEngine.prototype.resetDynamicYAxis=function(P09){var o$d,p5c,K56;if(this.runPrepend(\"resetDynamicYAxis\",arguments)){return;}o$d=!!\"\";for(var Z$A in this.panels){p5c=this.panels[Z$A];if(P09 && P09.chartName && p5c.chart.name !== P09.chartName)continue;if(!p5c.yaxisLHS || !p5c.yaxisRHS)continue;K56=p5c.yaxisLHS.concat(p5c.yaxisRHS);for(var x5X=0;x5X < K56.length;x5X++){if(K56[x5X]._dynamicWidth){K56[x5X]._dynamicWidth=NaN;if(K56[x5X].hasOwnProperty(\"_width\")){delete K56[x5X]._width;}o$d=!0;}}}if(o$d && (!P09 || !P09.noRecalculate)){this.calculateYAxisPositions();}this.runAppend(\"resetDynamicYAxis\",arguments);};z6n.ChartEngine.prototype.notifyBreakpoint=function(I8x){var p8W,z2B,M_H;if(this.chart.breakpoint === I8x){return;}if(![\"break-lg\",\"break-md\",\"break-sm\"].includes(I8x)){return;}var {chart:b76}=this;function m1B(q0w,p_R){var w0l,F6H,Q5B,I$Q,m5y,E9y,h8t;w0l=z6n.getFromNS(q0w.linkedChartEngine || q0w,\"uiContext.topNode.multiChartContainer\");if(w0l){F6H=-1303364330;Q5B=-1534380443;I$Q=+\"2\";for(var U6a=+\"1\";P9b.n$o(U6a.toString(),U6a.toString().length,26590) !== F6H;U6a++){m5y=w0l.styles[p_R] && ({});w0l.styles[p_R]=q0w.styles=m5y;I$Q+=2;}if(P9b.n$o(I$Q.toString(),I$Q.toString().length,12219) !== Q5B){m5y=w0l.styles[p_R] || ({});w0l.styles[p_R]=q0w.styles=m5y;}m5y=w0l.styles[p_R] || ({});w0l.styles[p_R]=q0w.styles=m5y;E9y=Object.keys(q0w.styles).length;if(E9y){q0w.defaultColor=\"\";return;}}h8t=z6n.ThemeHelper && new z6n.ThemeHelper({stx:q0w});P9b.V8b();q0w.clearStyles();if(h8t){h8t.update(q0w);}}var {dynamicYAxis:X9G}=b76;m1B(this,I8x);b76.breakpoint=I8x;for(var q9f in this.panels){p8W=this.panels[q9f];z2B=p8W.yaxisRHS.concat(p8W.yaxisLHS);for(var K_x=0;K_x < z2B.length;K_x++){M_H=z2B[K_x];M_H.setBreakpointWidth(I8x);}}if(X9G){this.resetDynamicYAxis({chartName:b76.name});}};z6n.ChartEngine.prototype.adjustYAxisHeightOffset=function(j2m,n7O){var G3V,v9m,k6b;G3V=n7O.topOffset;v9m=n7O.bottomOffset;if(G3V + v9m > j2m.height){console.log(\"The sum of yAxis.topOffset and yAxis.bottomOffset cannot be greater than the panel height. Both values will be reset to 0.\");n7O.bottomOffset=+\"0\";n7O.topOffset=0;}if(!this.xaxisHeight && this.xaxisHeight !== 0){P9b.b$0(3);var v$z=P9b.j1j(60,56);this.xaxisHeight=this.getCanvasFontSize(\"stx_xaxis\") + v$z;if(this.chart.xAxis.displayBorder || this.axisBorders){this.xaxisHeight+=3;}}k6b=this.xAxisAsFooter && j2m.bottom > this.chart.canvasHeight - this.xaxisHeight || !this.xAxisAsFooter && j2m == this.chart.panel;if(k6b){v9m+=this.xaxisHeight;}n7O.top=j2m.top + G3V;n7O.bottom=j2m.bottom - v9m;};z6n.ChartEngine.prototype.plotYAxisGrid=function(q1v){var I56,D2e,r8G,W0v;I56=\"pl\";I56+=\"o\";I56+=\"tYAxi\";I56+=\"sGrid\";if(this.runPrepend(I56,arguments)){return;}D2e=this.getBackgroundCanvas().context;r8G=q1v.yAxis;if(r8G.yAxisPlotter){W0v=\"gr\";W0v+=\"id\";r8G.yAxisPlotter.draw(D2e,W0v);}P9b.V8b();this.runAppend(\"plotYAxisGrid\",arguments);};z6n.ChartEngine.prototype.plotYAxisText=function(f7F){var P4D,k5N,f9T,U_z,c4_;P4D=\"al\";P4D+=\"p\";P4D+=\"ha\";P4D+=\"betic\";k5N=\"l\";k5N+=\"e\";k5N+=\"f\";k5N+=\"t\";if(this.runPrepend(\"plotYAxisText\",arguments)){return;}f9T=this.getBackgroundCanvas().context;this.canvasFont(\"stx_yaxis\",f9T);this.canvasColor(\"stx_yaxis\",f9T);f9T.textBaseline=\"middle\";U_z=f7F.yaxisLHS;for(c4_=0;c4_ < U_z.length;c4_++){f9T.textAlign=\"right\";n_L(U_z[c4_]);}U_z=f7F.yaxisRHS;function n_L(T1r){var g8f;g8f=\"r\";g8f+=\"i\";g8f+=\"g\";g8f+=\"ht\";if(!T1r.yAxisPlotter){return;}if(T1r.noDraw || !T1r.width){return;}if(T1r.justifyRight){f9T.textAlign=g8f;}else if(T1r.justifyRight === ![]){f9T.textAlign=\"left\";}T1r.yAxisPlotter.draw(f9T,\"text\");}for(c4_=0;c4_ < U_z.length;c4_++){f9T.textAlign=\"left\";n_L(U_z[c4_]);}f9T.textAlign=k5N;f9T.textBaseline=P4D;this.runAppend(\"plotYAxisText\",arguments);};z6n.ChartEngine.prototype.decimalPlacesFromPriceTick=function(Y8$,Q3p){if(Q3p){Y8$/=Q3p;}if(Y8$ < 0.0001){return 8;}if(Y8$ < 0.01){return +\"4\";}if(Y8$ < 0.1){return 2;}if(Y8$ < 1){return +\"1\";}return 0;};z6n.ChartEngine.prototype.formatYAxisPrice=function(N8f,v_J,z4g,T3o,L7n){var C4B,p_0,K9w,d5Y,X4J;if(N8f === null || typeof N8f == \"undefined\" || isNaN(N8f)){return \"\";}if(!v_J){v_J=this.chart.panel;}C4B=T3o?T3o:v_J.yAxis;P9b.V8b();p_0=z4g;if(!p_0 && p_0 !== 0){p_0=C4B.printDecimalPlaces;}if(!p_0 && p_0 !== 0){p_0=this.decimalPlacesFromPriceTick(C4B.priceTick,C4B.idealTickSizePixels);}K9w=C4B == v_J.chart.yAxis?\"20000\" * 1:1000;if(C4B.priceTick >= K9w){N8f=N8f.toFixed(p_0);return z6n.condenseInt(N8f);}d5Y=this.internationalizer;if(d5Y && L7n !== !({})){X4J=d5Y.priceFormatters.length;if(p_0 >= X4J){P9b.b$0(3);p_0=P9b.j1j(X4J,1);}N8f=d5Y.priceFormatters[p_0].format(N8f);}else {N8f=N8f.toFixed(p_0);}return N8f;};z6n.ChartEngine.prototype.calculateYAxisRange=function(I80,t9g,d1J,l80){var b6e,U4N,z55,B6r,Z$f,r$W,R7f,T6t,i$2,y8V;b6e=\"p\";b6e+=\"and\";b6e+=\"f\";if(d1J == Number.MAX_VALUE){d1J=0;l80=0;}U4N=I80.height;z55=null;B6r=null;this.adjustYAxisHeightOffset(I80,t9g);t9g.height=t9g.bottom - t9g.top;Z$f=Math.round(Math.abs(U4N / 5));if(t9g.zoom >= 0 && U4N - Math.abs(t9g.scroll) < Z$f){P9b.P3q(3);var x8i=P9b.j1j(0,1);P9b.b$0(121);var Q2J=P9b.o5B(1,46,19,7,4);t9g.scroll=(U4N - Z$f) * (t9g.scroll < 0?x8i:Q2J);}r$W=I80.chart.name === I80.name && I80.yAxis.name === t9g.name;R7f=d1J > 0 && (this.layout.semiLog || this.layout.chartScale == \"log\") && !I80.chart.isComparison && this.layout.aggregationType != b6e;if(d1J || d1J === 0){if(l80 - d1J === 0){T6t=Math.pow(10,-(d1J.toString() + \".\").split(\".\")[1].length);if(T6t == 1){T6t=100;}P9b.b$0(7);z55=P9b.j1j(T6t,d1J);P9b.b$0(3);B6r=P9b.j1j(d1J,T6t);}else {if(r$W && R7f && (l80 || l80 === 0)){i$2=Math.log(d1J) / Math.LN10;y8V=Math.log(l80) / Math.LN10;z55=Math.pow(10,y8V);B6r=Math.pow(10,i$2);}else {z55=l80;B6r=d1J;}}t9g.high=z55;t9g.low=B6r;}if(t9g.max || t9g.max === 0){t9g.high=t9g.max;}if(t9g.min || t9g.min === \"0\" >> 0){t9g.low=t9g.min;}P9b.a3b();t9g.shadow=t9g.high - t9g.low;if(r$W){if(t9g.semiLog != R7f){this.clearPixelCache();t9g.semiLog=R7f;}t9g.flipped=this.layout.flipped;}};z6n.ChartEngine.prototype.renderYAxis=function(e1s){var W5y,n_n,B3g,x44,y5y,t48,l_4,y2T,f0B,c5e,I9N,x9z;W5y=\"y\";W5y+=\"A\";W5y+=\"xi\";W5y+=\"s\";n_n=\"re\";n_n+=\"nderY\";n_n+=\"A\";n_n+=\"xis\";if(this.runPrepend(n_n,arguments)){return;}if(this.checkLogScale()){throw new Error(\"reboot draw\");}this.rendererAction(e1s,W5y);var {context:J4F}=this.getBackgroundCanvas(e1s);for(var U6d in this.panels){B3g=this.panels[U6d];if(B3g.chart != e1s)continue;x44=B3g.yaxisRHS.concat(B3g.yaxisLHS);for(y5y=0;y5y < x44.length;y5y++){l_4=\"Studies.doPostDr\";l_4+=\"awYAxis\";t48=x44[y5y];this.calculateYAxisRange(B3g,t48,t48.lowValue,t48.highValue);y2T=z6n.getFn(\"Studies.getYAxisParameters\",{})(this,t48);y2T.yAxis=t48;this.createYAxis(B3g,y2T);this.drawYAxis(B3g,y2T);z6n.getFn(l_4)(this,t48);}for(y5y=\"0\" << 0;y5y < x44.length;y5y++){t48=x44[y5y];if(t48.dropzone){f0B=\"stx-\";f0B+=\"subhold\";f0B+=\"er dropzone left\";c5e=this.canvasStyle(f0B);if(c5e){I9N=\"a\";I9N+=\"l\";I9N+=\"l\";J4F.save();J4F.strokeStyle=c5e.borderLeftColor;J4F.lineWidth=parseFloat(c5e.borderLeftWidth);J4F.beginPath();if(t48.dropzone == I9N){J4F.strokeRect(t48.left,t48.top,t48.width,t48.height);}else {x9z=t48.left + (t48.dropzone == \"left\"?\"0\" - 0:t48.width);J4F.moveTo(x9z,t48.top);J4F.lineTo(x9z,t48.top + t48.height);J4F.stroke();}J4F.restore();}}}if(this.displayDragOK){this.displayDragOK(!![]);}}this.runAppend(\"renderYAxis\",arguments);};z6n.ChartEngine.prototype.updateFloatHRLabel=function(P$J){var m4t,z9B,e$3,m18,Q3w,Z80,J81,c$5,b7D,C$z;if(!this.floatCanvas){return;}m4t=P$J.yaxisLHS.concat(P$J.yaxisRHS);z9B=this.crossYActualPos?this.crossYActualPos:this.cy;if(this.floatCanvas.isDirty){z6n.clearCanvas(this.floatCanvas,this);}if(this.controls.crossX && this.controls.crossX.style.display == \"none\"){return;}if(this.controls.crossY){e$3=\"ro\";e$3+=\"un\";e$3+=\"dRect\";e$3+=\"Arrow\";m18=P$J.left;Q3w=P$J.width;Z80=7;if(this.yaxisLabelStyle == e$3){Q3w-=Z80;if(m18 > \"0\" * 1){m18+=Z80;}if(P$J.yaxisLHS.length && P$J.yaxisRHS.length){Q3w-=Z80;}}P9b.P3q(7);this.controls.crossY.style.left=P9b.o5B(\"px\",m18);P9b.P3q(7);this.controls.crossY.style.width=P9b.o5B(\"px\",Q3w);}for(var N34=+\"0\";N34 < m4t.length;N34++){J81=m4t[N34];c$5=this.transformedPriceFromPixel(z9B,P$J,J81);if(isNaN(c$5))continue;if((J81.min || J81.min === (\"0\" | 0)) && c$5 < J81.min)continue;if((J81.max || J81.max === 0) && c$5 > J81.max)continue;b7D=null;if(J81 !== P$J.chart.yAxis){b7D=J81.decimalPlaces;}if(J81.priceFormatter){if(!b7D && b7D !== 0){b7D=this.decimalPlacesFromPriceTick(J81.priceTick,J81.idealTickSizePixels);}c$5=J81.priceFormatter(this,P$J,c$5,b7D);}else {c$5=this.formatYAxisPrice(c$5,P$J,b7D,J81);}C$z=this.canvasStyle(\"stx-float-price\");this.createYAxisLabel(P$J,c$5,z9B,C$z.backgroundColor,C$z.color,this.floatCanvas.context,J81);this.floatCanvas.isDirty=!!({});}};z6n.ChartEngine.prototype.whichYAxis=function(V4N,V4_,T3q){var h6r,X1M,l2Y;if(typeof V4_ === \"undefined\"){V4_=this.cx;}if(typeof T3q === \"undefined\"){T3q=this.cy;}h6r=this.whichPanel(T3q);if(V4N && V4N == h6r){X1M=V4N.yaxisLHS.concat(V4N.yaxisRHS);for(var B9s=0;B9s < X1M.length;B9s++){l2Y=X1M[B9s];if(l2Y.left <= V4_ && l2Y.left + l2Y.width >= V4_){return l2Y;}}}P9b.V8b();return null;};z6n.ChartEngine.prototype.yaxisMatches=function(s0K,C$p){if(!s0K || !s0K.getYAxis || !C$p || !(C$p instanceof z6n.ChartEngine.YAxis)){return !\"1\";}return s0K.getYAxis(this).name == C$p.name;};z6n.ChartEngine.prototype.createYAxisLabel=function(P$V,d79,J5L,l4G,E1O,C1e,v3h){var I9b,x$t,z_a,Z33,m1y,Q8m,w7Y,s6h,V5Q,D21,Z8m,k1T,Q6H,r0o,t9q,v$h,Z13;I9b=\"le\";I9b+=\"ft\";x$t=\"s\";x$t+=\"tx_yaxi\";x$t+=\"s\";z_a=v3h?v3h:P$V.yAxis;if(z_a.drawPriceLabels === !!\"\" || z_a.noDraw || !z_a.width){return;}Z33=C1e?C1e:this.chart.context;m1y=3;P9b.b$0(131);var z5M=P9b.j1j(9,11,0,1,0);Q8m=this.getCanvasFontSize(x$t) + m1y * z5M;this.canvasFont(\"stx_yaxis\",Z33);w7Y=z_a.displayBorder === null?P$V.yAxis.displayBorder:z_a.displayBorder;if(this.axisBorders === !({})){w7Y=!({});}if(this.axisBorders === !!({})){w7Y=!!({});}s6h=w7Y?3:0;V5Q=3;try{P9b.P3q(3);var f$p=P9b.j1j(9,7);D21=Z33.measureText(d79).width + s6h + m1y * f$p;}catch(x8I){D21=z_a.width;}Q6H=z_a.position === null?P$V.chart.yAxis.position:z_a.position;if(Q6H === I9b){k1T=z_a.left + z_a.width;if(z_a.width < 0){k1T-=z_a.width + D21;}V5Q=-3;if(z_a.justifyRight === !!\"\"){Z33.textAlign=\"left\";D21=z_a.width * -(\"1\" - 0);Z8m=k1T - z_a.width + m1y;}else {Z33.textAlign=\"right\";P9b.b$0(15);D21=P9b.o5B(\"1\",D21);P9b.b$0(14);Z8m=P9b.j1j(s6h,k1T,m1y);}}else {k1T=z_a.left;if(z_a.width < 0){k1T+=z_a.width - D21;}if(z_a.justifyRight){r0o=\"r\";r0o+=\"igh\";r0o+=\"t\";Z33.textAlign=r0o;D21=z_a.width;Z8m=z_a.left + D21 - m1y;}else {t9q=\"le\";t9q+=\"ft\";Z33.textAlign=t9q;P9b.P3q(34);Z8m=P9b.o5B(k1T,s6h,m1y);}}if(J5L + Q8m / 2 > z_a.bottom){P9b.b$0(2);var c$1=P9b.j1j(6,4);J5L=z_a.bottom - Q8m / c$1;}if(J5L - Q8m / 2 < z_a.top){P9b.b$0(3);var e4C=P9b.j1j(38,36);J5L=z_a.top + Q8m / (\"2\" | e4C);}if(this.chart.dynamicYAxis && D21 > z_a.width){z_a._dynamicWidth=D21;this.calculateYAxisPositions();return this.draw();}if(typeof z6n[this.yaxisLabelStyle] == \"undefined\"){this.yaxisLabelStyle=\"roundRectArrow\";}v$h=this.yaxisLabelStyle;if(z_a.yaxisLabelStyle){v$h=z_a.yaxisLabelStyle;}Z13={ctx:Z33,x:k1T,y:J5L,top:J5L - Q8m / 2,width:D21,height:Q8m,radius:V5Q,backgroundColor:l4G,fill:!!\"1\",stroke:!\"1\",margin:{left:Z8m - k1T,top:1},txt:d79,color:E1O};z6n[v$h](Z13);};z6n.ChartEngine.prototype.getCurrentHRParams=function(){var Y3K,q0N,v$s,X$8,c9A,d4f,W_g,z8H,J1l,r$b,f9a,w_Z,n9J,L$z,j2S,M7J,s4v,Y3s,j9G,b3C;v$s=this.mainSeriesRenderer;if(v$s.noCurrentHR){return;}var {highLowBars:E32}=v$s;X$8={};for(var Y5C in this.charts){c9A=this.charts[Y5C];d4f=c9A.panel;W_g=d4f.yAxis;if(d4f.hidden)continue;if(W_g.drawCurrentPriceLabel === ![] || W_g.noDraw)continue;if(!v$s.params)continue;var {whichSet:N6_}=W_g;if(!N6_){N6_=\"dataSet\";}if(this.isHistoricalModeSet && N6_ !== \"dataSegment\")continue;z8H=c9A[N6_].length;J1l=this.layout.candleWidth;if(N6_ == \"dataSegment\"){while(z8H > (c9A.width - this.micropixels + J1l / 2 + 1) / J1l){z8H--;}}if(z8H && c9A[N6_][z8H - 1]){r$b=\"da\";r$b+=\"taSe\";r$b+=\"t\";f9a=c9A.defaultPlotField;if(!f9a || E32){f9a=\"Close\";}w_Z=void 0;n9J=void 0;do {w_Z=c9A[N6_][--z8H][f9a];n9J=w_Z;if(z8H === 0)break;}while(n9J === null || n9J === undefined);if(N6_ == r$b && c9A.currentQuote){n9J=c9A.currentQuote[f9a];}else if(c9A[N6_].length >= 2){P9b.P3q(3);L$z=c9A[N6_][P9b.o5B(z8H,1)];if(L$z){w_Z=L$z[f9a];}}if(n9J < w_Z){j2S=\"stx_\";j2S+=\"curr\";j2S+=\"ent_hr_down\";Y3K=this.canvasStyle(j2S).backgroundColor;q0N=this.canvasStyle(\"stx_current_hr_down\").color;}else {M7J=\"stx_current\";M7J+=\"_hr_up\";s4v=\"stx\";s4v+=\"_curre\";s4v+=\"n\";s4v+=\"t_hr_up\";Y3K=this.canvasStyle(s4v).backgroundColor;q0N=this.canvasStyle(M7J).color;}if(c9A.transformFunc){n9J=c9A.transformFunc(this,c9A,n9J);}Y3s=void 0;j9G=Math.max(d4f.yAxis.printDecimalPlaces,d4f.chart.decimalPlaces);if(W_g.maxDecimalPlaces || W_g.maxDecimalPlaces === 0){j9G=Math.min(j9G,W_g.maxDecimalPlaces);}if(W_g.priceFormatter){Y3s=W_g.priceFormatter(this,d4f,n9J,j9G);}else {Y3s=this.formatYAxisPrice(n9J,d4f,j9G);}b3C=this.pixelFromTransformedValue(n9J,d4f);b3C=Math.floor(b3C) + 0.5;X$8[Y5C]={panel:d4f,txt:Y3s,y:b3C,backgroundColor:Y3K,color:q0N};}}return X$8;};z6n.ChartEngine.prototype.drawCurrentHR=function(){var j75;j75=\"drawCur\";j75+=\"rentHR\";if(this.runPrepend(\"drawCurrentHR\",arguments)){return;}var {currentHRParams:s0u}=this;if(s0u){for(var o9u in s0u){var {panel:l5f, txt:t3U, y:Y6O, backgroundColor:a_W, color:o72}=s0u[o9u];this.createYAxisLabel(l5f,t3U,Y6O,a_W,o72);}}this.runAppend(j75,arguments);};z6n.ChartEngine.prototype.drawCurrentPriceLine=function(){var p04;p04=\"dr\";p04+=\"awCur\";p04+=\"rentPriceLine\";if(!(this.preferences.currentPriceLine === !0 && this.isHome())){return;}if(this.runPrepend(p04,arguments)){return;}var {currentHRParams:n23}=this;if(n23){for(var Q8J in n23){var {panel:Z6w, y:e42, backgroundColor:r$7}=n23[Q8J];this.plotLine(Z6w.left,Z6w.right,e42,e42,r$7,\"line\",Z6w.chart.context,Z6w,{pattern:\"dashed\",lineWidth:1,opacity:+\"0.8\"});}}this.runAppend(\"drawCurrentPriceLine\",arguments);};z6n.ChartEngine.prototype.getYAxisByName=function(R50,K_p){P9b.V8b();var Q1L,W1k;Q1L=\"str\";Q1L+=\"in\";Q1L+=\"g\";if(typeof R50 == Q1L){R50=this.panels[R50];}if(!R50 || !K_p){return undefined;}if(K_p === R50.yAxis.name){return R50.yAxis;}for(W1k=\"0\" - 0;R50.yaxisLHS && W1k < R50.yaxisLHS.length;W1k++){if(R50.yaxisLHS[W1k].name === K_p){return R50.yaxisLHS[W1k];}}for(W1k=0;R50.yaxisRHS && W1k < R50.yaxisRHS.length;W1k++){if(R50.yaxisRHS[W1k].name === K_p){return R50.yaxisRHS[W1k];}}return undefined;};z6n.ChartEngine.prototype.getYAxisByField=function(M$6,V$9){var I6t,n8i,s5W,d0W,Z9V,c94,t$n,f_h;P9b.V8b();if(V$9){for(I6t in this.layout.studies){n8i=this.layout.studies[I6t];if(n8i.panel != M$6.name)continue;if(n8i.outputMap && n8i.outputMap.hasOwnProperty(V$9)){return n8i.getYAxis(this);}}for(I6t in this.chart.seriesRenderers){d0W=this.chart.seriesRenderers[I6t];for(var m2D=0;m2D < d0W.seriesParams.length;m2D++){Z9V=\"-\";Z9V+=\"->\";c94=\"Clo\";c94+=\"se\";if(d0W.params.panel != M$6.name)continue;t$n=d0W.seriesParams[m2D];f_h=t$n.field;if(!f_h && !d0W.highLowBars){f_h=this.defaultPlotField || c94;}if(t$n.symbol && t$n.subField){f_h+=Z9V + t$n.subField;}if(V$9 == f_h){return d0W.params.yAxis || M$6.yAxis;}if(t$n.field && t$n.field == V$9.split(\"-->\")[0]){s5W=d0W.params.yAxis || M$6.yAxis;}}}if(s5W){return s5W;}}return undefined;};z6n.ChartEngine.prototype.deleteYAxisIfUnused=function(Z4Y,T2C){var N9S,e9u,J6v,O64,L4L,g$Z,s4n,X50,u28,c32;N9S=\"stri\";N9S+=\"n\";N9S+=\"g\";function k6w(x3J){P9b.b$0(65);P9b.a3b();return P9b.j1j(null,x3J);}if(typeof Z4Y == N9S){Z4Y=this.panels[Z4Y];}if(!T2C || !Z4Y){return;}for(var G4P=0;G4P < T2C.renderers.length;G4P++){e9u=this.chart.seriesRenderers[T2C.renderers[G4P]];if(e9u && e9u.params.panel == Z4Y.name){return;}}if(T2C.name === Z4Y.yAxis.name){J6v=779500024;P9b.b$0(3);O64=P9b.j1j(\"409087934\",0);L4L=2;for(var a7E=1;P9b.P8Y(a7E.toString(),a7E.toString().length,60449) !== J6v;a7E++){if(Z4Y.yaxisRHS.length + Z4Y.yaxisLHS.length === 1){return;}L4L+=2;}if(P9b.n$o(L4L.toString(),L4L.toString().length,+\"88617\") !== O64){if(Z4Y.yaxisRHS.length % Z4Y.yaxisLHS.length !== \"4\" << 64){return;}}}for(g$Z=0;Z4Y.yaxisRHS && g$Z < Z4Y.yaxisRHS.length;g$Z++){if(Z4Y.yaxisRHS[g$Z] === T2C){Z4Y.yaxisRHS[g$Z]=null;}else if(!s4n){s4n=Z4Y.yaxisRHS[g$Z];}}for(g$Z=\"0\" - 0;Z4Y.yaxisLHS && g$Z < Z4Y.yaxisLHS.length;g$Z++){if(Z4Y.yaxisLHS[g$Z] === T2C){Z4Y.yaxisLHS[g$Z]=null;}else if(!s4n){s4n=Z4Y.yaxisLHS[g$Z];}}Z4Y.yaxisRHS=Z4Y.yaxisRHS.filter(k6w);Z4Y.yaxisLHS=Z4Y.yaxisLHS.filter(k6w);if(s4n && T2C.name === Z4Y.yAxis.name){X50=-1184844596;u28=-+\"917599561\";c32=2;for(var e_F=1;P9b.n$o(e_F.toString(),e_F.toString().length,53794) !== X50;e_F++){Z4Y.yAxis=s4n;c32+=2;}if(P9b.n$o(c32.toString(),c32.toString().length,53674) !== u28){Z4Y.yAxis=s4n;}}this.calculateYAxisPositions();};z6n.ChartEngine.prototype.addYAxis=function(D7S,k6O){var t00,j7T,N9K,a11;t00=\"l\";P9b.a3b();t00+=\"e\";t00+=\"f\";t00+=\"t\";if(typeof D7S == \"string\"){D7S=this.panels[D7S];}if(!k6O || !D7S){return;}if(!D7S.yaxisLHS){D7S.yaxisLHS=[];D7S.yaxisRHS=[];if(D7S.yAxis.position == \"left\" || D7S.yAxis.position != \"right\" && D7S.chart.panel.yAxis.position == \"left\"){D7S.yaxisLHS.push(D7S.yAxis);}else {D7S.yaxisRHS.push(D7S.yAxis);}}N9K=[];a11=D7S.yaxisLHS;for(j7T=a11.length - (\"1\" ^ 0);j7T >= \"0\" >> 64;j7T--){if(a11[j7T].name === k6O.name){if(k6O.position != \"right\"){return a11[j7T];}N9K=a11.splice(j7T,1);}}a11=D7S.yaxisRHS;for(j7T=a11.length - 1;j7T >= 0;j7T--){if(a11[j7T].name === k6O.name){if(k6O.position != \"left\"){return a11[j7T];}P9b.b$0(62);N9K=a11.splice(j7T,P9b.o5B(32,\"1\"));}}if(k6O.position === \"left\" || k6O.position != \"right\" && D7S.chart.panel.yAxis.position == t00){D7S.yaxisLHS.unshift(k6O);}else {D7S.yaxisRHS.push(k6O);}k6O.setBreakpointWidth(this.chart.breakpoint);k6O.height=D7S.yAxis.height;k6O.idealTickSizePixels=null;if(N9K[0] == D7S.yAxis){D7S.yAxis=k6O;}if(!k6O.lockScale){this.calculateYAxisMargins(k6O);}if(!((\"scroll\" in k6O))){k6O.scroll=0;}return k6O;};z6n.ChartEngine.prototype.calculateYAxisPositions=function(){var F6Y,o1v,X81,H10,f4Q,W1u,R6l,b3r,g7x,z4C,f2C,n47,S5i,M9w,d6n,T6i,m_u,e1N,S4H,C34,V4W,l9y,C$W,e_3;F6Y=[];for(var u4s in this.charts){if(this.charts[u4s].hidden || this.charts[u4s].panel.hidden)continue;F6Y.push(u4s);}for(var v0N in this.panels){o1v=this.panels[v0N];if(o1v.name === o1v.chart.name || o1v.hidden)continue;F6Y.push(v0N);}P9b.b$0(62);X81=P9b.j1j(0,\"0\");P9b.P3q(24);H10=P9b.o5B(\"0\",1);for(W1u=0;W1u < F6Y.length;W1u++){R6l=this.panels[F6Y[W1u]];if(!R6l)continue;if(!R6l.yaxisLHS){R6l.yaxisLHS=[];R6l.yaxisRHS=[];}g7x=R6l.yaxisLHS;z4C=R6l.yaxisRHS;f2C=R6l.yAxis.position;if(!f2C || f2C == \"none\"){f2C=R6l.chart.yAxis.position || \"right\";}if(!g7x.length && !z4C.length){n47=\"l\";n47+=\"e\";n47+=\"f\";n47+=\"t\";if(f2C == n47){g7x.push(R6l.yAxis);}else {z4C.push(R6l.yAxis);}}S5i=[];M9w=[];for(f4Q=g7x.length - 1;f4Q >= 0;f4Q--){d6n=\"r\";d6n+=\"ig\";d6n+=\"h\";d6n+=\"t\";T6i=\"l\";T6i+=\"eft\";m_u=\"r\";m_u+=\"ig\";m_u+=\"h\";m_u+=\"t\";if(g7x[f4Q].position == m_u || g7x[f4Q].position != T6i && f2C == d6n){S5i=S5i.concat(g7x.splice(f4Q,1));}}for(f4Q=z4C.length - 1;f4Q >= +\"0\";f4Q--){if(z4C[f4Q].position == \"left\" || z4C[f4Q].position != \"right\" && f2C == \"left\"){M9w=M9w.concat(z4C.splice(f4Q,1));}}R6l.yaxisLHS=M9w.concat(g7x);R6l.yaxisRHS=z4C.concat(S5i);if(!R6l.yAxis.width && R6l.yAxis.width !== 0){R6l.yAxis.width=this.yaxisWidth;}R6l.yaxisTotalWidthRight=0;R6l.yaxisTotalWidthLeft=+\"0\";e1N=R6l.yaxisLHS.concat(R6l.yaxisRHS);for(f4Q=0;f4Q < e1N.length;f4Q++){b3r=e1N[f4Q];this.applyGetYAxisTitleEnabled(b3r);if(b3r.noDraw || !b3r.width)continue;if(b3r.position == \"left\" || f2C == \"left\" && !b3r.position){R6l.yaxisTotalWidthLeft+=b3r.width;}else {R6l.yaxisTotalWidthRight+=b3r.width;}}if(R6l.yaxisTotalWidthLeft > X81){X81=R6l.yaxisTotalWidthLeft;}if(R6l.yaxisTotalWidthRight > H10){H10=R6l.yaxisTotalWidthRight;}}for(W1u=0;W1u < F6Y.length;W1u++){R6l=this.panels[F6Y[W1u]];if(!R6l)continue;S4H=R6l.name === R6l.chart.name;C34=X81;for(f4Q=R6l.yaxisLHS.length - 1;f4Q >= 0;f4Q--){b3r=R6l.yaxisLHS[f4Q];if(b3r.noDraw)continue;C34-=b3r.width;b3r.left=C34;}C34=this.width - H10;for(f4Q=0;f4Q < R6l.yaxisRHS.length;f4Q++){b3r=R6l.yaxisRHS[f4Q];if(b3r.noDraw)continue;b3r.left=C34;C34+=b3r.width;}if(typeof this.yaxisLeft != \"undefined\"){R6l.chart.yaxisPaddingRight=this.yaxisLeft;}R6l.yaxisCalculatedPaddingRight=H10;if(R6l.chart.yaxisPaddingRight || R6l.chart.yaxisPaddingRight === 0){R6l.yaxisCalculatedPaddingRight=R6l.chart.yaxisPaddingRight;}R6l.yaxisCalculatedPaddingLeft=X81;if(R6l.chart.yaxisPaddingLeft || R6l.chart.yaxisPaddingLeft === 0){R6l.yaxisCalculatedPaddingLeft=R6l.chart.yaxisPaddingLeft;}if(S4H || R6l.chart.panel.hidden){R6l.left=R6l.yaxisCalculatedPaddingLeft;R6l.right=this.width - R6l.yaxisCalculatedPaddingRight;}else {R6l.left=R6l.chart.panel.left;R6l.right=R6l.chart.panel.right;}R6l.width=R6l.right - R6l.left;if(R6l.handle){V4W=\"p\";V4W+=\"x\";l9y=\"p\";l9y+=\"x\";R6l.handle.style.left=R6l.left + l9y;R6l.handle.style.width=R6l.width + V4W;}if(S4H || R6l.chart.panel.hidden){R6l.chart.panel.left=R6l.chart.left=R6l.left;R6l.chart.panel.right=R6l.chart.right=R6l.right;R6l.chart.panel.width=R6l.chart.width=Math.max(R6l.right - R6l.left,0);}}C$W=new Set();e_3=this.yAxisSet || new Set();Object.values(this.panels).forEach(X$x=>{P9b.V8b();return X$x.yaxisLHS.concat(X$x.yaxisRHS).forEach(j6N=>{C$W.add(j6N);P9b.a3b();if(!e_3.has(j6N)){j6N.onAttach(this);}});});e_3.forEach(m1F=>{if(!C$W.has(m1F)){m1F.onRemove(this);}});this.yAxisSet=C$W;if(this.preserveCandleWidthOnResize){this.setCandleWidth(this.layout.candleWidth);}else {this.setMaxTicks(this.chart.maxTicks);}this.adjustPanelPositions();};z6n.ChartEngine.prototype.getYAxisCurrentPosition=function(i9b,M0g){var m8r;m8r=\"le\";m8r+=\"f\";m8r+=\"t\";if(!i9b.width){return \"none\";}return M0g.yaxisLHS.map(P9e=>{return P9e.name;}).includes(i9b.name)?m8r:\"right\";};z6n.ChartEngine.prototype.setYAxisPosition=function(l4E,D9y){l4E.position=D9y;l4E.setBreakpointWidth(this.chart.breakpoint);this.calculateYAxisPositions();this.draw();};z6n.ChartEngine.prototype.electNewYAxisOwner=function(O_0){P9b.a3b();var H7u,w0M;H7u=O_0.studies[0];if(!H7u || H7u == O_0.name){H7u=O_0.renderers[0];}if(!H7u || H7u == O_0.name){H7u=O_0.studies[1];}if(!H7u){H7u=O_0.renderers[1];}for(var C$b=0;C$b < O_0.studies.length;C$b++){w0M=this.layout.studies[O_0.studies[C$b]];if(w0M.parameters && w0M.parameters.yaxisDisplayValue == O_0.name){w0M.parameters.yaxisDisplayValue=H7u;}}return H7u;};z6n.ChartEngine.prototype.setYAxisTitle=function({enabled:C09, yAxis:h6L, title:D7z} = {}){var q5L;if(C09 !== undefined){if(h6L){h6L.enableTitle=C09;}else {this.enableYAxisTitle=C09;}}if(D7z !== undefined){q5L=h6L && [h6L] || Object.values(this.panels).reduce((p1t,{yaxisLHS:o08, yaxisRHS:C8V})=>{return p1t.concat(o08).concat(C8V);},[]);q5L.forEach(B5L=>{P9b.V8b();if(D7z === null){delete B5L.title;}else {B5L.title=D7z;}});}this.adjustPanelPositions();this.draw();this.calculateYAxisPositions();};z6n.ChartEngine.prototype.applyGetYAxisTitleEnabled=function(f1h){var f_n;if(f1h.getTitleEnabled){return;}f_n=this;P9b.V8b();f1h.getTitleEnabled=function(){return f1h.hasOwnProperty(\"enableTitle\")?f1h.enableTitle:f_n.enableYAxisTitle !== undefined?f_n.enableYAxisTitle:f1h.enableTitle;};};};S9=I2L=>{var e9i=x2w9K;var B4n,T$_,D6s,g7I,n$B,R9W,e2g;B4n=\"\\u0043\";B4n+=\"\\u0068\\x61\\u0072\\x74\";B4n+=\"\\u0045\\x6e\\u0067\\u0069\\u006e\\x65\";T$_=I2L.CIQ;D6s=\"valid\";e9i.b$0(63);T$_.valid=e9i.o5B(\"0\",0);T$_.ChartEngine.prototype.consolidatedQuote=function(Z2w,c$A){var U_6,x7U,t9S,X2w,d8U,U9X,c8H,i7R,R7q,b0N,U7d,U6M,e5t,j9D,J1N,f3O,b4A,j5F,L2q,s5t;U_6=\"consolidat\";U_6+=\"edQuot\";U_6+=\"e\";e9i.a3b();x7U=\"t\";x7U+=\"i\";x7U+=\"ck\";function Q4a(A6u,a1T,t$U){var d9$,h3G,O6J,z7A,j6c;if(!a1T){a1T={DT:t$U,Date:T$_.yyyymmddhhmmssmmm(t$U),consolidatedTicks:0};}if(!a1T.displayDate){d8U.setDisplayDate(a1T);}d9$=1;if(t9S.adj && A6u.Adj_Close){d9$=A6u.Adj_Close / A6u.Close;}h3G=A6u.High || A6u.Close;if(h3G || h3G === 0){if(h3G * d9$ > (a1T.High || -Number.MAX_VALUE)){e9i.b$0(24);a1T.High=e9i.j1j(h3G,d9$);}}O6J=A6u.Low || A6u.Close;if(O6J || O6J === 0){if(O6J * d9$ < (a1T.Low || Number.MAX_VALUE)){e9i.b$0(24);a1T.Low=e9i.j1j(O6J,d9$);}}z7A=A6u.Open || A6u.Close;if(z7A || z7A === 0){if(!a1T.Open && a1T.Open !== 0){e9i.b$0(24);a1T.Open=e9i.o5B(z7A,d9$);}}if(A6u.Volume !== undefined){a1T.Volume=(a1T.Volume || \"0\" - 0) + A6u.Volume;}if(A6u.Close !== undefined && A6u.Close !== null){a1T.Close=A6u.Close * d9$;}if(A6u.Adj_Close !== undefined && A6u.Adj_Close !== null){a1T.Adj_Close=A6u.Adj_Close;}a1T.ratio=d9$;for(var W$Q in A6u){j6c=\"A\";j6c+=\"s\";j6c+=\"k\";if(A6u[W$Q] && A6u[W$Q].Close !== undefined){a1T[W$Q]=Q4a(A6u[W$Q],a1T[W$Q],t$U);}else if(!((W$Q in a1T))){a1T[W$Q]=A6u[W$Q];}else if([\"Bid\",\"BidL2\",j6c,\"AskL2\"].indexOf(W$Q) > -1){a1T[W$Q]=A6u[W$Q];}}a1T.consolidatedTicks++;return a1T;}if(this.runPrepend(\"consolidatedQuote\",arguments)){return Z2w;}if(!Z2w || !Z2w.length){return [];}t9S=this.layout;X2w=this.chart;d8U=this;if(!X2w.market){console.log(\"Cannot consolidate: no market iterator available. Please make sure market module is enabled.\");return Z2w;}U9X=t9S.periodicity;c8H=t9S.interval;i7R=t9S.timeUnit;if(!c$A){c$A={};}if(c$A.periodicity && c$A.interval){U9X=c$A.periodicity;c8H=c$A.interval;i7R=c$A.timeUnit;}e9i.b$0(63);R7q=e9i.o5B(\"1\",0);b0N=T$_.ChartEngine.isDailyInterval(c8H);if(!b0N && X2w.useInflectionPointForIntraday){R7q=U9X;}U7d=X2w.inflectionPoint;if(!U7d || U7d < Z2w[+\"0\"].DT){U7d=new Date(+Z2w[+\"0\"].DT);if(!b0N && !X2w.market.market_def){U7d.setHours(0,-U7d.getTimezoneOffset(),\"0\" >> 32,\"0\" | 0);}}U6M=[];e5t={begin:U7d,interval:c8H,multiple:U9X / R7q,timeUnit:i7R};if(c8H == x7U){U7d.setHours(+\"0\",0,+\"0\",+\"0\");e5t={begin:U7d,interval:\"day\",multiple:1};}j9D=X2w.market.newIterator(T$_.clone(e5t));while(j9D.previous(R7q) > Z2w[0].DT);J1N=j9D.previous(R7q);f3O=j9D.next(R7q);b4A=0;j5F=0;while(b4A < Z2w.length){L2q=Z2w[b4A];if(L2q.DT < J1N){console.log(\"Warning: out-of-order quote in dataSet, disregarding: \" + L2q.DT);b4A++;continue;}else if(L2q.DT >= f3O){J1N=f3O;f3O=j9D.next(R7q);if(!U6M[j5F])continue;}else if(c8H == \"tick\" && L2q.consolidatedTicks > 0){U6M[j5F]=L2q;b4A++;continue;}else if(!U6M[j5F] || c8H != \"tick\" || U6M[j5F].consolidatedTicks < U9X){s5t=Q4a(L2q,U6M[j5F],c8H == \"tick\"?L2q.DT:J1N);if(s5t){U6M[j5F]=s5t;}b4A++;continue;}j5F++;}this.runAppend(U_6,arguments);return U6M;};T$_[B4n]['\\u0070\\u0072\\x6f\\x74\\x6f\\u0074\\u0079\\u0070\\x65']['\\x63\\u0072\\u0065\\x61\\u0074\\x65\\x44\\u0061\\x74\\x61\\x53\\u0065\\x74']=function(Y1a,e1y,b2k){var r4d,c0i,p$p,m3f,V6q,X6l,E5w,g6f,n9j,e_M,d2$,B1I,n7E,g2P,k8H,Y2t,i0d,Z6a,r1c,W7g,U82,B6O,b5w,a2l,h8$,d05,d5i,O2w,O$l,r5h,J6i,H0E,V1G,W_N,j$0,G8F,O1c,x2Q,N3v,r9N,H6v,E6$,E5u,b$Z,c9k,M8m,I7e,v_a,g$j,Q0w,i9O,N9G,k0d,i4k,a2g,g3R,a2b,w2t,s6J,T_g,K1P,o1B,Z4N,Z_l,j1a,Q2g,h87,f7M,E6U,e5N,x7h,Y2O,e$d,r1v,t4h,D3V,Q$L,f46,B3t,D0L,h8y,y83,V0c,y$5,P1o,R0C,q_S,D7E,L6R,O_c,N_L,d7F,a6A,o9m,L2l,C90,d0M,o1Z,U2w,g1t,W9o,g9u,J0k,V20,E6t,r$X,g1s,C_M,s8p,o2v,M47,r1N,d1R,e6c,g6r,q0d,a8o,P7T,S1D,C94,s7v,L$x,T84;r4d=\"\\u006c\";r4d+=\"\\x65\\u006e\\u0067\\x74\";r4d+=\"\\u0068\";c0i=\"\\x6c\";c0i+=\"\\u0065\\x6e\\x67\";c0i+=\"\\x74\\x68\";p$p=\"\\x77\\u0068\";p$p+=\"\\x69\\u0074\\u0065\\u0053\\u0070\";p$p+=\"\\u0061\\x63\\x65\\x46\\u0075\\x74\\x75\\u0072\\u0065\";p$p+=\"\\u0054\\u0069\\u0063\\u006b\\x73\";m3f=\"\\x6c\\x65\\u006e\\x67\";m3f+=\"\\x74\";m3f+=\"\\x68\";V6q=\"\\u0063\";V6q+=\"\\x6f\";V6q+=\"\\x6e\\u0063\\x61\";V6q+=\"\\u0074\";X6l=\"\\x64\";X6l+=\"\\u0061\\u0074\\x61\\u0053\\u0065\";X6l+=\"\\u0074\";E5w=\"\\x63\";E5w+=\"\\x61\\x6c\\x63\\u0075\";E5w+=\"\\x6c\\u0061\\u0074\";E5w+=\"\\x65\\u0041\\x54\\u0052\";g6f=\"\\x73\\x74\";g6f+=\"\\x61\";g6f+=\"\\x74\";g6f+=\"\\u0065\";n9j=\"\\u0073\\x63\";n9j+=\"\\u0072\\u0075\";n9j+=\"\\x62\\x62\";n9j+=\"\\x65\\u0064\";e_M=\"\\x6c\";e_M+=\"\\u0065\";e_M+=\"\\x6e\\x67\\x74\";e_M+=\"\\x68\";e9i.V8b();d2$=\"\\u0073\\u0074\\x75\";d2$+=\"\\u0064\\x69\\x65\\u0073\";B1I=\"\\u0073\\u0074\\x75\\u0064\\u0069\\u0065\";B1I+=\"\\x73\";n7E=\"\\x73\\u0063\\x72\";n7E+=\"\\x75\\x62\\x62\\x65\\u0064\";g2P=\"\\x61\\x67\\u0067\\u0072\\x65\\x67\";g2P+=\"\\u0061\\x74\\x69\\x6f\\u006e\\x54\\x79\\x70\\u0065\";k8H=\"\\x73\";k8H+=\"\\u0063\";k8H+=\"\\x72\\u006f\";k8H+=\"\\u006c\\u006c\";Y2t=\"\\x6c\\x61\\u0079\";Y2t+=\"\\x6f\\x75\\u0074\";i0d=\"\\x6d\\x6f\\u006e\";i0d+=\"\\u0074\\u0068\";Z6a=\"\\x69\\x6e\\x74\";Z6a+=\"\\u0065\\u0072\\x76\\u0061\\u006c\";r1c=\"\\u0043\";r1c+=\"\\u0068\\x61\";r1c+=\"\\x72\\u0074\\x45\\x6e\\x67\\x69\\u006e\";r1c+=\"\\u0065\";W7g=\"\\x63\\u0068\\x61\";W7g+=\"\\u0072\\x74\";U82=\"\\x74\\x72\\x61\\u006e\";U82+=\"\\x73\\x66\\x6f\\x72\\x6d\\x44\";U82+=\"\\u0061\\u0074\\x61\\u0053\\x65\\x74\\x50\";U82+=\"\\u0072\\u0065\";B6O=\"\\x63\\u0075\\x72\\u0072\\u0065\";B6O+=\"\\u006e\\u0074\";B6O+=\"\\u0051\\x75\\x6f\";B6O+=\"\\u0074\\u0065\";b5w=\"\\x61\\x73\";b5w+=\"\\x73\\x69\";b5w+=\"\\u0067\";b5w+=\"\\x6e\";a2l=\"\\u0063\";a2l+=\"\\x68\\u0061\";a2l+=\"\\x72\\x74\";X$R();h8$='\\u0043\\u0050\\u0045\\u0031\\u0037\\x30\\x34\\x54\\u004b\\x53';if(!b2k){b2k={};}d05=this[a2l];d5i=[Y1a,d05,Object[b5w]({},b2k)];if(this['\\x72\\u0075\\x6e\\x50\\x72\\x65\\u0070\\x65\\x6e\\x64']('\\u0063\\x72\\u0065\\x61\\u0074\\u0065\\u0044\\x61\\x74\\x61\\u0053\\u0065\\u0074',d5i)){return;}O$l=[];r5h=[];J6i=b2k['\\x61\\x70\\x70\\x65\\x6e\\u0064\\x69\\x6e\\x67'];if(!d05['\\x64\\x61\\x74\\u0061\\x53\\x65\\x74']){d05['\\x64\\x61\\u0074\\x61\\u0053\\u0065\\x74']=[];}H0E=d05['\\u0064\\x61\\u0074\\u0061\\x53\\u0065\\x74']['\\x6c\\x65\\x6e\\x67\\u0074\\x68'];if(J6i){O$l=d05['\\x64\\x61\\u0074\\u0061\\u0053\\x65\\u0074'];}d05[B6O]=null;d05['\\x64\\x61\\x74\\x61\\x53\\u0065\\u0074']=[];if(!J6i){d05['\\u0074\\u0069\\x63\\u006b\\u0043\\u0061\\x63\\u0068\\x65']={};}V1G=d05['\\x6d\\x61\\u0073\\u0074\\x65\\x72\\x44\\u0061\\x74\\u0061'];if(!V1G){V1G=this['\\x6d\\x61\\x73\\u0074\\x65\\u0072\\u0044\\x61\\u0074\\x61'];}if(!V1G || !V1G['\\x6c\\x65\\x6e\\x67\\u0074\\x68']){W_N=\"\\x63\\u0072\\x65\\u0061\\x74\\x65\\x44\";W_N+=\"\\u0061\";W_N+=\"\\x74\\u0061\\u0053\\u0065\\u0074\";this['\\x72\\u0075\\u006e\\x41\\x70\\x70\\u0065\\u006e\\u0064'](W_N,d5i);return;}if(O$l['\\x6c\\x65\\x6e\\u0067\\x74\\u0068']){j$0=\"\\x44\";j$0+=\"\\x54\";G8F=\"\\u006c\";G8F+=\"\\x65\\x6e\\u0067\";G8F+=\"\\x74\\u0068\";O1c=O$l['\\u0070\\x6f\\u0070']();while(O1c['\\x66\\x75\\x74\\x75\\x72\\u0065\\u0054\\x69\\x63\\u006b'] && O$l['\\u006c\\x65\\x6e\\u0067\\x74\\x68']){O1c=O$l['\\u0070\\x6f\\x70']();H0E--;}x2Q=b2k['\\u0061\\u0070\\x70\\u0065\\u006e\\x64\\u0054\\x6f\\x44\\x61\\x74\\x65'];while(O$l['\\u006c\\x65\\u006e\\x67\\x74\\u0068']){if(O1c['\\u0044\\u0054'] < x2Q)break;O1c=O$l['\\u0070\\u006f\\x70']();}if(!x2Q || x2Q > O1c['\\u0044\\x54']){x2Q=O1c['\\u0044\\u0054'];}while(O$l['\\x6c\\x65\\u006e\\u0067\\u0074\\x68']){N3v=\"\\u0070\\u006f\";N3v+=\"\\u0070\";if(O$l[O$l['\\u006c\\u0065\\x6e\\u0067\\u0074\\u0068'] - 1]['\\u0044\\u0054'] < x2Q)break;O$l[N3v]();}e9i.P3q(20);var o4N=e9i.j1j(12,7,18);r9N=V1G[G8F] - o4N;while(r9N >= 0 && V1G[r9N][j$0] >= x2Q){r9N--;}e9i.P3q(120);O2w=V1G['\\x73\\u006c\\x69\\x63\\u0065'](e9i.o5B(r9N,\"1\",1));}else {O2w=[]['\\u0063\\x6f\\x6e\\x63\\u0061\\u0074'](V1G);}if(this['\\u0074\\u0072\\u0061\\x6e\\u0073\\x66\\u006f\\u0072\\u006d\\x44\\x61\\u0074\\x61\\x53\\x65\\x74\\x50\\x72\\x65']){this[U82](this,O2w);}if(!this[W7g]['\\x68\\u0069\\u0064\\x65\\x44\\x72\\u0061\\u0077\\x69\\u006e\\x67\\x73']){E6$=\"\\x6e\\x61\";E6$+=\"\\u006d\\u0065\";E5u=\"\\u006c\";E5u+=\"\\u0065\";E5u+=\"\\x6e\\u0067\\u0074\\u0068\";for(H6v=0;H6v < this['\\u0064\\x72\\x61\\x77\\u0069\\x6e\\u0067\\x4f\\x62\\x6a\\x65\\u0063\\x74\\x73'][E5u];H6v++){b$Z=\"\\x70\\x72\\u006f\\x6a\";b$Z+=\"\\x65\\x63\";b$Z+=\"\\x74\\x69\\u006f\\u006e\";c9k=\"\\u0064\\x72\";c9k+=\"\\x61\\x77\\x69\\u006e\\x67\\u004f\\u0062\\x6a\";c9k+=\"\\u0065\\x63\\u0074\\u0073\";if(this[c9k][H6v]['\\x6e\\x61\\u006d\\x65'] == b$Z){T$_['\\u0067\\u0065\\x74\\x46\\x6e']('\\u0044\\x72\\u0061\\x77\\u0069\\u006e\\u0067\\x2e\\x70\\u0072\\x69\\x6e\\x74\\u0050\\x72\\u006f\\u006a\\x65\\x63\\u0074\\x69\\x6f\\u006e')(this,this['\\x64\\x72\\u0061\\x77\\x69\\x6e\\x67\\x4f\\x62\\u006a\\x65\\u0063\\u0074\\x73'][H6v],O2w);}}if(this['\\x61\\u0063\\x74\\x69\\u0076\\x65\\u0044\\u0072\\u0061\\x77\\u0069\\u006e\\x67'] && this['\\u0061\\x63\\u0074\\u0069\\u0076\\x65\\x44\\x72\\x61\\x77\\x69\\x6e\\x67'][E6$] == '\\u0070\\u0072\\x6f\\u006a\\u0065\\x63\\x74\\x69\\x6f\\u006e'){M8m=\"\\x61\\x63\\x74\\u0069\";M8m+=\"\\u0076\\u0065\\u0044\\x72\\u0061\";M8m+=\"\\x77\\x69\\u006e\\u0067\";T$_['\\x67\\x65\\u0074\\x46\\u006e']('\\x44\\u0072\\x61\\u0077\\x69\\x6e\\u0067\\x2e\\x70\\x72\\x69\\u006e\\x74\\u0050\\x72\\x6f\\x6a\\u0065\\x63\\x74\\u0069\\u006f\\x6e')(this,this[M8m],O2w);}}e9i.b$0(62);H6v=e9i.o5B(64,\"0\");I7e=-Number['\\x4d\\x41\\u0058\\x5f\\x56\\u0041\\u004c\\u0055\\u0045'];v_a=Number['\\u004d\\u0041\\u0058\\u005f\\x56\\x41\\x4c\\x55\\x45'];Q0w=+\"0\";i9O=Y1a || this['\\x64\\u006f\\u006e\\u0074\\x52\\x6f\\u006c\\x6c'];N9G=this['\\x6c\\x61\\u0079\\u006f\\x75\\x74'];k0d=T$_[r1c]['\\u0069\\x73\\x44\\x61\\u0069\\x6c\\u0079\\x49\\x6e\\x74\\u0065\\u0072\\u0076\\x61\\x6c'](N9G['\\x69\\u006e\\x74\\u0065\\x72\\u0076\\x61\\x6c']);while(1){g3R=\"\\u006d\";g3R+=\"\\x61\\u0072\\x6b\\x65\\u0074\\u005f\";g3R+=\"\\x64\\x65\\u0066\";a2b=\"\\x66\";a2b+=\"\\x69\";a2b+=\"\\x6c\";a2b+=\"\\x74\\x65\\x72\";w2t=\"\\x65\\u0078\\u0074\";w2t+=\"\\u0065\\x6e\\x64\\x65\\u0064\\u0048\\x6f\\u0075\\u0072\\u0073\";s6J=\"\\u0069\";s6J+=\"\\x6e\\u0074\\x65\\u0072\\x76\\u0061\\x6c\";T_g=\"\\u0064\\u006f\\x6e\";T_g+=\"\\x74\\u0052\";T_g+=\"\\x6f\\x6c\\u006c\";if(Q0w >= O2w['\\x6c\\x65\\x6e\\u0067\\x74\\x68'])break;if(!(this[T_g] && (N9G['\\u0069\\u006e\\x74\\u0065\\u0072\\x76\\u0061\\u006c'] == '\\x77\\x65\\x65\\u006b' || N9G[s6J] == '\\u006d\\u006f\\u006e\\u0074\\x68')) && this[w2t] && this['\\u0065\\x78\\x74\\x65\\x6e\\x64\\u0065\\u0064\\u0048\\u006f\\u0075\\x72\\u0073'][a2b] && d05['\\u006d\\x61\\x72\\x6b\\x65\\x74'][g3R]){K1P=O2w[Q0w];if(k0d){o1B=\"\\u0044\";o1B+=\"\\u0054\";a2g=!d05['\\x6d\\u0061\\x72\\x6b\\u0065\\u0074']['\\x69\\x73\\u004d\\x61\\x72\\u006b\\u0065\\u0074\\x44\\x61\\u0074\\u0065'](K1P[o1B]);}else {if(!i4k || i4k <= K1P['\\u0044\\x54']){Z4N=\"\\u006d\\x61\";Z4N+=\"\\x72\\x6b\\u0065\\x74\\u0053\\x65\";Z4N+=\"\\x73\\u0073\";Z4N+=\"\\x69\\x6f\\x6e\\u0073\";Z_l=\"\\u006d\\u0061\";Z_l+=\"\\u0072\";Z_l+=\"\\u006b\\u0065\\x74\";j1a=d05[Z_l]['\\u0067\\x65\\u0074\\x53\\x65\\x73\\x73\\x69\\x6f\\u006e'](K1P['\\u0044\\u0054']);a2g=j1a !== \"\" && (!N9G['\\x6d\\u0061\\x72\\u006b\\x65\\u0074\\x53\\x65\\u0073\\u0073\\x69\\u006f\\x6e\\x73'] || !N9G[Z4N][j1a]);i4k=d05['\\x6d\\u0061\\u0072\\u006b\\x65\\u0074'][a2g?'\\x67\\x65\\x74\\u004e\\x65\\x78\\u0074\\x4f\\u0070\\u0065\\x6e':'\\x67\\u0065\\x74\\x4e\\u0065\\x78\\u0074\\x43\\u006c\\u006f\\x73\\u0065'](K1P['\\x44\\x54']);}}if(a2g){Q0w++;continue;}}g$j={};for(var F0x in O2w[Q0w]){g$j[F0x]=O2w[Q0w][F0x];}O2w[Q0w]=g$j;g$j['\\x72\\u0061\\u0074\\u0069\\x6f']=1;if(N9G['\\x61\\x64\\u006a'] && g$j['\\x41\\u0064\\x6a\\u005f\\x43\\u006c\\x6f\\u0073\\u0065']){Q2g=\"\\u0043\\u006c\\x6f\\u0073\";Q2g+=\"\\u0065\";g$j['\\x72\\x61\\x74\\x69\\x6f']=g$j['\\x41\\u0064\\u006a\\u005f\\u0043\\x6c\\x6f\\x73\\x65'] / g$j[Q2g];}if(g$j['\\x72\\u0061\\u0074\\u0069\\x6f'] != (\"1\" ^ 0)){h87=\"\\u0074\\u006f\\u0046\\u0069\";h87+=\"\\u0078\\u0065\";h87+=\"\\x64\";f7M=\"\\u0048\";f7M+=\"\\u0069\";f7M+=\"\\u0067\";f7M+=\"\\u0068\";E6U=\"\\u0074\";E6U+=\"\\x6f\";E6U+=\"\\x46\\u0069\\u0078\\u0065\\x64\";e5N=\"\\x43\";e5N+=\"\\x6c\\x6f\";e5N+=\"\\u0073\\u0065\";x7h=\"\\x74\\u006f\\u0046\";x7h+=\"\\x69\\x78\\x65\";x7h+=\"\\x64\";Y2O=\"\\x72\";Y2O+=\"\\u0061\\u0074\";Y2O+=\"\\x69\";Y2O+=\"\\x6f\";e$d=\"\\u004f\\u0070\";e$d+=\"\\x65\\u006e\";r1v=\"\\x4f\";r1v+=\"\\x70\";r1v+=\"\\u0065\";r1v+=\"\\u006e\";if(g$j[r1v]){g$j[e$d]=Number((g$j['\\u004f\\u0070\\x65\\u006e'] * g$j[Y2O])[x7h](8));}if(g$j['\\u0043\\x6c\\x6f\\x73\\u0065']){g$j[e5N]=Number((g$j['\\x43\\x6c\\u006f\\x73\\x65'] * g$j['\\x72\\u0061\\x74\\x69\\x6f'])[E6U](+\"8\"));}if(g$j[f7M]){g$j['\\u0048\\u0069\\x67\\u0068']=Number((g$j['\\x48\\x69\\u0067\\u0068'] * g$j['\\x72\\u0061\\x74\\x69\\u006f'])[h87](8));}if(g$j['\\x4c\\x6f\\x77']){g$j['\\u004c\\u006f\\u0077']=Number((g$j['\\x4c\\x6f\\u0077'] * g$j['\\u0072\\u0061\\u0074\\x69\\x6f'])['\\u0074\\x6f\\x46\\u0069\\u0078\\u0065\\u0064'](8));}}r5h[H6v++]=O2w[Q0w++];}if(N9G['\\u0070\\x65\\x72\\u0069\\u006f\\x64\\u0069\\u0063\\u0069\\u0074\\x79'] > 1 || !i9O && (N9G['\\u0069\\u006e\\x74\\u0065\\x72\\x76\\x61\\x6c'] == '\\x77\\x65\\x65\\x6b' || N9G[Z6a] == i0d)){r5h=this['\\x63\\x6f\\u006e\\u0073\\x6f\\x6c\\u0069\\u0064\\u0061\\x74\\x65\\x64\\u0051\\x75\\u006f\\u0074\\u0065'](r5h);}t4h={};for(H6v=0;H6v < r5h['\\x6c\\u0065\\u006e\\u0067\\x74\\u0068'];H6v++){g$j=r5h[H6v];if(H6v > 0){e9i.b$0(3);g$j['\\u0069\\u0071\\x50\\x72\\x65\\x76\\x43\\x6c\\x6f\\u0073\\x65']=r5h[e9i.o5B(H6v,1)]['\\u0043\\x6c\\x6f\\x73\\x65'];if(!g$j['\\x69\\x71\\x50\\x72\\x65\\u0076\\x43\\x6c\\x6f\\u0073\\u0065'] && g$j['\\u0069\\u0071\\x50\\u0072\\x65\\x76\\u0043\\x6c\\u006f\\x73\\x65'] !== 0){e9i.P3q(3);g$j['\\u0069\\u0071\\x50\\x72\\u0065\\x76\\u0043\\u006c\\x6f\\x73\\x65']=r5h[e9i.j1j(H6v,1)]['\\x69\\x71\\x50\\u0072\\u0065\\u0076\\u0043\\x6c\\x6f\\x73\\u0065'];}}else if(O$l['\\u006c\\x65\\u006e\\x67\\x74\\u0068']){D3V=\"\\x69\\u0071\\x50\\u0072\";D3V+=\"\\x65\\x76\\x43\\x6c\\x6f\";D3V+=\"\\u0073\";D3V+=\"\\u0065\";Q$L=\"\\x69\\u0071\\u0050\\u0072\\x65\";Q$L+=\"\\u0076\\x43\\u006c\\u006f\\u0073\\x65\";f46=\"\\u0069\\x71\\u0050\\x72\\u0065\";f46+=\"\\u0076\\x43\\u006c\";f46+=\"\\x6f\\x73\\x65\";e9i.b$0(132);var v7b=e9i.o5B(4,6,179,0,18);g$j['\\x69\\u0071\\x50\\x72\\x65\\x76\\x43\\u006c\\x6f\\x73\\x65']=O$l[O$l['\\x6c\\u0065\\x6e\\x67\\x74\\u0068'] - v7b]['\\u0043\\x6c\\x6f\\x73\\u0065'];if(!g$j[f46] && g$j['\\x69\\u0071\\x50\\x72\\u0065\\u0076\\u0043\\x6c\\x6f\\x73\\x65'] !== 0){e9i.P3q(133);var f5O=e9i.o5B(3,8,0,1,6);g$j[Q$L]=O$l[O$l['\\u006c\\u0065\\x6e\\u0067\\x74\\u0068'] - f5O][D3V];}}else {g$j['\\u0069\\u0071\\u0050\\x72\\x65\\x76\\u0043\\u006c\\x6f\\u0073\\u0065']=g$j['\\x43\\x6c\\x6f\\u0073\\x65'];}if(('\\x48\\u0069\\x67\\x68' in g$j) && g$j['\\u0048\\x69\\x67\\x68'] > I7e){I7e=g$j['\\x48\\u0069\\x67\\u0068'];}if(('\\u004c\\u006f\\x77' in g$j) && g$j['\\x4c\\u006f\\x77'] < v_a){v_a=g$j['\\u004c\\x6f\\x77'];}for(var u4d in d05['\\x73\\x65\\u0072\\x69\\u0065\\x73']){B3t=d05['\\u0073\\x65\\u0072\\u0069\\x65\\u0073'][u4d]['\\u0070\\u0061\\x72\\x61\\x6d\\x65\\u0074\\x65\\u0072\\x73']['\\u0073\\u0079\\x6d\\u0062\\u006f\\x6c'];D0L=g$j[B3t];if(D0L && typeof D0L == '\\x6f\\x62\\u006a\\u0065\\x63\\x74'){h8y=\"\\x61\";h8y+=\"\\x64\";h8y+=\"\\x6a\";y83=\"\\x43\";y83+=\"\\u006c\\u006f\\x73\\u0065\";V0c=\"\\x69\\u0071\\x50\";V0c+=\"\\u0072\\x65\\x76\";V0c+=\"\\u0043\\x6c\\u006f\\u0073\";V0c+=\"\\x65\";if(H6v > (\"0\" ^ 0)){D0L[V0c]=t4h[u4d];}else if(O$l['\\u006c\\x65\\u006e\\x67\\u0074\\x68']){y$5=\"\\x6c\\x65\";y$5+=\"\\x6e\\x67\";y$5+=\"\\x74\\x68\";for(var Q5$=O$l[y$5] - 1;Q5$ >= 0;Q5$--){P1o=O$l[Q5$][B3t];if(P1o && (P1o['\\u0043\\x6c\\x6f\\u0073\\u0065'] || P1o['\\u0043\\x6c\\u006f\\x73\\u0065'] === 0)){R0C=\"\\x43\";R0C+=\"\\u006c\\u006f\";R0C+=\"\\u0073\\x65\";D0L['\\u0069\\u0071\\u0050\\u0072\\u0065\\x76\\u0043\\x6c\\x6f\\u0073\\x65']=P1o[R0C];break;}}}else {D0L['\\u0069\\u0071\\u0050\\x72\\x65\\x76\\u0043\\u006c\\u006f\\u0073\\u0065']=D0L['\\x43\\x6c\\u006f\\u0073\\x65'];}if(D0L[y83] || D0L['\\x43\\x6c\\u006f\\u0073\\u0065'] === 0){t4h[u4d]=D0L['\\u0043\\u006c\\x6f\\x73\\u0065'];}D0L['\\u0072\\u0061\\u0074\\u0069\\u006f']=1;if(N9G[h8y] && D0L['\\u0041\\x64\\u006a\\x5f\\u0043\\u006c\\u006f\\x73\\x65']){q_S=\"\\u0043\\u006c\";q_S+=\"\\u006f\\u0073\\u0065\";D0L['\\x72\\u0061\\u0074\\x69\\x6f']=D0L['\\u0041\\x64\\x6a\\x5f\\u0043\\u006c\\x6f\\x73\\u0065'] / D0L[q_S];}if(D0L['\\x72\\u0061\\x74\\u0069\\u006f'] != 1){D7E=\"\\x43\\u006c\\x6f\\x73\";D7E+=\"\\u0065\";L6R=\"\\u0072\\x61\\u0074\";L6R+=\"\\u0069\\u006f\";O_c=\"\\u004f\";O_c+=\"\\x70\";O_c+=\"\\x65\";O_c+=\"\\x6e\";N_L=\"\\u004f\\u0070\";N_L+=\"\\x65\";N_L+=\"\\u006e\";d7F=\"\\u004f\";d7F+=\"\\x70\";d7F+=\"\\u0065\\x6e\";if(D0L[d7F]){D0L[N_L]=Number((D0L[O_c] * D0L[L6R])['\\x74\\x6f\\u0046\\u0069\\x78\\u0065\\u0064'](8));}if(D0L['\\u0043\\x6c\\x6f\\u0073\\u0065']){D0L[D7E]=Number((D0L['\\u0043\\x6c\\u006f\\u0073\\u0065'] * D0L['\\u0072\\x61\\u0074\\u0069\\x6f'])['\\x74\\x6f\\u0046\\x69\\x78\\x65\\u0064'](+\"8\"));}if(D0L['\\x48\\u0069\\u0067\\x68']){D0L['\\u0048\\x69\\u0067\\x68']=Number((D0L['\\x48\\x69\\u0067\\u0068'] * D0L['\\u0072\\u0061\\x74\\u0069\\x6f'])['\\x74\\x6f\\u0046\\u0069\\u0078\\x65\\u0064'](8));}if(D0L['\\x4c\\x6f\\u0077']){D0L['\\x4c\\u006f\\x77']=Number((D0L['\\u004c\\u006f\\x77'] * D0L['\\x72\\x61\\u0074\\x69\\u006f'])['\\u0074\\x6f\\u0046\\x69\\u0078\\u0065\\x64'](8));}}}}}a6A=this['\\x70\\x72\\u0065\\u0066\\u0065\\x72\\u0065\\x6e\\u0063\\u0065\\u0073']['\\u0077\\u0068\\x69\\x74\\u0065\\u0073\\x70\\x61\\x63\\x65'] / this[Y2t]['\\u0063\\x61\\x6e\\x64\\x6c\\x65\\u0057\\x69\\x64\\u0074\\u0068'];o9m=d05[k8H] >= d05['\\x6d\\u0061\\x78\\x54\\u0069\\u0063\\u006b\\x73'];if(o9m){d05['\\x73\\x70\\x61\\x6e\\x4c\\u006f\\x63\\x6b']=![];}d05['\\x64\\x65\\u0066\\u0061\\x75\\u006c\\u0074\\x43\\u0068\\x61\\x72\\u0074\\u0053\\u0074\\x79\\u006c\\x65\\u0043\\x6f\\x6e\\u0066\\u0069\\x67']={type:N9G['\\u0063\\u0068\\x61\\u0072\\u0074\\x54\\u0079\\u0070\\u0065']};L2l=N9G[g2P];if(L2l && L2l != '\\u006f\\u0068\\u006c\\u0063'){if(!T$_['\\u0043\\x68\\x61\\x72\\u0074\\u0045\\x6e\\u0067\\u0069\\u006e\\u0065']['\\u0063\\x61\\x6c\\x63\\u0075\\u006c\\x61\\u0074\\u0065\\x41\\x67\\u0067\\x72\\u0065\\u0067\\x61\\u0074\\x69\\u006f\\u006e']){console['\\u006c\\u006f\\x67']('\\x41\\u0067\\x67\\x72\\u0065\\x67\\x61\\u0074\\u0069\\x6f\\x6e\\u0020\\x63\\x6f\\x64\\u0065\\u0020\\u0069\\u0073\\u0020\\x6e\\x6f\\u0074\\u0020\\x6c\\u006f\\u0061\\x64\\x65\\x64\\x2f\\u0065\\x6e\\u0061\\x62\\u006c\\u0065\\u0064\\x21');}else {C90=\"\\u0063\\x61\\u006c\\x63\";C90+=\"\\x75\\u006c\\x61\\u0074\\u0065\\u0041\\u0067\\x67\\x72\\x65\\x67\";C90+=\"\\u0061\\x74\\u0069\\x6f\\u006e\";d0M=\"\\x64\\u0065\\u0066\\x61\\x75\\u006c\\u0074\\x43\";d0M+=\"\\x68\\u0061\\u0072\\x74\\x53\\u0074\\x79\";d0M+=\"\\x6c\\u0065\\x43\\x6f\\x6e\\x66\\u0069\\x67\";d05[d0M]['\\x74\\x79\\x70\\x65']=L2l;if(!J6i || !d05['\\x73\\u0074\\u0061\\u0074\\x65']['\\x61\\u0067\\u0067\\x72\\x65\\x67\\u0061\\u0074\\x69\\x6f\\x6e']){d05['\\u0073\\u0074\\x61\\u0074\\x65']['\\x61\\x67\\u0067\\u0072\\u0065\\u0067\\x61\\u0074\\x69\\u006f\\x6e']={};}r5h=T$_['\\x43\\x68\\u0061\\x72\\x74\\x45\\x6e\\u0067\\u0069\\u006e\\x65'][C90](this,L2l,r5h,O$l);}}d05['\\x73\\x70\\x61\\x6e\\x4c\\u006f\\x63\\x6b']=d05['\\u0073\\u0063\\u0072\\u006f\\x6c\\u006c'] > 0 && d05['\\x73\\u0063\\u0072\\u006f\\x6c\\x6c'] < d05['\\u006d\\u0061\\x78\\x54\\x69\\x63\\x6b\\x73'] - a6A;o1Z=o9m || d05['\\u006c\\x6f\\x63\\x6b\\x53\\x63\\x72\\x6f\\x6c\\x6c'] || d05['\\u0073\\x70\\x61\\u006e\\u004c\\x6f\\u0063\\u006b'] || this['\\x69\\u0073\\x48\\x69\\x73\\x74\\x6f\\x72\\u0069\\u0063\\u0061\\x6c\\x4d\\u006f\\u0064\\x65\\x53\\u0065\\x74'];U2w=r5h['\\u006c\\u0065\\u006e\\x67\\x74\\u0068'] - (H0E - O$l['\\x6c\\x65\\x6e\\x67\\x74\\x68']);if(!J6i){U2w=0;}if(U2w){if(d05['\\x73\\u0070\\u0061\\x6e\\x4c\\x6f\\x63\\x6b'] && U2w + d05['\\x73\\x63\\u0072\\x6f\\x6c\\x6c'] >= d05['\\x6d\\u0061\\x78\\u0054\\x69\\x63\\x6b\\x73'] - a6A){d05['\\u0073\\u0070\\u0061\\u006e\\u004c\\x6f\\x63\\u006b']=!1;}else if(o1Z || U2w < 0){g1t=\"\\x73\\u0063\\x72\";g1t+=\"\\u006f\";g1t+=\"\\x6c\";g1t+=\"\\u006c\";d05[g1t]+=U2w;this['\\x67\\x72\\x61\\u0062\\x53\\x74\\x61\\x72\\u0074\\x53\\x63\\x72\\u006f\\x6c\\x6c\\u0058']+=U2w;if(this['\\u0073\\u0077\\u0069\\u0070\\u0065']){this['\\u0073\\x77\\u0069\\x70\\u0065']['\\x73\\x63\\x72\\x6f\\u006c\\u006c']+=U2w;}}}if(this['\\u0074\\u0072\\x61\\u006e\\u0073\\x66\\u006f\\x72\\u006d\\x44\\x61\\x74\\u0061\\u0053\\x65\\u0074\\x50\\u006f\\u0073\\u0074']){this['\\x74\\x72\\x61\\u006e\\u0073\\u0066\\u006f\\u0072\\x6d\\x44\\x61\\x74\\u0061\\x53\\x65\\x74\\u0050\\x6f\\x73\\x74'](this,r5h,v_a,I7e);}W9o=this['\\u006d\\x61\\x78\\u0044\\u0061\\x74\\u0061\\u0053\\u0065\\x74\\u0053\\x69\\u007a\\u0065'];if(W9o){if(O$l['\\u006c\\u0065\\u006e\\u0067\\u0074\\x68'] + r5h['\\u006c\\x65\\x6e\\x67\\x74\\u0068'] > W9o){g9u=\"\\x73\\x6c\\u0069\";g9u+=\"\\u0063\";g9u+=\"\\u0065\";if(r5h['\\u006c\\x65\\u006e\\x67\\x74\\x68'] < W9o){J0k=\"\\u006c\";J0k+=\"\\x65\";J0k+=\"\\u006e\\x67\\u0074\\x68\";O$l=O$l['\\x73\\u006c\\u0069\\x63\\x65'](r5h[J0k] - W9o);}else {O$l=[];}r5h=r5h[g9u](-W9o);}}if(!d05[n7E]){d05['\\x73\\u0063\\x72\\x75\\u0062\\u0062\\u0065\\x64']=[];}if(O$l['\\x6c\\u0065\\x6e\\u0067\\u0074\\u0068']){V20=\"\\x6c\";V20+=\"\\u0065\\x6e\";V20+=\"\\x67\\u0074\\x68\";E6t=\"\\x73\";E6t+=\"\\u0063\\x72\";E6t+=\"\\x75\\u0062\\x62\\u0065\\u0064\";e9i.P3q(134);var F4U=e9i.o5B(17,18,0,2,16);r$X=O$l[O$l['\\x6c\\u0065\\u006e\\x67\\u0074\\x68'] - F4U]['\\x44\\u0054'];while(d05[E6t]['\\x6c\\x65\\x6e\\u0067\\u0074\\x68'] && d05['\\x73\\x63\\x72\\x75\\x62\\x62\\x65\\u0064'][d05['\\u0073\\x63\\u0072\\u0075\\x62\\u0062\\x65\\x64'][V20] - 1]['\\u0044\\u0054'] > r$X){d05['\\x73\\u0063\\x72\\x75\\x62\\u0062\\u0065\\u0064']['\\u0070\\u006f\\x70']();}}else {g1s=\"\\x73\";g1s+=\"\\u0063\\x72\\u0075\\u0062\";g1s+=\"\\u0062\";g1s+=\"\\u0065\\x64\";d05[g1s]=[];}if(!d05['\\x73\\u0074\\u0061\\x74\\x65'][B1I]){d05['\\x73\\u0074\\x61\\u0074\\x65']['\\u0073\\x74\\x75\\u0064\\u0069\\x65\\x73']={};}d05['\\u0073\\u0074\\x61\\x74\\x65'][d2$]['\\x73\\x74\\x61\\x72\\u0074\\u0046\\u0072\\u006f\\x6d']=d05['\\x73\\u0063\\x72\\u0075\\u0062\\x62\\u0065\\x64'][e_M];C_M=[];for(H6v=0;H6v < r5h['\\u006c\\u0065\\x6e\\u0067\\u0074\\x68'];H6v++){s8p=\"\\u0043\";s8p+=\"\\u006c\\x6f\\x73\\x65\";o2v=r5h[H6v];if(o2v['\\u0043\\u006c\\x6f\\u0073\\x65'] || o2v[s8p] === +\"0\"){C_M['\\u0070\\x75\\x73\\x68'](o2v);}else if(o2v['\\x44\\u0054'] > Date['\\u006e\\u006f\\u0077']()){C_M['\\x70\\u0075\\u0073\\u0068'](o2v);}}d05['\\x73\\u0063\\x72\\u0075\\x62\\u0062\\u0065\\u0064']=d05[n9j]['\\x63\\u006f\\x6e\\x63\\u0061\\u0074'](C_M);if(!J6i || !d05['\\x73\\u0074\\x61\\u0074\\x65']['\\x63\\x61\\x6c\\x63\\x75\\x6c\\u0061\\u0074\\u0069\\u006f\\x6e\\x73']){d05[g6f]['\\u0063\\u0061\\u006c\\x63\\u0075\\x6c\\x61\\u0074\\x69\\x6f\\u006e\\x73']={};}this[E5w](d05,20,C_M);this['\\x63\\u0061\\u006c\\x63\\u0075\\u006c\\u0061\\u0074\\x65\\u004d\\x65\\x64\\x69\\x61\\u006e\\u0050\\x72\\u0069\\u0063\\x65'](d05,C_M);this['\\u0063\\x61\\u006c\\x63\\u0075\\x6c\\x61\\u0074\\x65\\u0054\\u0079\\u0070\\u0069\\u0063\\u0061\\u006c\\u0050\\u0072\\x69\\x63\\u0065'](d05,C_M);this['\\u0063\\x61\\u006c\\x63\\u0075\\x6c\\u0061\\u0074\\x65\\x57\\x65\\x69\\x67\\u0068\\u0074\\u0065\\u0064\\x43\\u006c\\u006f\\u0073\\u0065'](d05,C_M);this['\\u0063\\x61\\x6c\\x63\\x75\\u006c\\u0061\\u0074\\u0065\\u004f\\u0048\\x4c\\u0043\\u0034'](d05,C_M);for(M47 in this['\\u0070\\u006c\\x75\\x67\\x69\\x6e\\u0073']){r1N=\"\\x63\\x72\\x65\\u0061\\u0074\\u0065\\x44\\x61\\x74\";r1N+=\"\\u0061\\u0053\\u0065\\x74\";d1R=\"\\x70\\u006c\";d1R+=\"\\x75\";d1R+=\"\\x67\\x69\\x6e\";d1R+=\"\\u0073\";e6c=this[d1R][M47];if(e6c[r1N]){e6c['\\u0063\\x72\\u0065\\u0061\\u0074\\x65\\u0044\\u0061\\u0074\\x61\\u0053\\x65\\u0074'](this,d05,r5h,O$l['\\x6c\\u0065\\u006e\\u0067\\u0074\\x68']);}}d05[X6l]=O$l[V6q](r5h);d05['\\u0070\\x69\\x78\\x65\\x6c\\u0043\\x61\\x63\\x68\\u0065\\x45\\u0078\\u0070\\u0069\\x72\\x65\\x64']=!\"\";M47=O$l[m3f];if(d05['\\x64\\u0061\\x74\\u0061\\x53\\x65\\x74'][0] && d05['\\x64\\u0061\\x74\\u0061\\u0053\\u0065\\u0074'][+\"0\"]['\\x74\\u0069\\u0063\\u006b'] > 0){e9i.b$0(63);M47=e9i.j1j(\"0\",0);}for(M47;M47 < d05['\\x64\\u0061\\x74\\u0061\\u0053\\x65\\u0074']['\\x6c\\x65\\x6e\\x67\\x74\\u0068'];M47++){g6r=\"\\x64\";g6r+=\"\\x61\\u0074\\u0061\\u0053\";g6r+=\"\\u0065\";g6r+=\"\\x74\";d05[g6r][M47]['\\u0074\\x69\\u0063\\x6b']=M47;}d05[p$p]=0;q0d=this['\\x6c\\x61\\x79\\u006f\\u0075\\u0074']['\\x73\\u0074\\x75\\u0064\\u0069\\x65\\x73'];a8o=d05['\\x73\\x63\\x72\\u0075\\u0062\\x62\\u0065\\x64']['\\u006c\\u0065\\u006e\\x67\\u0074\\x68'];if(q0d && Object['\\x6b\\x65\\u0079\\u0073'](q0d)[c0i]){P7T=\"\\u0073\\u0074\\x75\\u0064\";P7T+=\"\\x69\\u0065\\x73\";S1D=\"\\x73\\x6f\";S1D+=\"\\x72\\u0074\";S1D+=\"\\u0065\";S1D+=\"\\x64\";C94=d05['\\u0073\\x74\\x61\\x74\\x65']['\\x73\\x74\\x75\\u0064\\u0069\\x65\\x73'][S1D] || T$_['\\u0053\\u0074\\x75\\x64\\x69\\u0065\\u0073']['\\x73\\x6f\\u0072\\x74\\u0046\\u006f\\u0072\\x50\\x72\\u006f\\u0063\\x65\\x73\\u0073\\u0069\\u006e\\x67'](this);s7v=this;d05['\\x73\\u0074\\u0061\\x74\\u0065'][P7T]['\\u0073\\u006f\\x72\\u0074\\x65\\u0064']=C94;C94['\\u0066\\u006f\\u0072\\x45\\u0061\\x63\\u0068'](function(V6G){var R6u;V6G['\\x73\\x74\\u0061\\u0072\\u0074\\u0046\\u0072\\x6f\\u006d']=d05['\\u0073\\x74\\u0061\\u0074\\x65']['\\u0073\\u0074\\x75\\x64\\u0069\\u0065\\u0073']['\\x73\\u0074\\x61\\x72\\x74\\x46\\x72\\x6f\\x6d'];V6G['\\u0065\\u0072\\u0072\\u006f\\x72']=null;if(!V6G['\\x64\\x69\\u0073\\u0061\\u0062\\x6c\\x65\\x64'] || V6G['\\u0063\\u0068\\x65\\x63\\u006b\\u0044\\x69\\u0073\\u0061\\u0062\\x6c\\x65\\u0064']){R6u=\"\\x66\\x6c\\x61\\x67\\u0053\\x69\\u0067\\x6e\";R6u+=\"\\u0061\\u006c\";R6u+=\"\\x73\";if(V6G['\\x73\\x74\\x75\\x64\\u0079'] && V6G['\\u0073\\u0074\\x75\\u0064\\x79']['\\x63\\x61\\x6c\\u0063\\u0075\\u006c\\u0061\\x74\\u0065\\x46\\x4e']){V6G['\\u0073\\x74\\u0075\\x64\\u0079']['\\x63\\u0061\\x6c\\x63\\x75\\x6c\\x61\\u0074\\x65\\x46\\x4e'](s7v,V6G);}if(V6G['\\x66\\x6c\\u0061\\x67\\u0053\\x69\\u0067\\x6e\\u0061\\x6c\\u0073']){V6G[R6u]();}}});}for(M47=a8o;M47 < d05['\\x73\\x63\\x72\\x75\\x62\\x62\\u0065\\u0064']['\\x6c\\x65\\x6e\\x67\\u0074\\u0068'];M47++){L$x=\"\\x6c\\u0065\";L$x+=\"\\x6e\\x67\";L$x+=\"\\x74\\x68\";T84=d05['\\x73\\x63\\x72\\u0075\\x62\\x62\\x65\\u0064'][M47];T84['\\x74\\x69\\x63\\x6b']=d05['\\u0064\\x61\\x74\\x61\\x53\\u0065\\u0074'][L$x];d05['\\x64\\x61\\u0074\\x61\\x53\\u0065\\x74']['\\x70\\x75\\u0073\\u0068'](T84);}if(!X$R[h8$]){e9i.F9();console['\\u006c\\x6f\\u0067']('\\u0076\\x61\\x6c\\x69\\x64\\u0061\\x74\\u0065\\u004c\\x69\\u0063\\x65\\u006e\\u0073\\u0065\\u0020\\u0064\\x69\\x64\\x20\\u006e\\u006f\\u0074\\x20\\u0073\\x75\\u0063\\x63\\x65\\u0065\\x64');}if(this['\\u0064\\u0072\\x61\\x77\\u0069\\u006e\\x67\\x4f\\u0062\\x6a\\u0065\\x63\\u0074\\x73'][r4d]){this['\\x61\\u0064\\u006a\\u0075\\x73\\x74\\u0044\\x72\\x61\\u0077\\u0069\\x6e\\x67\\u0073']();}if(this['\\u0065\\x73\\x74\\x61\\u0062\\x6c\\u0069\\u0073\\u0068\\u004d\\u0061\\x72\\u006b\\u0065\\u0072\\u0054\\x69\\u0063\\x6b\\x73']){this['\\x65\\u0073\\x74\\x61\\x62\\x6c\\u0069\\x73\\x68\\u004d\\u0061\\x72\\x6b\\u0065\\u0072\\x54\\x69\\u0063\\x6b\\u0073']();}this['\\x72\\x75\\x6e\\u0041\\u0070\\x70\\u0065\\x6e\\x64']('\\x63\\u0072\\x65\\u0061\\u0074\\u0065\\x44\\u0061\\x74\\x61\\u0053\\u0065\\x74',d5i);};g7I=-1477749700;n$B=-231183904;R9W=+\"2\";for(var b$n=1;e9i.n$o(b$n.toString(),b$n.toString().length,63209) !== g7I;b$n++){e2g=Symbol.for(\"\");R9W+=2;}if(e9i.P8Y(R9W.toString(),R9W.toString().length,36091) !== n$B){e2g=Symbol.for(\"\");}function X$R(O8N,H4Z){e9i.V8b();(()=>{var w0z,N5Z,j0k,O0m,L3C,U2P,l_8,d6Z,J0M,w15,e9D,D4d,W9n,B8V,t5F,d0r,S46,O3d,E2$,W97,D_p,E0c,U4D,U9N,G86,v4u,h0w,q9P,y0O,y_Q,q8C,E1m,u8o,P9L,G9u,U2U,X3f,I5z,l5u,B4c,f$D,J8U,C9g,K8U,V58,I4N,m33,g9o,W1P,f21,h3E,H_C,m9K,u0J,n3S,G1G,j$v,V9b;w0z=console;N5Z=URL;j0k=Date[e9i.V1(\"2\" | 0)]();O0m=RegExp;L3C=e9i.q4(12);U2P=self;e9i.V8b();if(X$R[L3C] > j0k){return;}l_8=e9i.V1(44);e9i.b$0(44);d6Z=e9i.q4(e9i.j1j(0,\"37\"));J0M=e9i.V1(0);e9i.b$0(63);w15=e9i.V1(e9i.j1j(\"20\",20));e9D=e9i.V1(+\"1\");D4d=e9i.V1(+\"31\");W9n=e9i.q4(13);B8V=e9i.q4(36);t5F=e9i.q4(+\"17\");d0r=e9i.V1(39);S46=e9i.q4(15);O3d=e9i.V1(37);E2$=e9i.V1(40);W97=e9i.V1(16);D_p=e9i.q4(7);E0c=e9i.V1(26);U4D=e9i.V1(+\"41\");U9N=e9i.V1(30);G86=e9i.V1(21);e9i.P3q(3);v4u=e9i.V1(e9i.o5B(\"4\",0));h0w=Number[e9i.V1(22)];q9P=e9i.q4(3);y0O=e9i.V1(35);y_Q=e9i.q4(27);q8C=e9i.V1(28);e9i.P3q(41);E1m=e9i.q4(e9i.o5B(\"5\",0));X$R[E1m]=!!\"\";if(!O8N){O8N=T$_;}u8o=[];function S_c(v$t){var t1m,m4Z;var [F4T,N95]=v$t[e9i.V1(29)](e9i.V1(14));function F2e(P6p){var a3J;e9i.a3b();if(P6p instanceof Object){a3J=Object[e9i.q4(11)](P6p)[e9i.V1(25)]()[e9i.q4(\"32\" | 32)]((R0W,t2a)=>{var M3n;M3n=t2a[e9i.q4(32)]((m7Z,K_K)=>{e9i.b$0(3);e9i.a3b();var q82=e9i.o5B(372,341);return Math[e9i.q4(24)](m7Z * q82 + F2e(K_K)) % h0w;},0);e9i.P3q(7);var L4m=e9i.j1j(29,2);e9i.a3b();return Math[e9i.q4(\"24\" << 64)](R0W * L4m + M3n) % h0w;},0);}else {a3J=P6p[e9i.q4(43)]()[e9i.V1(+\"29\")](e9i.q4(38))[e9i.V1(32)]((F66,V07)=>{e9i.b$0(7);var T44=e9i.o5B(19,12);return Math[e9i.q4(24)](F66 * T44 + V07[e9i.q4(8)](0)) % h0w;},0);}return a3J;}t1m=JSON[e9i.q4(42)](atob(F4T));function A2c(p7c,Z2R,t8F,R8s){var T2X;e9i.a3b();T2X=p7c[e9i.V1(29)](e9i.V1(34))[e9i.V1(19)](X1y=>{return BigInt(X1y);})[e9i.q4(\"19\" - 0)](x8m=>{e9i.V8b();return O8N[y_Q](x8m,t8F) % R8s;})[e9i.q4(19)](K_y=>{e9i.a3b();return Number(K_y);});return O8N[S46](T2X,Z2R);}if(A2c(atob(N95),16,BigInt(+\"19433\"),BigInt(26069)) !== F2e(t1m)){O8N[e9i.q4(6)](q8C);e9i.L2();u8o[e9i.V1(18)](q8C);}m4Z={};Object[e9i.V1(9)](m4Z,G86,{value:W1t=>{return t1m[W1t];}});return m4Z;}try{P9L=S_c(O8N[v4u]());G9u=P9L[G86](O3d);if(G9u !== O8N[y0O]()[d6Z]){e9i.L2();u8o[e9i.V1(\"18\" << 32)](O3d);}U2U=P9L[G86](W97);X3f=U2U[q9P][d0r](U2U);if((X3f(E2$) || X3f(E0c)) && U2P[D4d]){I5z=P9L[G86](E2$);l5u=P9L[G86](E0c);B4c=U2P[D4d][w15];f$D=U2P[D4d][e9D];J8U=!({});C9g=!\"1\";if(I5z){J8U=I5z[e9i.V1(+\"23\")](p9_=>{e9i.V8b();return new O0m(p9_)[e9i.V1(+\"17\")](B4c);});}if(l5u){C9g=l5u[e9i.q4(23)](F9O=>{e9i.V8b();return new O0m(F9O)[t5F](f$D);});}if(!(J8U || C9g)){K8U=1507924765;V58=-73727074;I4N=+\"2\";for(var p6R=1;e9i.n$o(p6R.toString(),p6R.toString().length,99971) !== K8U;p6R++){e9i.F9();I4N+=2;}if(e9i.P8Y(I4N.toString(),I4N.toString().length,62679) !== V58){e9i.F9();}e9i.F9();u8o[e9i.V1(18)](`${E2$}${e9i.q4(10)}${f$D}`);}if(X3f(U4D)){g9o=U2P[D4d][l_8];if(g9o){if(g9o[e9i.V1(+\"33\")] && g9o[g9o[e9i.V1(33)] - +\"1\"] !== U2P){e9i.P3q(3);var x0f=e9i.j1j(48,15);e9i.b$0(116);var X26=e9i.o5B(10,5,10,19,10);m33=new N5Z(g9o[g9o[e9i.q4(x0f)] - X26]);}}else if(U2P[J0M]){W1P=U2P[J0M][B8V];if(![e9i.V1(38),f$D][e9i.V1(\"3\" | 3)](W1P)){m33=new N5Z(W1P);}}if(m33 !== undefined){f21=m33[w15];h3E=m33[e9D];H_C=!!\"\";m9K=!({});if(I5z){H_C=I5z[e9i.q4(23)](U$1=>{return new O0m(U$1)[t5F](f21);});}if(l5u){m9K=l5u[e9i.V1(23)](X9y=>{return new O0m(X9y)[t5F](h3E);});}if(!(H_C || m9K)){e9i.L2();u8o[e9i.q4(18)](`${U4D}${e9i.V1(10)}${h3E}`);}}}}if(X3f(D_p)){u0J=P9L[G86](D_p);if(j0k > u0J){e9i.L2();n3S=586234888;G1G=1670254069;j$v=2;for(var V3g=\"1\" << 32;e9i.P8Y(V3g.toString(),V3g.toString().length,40478) !== n3S;V3g++){u8o[e9i.V1(31)](D_p);j$v+=2;}if(e9i.n$o(j$v.toString(),j$v.toString().length,31668) !== G1G){u8o[e9i.V1(18)](D_p);}}}if(H4Z && X3f(U9N)){V9b=P9L[G86](U9N);if(!V9b[e9i.V1(3)](H4Z)){e9i.L2();u8o[e9i.q4(\"18\" - 0)](`${U9N}${e9i.V1(10)}${H4Z}`);}}}catch(z5L){e9i.L2();u8o[e9i.q4(18)](z5L);}if(u8o[e9i.V1(\"33\" << 64)] === 0){X$R[E1m]=!![];e9i.P3q(100);X$R[L3C]=e9i.o5B(j0k,32,\"60000\");}else {w0z[W9n](u8o);e9i.P3q(16);X$R[L3C]=e9i.o5B(j0k,\"3600000\");}})();}e2g=Symbol.for(\"CIQ.watermark\");function Z6Z(E_P,F_i){var I0R,z4u,a4I,d2o,S7n,A5e,F0z,J6j,O6K,f2J;if(E_P.hasOwnProperty(e2g)){return;}I0R=new Image();e9i.b$0(62);z4u=e9i.j1j(64,\"10\");a4I=3.375;e9i.P3q(135);d2o=e9i.o5B(\"4\",5);e9i.b$0(135);S7n=e9i.j1j(\"5\",4);A5e=5;e9i.b$0(0);var T$W=e9i.o5B(2,8,14);F0z=Math.pow(d2o,T$W) / (\"2\" ^ 0);e9i.b$0(22);J6j=e9i.j1j(1,4);O6K=J6j;f2J=Object.create(null,{sizeRatio:{configurable:!!\"\",enumerable:!1,get:function(){e9i.a3b();return O6K;},set:function(D9F){e9i.V8b();if(D9F < F0z){O6K=F0z;}else if(D9F > J6j){O6K=J6j;}else {O6K=D9F || J6j;}}},draw:{configurable:!({}),enumerable:![],value:function(n7a){e9i.V8b();var a0_,m2n,a6Y,x2a,f0g,w56,h8u,r6I,q_q;if(this.image){a0_=n7a.container.ownerDocument;m2n=a0_.querySelector(\"cq-attrib-container\")?a0_.querySelector(\"cq-attrib-container\").offsetHeight:0;a6Y=n7a.yAxis.bottom - m2n - z4u;var {width:T_2, height:o$1}=this.image;if(isNaN(T_2) || isNaN(o$1)){return;}x2a=T_2 * this.sizeRatio;f0g=o$1 * this.sizeRatio;w56=n7a.left + z4u;e9i.b$0(3);h8u=e9i.j1j(a6Y,f0g);r6I=n7a.context;q_q=!!\"\";do {if((w56 + x2a * a4I > n7a.right || f0g * A5e > a6Y) && this.sizeRatio > F0z){this.sizeRatio*=d2o;x2a=T_2 * this.sizeRatio;f0g=o$1 * this.sizeRatio;e9i.b$0(3);h8u=e9i.j1j(a6Y,f0g);q_q=!![];}else if(w56 + T_2 * (this.sizeRatio * S7n) * a4I < n7a.right && o$1 * (this.sizeRatio * S7n) * A5e < a6Y && this.sizeRatio < J6j){this.sizeRatio*=S7n;x2a=T_2 * this.sizeRatio;f0g=o$1 * this.sizeRatio;e9i.b$0(3);h8u=e9i.o5B(a6Y,f0g);q_q=!\"\";}else {q_q=!1;}}while(q_q);r6I.save();var [,,S3r]=T$_.hsl(E_P.containerColor);r6I.globalAlpha=S3r > 0.35?0.15:0.2;this.image.src=S3r > 0.35?this.image.darksrc:this.image.lightsrc;r6I.drawImage(this.image,\"0\" - 0,0,T_2,o$1,w56,h8u,x2a,f0g);r6I.restore();this.first=!!0;}else if(this.first !== !\"1\"){this.first=n7a;}},writable:!!0}});I0R.onload=function(){e9i.a3b();Object.defineProperty(f2J,\"image\",{configurable:!({}),enumerable:!\"1\",value:I0R,writable:!1});if(!I0R.darksrc){I0R.lightsrc=I0R.src;e9i.P3q(11);var Q1Q=e9i.j1j(89,17,1039,3);e9i.b$0(136);var Y9G=e9i.j1j(3917,785,5,2,15);e9i.P3q(35);var B9u=e9i.o5B(71513,13,71500,5499);e9i.P3q(45);var l0D=e9i.j1j(3549,3533,3533);e9i.b$0(48);var E7p=e9i.o5B(11,2,6173,16,191382);e9i.b$0(7);var k$1=e9i.o5B(20,60);e9i.P3q(3);var H5g=e9i.j1j(7448,6384);I0R.darksrc=F_i.slice(0,Q1Q) + ((313.66,Y9G) != B9u?\"i\":+\"6370\" == l0D?E7p:\"592\" | k$1) + F_i.slice(H5g);I0R.src=I0R.darksrc;}else {if(f2J.first){f2J.first.container.stx.draw();}}};I0R.src=F_i;Object.defineProperty(E_P,e2g,{configurable:!({}),enumerable:!!\"\",value:f2J,writable:![]});}};H1=a$h=>{var D6t=x2w9K;var w2U,g78,r4c,M_8;w2U=\"\\x70\";w2U+=\"\\u0072\\u006f\";w2U+=\"\\x74\\u006f\\x74\\u0079\\u0070\\x65\";g78=\"\\x43\\u0068\\u0061\\u0072\\u0074\\x45\\x6e\";D6t.a3b();g78+=\"\\x67\\u0069\\u006e\\u0065\";if(!a$h.SplinePlotter){a$h.SplinePlotter={};}r4c=a$h.CIQ;M_8=a$h.SplinePlotter;r4c[g78][w2U]['\\x64\\u0072\\u0061\\x77\\u0042\\x61\\u0072\\u0054\\u0079\\u0070\\x65\\u0043\\x68\\x61\\x72\\x74\\u0049\\u006e\\u006e\\u0065\\x72']=function(I_D){var q2P,E3O,V12,B1V,F31,O5Z,o1h,R3m,S3l,o4K,q69,g$Q,G7J,J9v,w_z,A8k,Q16,L_F,T2u,Y8n,v6U,A6d,I9K,B7N,i74,S$h,S$e,U2H,Y0p,N2s,j_Z,M3N,F_E,h3t,t$z,f$S,Q1_,V2C,e3G,c1w,Q8N,b4m,W5d,e19,k4d,m3b,X1e,u5N,a5h,m6f,N6M,T3x,b7b,H06,N_h,V_M,N79,e$1,R61,E6D,C0K,K1e,y9A,h88,u4u,X8K,m31,z7W,j_q,P$T,U6W,E1T,m5_,W9p,s$t,F1M,X_8,J0N,w_j,W02,x77,z8v,w9H,j39,X2H,h9n,U3c,G7j,p2M,d63,L6x,E_V,O7q,b5j,U4m,L7H,Q7M,f$4,B51,l6A,B2e,N8r,f0y,M8q,V0Y,B3j,I1s,G2w,i_e,B79,U_$,H2c,f$u,s3A,R0T,v_H,Y6l,n$t,s_$,h0V,P49,O1A,D56,V08,B8z,d0a,z5n,C3W,G5s,x$6,k$u,t4a,X8A,j8U,Z48,r56,a7W,K4d,W_4,b8v,v$H,M01,c3h,W4x,C1X,Z5o,o4d,V_7;q2P=\"\\x67\\x6c\\x6f\\x62\\x61\\u006c\\x41\\x6c\\u0070\";q2P+=\"\\x68\\u0061\";E3O=\"\\x6c\\x65\";E3O+=\"\\x6e\\u0067\\x74\";E3O+=\"\\x68\";V12=\"\\u0073\";V12+=\"\\x74\\u0061\\u0074\\u0065\";B1V=\"\\u0074\\x6d\\x70\";B1V+=\"\\x57\";B1V+=\"\\x69\";B1V+=\"\\x64\\x74\\x68\";F31=\"\\x6d\\x69\";F31+=\"\\x63\\u0072\\x6f\\x70\\x69\\u0078\";F31+=\"\\x65\\x6c\";F31+=\"\\x73\";O5Z=\"\\u0063\\x61\\u006e\\x64\";O5Z+=\"\\x6c\\u0065\";O5Z+=\"\\u0057\\x69\\x64\\u0074\\x68\";o1h=\"\\u0079\\x41\\x78\";o1h+=\"\\x69\\x73\";R3m=\"\\x68\\x69\\u0067\\u0068\";R3m+=\"\\x6c\";R3m+=\"\\u0069\\u0067\\u0068\";R3m+=\"\\x74\";S3l=\"\\x69\\x73\\x54\\u0072\\x61\";S3l+=\"\\u006e\\u0073\\u0070\\x61\\x72\\u0065\\x6e\\x74\";o4K=\"\\u0063\";o4K+=\"\\x6c\\x65\\u0061\\x6e\\x75\\u0070\\x47\\u0061\\u0070\\x73\";q69=\"\\u006c\";q69+=\"\\x65\";q69+=\"\\x6e\\x67\\u0074\";q69+=\"\\u0068\";g$Q=\"\\x63\\u006f\\x6e\";g$Q+=\"\\x74\\u0065\";g$Q+=\"\\x78\\u0074\";G7J=\"\\x63\";G7J+=\"\\u0068\";G7J+=\"\\x61\\x72\\u0074\";D6t.V8b();J9v=\"\\x73\\x68\";J9v+=\"\\u0061\\x64\";J9v+=\"\\x6f\";J9v+=\"\\u0077\";w_z=\"\\u0063\\x61\";w_z+=\"\\u006e\\u0064\\u006c\\u0065\";A8k=\"\\x68\";A8k+=\"\\x69\\u0073\\x74\";A8k+=\"\\x6f\\x67\\x72\\u0061\\u006d\";Q16=\"\\x76\\u006f\\u006c\";Q16+=\"\\u0075\\x6d\\u0065\";L_F=\"\\x69\\u0073\\u0044\\x6f\\x6a\\x69\\x43\";L_F+=\"\\x61\\u006e\\x64\\x6c\";L_F+=\"\\u0065\\u004f\\u006e\\x6c\\x79\";T2u=\"\\u0079\\u0041\";T2u+=\"\\x78\";T2u+=\"\\u0069\";T2u+=\"\\x73\";Y8n=\"\\x73\\u0074\";Y8n+=\"\\x79\\x6c\\x65\";v6U=\"\\u0070\\x61\";v6U+=\"\\x6e\";v6U+=\"\\u0065\";v6U+=\"\\x6c\";A6d=I_D['\\u0074\\u0079\\x70\\x65'];I9K=I_D[v6U];B7N=I_D['\\x66\\x69\\x65\\x6c\\u0064'];i74=I_D['\\u0066\\x69\\u006c\\x6c\\x43\\u006f\\u006c\\x6f\\x72'];S$h=I_D['\\u0062\\u006f\\u0072\\u0064\\u0065\\u0072\\x43\\x6f\\x6c\\x6f\\u0072'];S$e=I_D['\\x63\\x6f\\u006e\\x64\\u0069\\x74\\x69\\x6f\\x6e'];U2H=I_D[Y8n];Y0p=I_D[T2u];N2s=I_D[L_F]?I_D['\\u0069\\u0073\\x44\\u006f\\u006a\\x69\\u0043\\x61\\x6e\\u0064\\u006c\\x65\\u004f\\u006e\\x6c\\u0079']:!!0;j_Z=I_D['\\u0074\\x69\\u0063\\x6b\\x46\\x69\\x6c\\u0074\\x65\\u0072'];M3N=I_D[Q16];F_E=I_D['\\u0073\\u0074\\u0072\\x65\\u0074\\x63\\x68\\u0047\\x61\\u0070\\x73'];D6t.P3q(83);h3t=D6t.o5B(A6d,A8k);t$z=h3t || A6d == w_z;D6t.b$0(83);f$S=D6t.j1j(A6d,J9v);D6t.P3q(83);Q1_=D6t.o5B(A6d,'\\u0068\\x6c\\u0063');V2C=A6d == '\\u0062\\x61\\x72' || Q1_;e3G=I9K[G7J];c1w=e3G['\\u0064\\x61\\u0074\\x61\\x53\\u0065\\x67\\u006d\\x65\\u006e\\u0074'];Q8N=this['\\u0063\\x68\\u0061\\x72\\x74'][g$Q];b4m=new Array(c1w[q69]);W5d=this['\\u006c\\u0061\\x79\\x6f\\x75\\u0074'];if(!F_E && F_E !== !1){F_E=this[o4K] === '\\u0073\\x74\\x72\\u0065\\u0074\\x63\\x68';}e19=S$h && !r4c[S3l](S$h);k4d=0;if(e19 && !I_D['\\x68\\u0069\\u0067\\x68\\u006c\\u0069\\x67\\x68\\x74']){k4d=0.5;}m3b=Q8N['\\u0067\\x6c\\u006f\\x62\\x61\\u006c\\u0041\\u006c\\x70\\x68\\x61'];if(!I_D[R3m] && this['\\x68\\x69\\u0067\\u0068\\x6c\\u0069\\x67\\x68\\x74\\u0065\\u0064\\u0044\\u0072\\x61\\u0067\\u0067\\x61\\u0062\\x6c\\x65']){Q8N['\\u0067\\u006c\\x6f\\u0062\\x61\\x6c\\u0041\\x6c\\u0070\\x68\\u0061']*=+\"0.3\";}Q8N['\\x62\\x65\\u0067\\x69\\u006e\\x50\\u0061\\u0074\\x68']();if(!Y0p){Y0p=I9K[o1h];}X1e=Y0p['\\u0074\\x6f\\x70'];u5N=Y0p['\\x62\\u006f\\u0074\\u0074\\u006f\\x6d'];a5h=W5d[O5Z];D6t.b$0(94);var I0f=D6t.o5B(17,2,17);m6f=I9K['\\u006c\\u0065\\u0066\\u0074'] - 0.5 * a5h + this[F31] - I0f;D6t.P3q(137);var v2i=D6t.o5B(26,20,8,9,6);N6M=e3G[B1V] / v2i;D6t.b$0(7);var p1p=D6t.j1j(2,0);T3x=Q8N['\\x6c\\x69\\u006e\\x65\\x57\\x69\\x64\\u0074\\u0068'] / p1p;if(t$z){b7b=\"\\u0066\";b7b+=\"\\u0069\\x6c\\x6c\\x53\\u0074\\u0079\\u006c\\x65\";Q8N[b7b]=i74;}if(f$S){H06=1923722433;N_h=-1299356758;V_M=2;for(var j4r=1;D6t.P8Y(j4r.toString(),j4r.toString().length,24243) !== H06;j4r++){Q8N['\\u006c\\u0069\\x6e\\u0065\\u0057\\u0069\\x64\\u0074\\x68']=1;V_M+=2;}if(D6t.P8Y(V_M.toString(),V_M.toString().length,75875) !== N_h){Q8N[\"\"]=8;}}if(V2C){N79=this['\\x63\\u0061\\u006e\\u0076\\u0061\\x73\\u0053\\u0074\\u0079\\x6c\\x65'](U2H);if(N79['\\u0077\\u0069\\u0064\\u0074\\x68'] && parseInt(N79['\\u0077\\u0069\\u0064\\x74\\u0068'],\"10\" - 0) <= 25){Q8N['\\x6c\\u0069\\x6e\\x65\\x57\\x69\\u0064\\x74\\x68']=Math['\\x6d\\x61\\x78'](1,r4c['\\u0073\\u0074\\u0072\\x69\\x70\\x50\\u0058'](N79['\\x77\\x69\\u0064\\x74\\x68']));}else {Q8N['\\x6c\\x69\\x6e\\u0065\\x57\\x69\\x64\\u0074\\u0068']=1;}}e$1=e3G[V12]['\\u0063\\x68\\x61\\u0072\\x74\\x54\\u0079\\x70\\x65']['\\u0070\\u0061\\x73\\u0073'];R61=-1;for(var S6d=0;S6d <= c1w[E3O];S6d++){E6D=\"\\x66\";E6D+=\"\\u006c\\u006f\";E6D+=\"\\u006f\";E6D+=\"\\u0072\";C0K=\"\\x72\";C0K+=\"\\u006f\";C0K+=\"\\u0075\";C0K+=\"\\u006e\\x64\";K1e=\"\\u0066\\u006c\";K1e+=\"\\x6f\\u006f\";K1e+=\"\\x72\";y9A=\"\\u006d\";y9A+=\"\\u0069\";y9A+=\"\\u006e\";h88=\"\\u0074\";h88+=\"\\x6f\";h88+=\"\\u0070\";u4u=\"\\u0066\\u006c\\x69\\u0070\";u4u+=\"\\u0070\\u0065\\x64\";X8K=\"\\u006d\\u0061\";X8K+=\"\\u0078\";m31=\"\\u006c\";m31+=\"\\u006f\\u0067\";z7W=\"\\x6d\\u0075\\u006c\";z7W+=\"\\x74\\u0069\";z7W+=\"\\u0070\\x6c\\u0069\";z7W+=\"\\x65\\u0072\";j_q=\"\\u0068\\x69\";j_q+=\"\\u0067\";j_q+=\"\\u0068\";P$T=\"\\x6c\\u006f\";P$T+=\"\\u0067\";P$T+=\"\\u004c\\x6f\";P$T+=\"\\u0077\";U6W=\"\\u006d\\u0061\";U6W+=\"\\u0078\";E1T=\"\\x73\\u0065\\x6d\\u0069\";E1T+=\"\\x4c\\x6f\\u0067\";m5_=\"\\x64\\u0065\\u0066\\x61\\u0075\\u006c\\x74\\x50\\x6c\\u006f\";m5_+=\"\\u0074\\x46\\x69\\x65\\u006c\\x64\";W9p=\"\\x64\\u0065\\x66\\x61\\u0075\";W9p+=\"\\x6c\\u0074\\x50\\x6c\\x6f\\u0074\\x46\\u0069\\x65\\u006c\\x64\";s$t=\"\\x43\";s$t+=\"\\x6c\\x6f\";s$t+=\"\\u0073\\u0065\";F1M=\"\\u0043\\x6c\";F1M+=\"\\x6f\";F1M+=\"\\x73\";F1M+=\"\\u0065\";X_8=\"\\x74\\u0072\\x61\";X_8+=\"\\x6e\";X_8+=\"\\x73\";X_8+=\"\\x66\\x6f\\x72\\u006d\";J0N=\"\\x63\\x61\";J0N+=\"\\u006e\\u0064\\u006c\\u0065\";J0N+=\"\\u0057\\x69\\x64\\x74\\u0068\";w_j=\"\\u0063\\x61\\u006e\\x64\\u006c\";w_j+=\"\\u0065\\x57\\u0069\\x64\\x74\";w_j+=\"\\x68\";D6t.b$0(138);var a5A=D6t.o5B(14,251,18,0);m6f+=W5d['\\x63\\x61\\x6e\\x64\\x6c\\u0065\\u0057\\x69\\u0064\\u0074\\x68'] * (S6d - R61 - a5A) / +\"2\";R61=S6d;W02=N6M;D6t.b$0(22);m6f+=D6t.j1j(a5h,2);a5h=W5d[w_j];D6t.P3q(22);m6f+=D6t.o5B(a5h,2);x77=c1w[S6d];if(!x77)continue;if(x77['\\x70\\u0072\\u006f\\x6a\\x65\\x63\\u0074\\x69\\u006f\\u006e'])continue;if(x77[J0N]){z8v=\"\\x74\";z8v+=\"\\u006d\\x70\\u0057\\u0069\";z8v+=\"\\x64\";z8v+=\"\\x74\\u0068\";D6t.P3q(3);var m3X=D6t.j1j(9,7);m6f+=(x77['\\x63\\u0061\\x6e\\u0064\\u006c\\u0065\\u0057\\u0069\\u0064\\u0074\\u0068'] - a5h) / m3X;a5h=x77['\\u0063\\u0061\\x6e\\u0064\\x6c\\u0065\\x57\\x69\\u0064\\x74\\u0068'];if(M3N || a5h < e3G[z8v]){D6t.P3q(139);W02=D6t.j1j(\"2\",a5h);}}if(j_Z){w9H=\"\\u0074\";w9H+=\"\\x69\";w9H+=\"\\u0063\";w9H+=\"\\x6b\";j39=\"\\x6c\\x65\\x6e\";j39+=\"\\u0067\\x74\\u0068\";if(j_Z[j39] === 0)break;if(!j_Z['\\x68\\u0061\\x73'](x77[w9H]))continue;}if(e3G['\\x74\\x72\\x61\\x6e\\u0073\\u0066\\u006f\\u0072\\u006d\\u0046\\x75\\x6e\\u0063'] && Y0p == e3G['\\x70\\u0061\\u006e\\x65\\x6c']['\\x79\\u0041\\x78\\x69\\x73'] && x77[X_8]){x77=x77['\\u0074\\u0072\\x61\\u006e\\u0073\\x66\\x6f\\x72\\u006d'];}if(x77 && B7N && B7N != F1M){x77=x77[B7N];}if(!x77 && x77 !== 0)continue;X2H=x77[s$t];h9n=x77['\\u004f\\u0070\\u0065\\x6e'] === undefined?X2H:x77['\\x4f\\u0070\\u0065\\x6e'];if(h3t && e3G[W9p]){X2H=x77[e3G[m5_]];}if(!X2H && X2H !== 0)continue;U3c=m6f;if(!M3N && F_E){G7j=0;while(c1w[S6d + (\"1\" ^ 0)]){p2M=\"\\u0066\\u0075\\x74\\u0075\\u0072\\x65\";p2M+=\"\\x54\\u0069\\u0063\\u006b\";D6t.b$0(7);d63=c1w[D6t.j1j(1,S6d)][B7N || e3G['\\x64\\u0065\\x66\\u0061\\u0075\\x6c\\x74\\u0050\\u006c\\u006f\\u0074\\x46\\x69\\u0065\\x6c\\x64'] || '\\u0043\\x6c\\x6f\\x73\\u0065'];if(d63 || d63 === (\"0\" | 0) || c1w[S6d + +\"1\"][p2M])break;G7j++;S6d++;}D6t.P3q(140);m6f+=D6t.j1j(a5h,G7j,2);D6t.P3q(140);W02+=D6t.j1j(a5h,G7j,2);if(!f$S && !V2C){U3c=m6f;}}if(t$z && !h3t && (h9n == X2H || h9n === null))continue;if(S$e){L6x=\"\\x69\\u0071\\x50\";L6x+=\"\\u0072\\u0065\\u0076\\u0043\\x6c\\u006f\\u0073\\x65\";E_V=\"\\u0043\";E_V+=\"\\x4c\";E_V+=\"\\x4f\\x53\\u0045\\u0044\\x4f\\u0057\";E_V+=\"\\x4e\";O7q=\"\\u0069\\x71\\x50\\u0072\";O7q+=\"\\x65\\x76\\u0043\\u006c\";O7q+=\"\\u006f\\x73\\u0065\";b5j=\"\\u0043\\x41\";b5j+=\"\\u004e\\u0044\\x4c\\x45\\u0044\\u004f\\x57\\u004e\";U4m=\"\\u0043\\x41\\u004e\\x44\\x4c\\u0045\";U4m+=\"\\x44\\u004f\";U4m+=\"\\x57\\u004e\";L7H=r4c['\\u0043\\x68\\x61\\u0072\\x74\\x45\\x6e\\x67\\x69\\x6e\\x65'];if(S$e & L7H['\\u0043\\x4c\\x4f\\x53\\x45\\u0044\\u004f\\x57\\x4e']){Q7M=\"\\x69\\x71\\x50\\u0072\\x65\\u0076\\u0043\";Q7M+=\"\\u006c\\x6f\\u0073\\x65\";f$4=\"\\x65\\u0076\";f$4+=\"\\u0065\\u006e\";e$1[f$4]|=X2H == x77[Q7M];}else if(S$e & L7H[U4m]){B51=\"\\u0065\\u0076\";B51+=\"\\x65\";B51+=\"\\x6e\";D6t.b$0(83);e$1[B51]|=D6t.j1j(X2H,h9n);}if(S$e & L7H['\\x43\\u0041\\x4e\\u0044\\x4c\\x45\\x55\\x50'] && h9n >= X2H)continue;if(S$e & L7H[b5j] && h9n <= X2H)continue;if(S$e & L7H['\\x43\\u0041\\x4e\\u0044\\u004c\\x45\\x45\\x56\\x45\\u004e'] && h9n != X2H)continue;if(S$e & L7H['\\x43\\x4c\\u004f\\x53\\u0045\\x55\\x50'] && X2H <= x77[O7q])continue;if(S$e & L7H[E_V] && X2H >= x77[L6x])continue;if(S$e & L7H['\\x43\\u004c\\x4f\\u0053\\u0045\\x45\\u0056\\x45\\x4e'] && X2H != x77['\\u0069\\x71\\x50\\u0072\\x65\\u0076\\x43\\u006c\\u006f\\x73\\u0065'])continue;}l6A=h9n;B2e=X2H;if(f$S || V2C){N8r=\"\\x6d\";N8r+=\"\\u0069\";N8r+=\"\\u006e\";f0y=\"\\u0048\";f0y+=\"\\u0069\";f0y+=\"\\u0067\";f0y+=\"\\x68\";l6A=x77[f0y] === undefined?Math['\\x6d\\u0061\\x78'](X2H,h9n):x77['\\u0048\\u0069\\u0067\\u0068'];B2e=x77['\\u004c\\u006f\\u0077'] === undefined?Math[N8r](X2H,h9n):x77['\\u004c\\x6f\\u0077'];}M8q=Y0p[E1T]?Y0p['\\u0068\\x65\\u0069\\x67\\u0068\\u0074'] * (1 - (Math['\\u006c\\u006f\\x67'](Math[U6W](l6A,0)) / Math['\\x4c\\x4e\\u0031\\u0030'] - Y0p[P$T]) / Y0p['\\u006c\\u006f\\u0067\\u0053\\u0068\\x61\\u0064\\x6f\\u0077']):(Y0p[j_q] - l6A) * Y0p[z7W];V0Y=Y0p['\\u0073\\x65\\x6d\\x69\\u004c\\u006f\\u0067']?Y0p['\\u0068\\u0065\\x69\\x67\\u0068\\u0074'] * (1 - (Math[m31](Math[X8K](B2e,0)) / Math['\\x4c\\u004e\\x31\\u0030'] - Y0p['\\u006c\\u006f\\x67\\u004c\\u006f\\x77']) / Y0p['\\x6c\\x6f\\u0067\\x53\\x68\\u0061\\x64\\x6f\\x77']):(Y0p['\\x68\\u0069\\x67\\x68'] - B2e) * Y0p['\\x6d\\x75\\u006c\\u0074\\u0069\\u0070\\x6c\\u0069\\u0065\\u0072'];if(Y0p['\\u0066\\u006c\\x69\\u0070\\x70\\u0065\\u0064']){D6t.P3q(3);M8q=D6t.j1j(u5N,M8q);D6t.P3q(3);V0Y=D6t.j1j(u5N,V0Y);}else {M8q+=X1e;V0Y+=X1e;}D6t.P3q(3);B3j=Math['\\x61\\u0062\\u0073'](D6t.j1j(M8q,V0Y));if(j_Z && B3j >= 1){j_Z['\\u0064\\u0065\\u006c\\x65\\x74\\x65'](x77['\\x74\\x69\\u0063\\u006b']);}if(t$z && !h3t && B3j < 1)continue;i_e=h3t?Y0p[u4u]?Y0p[h88]:V0Y:Math[y9A](M8q,V0Y);B79=h3t?Y0p['\\u0066\\u006c\\u0069\\u0070\\u0070\\u0065\\x64']?M8q:Y0p['\\x62\\u006f\\u0074\\x74\\u006f\\x6d']:Math['\\u006d\\u0061\\x78'](M8q,V0Y);if(B79 - i_e < 1){B79=i_e;}i_e=Math['\\x66\\x6c\\u006f\\x6f\\x72'](i_e);B79=Math['\\u0066\\u006c\\x6f\\u006f\\x72'](B79);D6t.P3q(3);U_$=D6t.o5B(B79,i_e);H2c=V0Y;if(V2C || f$S){f$u=\"\\u0061\\x62\";f$u+=\"\\x73\";s3A=\"\\x6d\";s3A+=\"\\x61\\u0078\";R0T=\"\\x68\";R0T+=\"\\u0069\";R0T+=\"\\u0067\";R0T+=\"\\u0068\";v_H=\"\\u006c\\u006f\\x67\\x53\";v_H+=\"\\u0068\\u0061\\x64\\u006f\\x77\";Y6l=\"\\x6c\";Y6l+=\"\\u006f\";Y6l+=\"\\u0067\";n$t=\"\\x73\\x65\\u006d\";n$t+=\"\\u0069\";n$t+=\"\\u004c\\u006f\\x67\";I1s=Y0p[n$t]?Y0p['\\u0068\\x65\\x69\\u0067\\x68\\x74'] * (1 - (Math[Y6l](Math['\\u006d\\x61\\u0078'](h9n,0)) / Math['\\x4c\\x4e\\u0031\\x30'] - Y0p['\\x6c\\x6f\\u0067\\x4c\\u006f\\u0077']) / Y0p[v_H]):(Y0p[R0T] - h9n) * Y0p['\\u006d\\x75\\u006c\\x74\\x69\\u0070\\x6c\\x69\\x65\\x72'];G2w=Y0p['\\u0073\\x65\\x6d\\x69\\u004c\\x6f\\u0067']?Y0p['\\u0068\\x65\\x69\\x67\\u0068\\x74'] * (1 - (Math['\\x6c\\u006f\\x67'](Math[s3A](X2H,0)) / Math['\\x4c\\u004e\\x31\\u0030'] - Y0p['\\u006c\\u006f\\u0067\\u004c\\u006f\\u0077']) / Y0p['\\u006c\\x6f\\x67\\x53\\u0068\\u0061\\u0064\\u006f\\x77']):(Y0p['\\x68\\u0069\\x67\\u0068'] - X2H) * Y0p['\\u006d\\u0075\\x6c\\u0074\\u0069\\x70\\x6c\\x69\\x65\\x72'];if(Y0p['\\x66\\u006c\\u0069\\u0070\\x70\\u0065\\x64']){D6t.P3q(3);I1s=D6t.o5B(u5N,I1s);D6t.P3q(3);G2w=D6t.o5B(u5N,G2w);}else {I1s+=X1e;G2w+=X1e;}if(Math[f$u](I1s - G2w) < 1){I1s=G2w;}H2c=G2w;}b4m[R61]=H2c;if(i_e < X1e){D6t.b$0(14);U_$-=D6t.o5B(1,X1e,i_e);D6t.P3q(3);i_e=D6t.o5B(X1e,1);}if(i_e + U_$ > u5N){D6t.b$0(20);U_$=D6t.j1j(1,u5N,i_e);}D6t.b$0(7);B79=D6t.j1j(U_$,i_e);if(i_e >= u5N)continue;if(B79 <= X1e)continue;s_$=Math['\\x66\\u006c\\x6f\\x6f\\u0072'](U3c) + (!I_D['\\u0068\\x69\\x67\\x68\\x6c\\x69\\x67\\u0068\\x74'] && 0.5);D6t.b$0(3);h0V=Math[K1e](D6t.j1j(s_$,W02));D6t.P3q(7);P49=Math[C0K](D6t.j1j(W02,s_$));O1A=h0V == P49?W02:+\"0\";D56=i_e === B79 || f$S && I1s === G2w || N2s;D6t.b$0(3);V08=Math[E6D](D6t.o5B(m6f,U3c));if(t$z){if(h3t || !D56){h0V+=k4d;P49-=k4d;i_e+=k4d;Q8N['\\u0072\\u0065\\u0063\\u0074'](h0V,i_e,Math['\\x6d\\u0061\\x78'](0,P49 - h0V),U_$);}}else if(f$S){if(D56){if(G2w <= u5N && G2w >= X1e){B8z=\"\\x6c\\u0069\\u006e\";B8z+=\"\\x65\";B8z+=\"\\u0054\\u006f\";d0a=\"\\x68\\x69\";d0a+=\"\\x67\\u0068\\u006c\\x69\";d0a+=\"\\u0067\\x68\\x74\";z5n=\"\\u0066\\u006c\";z5n+=\"\\u006f\";z5n+=\"\\u006f\";z5n+=\"\\u0072\";C3W=Math[z5n](G2w) + (!I_D[d0a] && \"0.5\" * 1);D6t.P3q(0);Q8N['\\x6d\\u006f\\x76\\u0065\\x54\\u006f'](D6t.j1j(V08,O1A,h0V),C3W);D6t.b$0(34);Q8N[B8z](D6t.o5B(P49,O1A,V08),C3W);}}if(!N2s && B79 > i_e){G5s=\"\\u006c\\x69\\u006e\";G5s+=\"\\u0065\\u0054\";G5s+=\"\\u006f\";x$6=\"\\x6d\\u006f\\u0076\\x65\";x$6+=\"\\u0054\\x6f\";Q8N[x$6](s_$,i_e);Q8N[G5s](s_$,Math['\\u0063\\u0065\\u0069\\u006c'](Math['\\x6d\\u0069\\u006e'](I1s,G2w)));Q8N['\\x6d\\u006f\\x76\\u0065\\u0054\\x6f'](s_$,Math['\\u0066\\u006c\\x6f\\x6f\\x72'](Math['\\u006d\\u0061\\x78'](I1s,G2w)));Q8N['\\x6c\\x69\\u006e\\x65\\x54\\x6f'](s_$,B79);}}else if(V2C){k$u=\"\\x4c\";k$u+=\"\\x6f\";k$u+=\"\\u0077\";if(i_e < u5N && B79 > X1e && x77['\\x48\\u0069\\u0067\\x68'] != x77[k$u]){t4a=\"\\x6d\\x6f\";t4a+=\"\\u0076\\u0065\\u0054\\u006f\";D6t.b$0(3);Q8N[t4a](s_$,D6t.o5B(i_e,T3x));D6t.P3q(7);Q8N['\\u006c\\x69\\u006e\\x65\\u0054\\x6f'](s_$,D6t.o5B(T3x,B79));}if(I1s > X1e && I1s < u5N && !Q1_){X8A=\"\\x68\\u0069\\x67\\x68\\x6c\";X8A+=\"\\x69\\u0067\\x68\\u0074\";j8U=Math['\\u0066\\u006c\\x6f\\u006f\\x72'](I1s) + (!I_D[X8A] && 0.5);Q8N['\\u006d\\u006f\\x76\\x65\\x54\\x6f'](s_$,j8U);D6t.b$0(141);Q8N['\\x6c\\u0069\\u006e\\x65\\x54\\x6f'](D6t.j1j(V08,s_$,W02,O1A),j8U);}if(G2w > X1e && G2w < u5N){Z48=\"\\u006d\";Z48+=\"\\x6f\\x76\\u0065\";Z48+=\"\\x54\";Z48+=\"\\u006f\";r56=\"\\u0068\";r56+=\"\\u0069\\u0067\\u0068\\x6c\\x69\\u0067\";r56+=\"\\x68\";r56+=\"\\x74\";a7W=\"\\u0066\\x6c\";a7W+=\"\\u006f\\x6f\";a7W+=\"\\x72\";K4d=Math[a7W](G2w) + (!I_D[r56] && 0.5);Q8N[Z48](s_$,K4d);D6t.P3q(95);Q8N['\\u006c\\u0069\\u006e\\x65\\x54\\u006f'](D6t.j1j(s_$,O1A,W02,V08),K4d);}}}W_4=Q8N['\\x67\\x6c\\x6f\\u0062\\u0061\\x6c\\u0041\\x6c\\x70\\x68\\x61'];if(t$z){if(W_4 < 1){b8v=\"\\x67\\x6c\";b8v+=\"\\u006f\";b8v+=\"\\x62\\u0061\\u006c\\x41\\x6c\\x70\";b8v+=\"\\u0068\\x61\";v$H=\"\\x73\";v$H+=\"\\x61\";v$H+=\"\\x76\";v$H+=\"\\x65\";Q8N[v$H]();Q8N[b8v]=1;Q8N['\\u0066\\x69\\x6c\\u006c\\x53\\u0074\\u0079\\x6c\\x65']=this['\\u0063\\u006f\\u006e\\u0074\\x61\\x69\\u006e\\x65\\x72\\x43\\u006f\\x6c\\u006f\\u0072'];Q8N['\\x66\\x69\\u006c\\u006c']();Q8N['\\u0072\\u0065\\u0073\\u0074\\x6f\\u0072\\u0065']();}M01=-+\"2023203387\";c3h=-544805882;W4x=2;for(var y8K=\"1\" >> 64;D6t.P8Y(y8K.toString(),y8K.toString().length,36181) !== M01;y8K++){Q8N[\"\"]();W4x+=2;}if(D6t.P8Y(W4x.toString(),W4x.toString().length,19305) !== c3h){Q8N[\"\"]();}Q8N['\\x66\\u0069\\u006c\\u006c']();if(e19){C1X=\"\\u0073\\x74\\x72\\u006f\";C1X+=\"\\x6b\\u0065\\u0053\\x74\\x79\\u006c\\x65\";Z5o=\"\\x6c\\x69\\u006e\\x65\\x57\\u0069\";Z5o+=\"\\u0064\\u0074\\x68\";Q8N[Z5o]=I_D['\\x68\\u0069\\x67\\u0068\\u006c\\u0069\\u0067\\u0068\\u0074']?2:1;Q8N[C1X]=S$h;Q8N['\\u0073\\u0074\\x72\\x6f\\u006b\\x65']();}}else if(f$S || V2C){o4d=\"\\u0063\\u006c\";o4d+=\"\\u006f\\x73\\x65\";o4d+=\"\\u0050\\u0061\\u0074\";o4d+=\"\\u0068\";V_7=\"\\x68\\u0069\\x67\\u0068\\u006c\\x69\\u0067\\u0068\";V_7+=\"\\u0074\";this['\\x63\\u0061\\x6e\\x76\\u0061\\u0073\\x43\\x6f\\u006c\\u006f\\u0072'](U2H);Q8N['\\u0067\\u006c\\u006f\\x62\\x61\\x6c\\x41\\x6c\\x70\\x68\\u0061']=W_4;if(S$h){Q8N['\\x73\\x74\\u0072\\x6f\\x6b\\x65\\u0053\\x74\\u0079\\x6c\\x65']=S$h;}if(I_D[V_7]){Q8N['\\x6c\\u0069\\x6e\\u0065\\u0057\\x69\\x64\\u0074\\x68']*=+\"2\";}Q8N['\\u0073\\x74\\u0072\\u006f\\u006b\\u0065']();Q8N[o4d]();D6t.P3q(3);Q8N['\\u006c\\u0069\\u006e\\u0065\\x57\\x69\\u0064\\u0074\\x68']=D6t.o5B(\"1\",0);}Q8N[q2P]=m3b;return {cache:b4m};};r4c.ChartEngine.prototype.plotDataSegmentAsLine=function(a8n,c6h,q09,z12){var A2a,l3K,x$v,R1e,S2k,v6u,H7n,J1Y,x0b,e6b,x2t,W3m,r$0,Q4f,c79,r8y,X6B,i8g,M7w,O3Q,O7O,d3h,J5P,R9E,B6Y,e3B,f3m,k5$,Z3S,A_U,C7S,b43,J9i,S8x,G6$,p3n,y1x,X6w,Y1_,A1$,t5Q,f4a,H__,R$X,K_B,R2C,C3z,f1U,f_1,g5M,N4l,c2G,I$N,v0t,h4D,q6q,s9S,g7D,i_T,X0v,S86,U6e,j_M,W54,G7Z,n2x,C_q,x3R,b0I,V5K,X2E,g2t,P7G,N4w,B81,Q9t,N2q,M9l,I$1,R7o,B0T,p5R,G8N,j4Z,d77,T1G,n3K,D8s,U8p,u8t,b69,W8P,l8D,z18,j8b,v69,j0l,l0M,S8N;A2a=![];l3K=!!\"\";x$v=!!0;R1e=!({});S2k=!0;v6u=null;H7n=null;J1Y=null;x0b=0;e6b=!({});x2t=!!\"\";W3m=!\"1\";r$0=![];Q4f=null;c79=null;r8y=null;X6B=null;i8g=null;M7w=!\"1\";O3Q={};O7O=[];d3h=[];J5P=[];R9E=[];function j0U(H64){var G6D,W9h,A8G,J4a,U9C,w2E,l_v,W1l,R$w,m09;G6D=\"o\";G6D+=\"bject\";W9h=Z3S.getLineDash();A8G=W3m?2:+\"1\";J4a=H64;if(typeof J4a == G6D){A8G*=J4a.width || Z3S.lineWidth;H7n=r4c.borderPatternToArray(A8G,J4a.pattern);J4a=J4a.color;}O3Q[J4a]=1;if(e6b){return;}U9C=O7O.slice(-2);w2E=H7n instanceof Array && H7n.join();l_v=W9h instanceof Array && W9h.join();D6t.P3q(142);W1l=D6t.o5B(l_v,w2E);R$w=!r4c.colorsEqual(C7S,J4a);m09=Z3S.lineWidth != A8G;if(R$w || W1l || m09){if(x0b){d3h.push({coord:U9C,color:J4a,pattern:H7n?H7n:[],width:A8G});}else {Z3S.stroke();Z3S.lineWidth=A8G;if(W1l){Z3S.setLineDash(w2E?H7n:[]);}Z3S.beginPath();Z3S.moveTo(U9C[0],U9C[1]);}}C7S=J4a;if(!x0b){if(!J4a || J4a == \"auto\"){Z3S.strokeStyle=B6Y.defaultColor;}else {Z3S.strokeStyle=J4a;}}}B6Y=this;e3B=this.layout;f3m=c6h.chart;k5$=f3m.dataSegment;Z3S=f3m.context;A_U=new Array(k5$.length);C7S=Z3S.strokeStyle;b43=Z3S.globalAlpha;if(f3m.dataSet.length){J9i=\"tr\";J9i+=\"a\";J9i+=\"nsparent\";this.startClip(c6h.name);if(q09){A2a=q09.skipProjections;l3K=q09.skipTransform;x$v=q09.noSlopes;x0b=q09.tension;R1e=q09.step;H7n=q09.pattern;S2k=q09.extendOffChart;J1Y=q09.yAxis;v6u=q09.gapDisplayStyle;e6b=q09.noDraw;x2t=q09.reverse;W3m=q09.highlight;if(q09.width){Z3S.lineWidth=q09.width;}r$0=q09.shiftRight;Q4f=q09.subField;c79=q09.threshold;r8y=q09.lineTravelSpacing;X6B=q09.extendToEndOfDataSet;i8g=q09.tickFilter;M7w=q09.stretchGaps;}if(!M7w && M7w !== ![]){M7w=this.cleanupGaps === \"stretch\";}if(!v6u && v6u !== !\"1\" && q09){v6u=q09.gaps;}if(!v6u){v6u={color:J9i,fillMountain:!\"\"};}if(H7n instanceof Array){Z3S.setLineDash(H7n);}if(W3m){Z3S.lineWidth*=2;}if(!W3m && this.highlightedDraggable){Z3S.globalAlpha*=0.3;}if(S2k !== ![]){S2k=!!\"1\";}S8x=Q4f || f3m.defaultPlotField || \"Close\";if(!J1Y){J1Y=c6h.yAxis;}G6$=f3m.transformFunc && J1Y == f3m.panel.yAxis;D6t.b$0(143);var m1z=D6t.j1j(510,1,5,17,18);p3n=Z3S.lineWidth * m1z;y1x=x2t?f3m.top - p3n:f3m.bottom + p3n;if(c79 || c79 === \"0\" << 32){y1x=this.pixelFromPrice(c79,c6h,J1Y);}X6w=!x0b && e6b && v6u && v6u.fillMountain;Y1_=a8n;A1$=a8n;for(var J5k=+\"0\";J5k < k5$.length;J5k++){t5Q=k5$[J5k];if(t5Q && typeof t5Q == \"object\"){f4a=t5Q[a8n];if(f4a || f4a === 0){if(typeof f4a == \"object\"){A1$=r4c.createObjectChainNames(a8n,[S8x])[D6t.o5B(\"0\",1,D6t.b$0(24))];}break;}}}H__={left:null,right:null};R$X=f3m.dataSet.length - f3m.scroll - +\"1\";if(S2k){H__.left=this.getPreviousBar(f3m,A1$,+\"0\");H__.right=this.getNextBar(f3m,A1$,k5$.length - 1);}K_B=!!({});R2C=!({});Z3S.beginPath();f_1=H__.left;g5M=null;if(f_1){g5M=f_1.transform;}if(f_1){f1U=G6$?g5M?g5M[a8n]:null:f_1[a8n];if(f1U || f1U === 0){if(f1U[S8x] || f1U[S8x] === \"0\" >> 0){f1U=f1U[S8x];}N4l=this.pixelFromTick(f_1.tick,f3m);c2G=this.pixelFromTransformedValue(f1U,c6h,J1Y);Z3S.moveTo(N4l,c2G);O7O.push(N4l,c2G);if(k5$[0].tick - f_1.tick > 1){J5P.push({start:O7O.slice(-2),threshold:y1x,tick:f_1});R2C=!!\"1\";}K_B=!({});}}D6t.P3q(36);var y8p=D6t.j1j(3,9,6,10);I$N=c6h.left + this.micropixels - y8p;if(r$0){I$N+=r$0;}if(R1e && q09 && q09.alignStepToSide){D6t.b$0(42);var V5G=D6t.j1j(0,4,15,62);I$N-=this.layout.candleWidth / V5G;}q6q=null;s9S=0;g7D=+\"0\";i_T=!!\"\";X0v={reset:!![]};for(var H3Z=+\"0\";H3Z < k5$.length;H3Z++){S86=\"o\";S86+=\"b\";S86+=\"j\";S86+=\"ect\";C3z=e3B.candleWidth;U6e=k5$[H3Z];j_M=k5$[H3Z];if(!U6e){U6e={};}if(!U6e.cache || f3m.pixelCacheExpired){U6e.cache={};}W54=U6e.lineTravel;if(A2a && U6e.projection){H__.right=null;break;}if(U6e.candleWidth){C3z=U6e.candleWidth;}if(r8y){C3z=0;}if(G6$ && U6e.transform){U6e=U6e.transform;}G7Z=U6e[a8n];if(G7Z && typeof G7Z == S86){G7Z=G7Z[S8x];D6t.P3q(34);Y1_=D6t.o5B(a8n,S8x,\".\");}if(f3m.lineApproximation && e3B.candleWidth < 1 && !r8y){if(X0v.reset){X0v={CollatedHigh:-Number.MAX_VALUE,CollatedLow:Number.MAX_VALUE,CollatedOpen:null,CollatedClose:null};i_T=!({});}n2x=G7Z;if(n2x || n2x === 0){X0v.CollatedHigh=Math.max(X0v.CollatedHigh,n2x);X0v.CollatedLow=Math.min(X0v.CollatedLow,n2x);X0v.CollatedClose=n2x;if(X0v.CollatedOpen === null){X0v.CollatedOpen=n2x;}else {i_T=!0;}}s9S+=C3z;if(s9S - g7D >= +\"1\" || H3Z == k5$.length - 1){g7D=Math.floor(s9S);X0v.reset=!0;X0v[a8n]=X0v.CollatedClose;U6e=X0v;U6e.cache={};}else {I$N+=C3z;continue;}}if(!x$v){D6t.P3q(25);I$N+=D6t.o5B(C3z,0,\"2\");}if(!G7Z && G7Z !== 0 || i8g && !i8g.has(U6e.tick) && !i8g.has(U6e.tick - (\"1\" ^ 0))){C_q=O7O.slice(-2);if(X6w && !R2C && O7O.length){O7O.push(C_q[0],y1x);}if(!R2C){J5P.push({start:C_q,threshold:y1x,tick:h4D});}R2C=!!({});I$N+=x$v?C3z:C3z / 2;if((R1e || x$v) && O7O.length){A_U[H3Z]=O7O.slice(-1)[D6t.o5B(\"0\",0,D6t.b$0(3))];}if(W54){I$N+=W54;}continue;}v0t=U6e;x3R=U6e.cache;D6t.b$0(7);b0I=D6t.j1j(H3Z,R$X);if(b0I < c6h.cacheLeft || b0I > c6h.cacheRight || !x3R[a8n]){V5K=J1Y.semiLog?J1Y.height * (+\"1\" - (Math.log(Math.max(G7Z,\"0\" << 64)) / Math.LN10 - J1Y.logLow) / J1Y.logShadow):(J1Y.high - G7Z) * J1Y.multiplier;if(J1Y.flipped){x3R[Y1_]=J1Y.bottom - V5K;}else {x3R[Y1_]=J1Y.top + V5K;}}X2E=A_U[H3Z]=x3R[Y1_];if(f3m.lastTickOffset){if(q6q === null){q6q=this.currentQuote(a8n) || ({});}if(j_M.tick == q6q.tick){I$N+=f3m.lastTickOffset;}}if(!K_B && z12){if(j_M[a8n] && j_M[a8n][S8x]){j_M=j_M[a8n];}g2t=z12(this,j_M,R2C);if(!g2t){I$N+=x$v?C3z:C3z / 2;continue;}j0U(g2t);}if(K_B){Z3S.moveTo(I$N,X2E);if(x0b){d3h.push({coord:[I$N,X2E],color:Z3S.strokeStyle,pattern:H7n?H7n:[],width:Z3S.lineWidth});}}else {P7G=\"mov\";P7G+=\"e\";P7G+=\"To\";if(R1e || x$v || R2C && M7w){if(!R1e && !x$v){I$N-=C3z;}N4w=O7O.slice(-1)[0];if(i_T){A7e(I$N,N4w,U6e);}else {Z3S.lineTo(I$N,N4w);}O7O.push(I$N,N4w);if(!R1e && !x$v){I$N+=C3z;}}if(i_T && !x$v){A7e(I$N,X2E,U6e);}else {Z3S[x$v?P7G:\"lineTo\"](I$N,X2E);}}if(R2C){J5P.push({end:[I$N,X2E],threshold:y1x});h4D=j_M;if(X6w && !R1e && !x$v){O7O.push(I$N,y1x);}}O7O.push(I$N,X2E);K_B=!1;R2C=!({});I$N+=x$v?C3z:C3z / 2;if(W54){I$N+=W54;}}f3m.pixelCacheExpired=!({});B81=H__.right;Q9t=null;if(B81){Q9t=B81.transform;}if(!K_B && B81){f1U=G6$?Q9t?Q9t[a8n]:null:B81[a8n];if(f1U && (f1U[S8x] || f1U[S8x] === 0)){f1U=f1U[S8x];}N2q=this.pixelFromTick(B81.tick,f3m);M9l=this.pixelFromTransformedValue(f1U,c6h,J1Y);if(B81.tick - k5$[k5$.length - 1].tick > 1){if(!R2C){I$1=O7O.slice(-2);if(X6w && O7O.length){O7O.push(I$1[0],y1x);}J5P.push({start:I$1,threshold:y1x,tick:k5$[k5$.length - (\"1\" - 0)]});}R2C=!0;}if(!K_B && z12){R7o=z12(this,B81,R2C);if(R7o){j0U(R7o);}}B0T=O7O.slice(-2);if(!H7n || !H7n.length){p5R=\"l\";p5R+=\"in\";p5R+=\"eTo\";G8N=\"mo\";G8N+=\"veTo\";if(R1e || x$v || R2C && M7w){Z3S.lineTo(N2q,B0T[1]);O7O.push(N2q,B0T[+\"1\"]);}Z3S[x$v?G8N:p5R](N2q,M9l);}if(R2C){J5P.push({end:[N2q,M9l],threshold:y1x});if(X6w && !R1e && !x$v){O7O.push(N2q,y1x);}}O7O.push(N2q,M9l);}for(var C0Q in O3Q){R9E.push(C0Q);}if(q09 && q09.extendToEndOfLastBar){j4Z=O7O.slice(-2);Z3S.lineTo(j4Z[0] + C3z,j4Z[1]);}else if(R1e || x$v || this.extendLastTick || X6B){d77=O7O.slice(-2);if(O7O.length){T1G=d77[0];n3K=d77[1];if(X6B || R1e && X6B !== !1){T1G=this.pixelFromTick(f3m.dataSet.length - (\"1\" << 64),f3m);if(x$v || this.extendLastTick){D6t.P3q(22);T1G+=D6t.o5B(C3z,2);}}else if(x$v){T1G+=C3z;}else if(this.extendLastTick){D6t.b$0(22);T1G+=D6t.j1j(C3z,2);}if(T1G > d77[0]){D8s=null;if(z12){D8s=z12(this,{},!![]);}if(D8s){j0U(D8s);}Z3S.lineTo(T1G,n3K);if(!R2C || !X6w){O7O.push(T1G,n3K);}}}}if(!e6b){if(x0b && O7O.length){Z3S.beginPath();if(q09 && q09.pattern){Z3S.setLineDash(q09.pattern);}M_8.plotSpline(O7O,x0b,Z3S,d3h);}Z3S.stroke();}if(!e6b && q09 && q09.label && v0t){U8p=\"p\";U8p+=\"l\";U8p+=\"ot\";b69=v0t[a8n];if(b69 && typeof b69 == \"object\"){b69=b69[S8x];}if(J1Y.priceFormatter){u8t=J1Y.priceFormatter(this,c6h,b69,q09.labelDecimalPlaces);}else {u8t=this.formatYAxisPrice(b69,c6h,q09.labelDecimalPlaces);}W8P=this.yaxisLabelStyle;if(J1Y.yaxisLabelStyle){W8P=J1Y.yaxisLabelStyle;}l8D=W8P == \"noop\"?Z3S.strokeStyle:null;z18=W8P == \"noop\"?\"#FFFFFF\":Z3S.strokeStyle;this.yAxisLabels.push({src:U8p,args:[c6h,u8t,v0t.cache[Y1_],z18,l8D,Z3S,J1Y]});}j8b=typeof v6u == \"object\"?v6u.color:v6u;if(r4c.isTransparent(j8b)){for(var M3z=\"0\" ^ 0;M3z < J5P.length;M3z+=2){v69=J5P[M3z].start;if(M3z){j0l=J5P[M3z - 1].end;}if(j0l && v69[0] == j0l[\"0\" ^ 0] && v69[1] == j0l[\"1\" * 1]){Z3S.beginPath();l0M=Z3S.lineWidth;if(z12){S8N=z12(this,J5P[M3z].tick || ({}),!({}));if(typeof S8N == \"object\"){D6t.b$0(45);var P19=D6t.o5B(1,15,15);D6t.P3q(82);var A31=D6t.j1j(9,14,7,17);l0M=(S8N.width || l0M) * (W3m?P19:A31);S8N=S8N.color;}Z3S.strokeStyle=Z3S.fillStyle=S8N;}Z3S.lineWidth=l0M;Z3S.arc(v69[0],v69[1],1,\"0\" >> 64,2 * Math.PI);Z3S.stroke();Z3S.fill();}}}this.endClip();}function A7e(u0u,y0M,V6r){var k3I,z$c,Z09;Z3S.setLineDash([]);k3I=a1C(\"CollatedOpen\");z$c=a1C(\"CollatedHigh\");Z09=a1C(\"CollatedLow\");Z3S.lineTo(u0u,k3I);function a1C(a61){var J_v;J_v=J1Y.semiLog?J1Y.height * (1 - (Math.log(Math.max(V6r[a61],0)) / Math.LN10 - J1Y.logLow) / J1Y.logShadow):(J1Y.high - V6r[a61]) * J1Y.multiplier;if(J1Y.flipped){J_v=J1Y.bottom - J_v;}else {J_v+=J1Y.top;}return J_v;}D6t.a3b();Z3S.moveTo(u0u,z$c);Z3S.lineTo(u0u,Z09);Z3S.moveTo(u0u,y0M);O7O.push(u0u,k3I);}Z3S.globalAlpha=b43;return {colors:R9E,points:O7O,cache:A_U,gapAreas:J5P};};r4c.ChartEngine.prototype.drawMountainChart=function(F1h,P41,F3u){var p83,z$w,x53,H6z,a8q,q5P,B$5,e9S,B$i,s0X,G82,y7U,n7e,H1E,m6T,E20,o3I,w_3,o1Q,o4W,C_E,M_K,X0I,D0_,X2K,U6h,Z2b,a39,O_r,P3b,o$U,W8G,r3i,E3C,Z9e,k5m,h6y,V_6,F9T,t2I,A9J,y1N;p83=\"t\";p83+=\"ranspa\";p83+=\"re\";p83+=\"nt\";z$w=\"Cl\";z$w+=\"ose\";x53=this.chart.context;H6z=P41;a8q=![];q5P=![];B$5=null;e9S=null;B$i=null;s0X=null;G82=+\"0\";y7U=null;n7e=!({});H1E=null;m6T=null;E20=!\"1\";o3I=null;w_3=null;o1Q=+\"1\";o4W=!({});C_E=!({});M_K=![];X0I=null;D0_=null;X2K=F1h.chart;U6h=X2K.lineStyle || ({});if(!P41 || typeof P41 != \"object\"){P41={style:P41};}H6z=P41.style || \"stx_mountain_chart\";B$5=P41.field || X2K.defaultPlotField || z$w;e9S=P41.subField || X2K.defaultPlotField || \"Close\";y7U=P41.gapDisplayStyle;if(!y7U && y7U !== !({})){y7U=P41.gaps;}if(!y7U && y7U !== !({})){y7U=X2K.gaplines;}if(!y7U){y7U=p83;}B$i=P41.yAxis || F1h.yAxis;a8q=P41.reverse || !\"1\";s0X=P41.tension;H1E=P41.fillStyle;G82=P41.width || U6h.width;n7e=P41.step;m6T=P41.pattern || U6h.pattern;E20=P41.highlight;w_3=P41.color || U6h.color;o3I=P41.baseColor || U6h.baseColor;q5P=P41.colored;o1Q=P41.opacity;o4W=P41.extendToEndOfDataSet;C_E=P41.isComparison;M_K=P41.returnObject;X0I=P41.lineTravelSpacing;D0_=P41.shiftRight;Z2b=this.canvasStyle(H6z);a39=B$i.top;if(isNaN(a39) || isNaN(a39 / Infinity)){a39=0;}O_r=w_3 || (H6z && Z2b.backgroundColor?Z2b.backgroundColor:this.defaultColor);P3b=o3I || (H6z && Z2b.color?Z2b.color:this.containerColor);if(H1E){x53.fillStyle=H1E;}else if(o3I || Z2b.color){o$U=x53.createLinearGradient(0,a39,0,B$i.bottom);o$U.addColorStop(B$i.flipped?1:+\"0\",O_r);o$U.addColorStop(B$i.flipped?\"0\" * 1:1,P3b);x53.fillStyle=o$U;}else {W8G=-+\"341986881\";r3i=-+\"1656919679\";E3C=2;for(var e9e=1;D6t.P8Y(e9e.toString(),e9e.toString().length,36888) !== W8G;e9e++){x53.fillStyle=O_r;E3C+=2;}if(D6t.n$o(E3C.toString(),E3C.toString().length,53041) !== r3i){x53.fillStyle=O_r;}}this.startClip(F1h.name);Z9e=x53.lineWidth;if(!P41.symbol){e9S=null;}P41={skipProjections:!!({}),reverse:a8q,yAxis:B$i,gapDisplayStyle:y7U,step:n7e,highlight:E20,extendToEndOfDataSet:o4W,isComparison:C_E,lineTravelSpacing:X0I,shiftRight:D0_};if(X2K.tension){P41.tension=X2K.tension;}if(s0X || s0X === 0){P41.tension=s0X;}k5m=parseInt(Z2b.paddingTop,+\"10\");h6y=w_3 || Z2b.borderTopColor;V_6=null;if(q5P || h6y && !r4c.isTransparent(h6y)){if(k5m){F9T=this.scratchContext;if(!F9T){t2I=x53.canvas.cloneNode(!![]);F9T=this.scratchContext=t2I.getContext(\"2d\");}F9T.canvas.height=x53.canvas.height;F9T.canvas.width=x53.canvas.width;F9T.drawImage(x53.canvas,0,0);r4c.clearCanvas(x53.canvas,this);}}r4c.extend(P41,{panelName:F1h.name,direction:P41.reverse?-1:+\"1\",band:B$5,subField:e9S,opacity:o1Q});if(!P41.highlight && this.highlightedDraggable){P41.opacity*=0.3;}r4c.preparePeakValleyFill(this,P41);if(q5P || h6y && !r4c.isTransparent(h6y)){if(k5m){A9J=\"destination-o\";A9J+=\"ut\";x53.save();D6t.b$0(24);x53.lineWidth+=D6t.o5B(2,k5m);x53.globalCompositeOperation=A9J;x53.globalAlpha=1;this.plotDataSegmentAsLine(B$5,F1h,P41);x53.globalCompositeOperation=\"destination-over\";x53.scale(1 / this.adjustedDisplayPixelRatio,1 / this.adjustedDisplayPixelRatio);x53.drawImage(this.scratchContext.canvas,0,+\"0\");x53.restore();}}x53.strokeStyle=h6y;D6t.V8b();if(G82){x53.lineWidth=G82;}else if(Z2b.width && parseInt(Z2b.width,10) <= 25){x53.lineWidth=Math.max(1,r4c.stripPX(Z2b.width));}else {x53.lineWidth=1;}if(!m6T){m6T=Z2b.borderTopStyle;}P41.pattern=r4c.borderPatternToArray(x53.lineWidth,m6T);y1N=F3u;if(y7U){y1N=this.getGapColorFunction(B$5,e9S,{color:h6y,pattern:P41.pattern,width:x53.lineWidth},y7U,F3u);}V_6=this.plotDataSegmentAsLine(B$5,F1h,P41,y1N);x53.lineWidth=Z9e;this.endClip();if(!V_6.colors.length){V_6.colors.push(h6y);}return M_K?V_6:V_6.colors;};r4c.ChartEngine.prototype.drawBaselineChart=function(d5I,N7O){var Q5S,b9N,j6i,L4o,X97,F_M,Y8i,e2k,t3t,N1T,O0G,U4B,q3x,b0z,x8l,g5w,a7f,w_H,k$b,U1l,V1r,e7E,O2O,w0k,D3j,K2I,A4c,q4d;var {chart:J3k}=d5I;var {field:F7u, id:H_e, yAxis:c1p}=N7O;var {gaplines:f8N, defaultPlotField:R9U, lineStyle:U6r}=J3k;var {display:L0Y}=this.baselineHelper.get(this.getRendererFromSeries(H_e));Q5S=this.getYAxisBaseline(c1p).actualLevel;b9N=[];if(!F7u){F7u=R9U;}D6t.V8b();if(!U6r){U6r={};}j6i=N7O.gapDisplayStyle;if(!j6i && j6i !== !({})){j6i=N7O.gaps;}if(Q5S !== null && !isNaN(Q5S)){L4o=\"stx\";L4o+=\"_b\";L4o+=\"a\";L4o+=\"seline_down\";X97=N7O.type == \"mountain\";if(X97){b9N=this.drawMountainChart(d5I,{style:N7O.style,field:N7O.field,yAxis:c1p,gapDisplayStyle:j6i,colored:!![],tension:+\"0\"});}F_M=this.pixelFromPrice(Q5S,d5I,c1p);if(isNaN(F_M)){return;}this.startClip(d5I.name);Y8i=N7O.pattern || U6r.pattern;e2k=N7O.fill_color_up || this.getCanvasColor(\"stx_baseline_up\");t3t=N7O.fill_color_down || this.getCanvasColor(\"stx_baseline_down\");N1T=N7O.border_color_up || this.getCanvasColor(\"stx_baseline_up\");O0G=N7O.border_color_down || this.getCanvasColor(\"stx_baseline_down\");U4B=N7O.width || U6r.width || this.canvasStyle(\"stx_baseline_up\").width;q3x=N7O.width || U6r.width || this.canvasStyle(L4o).width;b0z=N7O.widthBaseline || U6r.width || r4c.stripPX(this.canvasStyle(\"stx_baseline\").width);x8l=N7O.baselineOpacity || this.canvasStyle(\"stx_baseline\").opacity;g5w={fill:e2k,edge:N1T,width:U4B};a7f={fill:t3t,edge:O0G,width:q3x};w_H=N7O.yAxis.flipped;k$b={over:w_H?a7f:g5w,under:w_H?g5w:a7f};U1l=!1;if(!j6i && j6i !== !!\"\"){j6i=f8N;}V1r=1;if(!N7O.highlight && this.highlightedDraggable){V1r*=+\"0.3\";}for(var b2G in k$b){e7E=\"ove\";e7E+=\"r\";O2O=parseInt(Math.max(1,r4c.stripPX(k$b[b2G].width)),10);if(N7O.highlight){O2O*=2;}Y8i=r4c.borderPatternToArray(O2O,Y8i);w0k={panelName:d5I.name,band:F7u,threshold:Q5S,color:X97?\"transparent\":k$b[b2G].fill,direction:b2G == e7E?+\"1\":-1,edgeHighlight:k$b[b2G].edge,edgeParameters:{pattern:Y8i,lineWidth:O2O + +\"0.1\",opacity:V1r},gapDisplayStyle:j6i,yAxis:N7O.yAxis};if(c1p){w0k.threshold=this.priceFromPixel(this.pixelFromPrice(w0k.threshold,d5I,c1p),d5I,c1p);}b9N.push(k$b[b2G].edge);D3j=w0k.color;if(!X97 && D3j && D3j != \"transparent\"){K2I=d5I.top;A4c=d5I.bottom;q4d=J3k.context.createLinearGradient(+\"0\",b2G == \"over\"?K2I:A4c,0,F_M);D6t.b$0(24);q4d.addColorStop(D6t.o5B(\"0\",1),r4c.hexToRgba(r4c.colorToHex(D3j),60));D6t.b$0(24);q4d.addColorStop(D6t.o5B(\"1\",1),r4c.hexToRgba(r4c.colorToHex(D3j),10));w0k.color=q4d;w0k.opacity=V1r;}r4c.preparePeakValleyFill(this,J3k.dataSegment,w0k);if(f8N && f8N instanceof Object){if(!f8N.fillMountain){this.drawLineChart(d5I,null,null,{color:\"transparent\",gapDisplayStyle:{color:this.containerColor,pattern:\"solid\",width:w0k.edgeParameters.lineWidth}});}if(!f8N.color){U1l=!!({});f8N.color=this.defaultColor;}}this.drawLineChart(d5I,null,null,{color:\"transparent\",width:w0k.edgeParameters.lineWidth});if(U1l){f8N.color=null;}}if(L0Y){this.plotLine(0,1,F_M,F_M,this.containerColor,\"line\",J3k.context,d5I,{lineWidth:\"1.1\"});this.plotLine(0,1,F_M,F_M,this.getCanvasColor(\"stx_baseline\"),\"line\",J3k.context,d5I,{pattern:\"dotted\",lineWidth:b0z || \"2.1\",opacity:x8l || 0.5 * V1r});}this.endClip();}return {colors:b9N};};r4c.ChartEngine.prototype.plotLine=function(R8B){var B0w,i$J,m9Y,W8H,x1i,o0H,B6C,c7y,s6e,l4r,Q03,U2M,j$4,G9T,A7M,e7e,T5Q,I8l,b3X,R25,t7F,j2C,H32,n2_,A8I,d7l,t2d,Q$N,z$H,h4w,S7a;B0w=\"l\";B0w+=\"in\";B0w+=\"e\";if(typeof arguments[\"0\" << 0] == \"number\"){R8B={x0:arguments[0],x1:arguments[1],y0:arguments[\"2\" - 0],y1:arguments[3],color:arguments[4],type:arguments[5],context:arguments[6],confineToPanel:arguments[7]};for(var Y73 in arguments[8]){R8B[Y73]=arguments[8][Y73];}}if(!R8B){R8B={};}if(R8B.pattern == \"none\"){return;}i$J=R8B.x0;m9Y=R8B.x1;W8H=R8B.y0;x1i=R8B.y1;o0H=R8B.color;B6C=R8B.type;c7y=R8B.context;s6e=R8B.confineToPanel;D6t.a3b();l4r=R8B.deferStroke;if(s6e === !!1){s6e=this.chart.panel;}if(c7y === null || typeof c7y == \"undefined\"){c7y=this.chart.context;}if(isNaN(i$J) || isNaN(m9Y) || isNaN(W8H) || isNaN(x1i)){return;}Q03=0;U2M=this.chart.canvasHeight;j$4=0;G9T=this.right;if(s6e){U2M=s6e.yAxis.bottom;Q03=s6e.yAxis.top;j$4=s6e.left;G9T=s6e.right;}if(B6C == \"ray\"){A7M=10000000;if(m9Y < i$J){A7M=-10000000;}T5Q={x0:i$J,x1:m9Y,y0:W8H,y1:x1i};e7e=r4c.yIntersection(T5Q,A7M);m9Y=A7M;x1i=e7e;}if(B6C == B0w || B6C == \"horizontal\" || B6C == \"vertical\"){D6t.P3q(3);A7M=D6t.o5B(\"10000000\",0);I8l=-10000000;T5Q={x0:i$J,x1:m9Y,y0:W8H,y1:x1i};e7e=r4c.yIntersection(T5Q,A7M);b3X=r4c.yIntersection(T5Q,I8l);i$J=I8l;m9Y=A7M;W8H=b3X;x1i=e7e;}R25=0.0;t7F=1.0;D6t.P3q(3);j2C=D6t.j1j(m9Y,i$J);D6t.P3q(3);H32=D6t.o5B(x1i,W8H);for(var h7x=0;h7x < (\"4\" | 4);h7x++){if(h7x === 0){n2_=-j2C;D6t.b$0(3);A8I=-D6t.o5B(j$4,i$J);}if(h7x == 1){n2_=j2C;D6t.b$0(3);A8I=D6t.j1j(G9T,i$J);}if(h7x == (\"2\" | 2)){n2_=-H32;D6t.P3q(3);A8I=-D6t.j1j(Q03,W8H);}if(h7x == 3){n2_=H32;D6t.P3q(3);A8I=D6t.j1j(U2M,W8H);}D6t.P3q(22);d7l=D6t.j1j(A8I,n2_);if((x1i || x1i === 0) && n2_ === 0 && A8I < \"0\" - 0){return ![];}if(n2_ < 0){if(d7l > t7F){return ![];}else if(d7l > R25){R25=d7l;}}else if(n2_ > 0){if(d7l < R25){return !!\"\";}else if(d7l < t7F){t7F=d7l;}}}D6t.P3q(120);t2d=D6t.o5B(i$J,R25,j2C);D6t.P3q(120);Q$N=D6t.o5B(W8H,R25,H32);D6t.b$0(120);z$H=D6t.o5B(i$J,t7F,j2C);D6t.P3q(120);h4w=D6t.o5B(W8H,t7F,H32);if(!x1i && x1i !== 0 && !W8H && W8H !== 0){Q$N=Q03;h4w=U2M;t2d=T5Q.x0;z$H=T5Q.x0;if(T5Q.x0 > G9T){return !!0;}if(T5Q.x0 < j$4){return !1;}}else if(!x1i && x1i !== +\"0\"){if(T5Q.y0 < T5Q.y1){h4w=U2M;}else {h4w=Q03;}t2d=T5Q.x0;z$H=T5Q.x0;if(T5Q.x0 > G9T){return !1;}if(T5Q.x0 < j$4){return !\"1\";}}if(!l4r){c7y.save();c7y.beginPath();}c7y.lineWidth=1.1;if(o0H && typeof o0H == \"object\"){c7y.strokeStyle=o0H.color;if(o0H.opacity){c7y.globalAlpha=o0H.opacity;}else {c7y.globalAlpha=1;}c7y.lineWidth=r4c.stripPX(o0H.width);}else {if(!o0H || o0H == \"auto\" || r4c.isTransparent(o0H)){c7y.strokeStyle=this.defaultColor;}else {c7y.strokeStyle=o0H;}}if(R8B.opacity){c7y.globalAlpha=R8B.opacity;}if(R8B.lineWidth){c7y.lineWidth=R8B.lineWidth;}if(R8B.globalCompositeOperation){c7y.globalCompositeOperation=R8B.globalCompositeOperation;}S7a=r4c.borderPatternToArray(c7y.lineWidth,R8B.pattern);c7y.setLineDash(R8B.pattern?S7a:[]);c7y.moveTo(t2d,Q$N);c7y.lineTo(z$H,h4w);if(!l4r){c7y.stroke();c7y.restore();}};r4c.ChartEngine.prototype.rendererAction=function(M6S,D5$){var H8F,c9c,c04,H8g,k1L,f5f,Y3_,G7O;H8F=!1;D6t.V8b();if(!this.runPrepend(\"rendererAction\",arguments)){for(var M3X in M6S.seriesRenderers){c9c=\"o\";c9c+=\"verlay\";c04=\"m\";c04+=\"a\";c04+=\"i\";c04+=\"n\";H8g=\"_ma\";H8g+=\"i\";H8g+=\"n_serie\";H8g+=\"s\";k1L=M6S.seriesRenderers[M3X];f5f=k1L.params;Y3_=f5f.panel;G7O=this.panels[Y3_];if(f5f.overChart && D5$ == \"underlay\")continue;if(f5f.name == H8g && D5$ == \"underlay\")continue;if(f5f.name != \"_main_series\" && D5$ == c04)continue;if(!f5f.overChart && D5$ == c9c)continue;if(!G7O)continue;if(G7O.chart !== M6S)continue;if(G7O.hidden)continue;if(D5$ == \"yAxis\"){k1L.adjustYAxis();}else {p_2.apply(this);k1L.draw();if(k1L.cb){k1L.cb(k1L.colors);}}}this.runAppend(\"rendererAction\",arguments);}p_2.apply(this);function p_2(){var b4T,b2E,W5N,R0c;b4T=\"u\";D6t.V8b();b4T+=\"nder\";b4T+=\"lay\";b2E=this;if(!H8F && D5$ === b4T){W5N=\"C\";W5N+=\"IQ.wate\";W5N+=\"rmar\";W5N+=\"k\";R0c=Symbol.for(W5N);if(b2E[R0c]){b2E[R0c].draw(M6S);H8F=!![];}}}};r4c.ChartEngine.prototype.drawSeries=function(m0e,w9D,J92,p5B){var z9C,a2y,Y9f,z1a,b9b,u3k,I0S,M1q,k7F,g_e,B$C,y7l,f7b,J1M,Y66,v7$,l0Y,Y5r,k0K,E2Y;z9C=+\"1752129433\";a2y=-169964964;Y9f=+\"2\";for(var G9S=+\"1\";D6t.n$o(G9S.toString(),G9S.toString().length,83961) !== z9C;G9S++){if(this.runPrepend(\"\",arguments)){return;}z1a=m0e.dataSegment;b9b=1;Y9f+=+\"2\";}if(D6t.P8Y(Y9f.toString(),Y9f.toString().length,67116) !== a2y){if(this.runPrepend(\"\",arguments)){return;}z1a=m0e.dataSegment;b9b=6;}if(this.runPrepend(\"drawSeries\",arguments)){return;}D6t.V8b();z1a=m0e.dataSegment;b9b=null;if(!w9D){w9D=m0e.series;}for(var D68 in w9D){u3k=\"C\";u3k+=\"l\";u3k+=\"o\";u3k+=\"se\";b9b=w9D[D68];I0S=b9b.parameters;M1q=I0S.panel?this.panels[I0S.panel]:m0e.panel;k7F=I0S.color;g_e=I0S.field;if(!M1q || I0S.disabled)continue;B$C=I0S.yAxis=J92?J92:M1q.yAxis;if(!k7F){k7F=B$C.textStyle || this.defaultColor;}if(k7F == \"auto\"){k7F=this.defaultColor;}if(!g_e){g_e=m0e.defaultPlotField;}y7l=I0S.subField || m0e.defaultPlotField || u3k;if(!I0S._rawExtendToEndOfDataSet && I0S._rawExtendToEndOfDataSet !== ![]){I0S._rawExtendToEndOfDataSet=I0S.extendToEndOfDataSet;}if(m0e.animatingHorizontalScroll){I0S.extendToEndOfDataSet=!({});}else {I0S.extendToEndOfDataSet=I0S._rawExtendToEndOfDataSet;}f7b=I0S.colorFunction;if(b9b.highlight || b9b.parameters.highlight){I0S.highlight=!![];}J1M={colors:[]};if(p5B){if(p5B.params.highlight){I0S.highlight=!0;}if(I0S.hidden)continue;J1M=p5B.drawIndividualSeries(m0e,I0S) || J1M;}else if(I0S.type == \"mountain\"){J1M=this.drawMountainChart(M1q,r4c.extend({returnObject:!\"\"},I0S),f7b);}else {J1M=this.drawLineChart(M1q,I0S.style,f7b,r4c.extend({returnObject:!!\"1\"},I0S));}b9b.yValueCache=J1M.cache;D6t.b$0(77);var I5g=D6t.j1j(38,10,13,16);Y66=z1a[z1a.length - I5g];if(Y66){v7$=!I0S.skipTransform && m0e.transformFunc && B$C == m0e.panel.yAxis;if(!Y66[g_e] && Y66[g_e] !== 0){Y66=this.getPreviousBar(m0e,g_e,z1a.length - 1);}if(v7$ && Y66 && Y66.transform){Y66=Y66.transform;}}if(I0S.displayFloatingLabel !== !!\"\" && this.mainSeriesRenderer != p5B && Y66 && !B$C.noDraw){l0Y=\"ser\";l0Y+=\"ies\";Y5r=Y66[g_e];if(Y5r){if(Y5r[y7l] || Y5r[y7l] === +\"0\"){Y5r=Y5r[y7l];}else {Y5r=Y5r.iqPrevClose;}}if(B$C.priceFormatter){k0K=B$C.priceFormatter(this,M1q,Y5r);}else {k0K=this.formatYAxisPrice(Y5r,M1q,null,B$C);}this.yAxisLabels.push({src:l0Y,args:[M1q,k0K,this.pixelFromTransformedValue(Y5r,M1q,B$C),r4c.hexToRgba(r4c.colorToHex(k7F),parseFloat(I0S.opacity)),null,null,B$C]});}if(!m0e.legendColorMap){m0e.legendColorMap={};}E2Y=I0S.display;if(!E2Y){E2Y=I0S.symbol;}m0e.legendColorMap[I0S.name]={color:J1M.colors,display:E2Y,isBase:p5B == this.mainSeriesRenderer};}this.runAppend(\"drawSeries\",arguments);};};i5=B3e=>{var C1q,l3X;C1q=\"\\u0043\";C1q+=\"\\u0068\\u0061\\u0072\\x74\\x45\";C1q+=\"\\x6e\\x67\\u0069\\u006e\\x65\";l3X=B3e.CIQ;l3X[C1q]['\\u0070\\u0072\\x6f\\x74\\u006f\\x74\\u0079\\x70\\u0065']['\\x73\\x63\\u0072\\u006f\\x6c\\x6c\\u0054\\u006f']=function(q5Z,q1C,o3Y){var O_$,V7X,T7U,Z0F,D23,a2U,q6V,C0t,o20,I9l;O_$=\"\\u0072\";O_$+=\"\\u0065\\u0071\\u0075\";O_$+=\"\\x65\\u0073\\u0074\\u0041\\u006e\\x69\\u006d\\u0061\\x74\\x69\\x6f\\x6e\\x46\\u0072\\x61\\u006d\\u0065\";V7X=\"\\u0063\";V7X+=\"\\x62\";T7U=\"\\x73\\x63\\x72\";T7U+=\"\\u006f\";T7U+=\"\\u006c\\u006c\";Z0F=\"\\u006e\";Z0F+=\"\\x6f\\u0077\";D23=\"\\x74\\u0061\\u0072\\x67\\u0065\";D23+=\"\\x74\";a2U=\"\\u0061\\x6d\";a2U+=\"\\u0070\\u006c\\x69\\x74\\x75\\x64\\u0065\";q6V=\"\\u0065\\x6e\";q6V+=\"\\u0064\";C0t=\"\\x73\";C0t+=\"\\x77\\x69\\u0070\";C0t+=\"\\u0065\";o20=this[C0t];o20[q6V]=!![];x2w9K.a3b();o20[a2U]=o20[D23]=(q1C - q5Z['\\u0073\\u0063\\u0072\\u006f\\x6c\\x6c']) * this['\\x6c\\u0061\\u0079\\x6f\\u0075\\x74']['\\u0063\\u0061\\u006e\\x64\\u006c\\x65\\u0057\\x69\\x64\\x74\\x68'];o20['\\x74\\x69\\u006d\\x65\\x43\\x6f\\x6e\\u0073\\x74\\u0061\\u006e\\x74']=100;o20['\\x74\\x69\\u006d\\x65\\x73\\u0074\\x61\\u006d\\x70']=Date[Z0F]();o20['\\x73\\u0063\\x72\\u006f\\x6c\\x6c']=q5Z[T7U];o20['\\x63\\u0068\\u0061\\u0072\\u0074']=q5Z;o20[V7X]=o3Y;I9l=this;this['\\x6f\\x77\\x6e\\x65\\x72\\u0057\\u0069\\u006e\\x64\\u006f\\u0077'][O_$](function(){var y0x;y0x=\"\\x61\\u0075\";y0x+=\"\\u0074\\u006f\\x73\\u0063\";y0x+=\"\\u0072\";x2w9K.a3b();y0x+=\"\\x6f\\x6c\\u006c\";I9l[y0x]();});};x2w9K.V8b();l3X.ChartEngine.prototype.autoscroll=function(){var j1k,t8d,m_T,h0h;j1k=this;t8d=this.swipe;if(t8d.amplitude){t8d.elapsed=Date.now() - t8d.timestamp;m_T=-t8d.amplitude * Math.exp(-t8d.elapsed / t8d.timeConstant);h0h=(t8d.target + m_T) / this.layout.candleWidth;t8d.chart.scroll=t8d.scroll + Math.round(h0h);this.draw();this.updateChartAccessories();if(m_T > 0.5 || m_T < -+\"0.5\"){this.ownerWindow.requestAnimationFrame(function(){x2w9K.V8b();j1k.autoscroll();});}else {if(this.disableBackingStoreDuringTouch){this.reconstituteBackingStore();}if(t8d.cb){t8d.cb();}}}};};D9=l_a=>{var P0W=x2w9K;var N9u,X$_,h_3,a0R;N9u=l_a.CIQ;X$_='\\u0062\\x6f\\u0075\\u006e\\x64\\u0061\\x72\\x79';P0W.V8b();h_3='\\u006c\\x69\\x6e\\u0065';a0R='\\x62\\x6f\\x72\\u0064\\x65\\u0072';N9u.ChartEngine.prototype.drawXAxis=function(f__,M4I){var e6s,r2I,g10,d9K,Z6T,N4L,A0d,M2g,v2_,m8N,t3B,q5i,Y47,p9g,s1o,N$P,a$o,M5x,L0A,e6q,A2Y,N98,c$M,A2v,i6B,o12,d0b,W6y,G6J,R$r,b7G,I5S,g1f,c2f,a_H,h63;e6s=\"le\";function v52(f6D){var s7V,Z6Y,G8x,U_I,H_v,Z$Q,p4q,a_9,R$e,L2d,O45,u5O;f6D.sort((v1g,P89)=>{if(v1g.level < P89.level){return -1;}P0W.a3b();if(v1g.level > P89.level){return 1;}if(v1g.hz < P89.hz){return -1;}if(v1g.hz > P89.hz){return 1;}return 0;});Z6Y=Number.MAX_SAFE_INTEGER;G8x={};U_I={};for(s7V=0;s7V < f6D.length;s7V++){H_v=f6D[s7V];if(H_v.level > Z6Y)break;if(this.container.ownerDocument.body.classList.contains(\"sharing\") && (H_v.left <= N$P.left || H_v.unpaddedRight >= N$P.right)){H_v.suppress=!![];}Z$Q=Math.floor(H_v.left);p4q=Math.ceil(H_v[m6W?\"unpaddedRight\":\"right\"]);for(var H6L=Z$Q;H6L <= p4q;H6L++){a_9=G8x[H6L] || ({});if(!a_9.suppress && a_9.level <= H_v.level){R$e=a_9.alwaysAsBoundary && a_9.level < Z6Y;if(R$e && !H_v.alwaysAsBoundary || a_9.grid === X$_ && a_9.level < H_v.level || Z6T){L2d=\"lef\";L2d+=\"t\";O45=M2g && a_9.grid === X$_ && H_v.grid === h_3;if(a_9.left < Z$Q && a_9[O45?\"hz\":\"right\"] >= Z$Q || a_9.left > Z$Q && a_9[O45?\"hz\":L2d] <= p4q){H_v.suppress=!!1;break;}}else if(a_9.marketOpenOffset !== undefined && a_9.marketOpenOffset + a_9.raw === 0){H_v.suppress=!![];break;}else if(H_v.level){Z6Y=H_v.level - +\"1\";delete U_I[H_v.level];break;}}G8x[H6L]=H_v;if(H6L === p4q){if(!U_I[H_v.level]){U_I[H_v.level]=0;}U_I[H_v.level]++;}}}u5O=Object.entries(U_I).reverse();if(u5O.length > (\"1\" | 0) && !Z6T && u5O[0][0] >= B$G && u5O[1][0] < B$G && u5O[0][1] === 1 && (u5O[+\"1\"][1] > +\"1\" || u5O.length > 2)){u5O.shift();}if(u5O.length){Z6Y=Number(u5O[0][0]);}return Z6Y;}e6s+=\"f\";e6s+=\"t\";r2I=\" \";r2I+=\" \";g10=\"m\";g10+=\"iddle\";d9K=[f__,M4I];if(this.runPrepend(\"drawXAxis\",d9K)){return;}if(!M4I){return;}var {lineBaseLevel:B$G}=N9u.ChartEngine.XAxis;var {interval:y9s, timeUnit:O7U}=this.layout;var {xAxis:P5L}=f__;var {displayGridLines:C3R, displayBorder:V9m, fitLeftToRight:L3H, minimumLabelWidth:e25, noDraw:o1q, fitTight:m6W}=P5L;Z6T=L3H || y9s === \"tick\" || O7U === \"tick\";if(o1q){return;}N4L=this.getBackgroundCanvas().context;this.canvasFont(\"stx_xaxis\",N4L);A0d=this.getCanvasFontSize(\"stx_xaxis\");P5L.fontHeight=A0d;N4L.textAlign=\"center\";N4L.textBaseline=g10;P0W.V8b();M2g=!Z6T && this._height > 3 * A0d;v2_=!({});m8N=new Map();q5i=N4L.measureText(r2I).width;for(var p8v=+\"0\";p8v < M4I.length;p8v++){t3B=M4I[p8v];Y47=m8N.get(t3B.text);if(Y47 === undefined){Y47=N4L.measureText(t3B.text).width;m8N.set(t3B.text,Y47);}P0W.b$0(7);p9g=Math.max(P0W.j1j(q5i,Y47),e25);t3B.hz=Math.floor(t3B.hz + this.micropixels) - 0.5;P0W.b$0(82);var C02=P0W.o5B(19,19,4,36);t3B.left=t3B.hz - p9g / C02;P0W.P3q(49);var B2H=P0W.o5B(19,7,77,8);t3B.right=t3B.hz + p9g / B2H;P0W.P3q(3);var A_2=P0W.j1j(16,14);t3B.unpaddedRight=t3B.hz + Y47 / A_2;}s1o=this.xAxisAsFooter === !![]?this.chart.canvasHeight:f__.panel.bottom;P0W.P3q(3);N$P=this.whichPanel(P0W.j1j(s1o,1));a$o=241690495;P0W.b$0(44);M5x=-P0W.j1j(0,\"1456757994\");L0A=2;for(var R1A=+\"1\";P0W.P8Y(R1A.toString(),R1A.toString().length,51906) !== a$o;R1A++){if(!N$P){return;}this.adjustYAxisHeightOffset(N$P,N$P.yAxis);e6q=V9m || V9m === null;if(this.axisBorders === !0){e6q=!!({});}if(this.axisBorders === !({})){e6q=!1;}A2Y=s1o - this.xaxisHeight + A0d;if(e6q){A2Y+=3;}L0A+=2;}if(P0W.P8Y(L0A.toString(),L0A.toString().length,24557) !== M5x){if(-N$P){return;}this.adjustYAxisHeightOffset(N$P,N$P.yAxis);e6q=V9m && V9m !== 1;if(this.axisBorders == !({})){e6q=![];}if(this.axisBorders != !0){e6q=!\"\";}A2Y=(s1o + this.xaxisHeight) / A0d;if(e6q){P0W.P3q(41);A2Y-=P0W.j1j(\"0\",0);}}N98=!0;c$M=v52.call(this,M4I);f__.xAxis.maxLevelToDisplay=c$M;P0W.b$0(144);A2v=P0W.o5B(c$M,B$G);for(var k1C in this.panels){i6B=\"stro\";i6B+=\"k\";i6B+=\"e\";o12=\"st\";o12+=\"x_grid\";d0b=\"str\";d0b+=\"o\";d0b+=\"ke\";W6y=this.panels[k1C];if(W6y.hidden || W6y.shareChartXAxis === !!\"\")continue;P0W.b$0(83);G6J=P0W.j1j(W6y,N$P);R$r=W6y.yAxis;if(!R$r)continue;N4L.save();N4L.beginPath();N4L.rect(W6y.left,W6y.top + (N98?0:1),W6y.width,W6y.height - 1);N4L.clip();N98=!1;b7G=new N9u.Plotter();b7G.newSeries(h_3,d0b,this.canvasStyle(o12));b7G.newSeries(X$_,\"stroke\",this.canvasStyle(\"stx_grid_dark\"));b7G.newSeries(a0R,i6B,this.canvasStyle(\"stx_grid_border\"));for(var p0g=+\"0\";p0g < M4I.length;p0g++){t3B=M4I[p0g];if(t3B.level > c$M)break;if(t3B.suppress)continue;if(Math.floor(t3B.left) <= W6y.right){I5S=M2g && t3B.grid === X$_ && (t3B.alwaysAsBoundary && t3B.level < c$M || A2v);if(Math.floor(t3B.hz) > W6y.left){if(C3R){b7G.moveTo(t3B.grid,t3B.hz,R$r.top);b7G.lineTo(t3B.grid,t3B.hz,R$r.bottom);}if(G6J && e6q){b7G.moveTo(a0R,t3B.hz,R$r.bottom + (\"0.5\" - 0));b7G.lineTo(a0R,t3B.hz,R$r.bottom + 6);if(I5S){b7G.dashedLineTo(a0R,t3B.hz,R$r.bottom + +\"6\" + A0d + (\"3\" - 0),[1,+\"3\"]);}}}if(G6J && t3B.right > W6y.left){g1f=\"stx_xaxi\";g1f+=\"s_dark\";this.canvasColor(t3B.grid == X$_ && A2v || t3B.alwaysAsBoundary && t3B.level < c$M?g1f:\"stx_xaxis\",N4L);if(!A2v && t3B.boundaryOnlyText){t3B.text=t3B.boundaryOnlyText;}N4L.fillText(t3B.text,t3B.hz,A2Y + (I5S?A0d + 3:\"0\" ^ 0));if(v2_){N4L.strokeStyle=\"red\";N4L.strokeRect(t3B.left,A2Y - A0d,t3B.unpaddedRight - t3B.left,A0d * 2);N4L.strokeStyle=\"green\";N4L.strokeRect(t3B.unpaddedRight,A2Y - A0d,t3B.right - t3B.unpaddedRight,A0d * 2);}}}}if(e6q){c2f=Math.round(R$r.bottom) + +\"0.5\";a_H=Math.round(W6y.right) + 0.5;b7G.moveTo(a0R,W6y.left,c2f);b7G.lineTo(a0R,a_H,c2f);}if(P5L.enableTitle){h63=f__.panel.subholder;N4L.fillText(this.translateIf(P5L.title),h63.offsetWidth / (\"2\" ^ 0) + h63.offsetLeft,s1o - A0d + 3);}b7G.draw(N4L);N4L.restore();}N4L.textAlign=e6s;this.runAppend(\"drawXAxis\",d9K);};N9u.ChartEngine.prototype.createSpacedDateXAxis=function(R1T){var W8Z,e0J,I4Z,H$3,p$D,H0r,U0L,J0$,L9x,K3E,j0F,a_D,b0y,m3e,G$l,A1q,r$4,g6V;W8Z=\"se\";W8Z+=\"cond\";e0J=\"d\";e0J+=\"a\";P0W.V8b();e0J+=\"y\";I4Z=\"m\";I4Z+=\"o\";I4Z+=\"nt\";I4Z+=\"h\";H$3=\"mo\";H$3+=\"nth\";if(!R1T){R1T=this.chart;}var {lineBaseLevel:c_U}=N9u.ChartEngine.XAxis;var {dataSegment:r0M, lineApproximation:p_D, market:I4K, maxTicks:B9M, xaxis:Y32, xAxis:F8u}=R1T;var {candleWidth:Q06, interval:S57, timeUnit:D0N}=this.layout;Y32.length=0;for(var g8n=0;g8n < B9M;g8n++){H0r=r0M[g8n];if(H0r){if(g8n && !Y32.length){if(I4K){p$D=this.standardMarketIterator(H0r.DT,F8u.adjustTimeZone?this.displayZone:null);}for(var y7n=g8n;y7n > 0;y7n--){U0L={};if(p$D && !(p_D && Q06 < 1)){U0L.DT=p$D.previous();}Y32.unshift(U0L);}p$D=null;}}if(H0r || g8n && Y32.length){J0$=H0r && H0r.DT;if(H0r && H0r.displayDate && F8u.adjustTimeZone){J0$=H0r.displayDate;}if(!J0$){if(I4K){if(S57 == \"tick\" && !F8u.futureTicksInterval)break;if(p_D && Q06 < 1)break;if(!F8u.futureTicks)break;if(!p$D){p$D=this.standardMarketIterator(r0M[g8n - 1].DT,F8u.adjustTimeZone?this.displayZone:null);}J0$=p$D.next();}else continue;}L9x={DT:J0$,data:null};if(g8n < r0M.length){L9x.data=H0r;}Y32.push(L9x);}}K3E=[];if(!R1T.tzOffsetCache){R1T.tzOffsetCache=new Map();}if(R1T.tzOffsetCache.size > 20000){R1T.tzOffsetCache.clear();}j0F=R1T.tzOffsetCache;a_D=I4K && I4K.market_def || ({});b0y=(a_D.normal_daily_open || \"00:00\").split(\":\");P0W.b$0(7);var c9h=P0W.o5B(17,43);m3e=Number(b0y[\"0\" ^ 0]) * c9h;if(!a_D.hour_aligned){m3e+=Number(b0y[1]);}G$l=j4a=>{var N4v,O2$,t8T,e$9,s_Z,A3w,G7B;N4v=j4a === \"year\" || S57 !== j4a && D0N !== j4a?X$_:h_3;O2$=N9u.ChartEngine.XAxis.setPropertiesForInterval[j4a];t8T=R1T.left;Y32.forEach((S6x,d2C)=>{P0W.V8b();var b6L,a4n,F8n,H4L,Y4q,K6V,M5G,I$S;b6L=S6x.data && S6x.data.candleWidth || Q06;a4n=S6x.DT;if(a4n){H4L=\"w\";H4L+=\"eek\";switch(j4a){case \"year\":F8n=a4n.getFullYear();break;case \"month\":F8n=a4n.getMonth();break;case H4L:case \"day\":F8n=a4n.getDate();break;case \"minute\":F8n=a4n.getHours() * (\"60\" ^ 0) + a4n.getMinutes();break;case \"second\":F8n=a4n.getSeconds();break;case \"millisecond\":case \"tick\":F8n=a4n.getMilliseconds();break;default:break;}}if(N4v === h_3){P0W.P3q(139);t8T+=P0W.o5B(\"2\",b6L);}if(typeof F8n !== \"undefined\" && (N4v === h_3 || e$9 !== F8n)){Y4q=new N9u.ChartEngine.XAxisLabel({hz:t8T,grid:N4v,raw:F8n});if(j4a === \"minute\"){if(!s_Z || s_Z.getDate() !== a4n.getDate()){s_Z=a4n;K6V=I4K && I4K.market_tz;M5G=`${+a4n}|${K6V}|${this.displayZone}`;A3w=j0F.get(M5G);if(A3w === undefined){I$S=S6x.data && S6x.data.DT || new Date(N9u.convertTimeZone(a4n,this.displayZone));P0W.P3q(27);A3w=P0W.j1j(a4n,I$S,60000);j0F.set(M5G,A3w);}}P0W.P3q(3);Y4q.marketOpenOffset=P0W.o5B(A3w,m3e);}Y4q.priorDT=G7B;if(O2$){O2$(Y4q,S6x,I4K,this);}if(Y4q.grid == h_3 && Y4q.level < c_U){Y4q.level+=c_U;}if(d2C || N4v === h_3){K3E.push(Y4q);}e$9=F8n;}if(N4v === h_3){P0W.b$0(22);t8T+=P0W.j1j(b6L,2);}else {t8T+=b6L;}G7B=a4n;});};A1q=D0N || S57;r$4=[\"year\",H$3,\"week\",I4Z,e0J,\"minute\",W8Z,\"millisecond\",\"tick\"];g6V=r$4.indexOf(A1q);if(g6V > (\"0\" ^ 0)){if(A1q !== \"tick\"){G$l(r$4[g6V - 1]);}G$l(r$4[g6V]);}return K3E;};};t2=w_Q=>{var R6R=x2w9K;var u0s;u0s=w_Q.CIQ;R6R.V8b();u0s['\\u0043\\x68\\x61\\x72\\x74\\x45\\x6e\\x67\\u0069\\u006e\\x65']['\\u0070\\u0072\\u006f\\x74\\x6f\\x74\\x79\\u0070\\u0065']['\\u0063\\x72\\x65\\u0061\\u0074\\x65\\x59\\x41\\x78\\u0069\\x73']=function(U$b,m3N){var w8P,S_y,a2L,e4i,H$A,c3t,V5o,e7U,m6d,s_z,J3h,s48,P7K,W5O,B06,x$I,H0f,m8B,u3_,E00,C8M,i_2,z6I,L8f,B7B,u_h,S3U,k4v,q4c,k5C,G$Q,B2v,A8s,E7D,H9w,X_b,l6E,r1R,P9Z,l8i,r96,O4k,g5h,N_b,K6J,D8f,p3D,l5d,z2X,w91,N_O,G$R,v4l,h9b,B0k,p9K,K28,i1v,j8T,O3K,X6S,D$H,d2k,q_M,r4g,w44,o86;w8P=\"\\u0064\\x65\\x63\\x69\\u006d\\x61\";w8P+=\"\\x6c\\x50\\x6c\\x61\\x63\\x65\\u0073\";S_y=\"\\x6e\\u006f\\u0043\\x68\";S_y+=\"\\u0061\\x6e\\x67\\x65\";a2L=\"\\u0067\\x6f\";a2L+=\"\\u006c\\x64\\u0065\\x6e\\x52\\u0061\\u0074\\x69\\u006f\\x59\\x41\\u0078\\u0069\\u0073\";e4i=\"\\u0069\\x64\\u0065\\u0061\\x6c\\x54\\x69\";e4i+=\"\\u0063\\x6b\\x53\\x69\\u007a\";e4i+=\"\\x65\\u0050\\u0069\\x78\\u0065\\x6c\\u0073\";H$A=\"\\x78\";H$A+=\"\\x41\\x78\\u0069\\x73\";c3t=\"\\u0063\\u0061\\u0063\\x68\";c3t+=\"\\u0065\\x48\\u0069\\u0067\\u0068\";V5o=\"\\u0079\";V5o+=\"\\x41\";V5o+=\"\\u0078\\x69\\u0073\";e7U=\"\\x79\";e7U+=\"\\u0041\\u0078\\u0069\";e7U+=\"\\u0073\";m6d=\"\\u0063\";m6d+=\"\\u0072\\u0065\\x61\\x74\\u0065\\u0059\\u0041\";m6d+=\"\\u0078\";m6d+=\"\\x69\\x73\";if(this['\\x72\\x75\\u006e\\u0050\\x72\\x65\\u0070\\u0065\\x6e\\u0064'](m6d,arguments)){return;}s_z=U$b['\\u0063\\u0068\\x61\\u0072\\x74'];J3h=U$b['\\x6e\\u0061\\u006d\\x65'] == s_z['\\x6e\\u0061\\u006d\\u0065'];if(!m3N){m3N={};}m3N['\\u006e\\u006f\\u0043\\x68\\x61\\x6e\\x67\\x65']=![];s48=m3N[e7U]?m3N[V5o]:U$b['\\u0079\\u0041\\x78\\u0069\\x73'];if(u0s['\\u0043\\x68\\x61\\u0072\\x74\\u0045\\u006e\\u0067\\x69\\u006e\\u0065']['\\u0065\\x6e\\u0061\\u0062\\u006c\\u0065\\x43\\u0061\\x63\\u0068\\u0069\\u006e\\u0067'] && s48['\\u0068\\u0069\\x67\\x68'] == U$b[c3t] && s48['\\u006c\\x6f\\x77'] == U$b['\\u0063\\u0061\\u0063\\u0068\\u0065\\x4c\\u006f\\x77']){P7K=\"\\x6d\\x61\\u0078\\x54\\x69\";P7K+=\"\\x63\";P7K+=\"\\x6b\";P7K+=\"\\u0073\";W5O=\"\\u0064\\u0061\";W5O+=\"\\u0074\\x61\\x53\";W5O+=\"\\u0065\";W5O+=\"\\x74\";R6R.P3q(138);var O5e=R6R.j1j(20,79,4,0);B06=s_z[W5O]['\\u006c\\u0065\\u006e\\x67\\u0074\\u0068'] - s_z['\\u0073\\x63\\x72\\x6f\\x6c\\u006c'] - O5e;x$I=B06 + s_z[P7K] + (\"1\" - 0);U$b['\\u0063\\x61\\x63\\x68\\x65\\u004c\\x65\\x66\\u0074']=B06;U$b['\\x63\\u0061\\u0063\\u0068\\x65\\x52\\u0069\\u0067\\x68\\x74']=x$I;m3N['\\x6e\\u006f\\x43\\u0068\\x61\\x6e\\x67\\u0065']=!0;}else {H0f=\"\\u006c\\x6f\";H0f+=\"\\u0077\";U$b['\\x63\\u0061\\u0063\\x68\\u0065\\u004c\\u0065\\x66\\u0074']=1000000;U$b['\\x63\\u0061\\u0063\\x68\\x65\\u0052\\u0069\\u0067\\x68\\x74']=-1;U$b['\\x63\\u0061\\x63\\u0068\\x65\\x48\\u0069\\u0067\\x68']=s48['\\u0068\\u0069\\u0067\\u0068'];U$b['\\x63\\x61\\u0063\\x68\\x65\\u004c\\u006f\\x77']=s48[H0f];}m8B=s_z[H$A][e4i] || s_z['\\x78\\u0041\\x78\\u0069\\x73']['\\u0061\\x75\\x74\\x6f\\u0043\\u006f\\u006d\\x70\\x75\\x74\\x65\\x64\\u0054\\x69\\u0063\\x6b\\x53\\u0069\\u007a\\x65\\x50\\u0069\\u0078\\u0065\\u006c\\u0073'];if(s48[a2L]){if(s48['\\u0069\\x64\\u0065\\x61\\x6c\\u0054\\u0069\\x63\\x6b\\u0053\\x69\\x7a\\x65\\u0050\\u0069\\u0078\\x65\\x6c\\u0073'] != m8B / 1.618){m3N['\\u006e\\u006f\\u0043\\u0068\\x61\\u006e\\x67\\u0065']=![];}}if(!m3N[S_y]){E00=\"\\u006e\\u006f\\u0045\\u0076\\x65\\u006e\\x44\\u0069\\x76\\x69\\x73\\x6f\\x72\";E00+=\"\\u0054\\x69\\x63\\u006b\\u0073\";C8M=\"\\x70\\x72\\x69\\u0063\\x65\";C8M+=\"\\u0054\\x69\\x63\\x6b\";i_2=\"\\u0072\";i_2+=\"\\x6f\\x75\\u006e\\u0064\";z6I=\"\\x70\\u0072\\x69\";z6I+=\"\\u0063\";z6I+=\"\\u0065\\u0054\";z6I+=\"\\u0069\\u0063\\x6b\";L8f=\"\\x73\\u0068\";L8f+=\"\\u0061\\u0064\\u006f\";L8f+=\"\\u0077\";B7B=\"\\x69\\x64\\u0065\\u0061\\x6c\\x54\\x69\\x63\\x6b\";B7B+=\"\\x53\\u0069\\u007a\\x65\";B7B+=\"\\x50\\x69\\u0078\\x65\";B7B+=\"\\x6c\\u0073\";u_h=\"\\x79\\u0041\\u0078\\x69\";u_h+=\"\\x73\";S3U=\"\\x6e\\u0061\";S3U+=\"\\u006d\";S3U+=\"\\x65\";k4v=\"\\x61\\u0063\\u0074\\u0069\\x76\\x65\\x44\\x72\\u0061\\u0077\";k4v+=\"\\x69\";k4v+=\"\\u006e\\u0067\";q4c=\"\\u0061\\x63\\x74\\u0069\";q4c+=\"\\x76\\u0065\\u0044\\u0072\\u0061\\u0077\\x69\";q4c+=\"\\u006e\\u0067\";k5C=\"\\u006c\";k5C+=\"\\x6f\";k5C+=\"\\x77\";G$Q=\"\\u0068\";G$Q+=\"\\u0069\";G$Q+=\"\\x67\";G$Q+=\"\\x68\";this['\\u0061\\x64\\x6a\\u0075\\x73\\x74\\x59\\x41\\x78\\x69\\u0073\\u0048\\x65\\u0069\\x67\\x68\\u0074\\u004f\\x66\\x66\\u0073\\x65\\x74'](U$b,s48);B2v=s48['\\u0068\\u0065\\u0069\\x67\\x68\\u0074']=s48['\\u0062\\x6f\\x74\\u0074\\x6f\\u006d'] - s48['\\x74\\x6f\\x70'];A8s=(s48[G$Q] - s48['\\x6c\\u006f\\x77']) / (B2v - s48['\\x7a\\u006f\\x6f\\x6d']);if(!s48['\\u0073\\x65\\u006d\\u0069\\u004c\\x6f\\u0067']){E7D=\"\\x67\";E7D+=\"\\u0072\\x6f\\u0075\\x6e\";E7D+=\"\\x64\";if(m3N[E7D]){H9w=\"\\x68\\u0069\";H9w+=\"\\u0067\\x68\";s48[H9w]=s48['\\x68\\x69\\x67\\x68'] + s48['\\x7a\\x6f\\x6f\\u006d'] * A8s;}else {X_b=\"\\u007a\\x6f\\x6f\";X_b+=\"\\u006d\";l6E=\"\\u006c\";l6E+=\"\\x6f\";l6E+=\"\\u0077\";r1R=\"\\x73\\u0063\";r1R+=\"\\u0072\\x6f\";r1R+=\"\\x6c\";r1R+=\"\\x6c\";P9Z=\"\\u007a\";P9Z+=\"\\x6f\";P9Z+=\"\\x6f\";P9Z+=\"\\x6d\";l8i=\"\\u0068\";l8i+=\"\\x69\\u0067\";l8i+=\"\\u0068\";R6R.b$0(145);var e2N=R6R.j1j(4,0,11,9,1);s48['\\x68\\x69\\u0067\\u0068']=s48[l8i] + (s48[P9Z] / e2N + s48[r1R]) * A8s;R6R.P3q(12);var K5N=R6R.o5B(5,98,20);s48['\\u006c\\u006f\\u0077']=s48[l6E] - (s48[X_b] / K5N - s48['\\u0073\\u0063\\u0072\\u006f\\x6c\\u006c']) * A8s;}}if(s48['\\u006d\\x69\\x6e'] || s48['\\u006d\\x69\\x6e'] === 0){s48['\\x6c\\u006f\\u0077']=s48['\\u006d\\u0069\\x6e'];}if(s48['\\x6d\\u0061\\u0078'] || s48['\\u006d\\x61\\u0078'] === 0){s48['\\x68\\u0069\\x67\\u0068']=s48['\\x6d\\u0061\\x78'];}s48['\\x73\\x68\\x61\\u0064\\x6f\\x77']=s48['\\x68\\x69\\x67\\u0068'] - s48[k5C];if(s48['\\x73\\u0065\\x6d\\x69\\x4c\\x6f\\x67'] && (!this[q4c] || this[k4v][S3U] != '\\u0070\\x72\\x6f\\x6a\\u0065\\u0063\\u0074\\u0069\\x6f\\x6e')){r96=\"\\x6c\";r96+=\"\\u006f\\u0077\";O4k=\"\\x68\";O4k+=\"\\x69\";O4k+=\"\\x67\\u0068\";g5h=\"\\x73\";g5h+=\"\\x68\\x61\\x64\\x6f\\u0077\";N_b=\"\\x7a\";N_b+=\"\\x6f\";N_b+=\"\\x6f\";N_b+=\"\\x6d\";K6J=\"\\u0068\\x65\";K6J+=\"\\u0069\\x67\\x68\";K6J+=\"\\u0074\";D8f=\"\\u0068\";D8f+=\"\\x65\\u0069\\u0067\\x68\\u0074\";p3D=function(){var X3o,x8W,h6K,S9w;X3o=\"\\u006c\";X3o+=\"\\u006f\";X3o+=\"\\u0067\\x4c\\x6f\\x77\";x8W=\"\\x6c\";x8W+=\"\\x6f\";x8W+=\"\\u0067\";h6K=\"\\u006c\";h6K+=\"\\x6f\\u0067\\x48\";h6K+=\"\\u0069\";h6K+=\"\\u0067\\u0068\";s48[h6K]=Math['\\u006c\\u006f\\x67'](s48['\\u0068\\u0069\\x67\\x68']) / Math['\\u004c\\u004e\\u0031\\x30'];S9w=Math['\\x6d\\u0061\\u0078'](s48['\\x6c\\u006f\\u0077'],0.000000001);s48['\\u006c\\u006f\\x67\\x4c\\x6f\\u0077']=Math[x8W](S9w) / Math['\\u004c\\u004e\\x31\\x30'];if(s48['\\x6c\\u006f\\x77'] <= 0){s48['\\u006c\\u006f\\x67\\x4c\\u006f\\x77']=0;}s48['\\x6c\\u006f\\u0067\\x53\\u0068\\x61\\x64\\x6f\\x77']=s48['\\u006c\\u006f\\x67\\u0048\\u0069\\u0067\\x68'] - s48[X3o];};if(s48['\\u0073\\u0065\\x6d\\u0069\\u004c\\u006f\\x67']){p3D();}l5d=s48[D8f] / (s48[K6J] - s48[N_b]);if(s48['\\x66\\u006c\\x69\\x70\\x70\\u0065\\u0064']){z2X=\"\\u0074\";z2X+=\"\\x6f\\u0070\";s48['\\x68\\u0069\\x67\\u0068']=this['\\u0074\\u0072\\u0061\\u006e\\u0073\\x66\\x6f\\x72\\x6d\\u0065\\u0064\\u0050\\u0072\\x69\\u0063\\u0065\\u0046\\u0072\\x6f\\u006d\\x50\\u0069\\x78\\u0065\\x6c'](s48['\\x62\\x6f\\u0074\\x74\\u006f\\x6d'] + l5d * (s48['\\x7a\\x6f\\u006f\\x6d'] / (\"2\" * 1) + s48['\\x73\\x63\\u0072\\u006f\\u006c\\x6c']),U$b,s48);s48['\\x6c\\u006f\\u0077']=this['\\u0074\\x72\\x61\\u006e\\u0073\\u0066\\x6f\\x72\\x6d\\u0065\\x64\\u0050\\u0072\\x69\\x63\\x65\\x46\\u0072\\u006f\\u006d\\x50\\u0069\\u0078\\x65\\u006c'](s48[z2X] - l5d * (s48['\\x7a\\u006f\\u006f\\u006d'] / 2 - s48['\\x73\\u0063\\u0072\\u006f\\u006c\\u006c']),U$b,s48);}else {w91=\"\\x6c\";w91+=\"\\u006f\";w91+=\"\\x77\";N_O=\"\\x73\\u0063\";N_O+=\"\\u0072\\u006f\\u006c\";N_O+=\"\\u006c\";s48['\\x68\\u0069\\x67\\u0068']=this['\\u0074\\x72\\x61\\u006e\\u0073\\u0066\\u006f\\u0072\\u006d\\x65\\u0064\\u0050\\u0072\\u0069\\x63\\u0065\\x46\\u0072\\x6f\\x6d\\x50\\u0069\\u0078\\x65\\u006c'](s48['\\u0074\\u006f\\x70'] - l5d * (s48['\\u007a\\u006f\\u006f\\x6d'] / 2 + s48[N_O]),U$b,s48);s48[w91]=this['\\u0074\\u0072\\x61\\u006e\\u0073\\u0066\\u006f\\x72\\u006d\\u0065\\x64\\x50\\x72\\u0069\\x63\\u0065\\x46\\u0072\\u006f\\x6d\\x50\\u0069\\x78\\u0065\\x6c'](s48['\\x62\\u006f\\x74\\u0074\\x6f\\u006d'] + l5d * (s48['\\u007a\\u006f\\u006f\\x6d'] / (\"2\" ^ 0) - s48['\\x73\\u0063\\x72\\u006f\\u006c\\u006c']),U$b,s48);}s48[g5h]=s48[O4k] - s48[r96];if(s48['\\x73\\u0065\\u006d\\x69\\x4c\\u006f\\x67']){p3D();}}if(s48['\\u0067\\x6f\\u006c\\u0064\\x65\\u006e\\x52\\u0061\\u0074\\x69\\u006f\\x59\\x41\\x78\\x69\\u0073'] && J3h && s48 == U$b[u_h]){R6R.P3q(146);s48['\\x69\\u0064\\u0065\\x61\\u006c\\u0054\\x69\\x63\\x6b\\x53\\x69\\u007a\\u0065\\u0050\\u0069\\x78\\x65\\x6c\\x73']=R6R.o5B(m8B,\"1.618\",0);if(s48['\\x69\\u0064\\x65\\u0061\\x6c\\x54\\u0069\\x63\\x6b\\u0053\\x69\\x7a\\x65\\x50\\u0069\\u0078\\x65\\x6c\\u0073'] === 0){G$R=this['\\x67\\x65\\x74\\u0043\\x61\\x6e\\x76\\u0061\\x73\\x46\\x6f\\u006e\\u0074\\x53\\x69\\u007a\\x65']('\\u0073\\x74\\u0078\\x5f\\x79\\x61\\x78\\u0069\\u0073');R6R.P3q(93);s48['\\x69\\x64\\u0065\\x61\\u006c\\u0054\\u0069\\u0063\\u006b\\x53\\x69\\x7a\\x65\\x50\\x69\\x78\\u0065\\u006c\\x73']=R6R.o5B(G$R,\"5\",1);}}else {v4l=\"\\x69\\u0064\\u0065\\u0061\\u006c\\x54\\x69\\u0063\\u006b\\x53\\x69\\u007a\\x65\\x50\\u0069\\u0078\\x65\";v4l+=\"\\x6c\\x73\";if(!s48[v4l]){h9b=\"\\x67\\u0065\\u0074\";h9b+=\"\\u0043\";h9b+=\"\\x61\\u006e\\x76\\u0061\\x73\\u0046\\x6f\\u006e\";h9b+=\"\\u0074\\u0053\\u0069\\u007a\\u0065\";G$R=this[h9b]('\\u0073\\u0074\\x78\\u005f\\u0079\\u0061\\x78\\u0069\\x73');if(J3h){R6R.b$0(24);s48['\\x69\\x64\\x65\\x61\\u006c\\u0054\\u0069\\u0063\\u006b\\x53\\x69\\x7a\\u0065\\x50\\u0069\\u0078\\x65\\x6c\\x73']=R6R.j1j(G$R,5);}else {B0k=\"\\x69\\x64\\x65\\u0061\\u006c\";B0k+=\"\\x54\\u0069\\u0063\\u006b\\x53\\u0069\\x7a\\x65\\u0050\\x69\\u0078\\u0065\\x6c\\u0073\";R6R.b$0(24);s48[B0k]=R6R.o5B(G$R,2);}}}p9K=Math['\\x72\\u006f\\u0075\\x6e\\u0064'](B2v / s48[B7B]);u3_=m3N['\\x72\\u0061\\x6e\\x67\\u0065']?m3N['\\x72\\u0061\\u006e\\x67\\x65'][+\"1\"] - m3N['\\u0072\\u0061\\x6e\\x67\\u0065'][0]:s48[L8f];R6R.b$0(22);s48['\\x70\\x72\\u0069\\u0063\\x65\\u0054\\x69\\x63\\u006b']=Math['\\u0066\\u006c\\u006f\\x6f\\u0072'](R6R.o5B(u3_,p9K));K28=1;for(var F$9=0;F$9 < 10;F$9++){i1v=\"\\x70\\u0072\\u0069\\x63\";i1v+=\"\\u0065\\u0054\\u0069\";i1v+=\"\\x63\";i1v+=\"\\x6b\";if(s48['\\x70\\x72\\u0069\\u0063\\u0065\\u0054\\u0069\\u0063\\x6b'] > 0)break;K28*=10;s48[i1v]=Math['\\u0066\\u006c\\u006f\\u006f\\x72'](u3_ / p9K * K28) / K28;}if(F$9 == +\"10\"){s48['\\x70\\x72\\u0069\\u0063\\x65\\x54\\x69\\x63\\u006b']=0.00000001;}s48[z6I]=Math['\\x72\\x6f\\u0075\\x6e\\u0064'](u3_ / p9K * K28) / K28;j8T=Math[i_2](u3_ / s48[C8M]);if(m3N['\\u0072\\x61\\u006e\\u0067\\x65'] && j8T < u3_ && !s48[E00]){O3K=\"\\x70\";O3K+=\"\\x72\\x69\\u0063\";O3K+=\"\\x65\";O3K+=\"\\u0054\\u0069\\x63\\x6b\";while(j8T >= +\"1\"){if(u3_ % j8T === \"0\" * 1)break;j8T--;}R6R.P3q(22);s48[O3K]=R6R.j1j(u3_,j8T);}if(s48['\\u006d\\u0069\\x6e\\u0069\\x6d\\u0075\\x6d\\u0050\\u0072\\u0069\\u0063\\x65\\x54\\x69\\u0063\\u006b']){X6S=s48['\\u006d\\x69\\u006e\\u0069\\u006d\\x75\\x6d\\x50\\x72\\u0069\\x63\\u0065\\x54\\u0069\\u0063\\u006b'];G$R=this['\\u0067\\u0065\\u0074\\u0043\\x61\\u006e\\x76\\u0061\\x73\\x46\\u006f\\u006e\\x74\\x53\\x69\\x7a\\u0065']('\\u0073\\u0074\\x78\\x5f\\x79\\x61\\u0078\\x69\\u0073');for(var O$K=0;O$K < 100;O$K++){R6R.P3q(22);D$H=R6R.o5B(u3_,X6S);if(B2v / D$H < G$R * 2){X6S+=s48['\\u006d\\u0069\\u006e\\u0069\\x6d\\u0075\\u006d\\x50\\u0072\\u0069\\u0063\\x65\\u0054\\u0069\\u0063\\x6b'];}else break;}if(O$K < 100){s48['\\x70\\u0072\\x69\\u0063\\u0065\\u0054\\u0069\\u0063\\x6b']=X6S;}}}if(s48['\\u0070\\x72\\x69\\x63\\x65\\u0054\\u0069\\u0063\\x6b'] <= +\"0\" || s48['\\u0070\\u0072\\u0069\\x63\\x65\\u0054\\x69\\x63\\u006b'] === Infinity){s48['\\x70\\x72\\u0069\\x63\\x65\\x54\\u0069\\u0063\\u006b']=+\"1\";}s48['\\x6d\\u0075\\x6c\\u0074\\x69\\x70\\u006c\\u0069\\x65\\u0072']=s48['\\x68\\u0065\\u0069\\x67\\u0068\\x74'] / s48['\\x73\\u0068\\u0061\\u0064\\x6f\\u0077'];if(s48['\\x6d\\x75\\x6c\\u0074\\x69\\x70\\u006c\\u0069\\u0065\\u0072'] == Infinity){R6R.P3q(41);s48['\\u006d\\x75\\u006c\\x74\\u0069\\x70\\u006c\\x69\\u0065\\x72']=R6R.j1j(\"0\",0);}if(!s48[w8P] && s48['\\u0064\\x65\\x63\\u0069\\x6d\\u0061\\x6c\\x50\\u006c\\x61\\x63\\x65\\x73'] !== 0){d2k=\"\\u0070\\x72\";d2k+=\"\\u0069\\x6e\\x74\\x44\\x65\\u0063\\u0069\\u006d\\x61\\u006c\\u0050\\u006c\\x61\\u0063\";d2k+=\"\\u0065\\u0073\";if(J3h){q_M=+\"0\";for(var b$r=0;b$r < U$b['\\x79\\u0041\\x78\\x69\\u0073']['\\u0073\\u0068\\u0061\\u0064\\u006f\\u0077\\u0042\\u0072\\x65\\x61\\u006b\\u0073']['\\u006c\\u0065\\x6e\\u0067\\u0074\\x68'];b$r++){r4g=\"\\u0073\\x68\";r4g+=\"\\u0061\";r4g+=\"\\x64\\x6f\";r4g+=\"\\u0077\";w44=U$b['\\x79\\u0041\\u0078\\u0069\\x73']['\\x73\\x68\\x61\\u0064\\u006f\\x77\\x42\\x72\\u0065\\x61\\u006b\\u0073'][b$r];if(U$b['\\u0079\\x41\\x78\\x69\\u0073'][r4g] < w44[0]){q_M=w44[1];}}s48['\\x70\\x72\\u0069\\u006e\\u0074\\u0044\\x65\\x63\\u0069\\u006d\\u0061\\x6c\\x50\\u006c\\u0061\\u0063\\x65\\u0073']=q_M;}else {s48[d2k]=null;}}else {o86=\"\\u0064\\x65\\u0063\\x69\\x6d\";o86+=\"\\u0061\\x6c\\u0050\\x6c\\x61\\u0063\\x65\\u0073\";s48['\\u0070\\u0072\\u0069\\x6e\\x74\\x44\\x65\\x63\\u0069\\x6d\\x61\\x6c\\u0050\\x6c\\u0061\\x63\\x65\\x73']=s48[o86];}this['\\u0072\\u0075\\x6e\\x41\\u0070\\x70\\u0065\\x6e\\u0064']('\\u0063\\u0072\\x65\\x61\\u0074\\x65\\u0059\\u0041\\x78\\x69\\u0073',arguments);};u0s.ChartEngine.prototype.drawYAxis=function(Z3n,Y4X){var o7B,h68,k0Q,Y01,X$E,I$a,m5P,H7q,m8J,g_5,f1$,C7u,d2d,t2l,P9l,U$p,j5f,s$X,X0X,Z_D,z0m,n_7,g8L,Z4y,t98,q2d,J3g,b55,I$b,W9q,R6V,K3J,q05,v4Q,c6M,x7K,Z4r,h4T,i49,m9e,R4S;o7B=\"d\";o7B+=\"ra\";o7B+=\"wYAxis\";if(!Y4X){Y4X={};}h68=Y4X.yAxis?Y4X.yAxis:Z3n.yAxis;if(Z3n.hidden || h68.noDraw || !h68.width){return;}if(!u0s.Comparison || h68.priceFormatter != u0s.Comparison.priceFormat){k0Q=h68.fractional;if(k0Q){if(!h68.originalPriceFormatter){h68.originalPriceFormatter={func:h68.priceFormatter};}if(!k0Q.resolution){k0Q.resolution=h68.minimumPrice;}if(!k0Q.formatter){k0Q.formatter=(5802,3330) >= (8190,956.31)?(+\"9520\",4630) == (2720,224.57)?(8.17e+3,529.61):\"'\":\"H\";}if(!h68.priceFormatter){h68.priceFormatter=function(k1j,K5y,j3$){var b_M,C3e,C8C,u8b;if(!k0Q){return;}b_M=\"\";if(j3$ < 0){b_M=\"-\";j3$=Math.abs(j3$);}C3e=Math.floor(Math.round(j3$ / k0Q.resolution) * k0Q.resolution);C8C=Math.round((j3$ - C3e) / k0Q.resolution);u8b=Math.floor(C8C);R6R.b$0(80);var i2K=R6R.j1j(54,24,8,3);R6R.P3q(68);var f0w=R6R.j1j(2,193880,6160,10,16);R6R.b$0(9);var l_i=R6R.j1j(204768,948,17,13);R6R.b$0(147);var w6z=R6R.o5B(16,84,68,8,7);R6R.P3q(42);var x5I=R6R.j1j(1154,3,5,2323);R6R.b$0(3);var N_0=R6R.o5B(2579,14);R6R.b$0(61);var J2p=R6R.o5B(20,409860,83160,4);R6R.b$0(3);R6R.a3b();var Z9D=R6R.o5B(768,384);R6R.b$0(91);var o8X=R6R.j1j(6134,769,4,20);return b_M + C3e + k0Q.formatter + (u8b < i2K?f0w < \"5108\" - 0?\"0\":(l_i,821.9) !== (\"3393\" ^ 0,w6z)?x5I:N_0:\"\") + u8b + (C8C - u8b >= 0.5?852.67 != (662.73,J2p)?\"+\":772.94 > (304.99,50.96)?(+\"3984\",Z9D) === (\"405\" | 0)?(o8X,!1):\"p\":\"L\":\"\");};}}else {if(h68.originalPriceFormatter){h68.priceFormatter=h68.originalPriceFormatter.func;h68.originalPriceFormatter=null;}}}Y01=this.colorOrStyle(h68.textStyle || \"stx_yaxis\");X$E=this.highlightedDraggable;I$a=0;if(X$E && this.yaxisMatches(X$E,h68)){I$a=0.15;}else if(h68.highlight){I$a=0.1;if(h68.showMenuToggle){h68.showMenuToggle();}}else if(!Object.values(this.panels).some(G2H=>{return G2H.yaxisLHS.concat(G2H.yaxisRHS).some(f3n=>{R6R.V8b();return f3n.highlight;});})){if(h68.showMenuToggle){h68.showMenuToggle(![]);}}if(I$a){m5P=Y01.constructor == String?Y01:Y01.color;h68.setBackground(this,{color:m5P,opacity:I$a});}if(h68.pretty){return this.drawYAxisPretty(Z3n,Y4X);}if(this.runPrepend(\"drawYAxis\",arguments)){return;}R6R.V8b();if(!Y4X.noDraw && !h68.noDraw){H7q=h68.yAxisPlotter;if(!H7q || !Y4X.noChange){m8J=\"st\";m8J+=\"x_\";m8J+=\"yax\";m8J+=\"is\";H7q=h68.yAxisPlotter=new u0s.Plotter();g_5=Z3n.chart;f1$=Z3n.name == g_5.name && h68.name === Z3n.yAxis.name;if(!h68.priceTick){return;}C7u=h68.shadow;d2d=Y4X.range;if(d2d){R6R.P3q(0);var I86=R6R.j1j(20,35,16);C7u=d2d[I86] - d2d[0];}t2l=C7u / h68.priceTick;t2l=Math.round(t2l);if(h68.semiLog){P9l=Math.log(this.valueFromPixel(h68.flipped?h68.top:h68.bottom,Z3n)) / Math.LN10;U$p=(h68.logHigh - h68.logLow) / t2l;}H7q.newSeries(\"grid\",\"stroke\",this.canvasStyle(\"stx_grid\"));H7q.newSeries(\"text\",\"fill\",Y01);H7q.newSeries(\"border\",\"stroke\",this.canvasStyle(\"stx_grid_border\"));j5f=0;s$X=d2d?d2d[1]:h68.high;X0X=d2d?d2d[\"0\" * 1]:h68.low;Z_D=h68.displayBorder === null?g_5.panel.yAxis.displayBorder:h68.displayBorder;if(this.axisBorders === ![]){Z_D=!({});}if(this.axisBorders === !!({})){Z_D=!!({});}n_7=g_5.dynamicYAxis;g8L=n_7?h68.width:NaN;Z4y=this.getYAxisCurrentPosition(h68,Z3n);if(Z4y == \"left\"){z0m=h68.left + h68.width;}else {t98=-17985659;q2d=+\"1277717618\";J3g=2;for(var A3z=1;R6R.P8Y(A3z.toString(),A3z.toString().length,+\"59417\") !== t98;A3z++){z0m=h68.left;J3g+=2;}if(R6R.P8Y(J3g.toString(),J3g.toString().length,71146) !== q2d){z0m=h68.left;}z0m=h68.left;}b55=Math.round(z0m) + 0.5;I$b=Z_D?3:0;if(Z4y == \"left\"){I$b=Z_D?-3:0;}if(f1$){if(h68.shadow < 1){R6R.P3q(3);var s8I=R6R.o5B(130,120);R6R.b$0(148);var J6Q=R6R.o5B(54,5,10,11);j5f=(parseInt(X0X / h68.priceTick,s8I) + J6Q) * h68.priceTick - X0X;}else {j5f=h68.priceTick - Math.round(X0X % h68.priceTick * Z3n.chart.roundit) / Z3n.chart.roundit;}}else {j5f=s$X % h68.priceTick;}W9q=this.getCanvasFontSize(m8J);for(var W_u=0;W_u < t2l;W_u++){if(h68.semiLog){R6R.b$0(120);K3J=R6R.j1j(P9l,W_u,U$p);R6V=Math.pow(10,K3J);}else {if(f1$){R6V=X0X + W_u * h68.priceTick + j5f;}else {R6V=s$X - W_u * h68.priceTick - j5f;}}q05=this.pixelFromTransformedValue(R6V,Z3n,h68);v4Q=Math.floor(q05) + 0.5;if(v4Q + W9q / 2 > Z3n.bottom)continue;if(v4Q - W9q / 2 < Z3n.top)continue;if(Math.abs(v4Q - h68.bottom) < 1)continue;if(h68.flipped){v4Q=h68.top + h68.bottom - v4Q;}if(h68.displayGridLines){c6M=\"gr\";c6M+=\"i\";c6M+=\"d\";x7K=\"g\";x7K+=\"r\";x7K+=\"i\";x7K+=\"d\";H7q.moveTo(x7K,Z3n.left + 1,v4Q);H7q.lineTo(c6M,Z3n.right - 1,v4Q);}if(Z_D){R6R.P3q(3);H7q.moveTo(\"border\",R6R.j1j(b55,0.5),v4Q);R6R.P3q(7);H7q.lineTo(\"border\",R6R.o5B(I$b,b55),v4Q);}if(h68.priceFormatter){R6V=h68.priceFormatter(this,Z3n,R6V);}else {R6V=this.formatYAxisPrice(R6V,Z3n,null,h68);}Z4r=h68.textBackground?this.containerColor:null;h4T=3;R6R.P3q(34);i49=R6R.o5B(z0m,h4T,I$b);if(Z4y == \"left\"){i49=h68.left + h4T;if(h68.justifyRight !== !1){i49=h68.left + h68.width + I$b - h4T;}}else {if(h68.justifyRight){i49=z0m + h68.width;}}H7q.addText(\"text\",R6V,i49,v4Q,Z4r,null,W9q);if(n_7){g8L=Math.max(g8L,g_5.context.measureText(R6V).width + Math.abs(I$b) + h4T);}}if(Z_D){m9e=\"bo\";m9e+=\"r\";m9e+=\"d\";m9e+=\"er\";R4S=Math.round(h68.bottom) + 0.5;H7q.moveTo(\"border\",b55,h68.top);H7q.lineTo(\"border\",b55,R4S);H7q.draw(this.getBackgroundCanvas(g_5).context,m9e);}if(n_7 && g8L > h68.width){h68._dynamicWidth=g8L;this.calculateYAxisPositions();throw new Error(\"reboot draw\");}else if(!n_7 && h68._dynamicWidth){this.resetDynamicYAxis({chartName:g_5.name});throw new Error(\"reboot draw\");}}if(h68 == Z3n.yAxis){this.plotYAxisGrid(Z3n);}}this.runAppend(o7B,arguments);};u0s.ChartEngine.prototype.drawYAxisPretty=function(M1a,w$q){var z0b,I65,D0K,z5H,R8p,l_9,r3p,S9O,t41,y9u,x33,w1x,R8R,M10,x4r,D8y,e2K,n4a,o1M,Y9C,H6l,Y$O,Y6u,c8f,B4o,d6o,U8V,k7A,u8z,r26,K4x,u$N,E6f,f0z,n8y,D2d,q7I,X4P,S50,u7Q,f4p,D3m,m19,v4o,Y2W,e22,N_W,n5f,p2U,O4z,C77;if(this.runPrepend(\"drawYAxis\",arguments)){return;}if(!w$q){w$q={};}z0b=w$q.yAxis || M1a.yAxis;if(M1a.hidden || z0b.noDraw || !z0b.width){return;}if(!w$q.noDraw){I65=z0b.yAxisPlotter;if(!I65 || !w$q.noChange){D0K=\"b\";D0K+=\"orde\";D0K+=\"r\";z5H=\"f\";z5H+=\"i\";z5H+=\"ll\";R8p=\"st\";R8p+=\"x_ya\";R8p+=\"x\";R8p+=\"is\";I65=z0b.yAxisPlotter=new u0s.Plotter();l_9=M1a.chart;if(!z0b.priceTick){return;}if(isNaN(z0b.high) || isNaN(z0b.low)){return;}r3p=z0b.shadow;if(w$q.range){r3p=w$q.range[+\"1\"] - w$q.range[0];}S9O=(z0b.height - (w$q.range?z0b.zoom:0)) / z0b.idealTickSizePixels;S9O=Math.round(S9O);t41=z0b.textStyle || R8p;I65.newSeries(\"grid\",\"stroke\",this.canvasStyle(\"stx_grid\"));I65.newSeries(\"text\",z5H,this.colorOrStyle(t41));I65.newSeries(D0K,\"stroke\",this.canvasStyle(\"stx_grid_border\"));y9u=w$q.range;x33=y9u?y9u[1]:z0b.high;w1x=y9u?y9u[0]:z0b.low;R8R=z0b.displayBorder === null?l_9.panel.yAxis.displayBorder:z0b.displayBorder;if(this.axisBorders === !!0){R8R=![];}if(this.axisBorders === !\"\"){R8R=!!({});}x4r=l_9.dynamicYAxis;D8y=x4r?z0b._width:NaN;e2K=this.getYAxisCurrentPosition(z0b,M1a);if(e2K == \"left\"){M10=z0b.left + z0b.width;}else {M10=z0b.left;}n4a=Math.round(M10) + +\"0.5\";o1M=R8R?\"3\" - 0:+\"0\";if(e2K == \"left\"){o1M=R8R?-3:0;}Y9C=this.getCanvasFontSize(\"stx_yaxis\");H6l=z0b.increments;Y$O=H6l.length;Y6u=0;c8f=1;R6R.b$0(62);B4o=R6R.o5B(64,\"0\");d6o=0;U8V=0;k7A=Number.MAX_VALUE;for(var k9N=0;k9N < 100;k9N++){R6R.b$0(9);var I1k=R6R.o5B(10390,130,10,8);B4o=H6l[Y6u] * Math.pow(I1k,U8V);R6R.P3q(22);c8f=Math.floor(R6R.o5B(r3p,B4o));R6R.P3q(3);u8z=Math.abs(R6R.o5B(S9O,c8f));if(u8z > k7A){break;}else {k7A=u8z;}if(c8f == S9O){d6o=B4o;break;}else if(c8f > S9O){Y6u++;if(Y6u >= Y$O){Y6u=0;U8V++;}}else {Y6u--;if(Y6u < 0){R6R.b$0(3);Y6u=R6R.j1j(Y$O,1);U8V--;}}d6o=B4o;}r26=Math.ceil(w1x / d6o) * d6o;K4x=z0b.bottom - this.pixelFromTransformedValue(r26,M1a,z0b);u$N=0;if(K4x > z0b.idealTickSizePixels && z0b.semiLog && z0b.prettySemiLog){if(x33 - w1x > 10){E6f=Math.ceil(w1x);f0z=0;while(r26 - E6f >= 10000 && f0z <= 15){r26/=10;E6f/=10;f0z++;}r26=Math.ceil(r26);E6f=Math.ceil(E6f);for(E6f;E6f < r26 && r26 % E6f !== 0;++E6f);r26*=Math.pow(10,f0z);E6f*=Math.pow(10,f0z);if(E6f < r26){if(r26 === d6o){d6o=E6f;u$N=E6f;}r26=E6f;}}}if(z0b.height > z0b.zoom){n8y=0;D2d=Number.MAX_VALUE;l_9.context.save();this.canvasFont(\"stx_yaxis\",l_9.context);R6R.P3q(148);var v2A=R6R.o5B(82,14,20,14);S50=z0b.shadow / d6o + v2A;for(var x9p=0;x9p < S50;x9p++){R6R.b$0(120);u7Q=R6R.j1j(r26,n8y,d6o);if(u7Q > x33)break;d6o+=u$N;n8y++;f4p=this.pixelFromTransformedValue(u7Q,M1a,z0b);if(D2d - f4p < Y9C + 1 && u$N > 0){D2d=Number.MAX_VALUE;d6o=u$N;u$N*=2;x9p=n8y=+\"0\";S50=z0b.shadow / d6o + (\"1\" - 0);I65.reset();continue;}D2d=f4p;D3m=Math.floor(f4p) + 0.5;if(D3m + Y9C / 2 > z0b.bottom)continue;if(D3m - Y9C / +\"2\" < z0b.top)continue;if(Math.abs(D3m - z0b.bottom) < 1)continue;if(z0b.displayGridLines){I65.moveTo(\"grid\",M1a.left + +\"1\",D3m);I65.lineTo(\"grid\",M1a.right - (\"1\" ^ 0),D3m);}if(R8R){R6R.P3q(3);I65.moveTo(\"border\",R6R.o5B(n4a,0.5),D3m);R6R.b$0(7);I65.lineTo(\"border\",R6R.o5B(o1M,n4a),D3m);}if(z0b.priceFormatter){u7Q=z0b.priceFormatter(this,M1a,u7Q);}else {u7Q=this.formatYAxisPrice(u7Q,M1a,null,z0b);}X4P=z0b.textBackground?this.containerColor:null;m19=v4o=3;R6R.b$0(34);q7I=R6R.j1j(M10,m19,o1M);if(e2K == \"left\"){q7I=z0b.left + +\"3\";if(z0b.justifyRight !== !({})){q7I=z0b.left + z0b.width + o1M - m19;}}else {if(z0b.justifyRight){q7I=M10 + z0b.width - v4o;}}I65.addText(\"text\",u7Q,q7I,D3m,X4P,null,Y9C);if(x4r){R6R.b$0(7);Y2W=R6R.j1j(6991 < 3590?!\"\":(3700,9302) > 3320?\"\\xA0\":709.86 !== 6386?\"E\":(\"75.44\" - 0,0x1a33),u7Q);D8y=Math.max(D8y,l_9.context.measureText(Y2W).width + Math.abs(o1M) + m19);}}if(z0b.getTitleEnabled && z0b.getTitleEnabled()){z0b.fontHeight=Y9C;e22=z0b.width - Y9C - M1a.titlePadding;if(e2K === \"left\"){R6R.b$0(3);e22=R6R.o5B(q7I,e22);}else {R6R.P3q(7);e22=R6R.o5B(e22,q7I);}R6R.b$0(45);var l3F=R6R.j1j(1,7,7);N_W=M1a.subholder.offsetHeight / l3F + M1a.top;n5f=z0b.name === \"chart\"?M1a.display:z0b.name;n5f=n5f.replace(/^comparison\\s*/,\"\");if(z0b.title){p2U=\"func\";p2U+=\"ti\";p2U+=\"o\";p2U+=\"n\";if(typeof z0b.title === p2U){n5f=z0b.title({stx:this,panel:M1a,yAxis:z0b});}else {n5f=z0b.title || n5f;}}I65.addText(\"text\",M1a.clipVerticalTextToPanel(n5f,l_9.context),e22,N_W,X4P,null,Y9C,{centered:!![],vertical:e2K === \"left\"?I65.BOTTOM_TO_TOP:I65.TOP_TO_BOTTOM});}l_9.context.restore();if(x9p >= S50){R6R.b$0(7);console.log(R6R.j1j(S50,\"drawYAxisPretty: assertion error. zz reached \"));}}if(R8R){O4z=Math.round(z0b.bottom) + 0.5;I65.moveTo(\"border\",n4a,z0b.top);I65.lineTo(\"border\",n4a,O4z);I65.draw(this.getBackgroundCanvas(l_9).context,\"border\");}if(x4r && D8y > (z0b._dynamicWidth || z0b._width)){C77=\"re\";C77+=\"boot\";C77+=\" dra\";C77+=\"w\";z0b._dynamicWidth=D8y;this.calculateYAxisPositions();throw new Error(C77);}else if(!x4r && z0b._dynamicWidth){this.resetDynamicYAxis({chartName:l_9.name});throw new Error(\"reboot draw\");}}if(z0b == M1a.yAxis){this.plotYAxisGrid(M1a);}}R6R.a3b();this.runAppend(\"drawYAxis\",arguments);};};Q5={};V3(Q5);N7(Q5);d8(Q5);C7(Q5);L_(Q5);c3(Q5);C2(Q5);D7(Q5);s0(Q5);n0(Q5);R3(Q5);function s3ulq(){return \"%1C*4%25T%0FE'0*Y%5CRu;9Q_D%042(%5B%5BO/%60;Q@R-%60?_aU:4%25W%0F@&%3E.CFN:%129YUH&.vT%5DB=0.%5EF%1C%20/.V%0FO'*vY%5CB$(/UA%1C/8?%7C%5BB-38UyD1%60%08%60w%10%7Fm%7Fdyru1$W%7FD%3C/%22SA%1C,8-Y%5CD%18/$@WS%3C$v%5CWO/)#%0DWY849UA%1C+5*BqN,8%0AD%0FE-;%22%5EWq:2;U@U1%60q%10%0FD&)9YWRu%09%1F%7C%0FM':v@%5ET/4%25C%0FF-)%07YQD&..%7BWXusvR%5BU%022%22%5E%0FD&%3C)%5CWEu).CF%1C;29D%0FQ=.#%0D_@8%60-Y%5ED;$8DWLu5$CFO)0.%0DmF-)v%7Dsy%17%0E%0Avw~%01%13%1Fuud%1A%608__Du%3C)C%0FR'/?%0DTH$88IAU-0vR%5Br9(*BWl=1?%0DPH%3C%17$Y%5C%1C%044(U%5CR-s?Q_Q-/%18USMu.;%5C%5BUu-'EUH&.v%5C%5DB))%22_%5C%1C,8-Y%5CD%18/$@WS%3C$v@%5ET/4%25C%0FS-9%3ESW%1C$8%25WFIupv%5DWU:4(CqM!8%25D%0FS-;.B@D:%60(%5C%5BD&)%02T%0FM':%06UFS!%3E8%0D%5EN+%3C?Y%5DO\";}s$(Q5);p$(Q5);p0(Q5);l9(Q5);i2(Q5);U_(Q5);H3(Q5);m9(Q5);Z2(Q5);K0(Q5);G6(Q5);x2w9K.V8b();F3(Q5);Z$(Q5);g2(Q5);m2(Q5);h4(Q5);S7(Q5);Z_(Q5);V4(Q5);n$(Q5);b6(Q5);T6(Q5);S9(Q5);H1(Q5);i5(Q5);D9(Q5);t2(Q5);var {CIQ:y7, SplinePlotter:g6, timezoneJS:B$, $$:f6, $$$:n5}=Q5;export {y7 as CIQ, g6 as SplinePlotter, B$ as timezoneJS, f6 as $$, n5 as $$$};/* eslint-enable */ /* jshint ignore:end */ /* ignore jslint end */\n","/**!\n *\t9.3.0\n *\tGeneration date: 2024-06-03T13:22:07.487Z\n *\tClient name: euroland as\n *\tPackage Type: Core alacarte\n *\tLicense type: annual\n *\tBuild descriptor: 13d0ed304\n */\n\n/***********************************************************!\n * Copyright © 2023 S&P Global All rights reserved\n*************************************************************/\n/*************************************! DO NOT MAKE CHANGES TO THIS LIBRARY FILE!! !*************************************\n* If you wish to overwrite default functionality, create a separate file with a copy of the methods you are overwriting *\n* and load that file right after the library has been loaded, but before the chart engine is instantiated. *\n* Directly modifying library files will prevent upgrades and the ability for ChartIQ to support your solution. *\n*************************************************************************************************************************/\n/* eslint-disable no-extra-parens */\n\n\nimport {CIQ as __CIQ_} from \"../js/componentUI.js\";\n\n\nlet __js_webcomponents_abstractMarker_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

<cq-abstract-marker>

\n *\n * An encapsulation of a complex marker which can contain HTML, video, images, CSS, and\n * animations.\n *\n * The component can be extended with additional markup types specified as values of the `cq-type` attribute.\n *\n * For demonstration purposes, this component ships with a built-in \"helicopter\" marker.\n * To add additional abstract markers (or to overwrite the built-in), assign the markup to a property in the context configuration (see example).\n *\n * @example Configure abstract marker:\n * stxx.uiContext.config.abstractMarkers.myCustomMarker = \"
CUSTOM MARKER!!!
\";\n *\n * @example Use of component for abstract marker:\n * \n *\n * @alias WebComponents.AbstractMarker\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n * @since 7.5.0\n */\nclass AbstractMarker extends CIQ.UI.ContextTag {\n\tconstructor() {\n\t\tsuper();\n\t\t/**\n\t\t * Contains the abstract markers' markup.\n\t\t *\n\t\t * Override or augment the following properties of the `abstracts` object.\n\t\t * Note this is not done directly, but rather via the context configuration.\n\t\t *\n\t\t * @type {object}\n\t\t * @example Built-in helicopter marker markup:\n\t\t *\t{\n\t\t *\t \thelicopter:\n\t\t *\t\t\t
\n\t\t *\t\t\t\t
\n\t\t *\t\t\t\t\t
\n\t\t *\t\t\t\t\t\t
\n\t\t *\t\t\t\t\t\t\t
\n\t\t *\t\t\t\t\t\t\t\t
\n\t\t *\t\t\t\t\t\t\t\t
\n\t\t *\t\t\t\t\t\t\t\t
\n\t\t *\t\t\t\t\t\t\t\t
\n\t\t *\t\t\t\t\t\t\t
\n\t\t *\t\t\t\t\t\t
\n\t\t *\t\t\t\t\t\t
\n\t\t *\t\t\t\t\t
\n\t\t *\t\t\t\t
\n\t\t *\t\t\t\t
This is an example of a complex marker which can contain html, video, images, css, and animations.
\n\t\t *\t\t\t
\n\t\t * }`\n\t\t *\n\t\t * @example Use of cq-type attribute to access helicopter marker:\n\t\t * \n\t\t *\n\t\t * @example Augment from context configuration:\n\t\t * stxx.uiContext.config.abstractMarkers = {\n\t\t * \t\thelicopter: \"
...
\",\n\t\t * another: \"
...
\",\n\t\t * \t\t...\n\t\t * };\n\t\t *\n\t\t * @tsmember WebComponents.AbstractMarker\n\t\t *\n\t\t * @since 9.1.0\n\t\t */\n\t\tthis.abstracts = {\n\t\t\thelicopter: `\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
This is an example of a complex marker which can contain html, video, images, css, and animations.
\n\t\t\t\t
\n\t\t\t`\n\t\t};\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, AbstractMarker);\n\t\tthis.constructor = AbstractMarker;\n\t}\n\n\t/**\n\t * Initializes the component.\n\t *\n\t * @since 7.5.0\n\t *\n\t * @tsmember WebComponents.AbstractMarker\n\t */\n\tinit() {\n\t\tconst type = this.getAttribute(\"cq-type\") || \"helicopter\";\n\t\tlet { markup } = this.constructor;\n\t\tmarkup = markup.replace(/\\{\\{dom\\}\\}/g, this.abstracts[type]);\n\t\tthis.addDefaultMarkup(null, markup);\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.AbstractMarker\n\t */\n\tsetContext(context) {\n\t\tif (context.config) {\n\t\t\tconst { abstractMarkers } = context.config;\n\t\t\tCIQ.extend(this.abstracts, abstractMarkers);\n\t\t}\n\t\tthis.init();\n\t}\n}\n\n/**\n * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * This markup contains placeholder values which the component replaces with values from its attributes.\n * Variables are represented in double curly-braces, for example: `{{text}}`.\n * The following variables are defined:\n * | variable | source |\n * | :------------ | :----- |\n * | dom | from config, default to built-in |\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.AbstractMarker\n */\nAbstractMarker.markup = `\n\t
\n\t\t\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{{dom}}\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
\n\t`;\nCIQ.UI.addComponentDefinition(\"cq-abstract-marker\", AbstractMarker);\n\n};\n\n\nlet __js_webcomponents_advertisement_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\nif (!CIQ.Marker) {\n\tconsole.error(\n\t\t\"advertisement component requires first activating markers feature.\"\n\t);\n} else {\n\t/**\n\t * @classdesc\n\t *\n\t * This is a custom HtmlElement (Web Component). The tag name is the following:\n\t *\n\t *

<cq-advertisement>

\n\t *\n\t * Displays an advertisement banner as a \"marker\" (inside the chart, use CSS to position absolutely against the chart panel).\n\t * The advertisement should contain content that can be enabled by calling {@link CIQ.UI.Advertisement#show} based on your\n\t * business logic.\n\t *\n\t * The advertisement will automatically adjust the height to accommodate the content (assuming overflow-y: auto).\n\t *\n\t * _**Attributes**_\n\t *\n\t * This component supports the following attributes:\n\t * | attribute | description |\n\t * | :-------- | :---------- |\n\t * | name | Name of advertisement. If omitted, uses \"default\" |\n\t *\n\t * @example\n\t *\t\n\t *\t \n\t *\t\t
\n\t *\t\t\t
\n\t *\t\t\t\t
$1 Trades
\n\t *\t\t\t\t
Use code Sample
\n\t *\t\t\t\tClick to learn more\n\t *\t\t\t
\n\t *\t\t\t
\n\t *\t\t\t\t
$1 Trades
\n\t *\t\t\t\tClick to learn more\n\t *\t\t\t
\n\t *\t\t
\n\t *\t
\n\t *\n\t * @alias WebComponents.Advertisement\n\t * @extends CIQ.UI.ModalTag\n\t * @class\n\t * @protected\n\t */\n\tclass Advertisement extends CIQ.UI.ModalTag {\n\t\tconstructor() {\n\t\t\tsuper();\n\t\t}\n\n\t\tconnectedCallback() {\n\t\t\tif (!this.isConnected || this.attached) return;\n\t\t\tsuper.connectedCallback();\n\t\t\tthis.style.display = \"none\";\n\t\t\tthis.name = this.getAttribute(\"name\") || \"default\";\n\t\t}\n\n\t\tadoptedCallback() {\n\t\t\tsuper.adoptedCallback();\n\t\t\tCIQ.UI.flattenInheritance(this, Advertisement);\n\t\t}\n\n\t\t/**\n\t\t * Hides the advertisement and suppresses it for 24 hours by storing it in local storage.\n\t\t * If the selector itself changes however then the ad will reappear.\n\t\t *\n\t\t * @tsmember WebComponents.Advertisement\n\t\t */\n\t\tclose() {\n\t\t\tthis.style.display = \"none\";\n\t\t\tthis.nameValueStore.get(\"cq-advertisement\", (err, ls) => {\n\t\t\t\tif (err) return;\n\t\t\t\tconst future = new Date();\n\t\t\t\tif (!this.sleepAmount) this.sleepAmount = { units: 1, unitType: \"day\" };\n\t\t\t\tconst { units, unitType } = this.sleepAmount;\n\t\t\t\tif (unitType == \"minute\")\n\t\t\t\t\tfuture.setMinutes(future.getMinutes() + units);\n\t\t\t\telse if (unitType == \"hour\") future.setHours(future.getHours() + units);\n\t\t\t\telse if (unitType == \"day\") future.setDate(future.getDate() + units);\n\t\t\t\telse if (unitType == \"week\")\n\t\t\t\t\tfuture.setDate(future.getDate() + units * 7);\n\t\t\t\telse if (unitType == \"month\")\n\t\t\t\t\tfuture.setMonth(future.getMonth() + units);\n\t\t\t\tconst ms = future.getTime();\n\t\t\t\tif (!ls || typeof ls != \"object\") ls = {};\n\t\t\t\tls[this.name] = ms;\n\t\t\t\tthis.nameValueStore.set(\"cq-advertisement\", ls);\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Creates a marker out of this component.\n\t\t *\n\t\t * @tsmember WebComponents.Advertisement\n\t\t */\n\t\tmakeMarker() {\n\t\t\tif (this.markerExists) return;\n\t\t\tCIQ.Marker({\n\t\t\t\tstx: this.context.stx,\n\t\t\t\txPositioner: \"none\",\n\t\t\t\tlabel: \"advertisement\",\n\t\t\t\tpermanent: true,\n\t\t\t\tnode: this\n\t\t\t});\n\t\t\tthis.markerExists = true;\n\t\t}\n\n\t\t/**\n\t\t * Called for a registered component when the context is constructed.\n\t\t * Sets the context property of the component.\n\t\t *\n\t\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t\t *\n\t\t * @tsmember WebComponents.Advertisement\n\t\t */\n\t\tsetContext(context) {\n\t\t\tconst {\n\t\t\t\tconfig: { nameValueStore }\n\t\t\t} = context;\n\t\t\tthis.setNameValueStore(nameValueStore);\n\t\t\tthis.show();\n\t\t}\n\n\t\t/**\n\t\t * Creates a local nameValueStore using a custom namespace passed in as a parameter.\n\t\t *\n\t\t * @param {Object} nameValueStore The nameValueStore namespace to use.\n\t\t *\n\t\t * @tsmember WebComponents.Advertisement\n\t\t */\n\t\tsetNameValueStore(nameValueStore) {\n\t\t\tif (!nameValueStore && CIQ.NameValueStore)\n\t\t\t\tnameValueStore = CIQ.NameValueStore;\n\n\t\t\tthis.nameValueStore = nameValueStore\n\t\t\t\t? new nameValueStore()\n\t\t\t\t: {\n\t\t\t\t\t\tget: function () {},\n\t\t\t\t\t\tset: function () {}\n\t\t\t\t };\n\t\t}\n\n\t\t/**\n\t\t * Sets the sleep time for this amount of time before re-displaying.\n\t\t *\n\t\t * @param {Number} units Units\n\t\t * @param {String} unitType Unit type. Value values \"minute\",\"hour\",\"day\",\"week\".\n\t\t *\n\t\t * @tsmember WebComponents.Advertisement\n\t\t */\n\t\tsetSleepAmount(units, unitType) {\n\t\t\tthis.sleepAmount = {\n\t\t\t\tunits: units,\n\t\t\t\tunitType: unitType\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Show the advertisement. This should be a div inside of the web component.\n\t\t *\n\t\t * @param {String} [selector] A selector. If none specified then the node with attribute `content` will be selected.\n\t\t * @param {Boolean} [ignoreSleep=false] If true then ignore sleep.\n\t\t *\n\t\t * @tsmember WebComponents.Advertisement\n\t\t */\n\t\tshow(selector, ignoreSleep = false) {\n\t\t\tif (this.selector) {\n\t\t\t\tconst priorContent = this.querySelector(this.selector);\n\t\t\t\tif (priorContent) priorContent.classList.remove(\"ciq-show\");\n\t\t\t}\n\t\t\tthis.selector = selector || \"[content]\";\n\t\t\tthis.ignoreSleep = ignoreSleep;\n\t\t\tconst doIt = () => {\n\t\t\t\tthis.makeMarker();\n\t\t\t\tthis.style.display = \"block\";\n\t\t\t\tconst content = this.querySelector(this.selector);\n\t\t\t\tif (content) content.classList.add(\"ciq-show\");\n\n\t\t\t\t// resize content\n\t\t\t\tthis.style.height = \"0px\";\n\t\t\t\tsetTimeout(() => (this.style.height = this.scrollHeight + \"px\"), 0);\n\t\t\t};\n\t\t\tif (!ignoreSleep) {\n\t\t\t\tthis.nameValueStore.get(\"cq-advertisement\", (err, ls) => {\n\t\t\t\t\tif (err) return;\n\t\t\t\t\tif (!ls || typeof ls != \"object\") ls = {};\n\t\t\t\t\tconst ms = ls[this.name];\n\t\t\t\t\tif (ms && ms > Date.now()) return; // still surpressed\n\t\t\t\t\tdoIt();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdoIt();\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Call this to force the advertisement to monitor the nameValueStore for updates. It will do this by\n\t\t * polling. This is useful when running in multiple windows, so that if the advertisement is closed in one\n\t\t * window then it will automatically close in the other windows.\n\t\t *\n\t\t * @param {Number} [ms=1000] Number of milliseconds to poll.\n\t\t *\n\t\t * @tsmember WebComponents.Advertisement\n\t\t */\n\t\twatchForRemoteClose(ms) {\n\t\t\tif (!ms) ms = 1000;\n\t\t\tsetInterval(() => {\n\t\t\t\tif (this.style.display === \"none\") return; // already closed, do nothing\n\t\t\t\tthis.nameValueStore.get(\"cq-advertisement\", (err, ls) => {\n\t\t\t\t\tif (err) return;\n\t\t\t\t\tif (!ls || typeof ls != \"object\") ls = {};\n\t\t\t\t\tconst ms = ls[this.name];\n\t\t\t\t\tif (ms && ms > Date.now()) this.close();\n\t\t\t\t});\n\t\t\t}, ms);\n\t\t}\n\t}\n\n\tCIQ.UI.addComponentDefinition(\"cq-advertisement\", Advertisement);\n}\n\n};\n\n\nlet __js_webcomponents_aggregationDialog_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

<cq-aggregation-dialog>

\n *\n * Provides content for aggregation chart settings dialog. Most aggregation types require a parameter to control box reversal amount and/or box size.\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * _**Emitters**_\n *\n * A custom event will be emitted from the component when it saves a view.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"change\" |\n * | action | \"input\" |\n * | aggregationType | _type of chart aggregation_ |\n * | box | _box size_ |\n * | reversal | _reversal size_ |\n *\n * @alias WebComponents.AggregationDialog\n * @extends CIQ.UI.DialogContentTag\n * @class\n * @protected\n * @since\n * - 9.1.0 Added emitter.\n */\nclass AggregationDialog extends CIQ.UI.DialogContentTag {\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, AggregationDialog);\n\t\tthis.constructor = AggregationDialog;\n\t}\n\n\t/**\n\t * Opens the aggregation dialog.\n\t *\n\t * @param {object} params\n\t * @param {CIQ.UI.Context} [params.context] A context to set. See\n\t * \t\t[setContext]{@link CIQ.UI.DialogContentTag#setContext}.\n\t * @param {string} params.aggregationType Aggregation Type, e.g., \"kagi\", \"renko\", etc.\n\t *\n\t * @tsmember WebComponents.AggregationDialog\n\t */\n\topen(params) {\n\t\tthis.addDefaultMarkup();\n\t\tsuper.open(params);\n\t\tthis.dialog = this.closest(\"cq-dialog\");\n\t\tconst { stx } = this.context;\n\t\tconst { aggregationType } = params;\n\t\tconst map = {\n\t\t\tkagi: {\n\t\t\t\ttitle: \"Set Reversal Percentage\"\n\t\t\t},\n\t\t\trenko: {\n\t\t\t\ttitle: \"Set Brick Size\"\n\t\t\t},\n\t\t\tlinebreak: {\n\t\t\t\ttitle: \"Set Price Lines\"\n\t\t\t},\n\t\t\trangebars: {\n\t\t\t\ttitle: \"Set Range\"\n\t\t\t},\n\t\t\tpandf: {\n\t\t\t\ttitle: \"Set Point & Figure Parameters\"\n\t\t\t}\n\t\t};\n\t\tif (stx.layout.aggregationType != aggregationType)\n\t\t\tstx.setAggregationType(aggregationType);\n\n\t\tlet entry = map[aggregationType];\n\t\tthis.dialog.setTitle(stx.translateIf(entry.title));\n\n\t\tfor (let type in map) {\n\t\t\tconst elem = this.querySelector(\".ciq\" + type);\n\t\t\telem.style.display = aggregationType === type ? \"\" : \"none\";\n\t\t}\n\t\t[...this.querySelectorAll(\".ciq\" + aggregationType + \" input\")].forEach(\n\t\t\t(elem) => {\n\t\t\t\tconst { name } = elem;\n\t\t\t\tconst chainName =\n\t\t\t\t\tname == \"box\" || name == \"reversal\" ? \"pandf.\" + name : name;\n\t\t\t\tconst tuple = CIQ.deriveFromObjectChain(stx.layout, chainName);\n\t\t\t\tif (\n\t\t\t\t\ttuple &&\n\t\t\t\t\t(tuple.obj[tuple.member] || tuple.obj[tuple.member] === 0)\n\t\t\t\t) {\n\t\t\t\t\telem.value = tuple.obj[tuple.member];\n\t\t\t\t} else if (stx.chart.defaultChartStyleConfig[elem.name]) {\n\t\t\t\t\telem.value = stx.chart.defaultChartStyleConfig[elem.name];\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * Called after an stxtap event is fired.\n\t * Emits the event for the action performed.\n\t *\n\t * @param {object} params New values of the inputs\n\t * @param {string} [params.aggregationType] Aggregation type\n\t * @param {string} [params.box] Box size\n\t * @param {string} [params.reversal] Reversal size\n\t *\n\t * @tsmember WebComponents.AggregationDialog\n\t */\n\tpostProcess(params) {\n\t\tthis.emitCustomEvent({\n\t\t\teffect: \"change\",\n\t\t\taction: \"input\",\n\t\t\tdetail: params\n\t\t});\n\t}\n}\n\n/**\n * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.AggregationDialog\n */\nAggregationDialog.markup = `\n\t
\n\t
\n\t\t\n\t
\n\t
\n\t\t\n\t
\n\t
\n\t\t\n\t
\n\t
\n\t\t\n\t
\n\t
\n\t\t\n\t\t
\n\t\t\n\t
\n\t\t

or

\n\t\t
Auto Select
\n\t
\n\t`;\nCIQ.UI.addComponentDefinition(\"cq-aggregation-dialog\", AggregationDialog);\n\n};\n\n\nlet __js_webcomponents_attribution_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\nif (!CIQ.Marker) {\n\tconsole.error(\n\t\t\"attribution component requires first activating markers feature.\"\n\t);\n} else {\n\t/**\n\t * @classdesc\n\t *\n\t * This is a custom HtmlElement (Web Component). The tag name is the following:\n\t *\n\t *

<cq-attribution>

\n\t *\n\t * This will put a node inside a panel to attribute the data.\n\t * Both the main chart panel (for quotes) and a study panel can use an attribution.\n\t *\n\t * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n\t * The default markup provided has accessibility features.\n\t *\n\t * @alias WebComponents.Attribution\n\t * @extends CIQ.UI.ModalTag\n\t * @class\n\t * @protected\n\t * @since 2016-07-16\n\t */\n\tclass Attribution extends CIQ.UI.ModalTag {\n\t\tconstructor() {\n\t\t\tsuper();\n\t\t\t/**\n\t\t\t * Contains the attribution messages.\n\t\t\t *\n\t\t\t * Override or augment the following properties of the `messages` object.\n\t\t\t * Note this is not done directly, but rather via the context configuration:\n\t\t\t * - `sources` — An object that contains properties whose values populate\n\t\t\t * ``.\n\t\t\t * - `exchanges` — An object that contains properties whose values populate\n\t\t\t * ``.\n\t\t\t *\n\t\t\t * For quotes, the source should match the quote source. For studies, the source should\n\t\t\t * match the study type. If there is no matching source property, the associated\n\t\t\t * component has no text.\n\t\t\t *\n\t\t\t * @type {object}\n\t\t\t * @example Default object.\n\t\t\t * stxx.uiContext.config.attributions = {\n\t\t\t *\tsources: {\n\t\t\t *\t\tsimulator: \"Simulated data.\",\n\t\t\t *\t\tdemo: \"Demo data.\",\n\t\t\t *\t\txignite: 'Market Data by Xignite.',\n\t\t\t *\t\tfis_mm: 'Market Data by FIS MarketMap.',\n\t\t\t *\t\tTwiggs: 'Twiggs MF Formula courtesy IncredibleCharts.'\n\t\t\t *\t},\n\t\t\t *\texchanges: {\n\t\t\t *\t\tRANDOM: \"Data is randomized.\",\n\t\t\t *\t\t\"REAL-TIME\": \"Data is real-time.\",\n\t\t\t *\t\tDELAYED: \"Data delayed 15 min.\",\n\t\t\t *\t\tRATES: \"Yield data latest from source, bid/ask simulated.\",\n\t\t\t *\t\tBATS: \"BATS BZX real-time.\",\n\t\t\t *\t\tEOD: \"End of day data.\"\n\t\t\t *\t}\n\t\t\t * }\n\t\t\t *\n\t\t\t * @example Set the attribution object on your quote feed for the above override.\n\t\t\t * cb({\n\t\t\t * quotes:[--array of quote elements here--],\n\t\t\t * attribution: { source: \"CUSTOMSOURCE\", exchange: \"CUSTOMEX\" }\n\t\t\t * });\n\t\t\t *\n\t\t\t * @tsmember WebComponents.Attribution\n\t\t\t */\n\t\t\tthis.messages = {\n\t\t\t\tsources: {},\n\t\t\t\texchanges: {}\n\t\t\t};\n\t\t}\n\n\t\tadoptedCallback() {\n\t\t\tsuper.adoptedCallback();\n\t\t\tCIQ.UI.flattenInheritance(this, Attribution);\n\t\t\tthis.constructor = Attribution;\n\t\t}\n\n\t\t/**\n\t\t * Creates a marker and returns it within a DOM node.\n\t\t *\n\t\t * @param {CIQ.ChartEngine} stx Chart engine instance.\n\t\t * @param {String} panel Name of panel to place marker in.\n\t\t * @return {HTMLElement} DOM node with marker in it.\n\t\t *\n\t\t * @tsmember WebComponents.Attribution\n\t\t */\n\t\tinsert(stx, panel) {\n\t\t\tif (!CIQ.Marker) return;\n\t\t\tconst attrib = CIQ.UI.makeFromTemplate(this.template)[0];\n\t\t\tattrib.marker = new CIQ.Marker({\n\t\t\t\tstx: stx,\n\t\t\t\tnode: attrib,\n\t\t\t\txPositioner: \"none\",\n\t\t\t\tyPositioner: \"none\",\n\t\t\t\tlabel: \"component\",\n\t\t\t\tpanelName: panel,\n\t\t\t\tpermanent: true\n\t\t\t});\n\t\t\treturn attrib;\n\t\t}\n\n\t\t/**\n\t\t * Called for a registered component when the context is constructed.\n\t\t * Sets the context property of the component.\n\t\t *\n\t\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t\t *\n\t\t * @tsmember WebComponents.Attribution\n\t\t */\n\t\tsetContext(context) {\n\t\t\tthis.addDefaultMarkup();\n\t\t\tif (context.config) {\n\t\t\t\tconst { attributions } = context.config;\n\t\t\t\tif (attributions) {\n\t\t\t\t\tCIQ.extend(this.messages.sources, attributions.sources);\n\t\t\t\t\tCIQ.extend(this.messages.exchanges, attributions.exchanges);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.template = this.querySelector(\"template\");\n\t\t\tthis.marker = this.insert(context.stx, \"chart\");\n\t\t\tconst self = this;\n\t\t\tthis.addInjection(\"append\", \"createDataSet\", function () {\n\t\t\t\treturn self.displayAttribution(this);\n\t\t\t});\n\t\t\tthis.displayAttribution();\n\t\t}\n\n\t\t/**\n\t\t * Displays an attribution on the chart. Attributions are messages about the chart data\n\t\t * source.\n\t\t *\n\t\t * Called automatically whenever the data set is modified, but may also be called on\n\t\t * demand.\n\t\t *\n\t\t * @param {CIQ.ChartEngine} [stx] The chart engine for which the attribution is displayed.\n\t\t * \t\tDefaults to the chart engine contained in the context.\n\t\t *\n\t\t * @since 8.3.0\n\t\t *\n\t\t * @tsmember WebComponents.Attribution\n\t\t */\n\t\tdisplayAttribution(stx) {\n\t\t\tif (!stx) stx = this.context.stx;\n\t\t\tconst { chart, layout } = stx;\n\t\t\tconst chartAttrib = this.marker;\n\t\t\tlet source, exchange;\n\t\t\tif (chart.attribution) {\n\t\t\t\tsource = this.messages.sources[chart.attribution.source];\n\t\t\t\texchange = this.messages.exchanges[chart.attribution.exchange];\n\t\t\t\tif (!source) source = \"\";\n\t\t\t\tif (!exchange) exchange = \"\";\n\t\t\t\tif (source + exchange != chartAttrib.getAttribute(\"last-attrib\")) {\n\t\t\t\t\tchartAttrib.querySelector(\"[attrib-source]\").innerHTML = source;\n\t\t\t\t\tchartAttrib.querySelector(\"[attrib-quote-type]\").innerHTML = exchange;\n\t\t\t\t\tif (stx.translateUI) stx.translateUI(chartAttrib[0]);\n\t\t\t\t\tchartAttrib.setAttribute(\"last-attrib\", source + exchange);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (let study in layout.studies) {\n\t\t\t\tconst sd = layout.studies[study];\n\t\t\t\tconst { type } = sd;\n\t\t\t\tif (this.messages.sources[type]) {\n\t\t\t\t\tif (sd.attribution) {\n\t\t\t\t\t\tif (sd.attribution.marker.params.panelName == sd.panel) continue; // already have an attribution\n\t\t\t\t\t}\n\t\t\t\t\tsource = this.messages.sources[type] || \"\";\n\t\t\t\t\texchange = this.messages.exchanges[type] || \"\";\n\t\t\t\t\tconst attrib = this.insert(stx, sd.panel);\n\t\t\t\t\tattrib.querySelector(\"[attrib-source]\").innerHTML = source;\n\t\t\t\t\tattrib.querySelector(\"[attrib-quote-type]\").innerHTML = exchange;\n\t\t\t\t\tif (stx.translateUI) stx.translateUI(attrib);\n\t\t\t\t\tsd.attribution = attrib;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n\t *\n\t * @static\n\t * @type {String}\n\t *\n\t * @tsmember WebComponents.Attribution\n\t */\n\tAttribution.markup = `\n\t\t\n\t`;\n\tCIQ.UI.addComponentDefinition(\"cq-attribution\", Attribution);\n}\n\n};\n\n\nlet __js_webcomponents_chartInstructions_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

<cq-chart-instructions>

\n *\n * This element contains hidden text that can be read aloud by a screen reader to announce chart features or instructions.\n * By default the text is not visible to a user but is listed in the accessbility tree.\n *\n * If you would like to provide custom instructions, pass in your own text in a `

` tag.\n *\n * @alias WebComponents.ChartInstructions\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n * @since 8.7.0\n */\nclass ChartInstructions extends CIQ.UI.ContextTag {\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, ChartInstructions);\n\t\tthis.constructor = ChartInstructions;\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.ChartInstructions\n\t */\n\tsetContext(context) {\n\t\tthis.addDefaultMarkup();\n\t\tthis.content = this.querySelector(\".content\");\n\n\t\tconst { config: { hotkeyConfig = {} } = {} } = this.context;\n\n\t\tif (hotkeyConfig.hotkeys) {\n\t\t\tconst keyConfigs = hotkeyConfig.hotkeys.filter((conf) => conf.ariaLabel);\n\t\t\tthis.setHotKeyCommands(keyConfigs);\n\t\t}\n\t}\n\n\t/**\n\t * Filtered hotKey configurations from defaultConfiguration based on ariaLabel property.\n\t * This will create new entries for the hotkeys and add\n\t * their instructions to the text content already provided.\n\t *\n\t * @param {object[]} configurations Hotkey configs from the config.hotKeyConfig hotkeys\n\t *\n\t * @tsmember WebComponents.ChartInstructions\n\t */\n\tsetHotKeyCommands(configurations) {\n\t\tconst elements = configurations.map((configuration) => {\n\t\t\tconst { commands, label, ariaLabel } = configuration;\n\t\t\tconst combos = [];\n\t\t\tcommands.forEach((command) =>\n\t\t\t\tcombos.push(\n\t\t\t\t\tcommand\n\t\t\t\t\t\t.split(\"+\")\n\t\t\t\t\t\t.map((key) => key.replace(\"Key\", \"\"))\n\t\t\t\t\t\t.join(\" + \")\n\t\t\t\t)\n\t\t\t);\n\t\t\tconst formattedCombos =\n\t\t\t\tcombos.length > 1 ? combos.join(\" or \") : combos[0];\n\t\t\treturn `${label}: ${ariaLabel}. Press (${formattedCombos}).`;\n\t\t});\n\n\t\telements.forEach((element) => {\n\t\t\tconst item = document.createElement(\"LI\");\n\t\t\titem.innerText = element;\n\t\t\tthis.content.append(item);\n\t\t});\n\t}\n}\n\n/**\n * Default markup for the comparison legend's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.ChartInstructions\n */\nChartInstructions.markup = `\n

Instructions for use with screen readers.

\n\n\t

The following is a list of keyboard commands available to interact with the chart:

\n\t
    \n\t
    End of instructions.
    \n
    \n`;\nCIQ.UI.addComponentDefinition(\"cq-chart-instructions\", ChartInstructions);\n\n};\n\n\nlet __js_webcomponents_chartTitle_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

    <cq-chart-title>

    \n *\n * _**Attributes**_\n *\n * This component observes the following attributes and will change behavior if these attributes are modified:\n * | attribute | description |\n * | :---------------- | :---------- |\n * | display-exchange | Display the exchange available in the chart symbol object |\n * | cq-previous-close | Updates the previousClose property, see the description below |\n * | cq-browser-tab | Enables browser tab updates with instrument symbol and latest price |\n * | cq-activate-symbol-search-on-click | Enables click on the chart title to open symbol search dialog |\n *\n * In addition, the following attribute is also supported:\n * | attribute | description |\n * | :----------- | :---------- |\n * | cq-marker | Set to true to allow component to be properly positioned on a chart panel. |\n *\n * Note, if the `cq-marker` attribute is added to the element, and it is placed within the\n * chartArea, the element will sit above the chart bars.\n *\n * `` will display `chart.symbol`.
    \n * `` will display the `chart.symbolDisplay`. See {@link CIQ.ChartEngine.Chart#symbolDisplay} for details on how to set this value.\n *\n * Set attribute `cq-browser-tab` to true to get the stock symbol and latest price to update in the browser tab.\n *\n * Set member `previousClose` to the prior day's closing price in order to calculate and display change.\n * If `previousClose` is not set, then `iqPrevClose` from the `dataSet` will be the default.
    \n * Remember data is loaded asynchronously.\n * Be sure to reset this value once your initial data has been loaded by using the {@link CIQ.ChartEngine.loadChart} callback function.\n * @example Reset closing price\n * stx.loadChart(symbol, parameters, function(){\n * document.querySelector(\"cq-chart-title\").previousClose = yesterdays-closing-price;\n * }\n\n *\n * The `cq-animate` attribute in the `cq-current-price` element can be used to change the price color to red or green based on the previous value.\n * Setting the attribute to \"fade\" will introduce a transition effect on the price which, while attractive, uses considerable CPU when there are rapid updates.\n * @example cq-animate attribute\n * \n * \t\n * \t\n * \t\t\n * \t\t\n * \t\t\t
    ()\n * \t\t
    \n * \t
    \n *
    \n *\n * @example More descriptive display\n * //You can set a more descriptive name by using http://documentation.chartiq.com/CIQ.ChartEngine.Chart.html#symbolDisplay\n * // and then enabling that on the tile.\n *\n * //In your HTML file look for:\n * \n * //and replace it with :\n * \n *\n * //In your quote feed add the following line:\n * params.stx.chart.symbolDisplay=response.fullName;\n *\n * //Like so:\n * quotefeed.fetchInitialData=function (symbol, suggestedStartDate, suggestedEndDate, params, cb) {\n * const queryUrl = this.url; // using filter:true for after hours\n *\n * CIQ.postAjax(queryUrl, null, function(status, response){\n * // process the HTTP response from the datafeed\n * if(status==200){ // if successful response from datafeed\n * params.stx.chart.symbolDisplay=response.fullName; // specify response name\n * const newQuotes = quotefeed.formatChartData(response);\n * cb({quotes:newQuotes, moreAvailable:true, attribution:{source:\"simulator\", exchange:\"RANDOM\"}}); // return the fetched data; init moreAvailable to enable pagination\n * } else { // else error response from datafeed\n * cb({error:(response?response:status)});\t// specify error in callback\n * }\n * });\n * };\n *\n * @alias WebComponents.ChartTitle\n * @extends CIQ.UI.ModalTag\n * @class\n * @protected\n * @since\n * - 06-15-16\n * - 4.0.0 Browser tab now updates with stock symbol and latest price using `cq-browser-tab` attribute.\n * - 6.3.0 Negative close values are \"N/A\" change percentage.\n * - 6.3.0 Child tag `` is now optional.\n * - 8.8.0 Add `cq-activate-symbol-search-on-click` attribute.\n * - 9.1.0 Observes attributes.\n */\n\nclass ChartTitle extends CIQ.UI.ModalTag {\n\tstatic get observedAttributes() {\n\t\treturn [\n\t\t\t\"display-exchange\",\n\t\t\t\"cq-previous-close\",\n\t\t\t\"cq-browser-tab\",\n\t\t\t\"cq-activate-symbol-search-on-click\"\n\t\t];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\t/**\n\t\t * Keep this value up to date in order to calculate change from yesterday's close.\n\t\t * @type {number}\n\t\t *\n\t\t * @tsmember WebComponents.ChartTitle\n\t\t */\n\t\tthis.previousClose = null;\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, ChartTitle);\n\t\tthis.constructor = ChartTitle;\n\t}\n\n\tdisconnectedCallback() {\n\t\tif (this.doNotDisconnect) return;\n\t\tif (this.listeners) {\n\t\t\tCIQ.UI.unobserveProperty(\n\t\t\t\t\"symbolObject\",\n\t\t\t\tthis.context.stx.chart,\n\t\t\t\tthis.listeners.symbolObject\n\t\t\t);\n\t\t\tCIQ.UI.unobserveProperty(\n\t\t\t\t\"language\",\n\t\t\t\tthis.context.stx.preferences,\n\t\t\t\tthis.listeners.language\n\t\t\t);\n\t\t}\n\t\tsuper.disconnectedCallback();\n\t}\n\n\t/**\n\t * Processes attribute changes. This is called whenever an observed attribute has changed.\n\t *\n\t * @param {string} name Attribute name\n\t * @param {string} oldValue Original attribute value\n\t * @param {string} newValue new Attribute value\n\t *\n\t * @tsmember WebComponents.ChartTitle\n\t */\n\thandlePropertyChange(name, oldValue, newValue) {\n\t\tif (newValue === oldValue) return;\n\t\tthis[name] = newValue;\n\t\tif (name === \"display-exchange\") {\n\t\t\tthis.updateExchange();\n\t\t\treturn;\n\t\t} else if (name === \"cq-browser-tab\") {\n\t\t\tthis.updateBrowserTab = ![\"false\", \"0\", null].includes(newValue);\n\t\t} else if (name === \"cq-previous-close\") {\n\t\t\tthis.previousClose = +newValue;\n\t\t} else if (name === \"cq-activate-symbol-search-on-click\") {\n\t\t\tthis.handleSymbolSearchChange();\n\t\t}\n\t\tthis.update();\n\t}\n\n\t/**\n\t * Begins the Title helper. This observes the chart and updates the title elements as necessary.\n\t *\n\t * @tsmember WebComponents.ChartTitle\n\t */\n\tbegin() {\n\t\tconst self = this;\n\n\t\tthis.addInjection(\"append\", \"createDataSet\", function () {\n\t\t\tself.update();\n\t\t});\n\t\tthis.update();\n\t}\n\n\t/**\n\t * Initializes after context set, optionally calls `begin()`.\n\t * @param {object} [params]\n\t * @param {boolean} [params.autoStart] Set to true to call `begin` function.\n\t *\n\t * @tsmember WebComponents.ChartTitle\n\t */\n\tinitialize(params) {\n\t\tthis.params = params ? params : {};\n\t\tif (typeof this.params.autoStart == \"undefined\")\n\t\t\tthis.params.autoStart = true;\n\t\tthis.marker = null;\n\n\t\tif (this.params.autoStart) this.begin();\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.ChartTitle\n\t */\n\tsetContext(context) {\n\t\tif (this.listeners) return;\n\n\t\tconst stx = context.stx;\n\n\t\tlet { markup } = this.constructor;\n\t\tthis.handleSymbolSearchChange();\n\t\tthis.addDefaultMarkup(this, markup);\n\n\t\tthis.symbolDiv = this.querySelector(\"cq-symbol\");\n\t\tthis.symbolDescriptionDiv = this.querySelector(\"cq-symbol-description\");\n\t\tthis.currentPriceDiv = this.querySelector(\"cq-current-price\");\n\t\tthis.todaysChangeDiv = this.querySelector(\"cq-todays-change\");\n\t\tthis.todaysChangePctDiv = this.querySelector(\"cq-todays-change-pct\");\n\t\tthis.chartPriceDiv = this.querySelector(\"cq-chart-price\");\n\t\tthis.changeDiv = this.querySelector(\"cq-change\");\n\t\tthis.exchangeDiv = this.querySelector(\".exchange\");\n\t\tthis.accessibleChange = this.querySelector(\"[accessiblechange]\");\n\n\t\tthis.listeners = {\n\t\t\tlanguage: () => setTimeout(() => this.update(true), 100),\n\t\t\tsymbolObject: () => this.updateExchange()\n\t\t};\n\n\t\tCIQ.UI.observeProperty(\n\t\t\t\"language\",\n\t\t\tstx.preferences,\n\t\t\tthis.listeners.language\n\t\t);\n\t\tCIQ.UI.observeProperty(\n\t\t\t\"symbolObject\",\n\t\t\tstx.chart,\n\t\t\tthis.listeners.symbolObject\n\t\t);\n\n\t\tthis.initialize();\n\t}\n\n\t/**\n\t * Updates exchange div element based on the chart engine symbol object\n\t * @private\n\t *\n\t * @tsmember WebComponents.ChartTitle\n\t * @since 9.1.0\n\t */\n\tupdateExchange() {\n\t\tif (!this.context) return;\n\n\t\tconst { symbolObject } = this.context.stx.chart;\n\t\tconst { exchangeDiv } = this;\n\n\t\tif (this.displayExchange != null && symbolObject.exchDisp) {\n\t\t\texchangeDiv.innerText = `Exchange: ${symbolObject.exchDisp}`;\n\t\t} else if (symbolObject.static) {\n\t\t\texchangeDiv.innerText = \"STATIC\";\n\t\t} else {\n\t\t\texchangeDiv.innerText = \"\";\n\t\t}\n\t}\n\n\t/**\n\t * Updates the values in the component.\n\t *\n\t * @param {boolean} force Update even when no price change\n\t *\n\t * @tsmember WebComponents.ChartTitle\n\t */\n\tupdate(force) {\n\t\tif (!this.context) return;\n\n\t\tconst { stx } = this.context;\n\t\tconst {\n\t\t\tchart: { symbol, symbolDisplay },\n\t\t\tinternationalizer\n\t\t} = stx;\n\n\t\tconst {\n\t\t\tsymbolDiv,\n\t\t\tsymbolDescriptionDiv,\n\t\t\texchangeDiv,\n\t\t\tcurrentPriceDiv,\n\t\t\tchangeDiv,\n\t\t\tchartPriceDiv,\n\t\t\ttodaysChangeDiv,\n\t\t\ttodaysChangePctDiv,\n\t\t\taccessibleChange\n\t\t} = this;\n\t\tconst wrapper = this.closest(\"cq-context-wrapper\");\n\t\tconst isActiveChart =\n\t\t\t!wrapper || (wrapper && wrapper.classList.contains(\"active\"));\n\n\t\tconst doUpdateBrowserTab = this.updateBrowserTab && isActiveChart;\n\t\tconst doUpdatePrice = chartPriceDiv && currentPriceDiv;\n\t\tlet priceChanged = false;\n\t\tlet symbolChanged = false;\n\n\t\tlet show = !symbol ? \"remove\" : \"add\";\n\t\tthis.classList[show](\"stx-show\");\n\n\t\tif (symbolDiv.innerText !== symbol) {\n\t\t\tsymbolDiv.innerText = symbol;\n\t\t\tsymbolChanged = true;\n\t\t}\n\n\t\tif (\n\t\t\tsymbolDescriptionDiv &&\n\t\t\tsymbolDescriptionDiv.innerText !== (symbolDisplay || symbol)\n\t\t)\n\t\t\tsymbolDescriptionDiv.innerText = symbolDisplay || symbol;\n\n\t\tif (stx.isHistoricalModeSet) {\n\t\t\tif (currentPriceDiv.innerText !== \"\") currentPriceDiv.innerText = \"\";\n\t\t\tchangeDiv.style.display = \"none\";\n\t\t\t// only change the display so that you don't wreck the line spacing and parens\n\t\t\treturn;\n\t\t}\n\n\t\tlet todaysChange = \"\",\n\t\t\ttodaysChangePct = 0,\n\t\t\ttodaysChangeDisplay = \"\";\n\t\tconst currentQuote = stx.getFirstLastDataRecord(\n\t\t\tstx.chart.dataSet,\n\t\t\t\"Close\",\n\t\t\ttrue\n\t\t);\n\t\tlet currentPrice = \"\";\n\t\tlet textPrice = \"\";\n\t\tif (currentQuote) currentPrice = currentQuote.Close;\n\t\tif (doUpdatePrice) {\n\t\t\tif (currentPrice !== \"\")\n\t\t\t\ttextPrice = stx.formatYAxisPrice(\n\t\t\t\t\tcurrentPrice,\n\t\t\t\t\tstx.chart.panel,\n\t\t\t\t\tstx.chart.decimalPlaces\n\t\t\t\t);\n\t\t\tlet oldPrice = parseFloat(currentPriceDiv.nativePrice);\n\t\t\tif (currentPriceDiv.innerText !== textPrice) {\n\t\t\t\tcurrentPriceDiv.innerText = textPrice;\n\t\t\t\tcurrentPriceDiv.nativePrice = currentPrice;\n\t\t\t\tpriceChanged = true;\n\t\t\t\tconst attr = this.currentPriceDiv.getAttribute(\"cq-animate\");\n\t\t\t\tif (typeof attr != \"undefined\") {\n\t\t\t\t\tCIQ.UI.animatePrice(\n\t\t\t\t\t\tcurrentPriceDiv,\n\t\t\t\t\t\tcurrentPrice,\n\t\t\t\t\t\toldPrice,\n\t\t\t\t\t\tattr == \"fade\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tforce ||\n\t\t\t((doUpdatePrice || doUpdateBrowserTab) &&\n\t\t\t\tsymbol &&\n\t\t\t\t(symbolChanged || priceChanged))\n\t\t) {\n\t\t\tlet previousClose = this.previousClose;\n\n\t\t\t// Default to iqPrevClose if the developer hasn't set this.previousClose\n\t\t\tif (!previousClose && previousClose !== 0)\n\t\t\t\tpreviousClose = currentQuote && currentQuote.iqPrevClose;\n\n\t\t\tif (!previousClose && previousClose !== 0)\n\t\t\t\tpreviousClose = this.mostRecentClose;\n\n\t\t\tif (changeDiv && (currentPrice || currentPrice === 0)) {\n\t\t\t\ttodaysChange = CIQ.fixPrice(currentPrice - previousClose);\n\t\t\t\ttodaysChangePct = (todaysChange / previousClose) * 100;\n\t\t\t\tif (previousClose <= 0 || currentPrice < 0) {\n\t\t\t\t\ttodaysChangeDisplay = \"N/A\";\n\t\t\t\t} else if (internationalizer) {\n\t\t\t\t\ttodaysChangeDisplay = internationalizer.percent2.format(\n\t\t\t\t\t\ttodaysChangePct / 100\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\ttodaysChangeDisplay = todaysChangePct.toFixed(2) + \"%\";\n\t\t\t\t\tif (todaysChangePct > 0)\n\t\t\t\t\t\ttodaysChangeDisplay = \"+\" + todaysChangeDisplay;\n\t\t\t\t}\n\t\t\t\tchangeDiv.style.display = \"\";\n\t\t\t} else if (changeDiv) {\n\t\t\t\tchangeDiv.style.display = \"none\";\n\t\t\t}\n\n\t\t\tconst todaysChangeAbs = Math.abs(todaysChange);\n\t\t\tconst txtChange = stx.formatYAxisPrice(\n\t\t\t\ttodaysChangeAbs,\n\t\t\t\tstx.chart.panel,\n\t\t\t\tstx.chart.decimalPlaces\n\t\t\t);\n\t\t\tif (todaysChangeAbs) {\n\t\t\t\tif (todaysChangeDiv.innerText !== txtChange)\n\t\t\t\t\ttodaysChangeDiv.innerText = txtChange;\n\t\t\t}\n\t\t\tif (todaysChangePctDiv) {\n\t\t\t\tconst visualPctChange = \"(\" + todaysChangeDisplay + \")\";\n\t\t\t\tif (todaysChangePctDiv.innerText !== visualPctChange)\n\t\t\t\t\ttodaysChangePctDiv.innerText = visualPctChange;\n\t\t\t}\n\t\t\tif (todaysChangeDisplay !== \"\" && todaysChange < 0) {\n\t\t\t\tchartPriceDiv.classList.add(\"stx-down\");\n\t\t\t} else {\n\t\t\t\tchartPriceDiv.classList.remove(\"stx-down\");\n\t\t\t}\n\t\t\tif (todaysChangeDisplay !== \"\" && todaysChange > 0) {\n\t\t\t\tchartPriceDiv.classList.add(\"stx-up\");\n\t\t\t} else {\n\t\t\t\tchartPriceDiv.classList.remove(\"stx-up\");\n\t\t\t}\n\t\t\tconst up = todaysChange > 0 ? \"+\" : \"\";\n\t\t\tconst accessibleString = `${up}${todaysChange} (${up}${todaysChangeDisplay})`;\n\t\t\tif (accessibleChange.innerText !== accessibleString)\n\t\t\t\taccessibleChange.innerText = accessibleString;\n\n\t\t\tcurrentPrice = currentPrice !== undefined ? currentPrice : \"\";\n\t\t\ttodaysChange = todaysChange !== undefined ? todaysChange : \"\";\n\n\t\t\tif (doUpdateBrowserTab) {\n\t\t\t\t// These strange characters create some spacing so that the title appears\n\t\t\t\t// correctly in a browser tab\n\t\t\t\tlet title =\n\t\t\t\t\tsymbol + \" \\u200b \\u200b \" + textPrice + \" \\u200b \\u200b \\u200b \";\n\t\t\t\tif (todaysChange > 0) {\n\t\t\t\t\ttitle += \"\\u25b2 \" + txtChange;\n\t\t\t\t} else if (todaysChange < 0) {\n\t\t\t\t\ttitle += \"\\u25bc \" + txtChange;\n\t\t\t\t}\n\n\t\t\t\tthis.ownerDocument.title = title;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Creates a clickable area for the symbol so tapping on the symbol will open a lookup component.\n\t * Whether a clickable symbol is created depends on the value of `cq-activate-symbol-search-on-click` attribute.\n\t *\n\t * @tsmember WebComponents.ChartTitle\n\t */\n\thandleSymbolSearchChange() {\n\t\tconst symbolSearch = ![\"false\", \"0\", null].includes(\n\t\t\tthis.getAttribute(\"cq-activate-symbol-search-on-click\")\n\t\t);\n\n\t\tconst clickable = this.querySelector(\"[selector=cq-lookup-dialog]\");\n\t\tconst symbol = this.querySelector(\"cq-symbol\");\n\t\tif (!clickable) return;\n\t\tif (symbolSearch) {\n\t\t\tclickable.append(symbol);\n\t\t} else {\n\t\t\tclickable.before(symbol);\n\t\t}\n\t}\n}\n\n/**\n * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.ChartTitle\n */\nChartTitle.markup = `\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t`;\nCIQ.UI.addComponentDefinition(\"cq-chart-title\", ChartTitle);\n\n};\n\n\nlet __js_webcomponents_clickable_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

    <cq-clickable>

    \n *\n * When tapped/clicked, this component can run a method on another component. Set the\n * `selector` attribute to a selector for the other component. Set `method` attribute to the method\n * on that other component that should be executed. The parameter provided to the method is an object that contains\n * the context (if available) for this clickable component (\"context\") and a reference to the\n * component (\"caller\").\n *\n * _**Attributes**_\n *\n * This component observes the following attributes and will change behavior if these attributes are modified:\n * | attribute | description |\n * | :-------- | :---------- |\n * | method | A function within another web component to call. |\n * | selector | A css selector to another web component. |\n *\n * _**Emitters**_\n *\n * A custom event will be emitted by the component when it is clicked.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"click\" |\n * | action | \"click\" |\n *\n * @example Component with method and selector.\n * When clicked, the following equivalent code is run from within the component:
    \n *
    document.querySelector(\"cq-sample-dialog\").open({context: this.context, caller: this});
    \n * Settings\n *\n * @alias WebComponents.Clickable\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n * @since\n * - 3.0.9\n * - 9.1.0 Observes attributes. Added emitter.\n */\nclass Clickable extends CIQ.UI.ContextTag {\n\tstatic get observedAttributes() {\n\t\treturn [\"method\", \"selector\"];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tCIQ.UI.makeShadow(this);\n\t}\n\n\tconnectedCallback() {\n\t\tif (!this.isConnected || this.attached) return;\n\t\tsuper.connectedCallback();\n\n\t\tCIQ.UI.stxtap(this, (e) => {\n\t\t\tif (!CIQ.climbUpDomTree(this, \"cq-menu\", true).length)\n\t\t\t\te.stopPropagation();\n\t\t\tthis.runMethod();\n\t\t\tthis.emitCustomEvent({\n\t\t\t\teffect: \"click\"\n\t\t\t});\n\t\t});\n\t\tthis.setAttribute(\"role\", \"button\");\n\n\t\tthis.setupShadow();\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, Clickable);\n\t}\n\n\t/**\n\t * Runs a method on the clickable component.\n\t *\n\t * @tsmember WebComponents.Clickable\n\t */\n\trunMethod() {\n\t\tconst selector = this.selector;\n\t\tconst method = this.method;\n\t\tif (!selector || !method) return;\n\n\t\tconst { context } = this;\n\n\t\tif (/-dialog/.test(selector) && method === \"open\" && context.config) {\n\t\t\tconst channel =\n\t\t\t\t(context.config.channels || {}).dialog || \"channel.dialog\";\n\n\t\t\tthis.channelWrite(\n\t\t\t\tchannel,\n\t\t\t\t{\n\t\t\t\t\ttype: selector.replace(/cq-|-dialog/g, \"\"),\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\tcaller: this,\n\t\t\t\t\t\tinitiatingMenu: CIQ.climbUpDomTree(this, \"cq-menu\", true)[0]\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcontext.stx\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst clickable = this;\n\t\tthis.qsa(selector, this.context.topNode, true).forEach(function (i) {\n\t\t\tif (i[method])\n\t\t\t\ti[method].call(i, {\n\t\t\t\t\tcontext: clickable.context,\n\t\t\t\t\tcaller: clickable\n\t\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.Clickable\n\t */\n\tsetContext(context) {\n\t\tthis.addDefaultMarkup(); // this will put any children into shadowRoot\n\t}\n}\n\nCIQ.UI.addComponentDefinition(\"cq-clickable\", Clickable);\n\n};\n\n\nlet __js_webcomponents_close_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

    <cq-close>

    \n *\n * Closes its containing (parent or up) component by calling its close() method when clicked.\n * _**Emitters**_\n *\n * A custom event will be emitted from the component when it is clicked.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"close\" |\n * | action | \"click\" |\n *\n * @alias WebComponents.Close\n * @extends CIQ.UI.BaseComponent\n * @class\n * @protected\n * @since\n * - 9.1.0 Added emitter.\n */\nclass Close extends CIQ.UI.BaseComponent {\n\tconnectedCallback() {\n\t\tif (!this.isConnected || this.attached) return;\n\t\tCIQ.UI.stxtap(this, (e) => {\n\t\t\tthis.tap();\n\t\t\te.stopPropagation();\n\t\t});\n\t\tsuper.connectedCallback();\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, Close);\n\t}\n\n\t/**\n\t * Handler for clicking the component.\n\t *\n\t * @tsmember WebComponents.Close\n\t */\n\ttap() {\n\t\tCIQ.UI.containerExecute(this, \"close\", true);\n\t\tthis.emitCustomEvent({ effect: \"close\" });\n\t}\n}\n\nCIQ.UI.addComponentDefinition(\"cq-close\", Close);\n\n};\n\n\nlet __js_webcomponents_comparison_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

    <cq-comparison>

    \n *\n * This component presents a legend of comparison series found on the panel. The legend will by default allow the user to\n * toggle the visibility of the series, remove the series, change the series color, and observe the series's price.\n * From the markup, the developer can configure these options as well as whether to display the current price or the crosshair price.\n *\n * Usually the comparison legend is automatically created by the [cq-study-legend]{@link WebComponents.StudyLegend} component.\n * Therefore, you do not have to create this component on your template manually.\n *\n * A comparison series \"chooser\" can also be created using this tag. See below example.\n *\n * _**Attributes**_\n *\n * This component supports the following attributes:\n * | attribute | description |\n * | :----------- | :---------- |\n * | chart-legend | A flag to indicate that the component should take the form of a legend. |\n * | cq-marker | Set to true to allow component to be properly positioned on a chart panel. |\n *\n * _**Emitters**_\n *\n * A custom event will be emitted by the component when a series is removed, its properties modified, or its visibility toggled.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"remove\", \"modify\", \"toggle\" |\n * | action | \"click\" |\n * | name | _series key_ |\n * | field | _field_ |\n * | value | _value_ |\n *\n * Note:\n * - `field` and `value` not available on remove effect\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * @example Comparison series \"Chooser\" markup. Note the absence of the \"chart-legend\" attribute.\n *\t\n *\t\t\n *\t\t\t
    \n *\t\t\t\t\n *\t\t\t\tCompare ...\n *\t\t\t
    \n *\t\t\t
    \n *\t\t\t\t\n *\t\t\t\t\n *\t\t\t\t\t
    Select color
    \n *\t\t\t\t
    \n *\t\t\t\t
    \n *\t\t\t\t\tAdd\n *\t\t\t\t
    \n *\t\t\t
    \n *\t\t
    \n *\t
    \n *\n * @alias WebComponents.Comparison\n * @extends CIQ.UI.ModalTag\n * @class\n * @protected\n * @since\n * - 7.3.0 Added the ability to set series color using `cq-swatch`.\n * - 9.1.0 Added markup for UI, and emitters.\n */\nclass Comparison extends CIQ.UI.ModalTag {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.swatchColors = [];\n\t\tthis.loading = [];\n\t\tthis.find = (selector) => this.qsa(selector, this, true)[0];\n\t\tCIQ.UI.makeShadow(this);\n\t}\n\n\tconnectedCallback() {\n\t\tif (!this.isConnected || this.attached) return;\n\t\tsuper.connectedCallback();\n\t\tthis.swatchColors = [\n\t\t\t\"#8ec648\",\n\t\t\t\"#00afed\",\n\t\t\t\"#ee652e\",\n\t\t\t\"#912a8e\",\n\t\t\t\"#fff126\",\n\t\t\t\"#e9088c\",\n\t\t\t\"#ea1d2c\",\n\t\t\t\"#00a553\",\n\t\t\t\"#00a99c\",\n\t\t\t\"#0056a4\",\n\t\t\t\"#f4932f\",\n\t\t\t\"#0073ba\",\n\t\t\t\"#66308f\",\n\t\t\t\"#323390\"\n\t\t];\n\t\tif (this.isShadowComponent && this.children.length) {\n\t\t\twhile (this.children.length) {\n\t\t\t\tthis.root.appendChild(this.firstChild);\n\t\t\t}\n\t\t}\n\t\tthis.markup = this.trimInnerHTMLWhitespace();\n\t\tthis.usingMarkup = !!this.markup.match(/\\{\\{(.{1,20}?)\\}\\}/g);\n\t\tthis.setMarkup();\n\n\t\tthis.setupShadow();\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, Comparison);\n\t\tthis.constructor = Comparison;\n\t}\n\n\tdisconnectedCallback() {\n\t\tif (this.doNotDisconnect) return;\n\t\tthis.removeClaim(this);\n\t\tsuper.disconnectedCallback();\n\t}\n\n\t/**\n\t * Processes attribute changes. This is called whenever an observed attribute has changed.\n\t *\n\t * @param {string} name Attribute name\n\t * @param {string} oldValue Original attribute value\n\t * @param {string} newValue new Attribute value\n\t *\n\t * @tsmember WebComponents.Comparison\n\t */\n\thandlePropertyChange(name, oldValue, newValue) {\n\t\tif (oldValue === newValue) return;\n\t\tthis[name] = newValue;\n\t\tif (this.usingMarkup) {\n\t\t\tthis.setMarkup();\n\t\t} else {\n\t\t\t// do nothing when using predefined content\n\t\t}\n\t}\n\n\t/**\n\t * Initializes all the children UI elements that make up ``.\n\t *\n\t * @tsmember WebComponents.Comparison\n\t */\n\tconfigureUI() {\n\t\tconst addNew = this.find(\".addswatch.seriesId\");\n\t\tthis.template = this.find(\"template[cq-comparison]\");\n\t\tconst swatchColors = (\n\t\t\tthis.find(\"cq-swatch\") || document.createElement(\"a\")\n\t\t).getAttribute(\"cq-colors\");\n\t\tif (swatchColors) this.swatchColors = swatchColors.split(\",\");\n\t\tthis.swatchColors = CIQ.convertToNativeColor(this.swatchColors);\n\t\tconst lookup = this.find(\"cq-lookup\");\n\t\tif (lookup) lookup.setCallback((obj) => this.selectItem(obj));\n\t\tCIQ.UI.stxtap(addNew, (e) => {\n\t\t\tlookup.forceInput();\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\t// Add the keystroke claim\n\t\tthis.addClaim(this);\n\n\t\tconst keystrokeHub = this.ownerDocument.body.keystrokeHub;\n\t\tif (!keystrokeHub) return;\n\n\t\tlet menu = this.find(\"cq-menu.comparison\");\n\t\tif (menu) {\n\t\t\t// Extend the internal menu's hide function so we can do some cleanup\n\t\t\tlet menuHide = menu.hide.bind(menu);\n\t\t\tmenu.hide = () => {\n\t\t\t\t//const keystrokeHub = document.body.keystrokeHub;\n\t\t\t\t// Treat the legend like a modal so keyboard navigation is returned after using colorPicker\n\t\t\t\tkeystrokeHub.removeActiveModal(this);\n\t\t\t\tkeystrokeHub.tabOrderSelect();\n\t\t\t\tmenuHide();\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\t * Handler for keyboard interaction.\n\t *\n\t * Left and Right arrows will move between symbol lookup, color picker and \"Add\" button.\n\t * The attribute cq-focused will be added to the currently focused tag. This can then be\n\t * queried later, such as when a user hits enter.\n\t *\n\t * @param {CIQ.UI.KeystrokeHub} hub The hub that processed the key\n\t * @param {string} key Key that was stroked\n\t * @param {Event} e The event object\n\t * @return {boolean} true if keystroke was processed\n\t *\n\t * @tsmember WebComponents.Comparison\n\t * @since 9.1.0\n\t */\n\tkeyStroke(hub, key, e) {\n\t\tif (!this.keyboardNavigation) return false;\n\t\tconst items = this.qsa(\n\t\t\t\"cq-lookup, cq-swatch, .add, [keyboard-selectable='true']\",\n\t\t\tthis,\n\t\t\ttrue\n\t\t);\n\t\tif (!items.length) return false;\n\t\tconst focused = this.findFocused(items);\n\t\tswitch (key) {\n\t\t\tcase \"Enter\":\n\t\t\t\tif (!focused[0]) return false;\n\t\t\t\tif (this.clickItem(focused[0], e, this)) return true;\n\t\t\t\tbreak;\n\t\t\tcase \"Tab\":\n\t\t\t\tif (focused[0] && focused[0].matches(\"cq-lookup\")) {\n\t\t\t\t\tthis.keyboardNavigation.disableKeyControlElement(focused[0], true);\n\t\t\t\t\thub.tabActiveElement.element.blur();\n\t\t\t\t\tfocused[0].overrideIsActive = true;\n\t\t\t\t}\n\t\t\t\tlet newFocused = this.focusNextItem(items, false, true);\n\t\t\t\tif (newFocused && newFocused.matches(\"cq-lookup\")) {\n\t\t\t\t\tnewFocused.keyboardNavigation = this.keyboardNavigation;\n\t\t\t\t\tif (newFocused.onKeyboardSelection) newFocused.onKeyboardSelection();\n\t\t\t\t\tnewFocused.overrideIsActive = false;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"Esc\":\n\t\t\tcase \"Escape\":\n\t\t\t\tthis.removeFocused(items);\n\t\t\t\tlet menu = this.find(\"cq-menu.comparison\");\n\t\t\t\tif (menu) menu.hide();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\te.preventDefault();\n\t\t\t\tbreak;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Triggers the comparison lookup component and passes keyboard control into the internal\n\t * [cq-lookup]{@link WebComponents.Lookup} element.\n\t *\n\t * Called when keyboard navigation activates this element by pressing Return/Enter.\n\t *\n\t * @tsmember WebComponents.Comparison\n\t * @since 8.3.0\n\t */\n\tonKeyboardSelection() {\n\t\t// Pass control to the lookup component\n\t\tlet lookup = this.find(\"cq-lookup\");\n\t\tlookup.setAttribute(\"cq-focused\", \"true\");\n\t\tlookup.overrideIsActive = false;\n\t\tlookup.keyboardNavigation = this.keyboardNavigation;\n\t\tif (lookup.onKeyboardSelection) lookup.onKeyboardSelection();\n\t}\n\n\t/**\n\t * Picks a color to display the new comparison as.\n\t * Loops through preset colors and picks the next one on the list.\n\t * If all colors are taken, then the last color will be repeated.\n\t *\n\t * @tsmember WebComponents.Comparison\n\t */\n\tpickSwatchColor() {\n\t\tCIQ.UI.pickSwatchColor(this, this.find(\"cq-swatch\"));\n\t}\n\n\t/**\n\t * Finds the crosshair price value and puts into the legend.\n\t *\n\t * @tsmember WebComponents.Comparison\n\t */\n\tposition() {\n\t\tconst { stx } = this.context;\n\t\tconst bar = stx.barFromPixel(stx.cx);\n\t\tthis.tick = stx.tickFromPixel(stx.cx);\n\t\tconst prices = stx.chart.xaxis[bar];\n\n\t\tconst printValues = () => {\n\t\t\tlet key;\n\t\t\tthis.timeout = null;\n\t\t\tfor (let s in stx.chart.series) {\n\t\t\t\tif (!key) key = this.find(\"[comparison-key]\");\n\t\t\t\tconst price = this.find(\n\t\t\t\t\t'.item[cq-symbol=\"' + s + '\"] [crosshair-price]'\n\t\t\t\t);\n\t\t\t\tif (price && prices && prices.data) {\n\t\t\t\t\tif (price.innerText !== \"\") price.innerText = \"\";\n\t\t\t\t\tconst symbol = stx.chart.series[s].parameters.symbol;\n\t\t\t\t\tlet paddedPrice = stx.padOutPrice(prices.data[symbol]);\n\t\t\t\t\tif (price.innerText !== paddedPrice) price.innerText = paddedPrice;\n\t\t\t\t\tlet pdSymbol = prices.data[symbol];\n\t\t\t\t\tif (pdSymbol !== null) {\n\t\t\t\t\t\tif (typeof pdSymbol === \"object\") pdSymbol = pdSymbol.Close;\n\t\t\t\t\t\tpaddedPrice = stx.padOutPrice(pdSymbol);\n\t\t\t\t\t\tif (price.innerText !== paddedPrice) price.innerText = paddedPrice;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (this.tick != this.prevTick) {\n\t\t\tif (this.timeout) clearTimeout(this.timeout);\n\t\t\t// IE and FF struggle to keep up with the dynamic heads up.\n\t\t\tthis.timeout = setTimeout(printValues, 0);\n\t\t}\n\t\tthis.prevTick = this.tick; // We don't want to update the dom every pixel, just when we cross into a new candle\n\t}\n\n\t/**\n\t * Handles removing a series from the comparison.\n\t *\n\t * @param {string} symbol Name of series as a string.\n\t * @param {object} series Object containing info on series.\n\t *\n\t * @tsmember WebComponents.Comparison\n\t */\n\tremoveSeries(symbol, series) {\n\t\tthis.context.stx.removeSeries(symbol);\n\t}\n\n\t/**\n\t * The legend gets re-rendered whenever we createDataSet() (wherein the series may have changed).\n\t * We re-render the entire thing each time, but we use a virtual DOM to determine whether\n\t * to actually change anything on the screen (so as to avoid unnecessary flickering)\n\t *\n\t * @tsmember WebComponents.Comparison\n\t */\n\trenderLegend() {\n\t\tif (this.currentlyDisabling) return;\n\t\tthis.pickSwatchColor();\n\t\tconst key = CIQ.cqvirtual(this.find(\"[comparison-key]\"));\n\t\tif (!key) return;\n\n\t\tconst tapFunction = (s, series) => {\n\t\t\treturn () => {\n\t\t\t\tthis.nomore = true;\n\t\t\t\tif (!series.parameters.permanent) {\n\t\t\t\t\tthis.removeSeries(s, series);\n\t\t\t\t\tthis.emitCustomEvent({\n\t\t\t\t\t\teffect: \"remove\",\n\t\t\t\t\t\tdetail: { name: s }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis.modalEnd(); // tricky, we miss mouseout events when we remove items from under ourselves\n\t\t\t};\n\t\t};\n\n\t\tconst getToggleHandle = (series, stx) => {\n\t\t\treturn (e) => {\n\t\t\t\tconst { id, parameters } = series,\n\t\t\t\t\tdisabled = !parameters.disabled;\n\t\t\t\te.stopPropagation();\n\t\t\t\tthis.currentlyDisabling = true;\n\t\t\t\tstx.modifySeries(id, { disabled });\n\t\t\t\te.target.parentElement.classList[disabled ? \"remove\" : \"add\"](\n\t\t\t\t\t\"ciq-active\"\n\t\t\t\t);\n\t\t\t\te.target.ariaPressed = !disabled;\n\t\t\t\tthis.emitCustomEvent({\n\t\t\t\t\teffect: \"toggle\",\n\t\t\t\t\tdetail: { name: id, field: \"disabled\", value: disabled }\n\t\t\t\t});\n\t\t\t\tthis.currentlyDisabling = false;\n\t\t\t};\n\t\t};\n\n\t\tconst holder = CIQ.climbUpDomTree(this, \".stx-holder\", true)[0];\n\t\tconst { stx } = this.context;\n\t\tstx.getDefaultColor();\n\t\tconst panelOnly = key.hasAttribute(\"cq-panel-only\");\n\t\tconst comparisonOnly = !key.hasAttribute(\"cq-all-series\");\n\t\tfor (let r in stx.chart.seriesRenderers) {\n\t\t\tconst renderer = stx.chart.seriesRenderers[r];\n\t\t\tif (renderer == stx.mainSeriesRenderer) continue;\n\t\t\tif (comparisonOnly && !renderer.params.isComparison) continue;\n\t\t\tif (panelOnly && (!holder || renderer.params.panel != holder.panel.name))\n\t\t\t\tcontinue;\n\t\t\tfor (let s = 0; s < renderer.seriesParams.length; s++) {\n\t\t\t\tconst rSeries = renderer.seriesParams[s];\n\t\t\t\tconst frag = CIQ.UI.makeFromTemplate(this.template)[0];\n\t\t\t\tconst swatch = frag.querySelector(\"cq-swatch\");\n\t\t\t\tconst label = frag.querySelector(\"[label]\");\n\t\t\t\tconst description = frag.querySelector(\"[description]\");\n\t\t\t\tconst loader = frag.querySelector(\"cq-loader\");\n\t\t\t\tconst btn = frag.querySelector(\".close\");\n\t\t\t\tconst toggleEl = frag.querySelector(\".ciq-switch\");\n\t\t\t\tconst series = stx.chart.series[rSeries.id];\n\t\t\t\tconst seriesParameters = series.parameters;\n\t\t\t\tlet color = seriesParameters.color || renderer.colors[series.id].color;\n\t\t\t\tconst isAuto = !color || color == \"auto\";\n\t\t\t\tif (isAuto) color = stx.defaultColor;\n\t\t\t\tif (swatch) {\n\t\t\t\t\tswatch.seriesId = rSeries.id;\n\t\t\t\t\tswatch.setColor(color, false, isAuto);\n\t\t\t\t\tif (seriesParameters.opacity)\n\t\t\t\t\t\tswatch.style.opacity = seriesParameters.opacity;\n\t\t\t\t}\n\t\t\t\tif (label) {\n\t\t\t\t\tlabel.innerText = stx.translateIf(series.display);\n\t\t\t\t\tfrag.setAttribute(\"title\", label.innerText);\n\t\t\t\t}\n\t\t\t\tif (description && series.description)\n\t\t\t\t\tdescription.innerText = stx.translateIf(series.description);\n\t\t\t\tfrag.setAttribute(\"cq-symbol\", series.id);\n\n\t\t\t\tconst { symbol } = seriesParameters;\n\t\t\t\tconst q = stx.mostRecentClose(symbol);\n\t\t\t\tif (q || q === 0) {\n\t\t\t\t\tconst price = frag.querySelector(\"[current-price]\");\n\t\t\t\t\tif (price) {\n\t\t\t\t\t\tprice.innerText = stx.padOutPrice(q);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.loading[seriesParameters.symbolObject.symbol]) loader.show();\n\t\t\t\telse loader.hide();\n\n\t\t\t\tif (seriesParameters.error) frag.setAttribute(\"cq-error\", true);\n\t\t\t\tif (btn && (!seriesParameters.color || seriesParameters.permanent))\n\t\t\t\t\tbtn.style.visibility = \"hidden\";\n\t\t\t\telse {\n\t\t\t\t\tCIQ.UI.stxtap(btn, tapFunction(series.id, series));\n\t\t\t\t}\n\n\t\t\t\tconst labelid = CIQ.uniqueID() + \"_toggle_label\";\n\t\t\t\ttoggleEl.setAttribute(\"aria-labelledBy\", labelid);\n\t\t\t\ttoggleEl.ariaPressed = !seriesParameters.disabled;\n\t\t\t\tif (!seriesParameters.disabled) frag.classList.add(\"ciq-active\");\n\n\t\t\t\tconst labelForToggle = frag.querySelector(\"[id][hidden]\");\n\t\t\t\tif (labelForToggle) labelForToggle.id = labelid;\n\t\t\t\ttoggleEl.classList.remove(\"hidden\");\n\n\t\t\t\tCIQ.safeClickTouch(toggleEl, getToggleHandle(series, stx));\n\n\t\t\t\tkey.appendChild(frag);\n\t\t\t}\n\t\t}\n\n\t\tconst legendParent = CIQ.climbUpDomTree(\n\t\t\tCIQ.cqrender(key),\n\t\t\t\"cq-study-legend\",\n\t\t\ttrue\n\t\t);\n\t\tlegendParent.forEach(function (i) {\n\t\t\tif (i.displayLegendTitle) i.displayLegendTitle();\n\t\t});\n\t}\n\n\t/**\n\t * Changes the color of a series; triggered if using [cq-swatch]{@link WebComponents.Swatch} to show the series color.\n\t *\n\t * @param {string} color New color.\n\t * @param {object} swatch Swatch from which the color setting is made.\n\t *\n\t * @tsmember WebComponents.Comparison\n\t * @since 7.3.0\n\t */\n\tsetColor(color, swatch) {\n\t\tconst s = swatch.seriesId;\n\t\tif (s) this.context.stx.modifySeries(s, { color });\n\t\tthis.emitCustomEvent({\n\t\t\teffect: \"modify\",\n\t\t\tdetail: { name: s, field: \"color\", value: color }\n\t\t});\n\t}\n\n\t/**\n\t * Initializes the inner HTML of the component when the component is attached to the DOM without any existing inner HTML.\n\t *\n\t * @tsmember WebComponents.Comparison\n\t */\n\tsetMarkup() {\n\t\tconst { children } = this.root;\n\t\tif (!children.length || this.usingMarkup) {\n\t\t\tthis.usingMarkup = true;\n\t\t\tif (children.length) {\n\t\t\t\t[...children].forEach((child) => {\n\t\t\t\t\tif (![\"LINK\", \"STYLE\"].includes(child.tagName)) child.remove();\n\t\t\t\t});\n\t\t\t}\n\t\t\tlet { markup } = this.constructor;\n\t\t\tthis.addDefaultMarkup(null, markup);\n\t\t}\n\t}\n\n\t/**\n\t * Adds an injection to the ChartEngine that tracks the price of Comparisons.\n\t *\n\t * @param {boolean} updatePrices whether to update price on each quote update\n\t *\n\t * @tsmember WebComponents.Comparison\n\t */\n\tstartPriceTracker(updatePrices) {\n\t\tconst self = this;\n\t\tthis.addInjection(\"append\", \"createDataSet\", function () {\n\t\t\tif (updatePrices) self.updatePrices();\n\t\t\tif (this.chart.dataSet && this.chart.dataSet.length) {\n\t\t\t\tif (self.getAttribute(\"cq-show\") !== \"true\")\n\t\t\t\t\tself.setAttribute(\"cq-show\", \"true\");\n\t\t\t} else if (self.hasAttribute(\"cq-show\")) self.removeAttribute(\"cq-show\");\n\t\t});\n\t}\n\n\t/**\n\t * Adds an injection to the ChartEngine to track the crosshair price of the Comparison.\n\t *\n\t * @tsmember WebComponents.Comparison\n\t */\n\tstartTickPriceTracker() {\n\t\tthis.prevTick = null;\n\t\tthis.addInjection(\"prepend\", \"headsUpHR\", () => this.position());\n\t}\n\n\t/**\n\t * Fires whenever a new security is added as a comparison. Handles all the necessary events\n\t * to update the chart with the new comparison.\n\t *\n\t * @param {object} obj Contains information about the security.\n\t * @param {string} obj.symbol The symbol that identifies the security.\n\t *\n\t * @since 8.2.0 Removed the `context` parameter. The context is now accessed from the base\n\t * \t\tcomponent class.\n\t *\n\t * @tsmember WebComponents.Comparison\n\t */\n\tselectItem(obj) {\n\t\tconst { context } = this;\n\t\tconst cb = (err, series) => {\n\t\t\tif (err) series.parameters.error = true;\n\t\t\tthis.loading[series.parameters.symbolObject.symbol] = false;\n\t\t\tthis.renderLegend();\n\t\t};\n\t\tconst swatch = this.find(\"cq-swatch\");\n\t\tlet color = \"auto\",\n\t\t\tpattern = null,\n\t\t\twidth = 1;\n\t\tif (swatch) {\n\t\t\tconst { style } = swatch;\n\t\t\tcolor = style.backgroundColor;\n\t\t\tpattern = style.borderTopStyle;\n\t\t\twidth = style.width || 1;\n\t\t}\n\t\tif (color === \"initial\") color = \"auto\";\n\t\tconst { stx } = context;\n\t\tthis.loading[obj.symbol] = true;\n\t\tconst params = {\n\t\t\tname: \"comparison \" + obj.symbol,\n\t\t\tsymbolObject: obj,\n\t\t\tisComparison: true,\n\t\t\tcolor,\n\t\t\tpattern,\n\t\t\twidth: width || 1,\n\t\t\tdata: { useDefaultQuoteFeed: true },\n\t\t\tforceData: true\n\t\t};\n\n\t\t// don't allow symbol if same as main chart, comparison already exists, or just white space\n\t\tconst exists = stx.getSeries({ symbolObject: obj });\n\t\tfor (let i = 0; i < exists.length; i++)\n\t\t\tif (exists[i].parameters.isComparison) {\n\t\t\t\tthis.loading[obj.symbol] = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t// don't allow symbol if same as main chart or just white space\n\t\tif (\n\t\t\tobj.symbol &&\n\t\t\tobj.symbol.trim().length > 0 &&\n\t\t\t(!context.stx.chart.symbol ||\n\t\t\t\tcontext.stx.chart.symbol.toLowerCase() !== obj.symbol.toLowerCase())\n\t\t) {\n\t\t\tstx.addSeries(obj.symbol, params, cb);\n\t\t} else {\n\t\t\tthis.loading[obj.symbol] = false;\n\t\t}\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.Comparison\n\t */\n\tsetContext(context) {\n\t\tthis.setAttribute(\"cq-show\", \"true\");\n\t\t// if attribute cq-marker then detach and put ourselves in the chart holder\n\t\tthis.configureUI();\n\t\tconst { stx } = context;\n\t\tconst renderIfChanged = (obj) => this.renderLegend();\n\t\t[\"layout\", \"symbolImport\", \"symbolChange\", \"theme\"].forEach(function (ev) {\n\t\t\tstx.addEventListener(ev, renderIfChanged);\n\t\t});\n\t\tthis.addInjection(\"append\", \"modifySeries\", renderIfChanged);\n\t\tthis.renderLegend();\n\t\tif (!this.template) return;\n\t\tconst frag = CIQ.UI.makeFromTemplate(this.template)[0];\n\t\tthis.startPriceTracker(!!frag.querySelector(\"[current-price]\"));\n\t\tif (frag.querySelector(\"[crosshair-price]\")) {\n\t\t\tthis.startTickPriceTracker();\n\t\t}\n\t}\n\n\t/**\n\t * Loops thru `stxx.chart.series` to update the current price of all comparisons.\n\t *\n\t * @tsmember WebComponents.Comparison\n\t */\n\tupdatePrices() {\n\t\tlet key; // lazy eval this to prevent work when no comparisons exist\n\t\tconst { stx } = this.context;\n\t\tconst historical = stx.isHistoricalModeSet;\n\t\tconst isDaily = CIQ.ChartEngine.isDailyInterval(stx.layout.interval);\n\t\tfor (let s in stx.chart.series) {\n\t\t\tif (!key) key = this.find(\"[comparison-key]\");\n\t\t\tconst price = this.find('.item[cq-symbol=\"' + s + '\"] [current-price]');\n\t\t\tif (price) {\n\t\t\t\tconst q = stx.chart.series[s].lastQuote;\n\t\t\t\tif (!q || !q.DT || (!q.Close && q.Close !== 0)) continue;\n\t\t\t\tif (\n\t\t\t\t\t!isDaily &&\n\t\t\t\t\tstx.chart.market &&\n\t\t\t\t\tstx.chart.market.getSession(q.DT) === null\n\t\t\t\t)\n\t\t\t\t\tcontinue; // don't update when no session\n\t\t\t\tlet newPrice = q.Close;\n\t\t\t\tconst field = stx.chart.series[s].parameters.subField || \"Close\";\n\t\t\t\tconst oldPrice = parseFloat(price.innerText);\n\t\t\t\tif (newPrice && (newPrice[field] || newPrice[field] === 0))\n\t\t\t\t\tnewPrice = newPrice[field];\n\t\t\t\tif (!newPrice && newPrice !== 0 && stx.chart.series[s].lastQuote)\n\t\t\t\t\tnewPrice = stx.chart.series[s].lastQuote[field];\n\t\t\t\tconst priceText = stx.padOutPrice(historical ? \"\" : newPrice);\n\t\t\t\tif (price.innerText !== priceText) price.innerHTML = priceText;\n\t\t\t\tif (historical) return;\n\t\t\t\tif (typeof price.hasAttribute(\"cq-animate\"))\n\t\t\t\t\tCIQ.UI.animatePrice(price, newPrice, oldPrice);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Default markup for the comparison legend's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.Comparison\n */\nComparison.markup = `\n\t\t
    \n\t\t\t\n\t\t
    \n\t`;\n\nCIQ.UI.addComponentDefinition(\"cq-comparison\", Comparison);\n\n};\n\n\nlet __js_webcomponents_cvpController_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

    <cq-cvp-controller>

    \n *\n * The CVP Controller web component is used to supplement the [cq-drawing-settings]{@link WebComponents.DrawingSettings} component.\n * It displays additional settings options specific to the Average Line and Regression Line drawing tool.\n *\n * The additional information is to activate a line at +/- X standard deviations away from the center line.\n * There is a line color and line style selection available as well.\n *\n * _**Attributes**_\n *\n * This component observes the following attributes and will change behavior if these attributes are modified:\n * | attribute | description |\n * | :-------- | :---------- |\n * | enable | True if this instance is active. |\n * | color | Current line color in hex format, or \"auto\" to select color from theme. |\n * | width | Line width in pixels. |\n * | pattern | Line pattern: \"solid\", \"dotted\" or \"dashed\". |\n *\n * In addition, the following attributes are also supported:\n * | attribute | description |\n * | :------------ | :---------- |\n * | cq-cvp-header | A numerical index relating to the number of standard deviations to this instance applies. |\n *\n * _**Emitters**_\n *\n * A custom event will be emitted by the component when it is clicked.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"select\" |\n * | action | \"click\" |\n * | name | _property_ |\n * | value | _value_ |\n *\n * `cause` and `action` are set only when the value is changed as a direct result of clicking on the component.\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * @example Markup for CVP Controller\n *\t\n *\n * @alias WebComponents.CVPController\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n * @since\n * - 9.1.0 Observes attributes. Added emitter.\n */\nclass CVPController extends CIQ.UI.ContextTag {\n\tstatic get observedAttributes() {\n\t\treturn [\"enable\", \"color\", \"pattern\", \"width\"];\n\t}\n\n\tconnectedCallback() {\n\t\tif (!this.isConnected || this.attached) return;\n\n\t\tObject.defineProperty(this, \"_scope\", {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: this.getAttribute(\"cq-cvp-header\") || \"\",\n\t\t\twritable: false\n\t\t});\n\n\t\tif (this.children.length === 0) {\n\t\t\tthis.addDefaultMarkup();\n\t\t\tconst heading = this.querySelector(\".ciq-heading\");\n\t\t\tif (heading) {\n\t\t\t\theading.innerHTML = this._scope;\n\t\t\t}\n\t\t}\n\n\t\tsuper.connectedCallback();\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, CVPController);\n\t\tthis.constructor = CVPController;\n\t}\n\n\t/**\n\t * Processes attribute changes. This is called whenever an observed attribute has changed.\n\t *\n\t * @param {string} name Attribute name\n\t * @param {string} oldValue Original attribute value\n\t * @param {string} newValue new Attribute value\n\t *\n\t * @tsmember WebComponents.CVPController\n\t */\n\thandlePropertyChange(name, oldValue, newValue) {\n\t\tif (newValue === oldValue) return;\n\t\tthis[name] = newValue;\n\t\tconst action = this.activator ? \"click\" : null;\n\t\tdelete this.activator;\n\n\t\tswitch (name) {\n\t\t\tcase \"enable\":\n\t\t\t\tthis.toggleActive(null, newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"color\":\n\t\t\t\tthis.setColor(newValue);\n\t\t\t\tbreak;\n\t\t\tcase \"width\":\n\t\t\t\tthis.setStyle(null, newValue, null);\n\t\t\t\tbreak;\n\t\t\tcase \"pattern\":\n\t\t\t\tthis.setStyle(null, null, newValue);\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (!this.context) return;\n\n\t\tif (!this.syncing) {\n\t\t\tthis.emitCustomEvent({\n\t\t\t\taction,\n\t\t\t\teffect: \"select\",\n\t\t\t\tdetail: { name, value: newValue }\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Emits a change event.\n\t *\n\t * @param {string} eventName Event type\n\t * @param {Object} value key/value pairs to pass in event detail. Represents what changed and the value it changed to.\n\t *\n\t * @tsmember WebComponents.CVPController\n\t */\n\temit(eventName, value) {\n\t\tif (this.toolbar) {\n\t\t\tthis.toolbar.emit();\n\t\t} else {\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent(eventName, {\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcancelable: true,\n\t\t\t\t\tdetail: value\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Gets the current drawing color and updates display in palette.\n\t *\n\t * @param {Object} activator\n\t * @param {HTMLElement} activator.node Element that triggered this function.\n\t *\n\t * @tsmember WebComponents.CVPController\n\t */\n\tgetColor(activator) {\n\t\tconst node = activator.node || this.querySelector(\"cq-line-color\");\n\t\tconst { color } = this;\n\n\t\tconst specialColorStyles = [\"color-auto\", \"color-transparent\"];\n\t\tspecialColorStyles.forEach((style) => node.classList.remove(style));\n\t\tif (specialColorStyles.includes(\"color-\" + color)) {\n\t\t\tnode.removeAttribute(\"style\");\n\t\t\tnode.classList.add(\"color-\" + color);\n\t\t} else {\n\t\t\tnode.style.background = color;\n\t\t\tconst bgColor = CIQ.getBackgroundColor(this.parentNode);\n\t\t\tif (!color || Math.abs(CIQ.hsl(bgColor)[2] - CIQ.hsl(color)[2]) < 0.2) {\n\t\t\t\tconst border = CIQ.chooseForegroundColor(bgColor);\n\t\t\t\tnode.style.border = \"solid \" + border + \" 1px\";\n\t\t\t} else {\n\t\t\t\tnode.style.border = \"\";\n\t\t\t}\n\t\t}\n\n\t\tconst label = node.querySelector(\"[label]\");\n\t\tif (label) label.innerText = color;\n\t}\n\n\t/**\n\t * Enables colorPicker and provides callback to `setColor`, depending on `mode` value.\n\t *\n\t * @param {Object} activator\n\t * @param {HTMLElement} activator.node Element that triggered this function.\n\t *\n\t * @tsmember WebComponents.CVPController\n\t */\n\tpickColor(activator) {\n\t\tconst colorPicker = this.uiManager.getColorPicker(this);\n\t\tconst overrides = activator.node.getAttribute(\"cq-overrides\");\n\n\t\tif (!colorPicker)\n\t\t\treturn console.error(\n\t\t\t\t\"CVPController.prototype.pickColor: no available\"\n\t\t\t);\n\t\tif (overrides) activator.overrides = overrides.split(\",\");\n\n\t\tcolorPicker.callback = (color) => {\n\t\t\tthis.activator = activator;\n\t\t\tthis.setColor(color);\n\t\t};\n\n\t\tactivator.context = this.context;\n\t\tcolorPicker.display(activator);\n\t}\n\n\t/**\n\t * Sets the default line color.\n\t *\n\t * @param {string} color A Valid css color value.\n\t *\n\t * @tsmember WebComponents.CVPController\n\t */\n\tsetColor(color) {\n\t\tif (!this.context) return;\n\t\tthis.color = color;\n\t\tthis.context.stx.currentVectorParameters[\"color\" + this._scope] = color;\n\t\tthis.getColor({\n\t\t\tnode: this.querySelector(\"cq-line-color\")\n\t\t});\n\t\tthis.emit();\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.CVPController\n\t */\n\tsetContext(context) {\n\t\tthis.setStyle();\n\t\tif (this.toolbar) this.toolbar.dirty(false);\n\t}\n\n\t/**\n\t * Set drawing line style.\n\t *\n\t * @param {Object} [activator]\n\t * @param {HTMLElement} [activator.node] Element that triggered this function.\n\t * @param {string} [width=\"1\"] Line width\n\t * @param {string} [pattern=\"dotted\"] Line pattern\n\t *\n\t * @tsmember WebComponents.CVPController\n\t */\n\tsetStyle(activator, width = \"1\", pattern = \"dotted\") {\n\t\tif (width === null) width = this.width;\n\t\tif (pattern === null) pattern = this.pattern;\n\n\t\twidth = width || \"1\";\n\t\tpattern = pattern || \"dotted\";\n\n\t\tthis.activator = activator;\n\t\tthis.width = parseInt(width, 10).toString();\n\t\tthis.context.stx.currentVectorParameters[\"lineWidth\" + this._scope] =\n\t\t\tthis.width;\n\t\tthis.activator = activator; // set this again since it's reset when we set the width\n\t\tthis.pattern = pattern;\n\t\tthis.context.stx.currentVectorParameters[\"pattern\" + this._scope] = pattern;\n\n\t\tconst selection = this.querySelector(\n\t\t\t\"*[cq-cvp-line-style], .menu-clickable .icon\"\n\t\t);\n\n\t\tif (this.lineStyleClassName) {\n\t\t\tselection.classList.remove(this.lineStyleClassName);\n\t\t}\n\n\t\tif (pattern && pattern !== \"none\") {\n\t\t\tthis.lineStyleClassName = \"ciq-\" + pattern + \"-\" + this.width;\n\t\t\tselection.classList.add(this.lineStyleClassName);\n\t\t} else {\n\t\t\tthis.lineStyleClassName = null;\n\t\t}\n\n\t\tthis.emit(\"change\", {\n\t\t\tlineWidth: width,\n\t\t\tpattern\n\t\t});\n\t}\n\n\t/**\n\t * Update the component state with configuration. May be a drawing instance or\n\t * currentVectorParameters.\n\t *\n\t * @param {Object} config drawing instance or currentVectorParameters\n\t *\n\t * @tsmember WebComponents.CVPController\n\t */\n\tsync(config) {\n\t\tthis.syncing = true;\n\t\tconst active = config[\"active\" + this._scope] || false;\n\t\tconst color = config[\"color\" + this._scope];\n\t\tconst width = config[\"width\" + this._scope];\n\t\tconst pattern = config[\"pattern\" + this._scope];\n\n\t\tconst className = \"ciq-active\";\n\t\tconst checkbox = this.querySelector(\".ciq-checkbox\");\n\n\t\tif (active) {\n\t\t\tcheckbox.classList.add(className);\n\t\t} else {\n\t\t\tcheckbox.classList.remove(className);\n\t\t}\n\n\t\tthis.enable = active.toString();\n\t\tthis.context.stx.currentVectorParameters[\"active\" + this._scope] = active;\n\t\tcheckbox.setAttribute(\"aria-checked\", this.enable);\n\t\tthis.color = color || \"auto\";\n\t\tthis.context.stx.currentVectorParameters[\"color\" + this._scope] =\n\t\t\tthis.color;\n\t\tthis.getColor({});\n\t\tthis.setStyle(null, width, pattern);\n\t\tthis.syncing = false;\n\t}\n\n\t/**\n\t * Toggle active state of component instance.\n\t *\n\t * @param {Object} activator\n\t * @param {HTMLElement} activator.node Element that triggered this function.\n\t * @param {boolean} [forceValue=null] If set, will force the toggle to that value.\n\t *\n\t * @tsmember WebComponents.CVPController\n\t */\n\ttoggleActive(activator, forceValue = null) {\n\t\tif (!this.context) return;\n\t\tthis.activator = activator;\n\t\tlet active = true;\n\t\tif (forceValue !== null) {\n\t\t\tactive = forceValue;\n\t\t} else if (this.enable === \"true\") {\n\t\t\tactive = false;\n\t\t}\n\t\tthis.enable = active.toString();\n\t\tthis.context.stx.currentVectorParameters[\"active\" + this._scope] = active;\n\t\tconst node = this.querySelector(\".ciq-checkbox\");\n\t\tconst className = \"ciq-active\";\n\t\tnode.classList[active ? \"add\" : \"remove\"](className);\n\t\tnode.setAttribute(\"aria-checked\", this.enable);\n\n\t\tthis.emit(\"change\", {\n\t\t\tactive: this.enable\n\t\t});\n\t}\n}\n\n/**\n * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.CVPController\n */\nCVPController.markup = `\n\t\t
    \n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\tLine Color\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t`;\n\nCIQ.UI.addComponentDefinition(\"cq-cvp-controller\", CVPController);\n\n};\n\n\nlet __js_webcomponents_dataDialog_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\n\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

    <cq-data-dialog>

    \n *\n * Dialog form that allows users to upload CSV files to be loaded into the chart.\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * _**Emitters**_\n *\n * A custom event will be emitted from the component when it imports data.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"import\" |\n * | action | \"click\" |\n * | file | _file data_ |\n *\n * A custom event will be emitted from the component when it validates data.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"validate\" |\n * | action | \"click\" |\n * | messageTitle | _validation message title_ |\n * | messageText | _validation message text_ |\n * | valid | _validation status_ |\n *\n * @alias WebComponents.DataDialog\n * @extends CIQ.UI.DialogContentTag\n * @class\n * @protected\n * @since\n * - 9.1.0 Added emitter.\n */\nclass DataDialog extends CIQ.UI.DialogContentTag {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.fileMap = new Map();\n\t\tthis.swatchColors = CIQ.UI.defaultSwatchColors;\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, DataDialog);\n\t\tthis.constructor = DataDialog;\n\t}\n\n\t/**\n\t * Aborts the import of a file.\n\t * If that is the only file loaded then the form will reset to its default state.\n\t * @param {Event} e Submit event\n\t *\n\t * @tsmember WebComponents.DataDialog\n\t */\n\tabortImport(e) {\n\t\tconst targetClose = e.target.nodeName === \"CQ-CLOSE\";\n\n\t\tconst fmf = [...this.fileMap.keys()];\n\t\tconst findIndexFn = (fname) => {\n\t\t\treturn (file) => file.name === fname;\n\t\t};\n\t\tfor (let fset of this.form.querySelectorAll(\"fieldset[name]\")) {\n\t\t\tlet fname = fset.getAttribute(\"fields\");\n\t\t\tif (e && e.target.getAttribute(\"fields\") !== fname && !targetClose)\n\t\t\t\tcontinue;\n\t\t\tlet idx = fmf.findIndex(findIndexFn(fname));\n\n\t\t\tthis.form.removeChild(fset.parentElement);\n\t\t\tthis.fileMap.delete(fmf[idx]);\n\t\t}\n\n\t\tif (targetClose) this.fileInput.value = \"\";\n\n\t\tif (!this.fileMap.size) {\n\t\t\tthis.fileInput.value = \"\";\n\t\t\tthis.loadDataBtn.style.display = \"inline-block\";\n\t\t\tthis.importBtn.style.display = \"none\";\n\t\t\tthis.querySelector(\"cq-section.loader\").style.display = \"flex\";\n\t\t\tthis.warn(\"\", \"\", true);\n\t\t\tCIQ.UI.containerExecute(this, \"resize\");\n\t\t}\n\n\t\tthis.resetTabSelect();\n\t}\n\n\t/**\n\t * Closes dialog and resets it to the default state.\n\t *\n\t * @tsmember WebComponents.DataDialog\n\t */\n\tclose() {\n\t\tthis.abortImport({ target: this.querySelector(\"cq-close\") });\n\t\tthis.channelWrite(\"channel.dataLoader\", false, this.context.stx);\n\t\tthis.loadDataBtn.style.display = this.fileInput.value ? \"none\" : \"inline\";\n\t\tthis.querySelector(\"cq-section.loader\").style.display = \"flex\";\n\t\tthis.warn(\"\", \"\", true);\n\t\tsuper.close();\n\t}\n\n\t/**\n\t * Gets FormData from fields and appends that data to the {@link CIQ.CSVReader}.\n\t *\n\t * @tsmember WebComponents.DataDialog\n\t */\n\tgetFormData() {\n\t\tconst appendFormData = (fieldSet, reader) => {\n\t\t\treturn (field) => {\n\t\t\t\tconst el = fieldSet.elements[field];\n\t\t\t\tlet value;\n\n\t\t\t\tif (el) {\n\t\t\t\t\tvalue = el.type === \"checkbox\" ? el.checked : el.value;\n\t\t\t\t} else {\n\t\t\t\t\tconst v = fieldSet.querySelector(`[name='${field}']`);\n\t\t\t\t\tif (v) value = v.value;\n\t\t\t\t}\n\n\t\t\t\treader.formData.append(field, value);\n\t\t\t};\n\t\t};\n\n\t\tfor (let entry of this.fileMap) {\n\t\t\tconst [file, reader] = entry;\n\t\t\tlet fieldSet = this.querySelector(`[name='${file.name}'] fieldset`);\n\n\t\t\treader.formData = new FormData();\n\t\t\t[\"name\", \"display\", \"periodicity\", \"panel\", \"color\"].forEach(\n\t\t\t\tappendFormData(fieldSet, reader)\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Hides the dialog without clearing data.\n\t *\n\t * @tsmember WebComponents.DataDialog\n\t */\n\thide() {\n\t\tthis.channelWrite(\"channel.dataLoader\", false, this.context.stx);\n\t}\n\n\t/**\n\t * Imports the data if the dialog is in a valid state.\n\t * Closes dialog after successfully importing data.\n\t * @param {Event} e Submit event. Default is prevented.\n\t *\n\t * @tsmember WebComponents.DataDialog\n\t */\n\timportData(e) {\n\t\te.preventDefault();\n\t\tconst { dialog } = this;\n\t\tif (!dialog.validate()()) return;\n\t\tlet {\n\t\t\tcontext: { stx },\n\t\t\tfileMap\n\t\t} = dialog;\n\t\tdialog.getFormData();\n\t\tfileMap.forEach((reader) => {\n\t\t\tstx.dataLoader.importData(reader);\n\t\t\tdialog.emitCustomEvent({\n\t\t\t\teffect: \"import\",\n\t\t\t\tdetail: {\n\t\t\t\t\tfile: reader\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tdialog.close();\n\t}\n\n\t/**\n\t * Parses files uploaded by the user.\n\t *\n\t * @tsmember WebComponents.DataDialog\n\t */\n\tasync loadData() {\n\t\tthis.validateFileInput()();\n\t\tif (this.warning.getAttribute(\"cq-active\")) return;\n\t\tfor (const file of this.fileInput.files) {\n\t\t\tlet reader = new CIQ.CSVReader(file);\n\t\t\tthis.fileMap.set(file, reader);\n\t\t\tawait reader.parse(file);\n\t\t}\n\n\t\tthis.loadDataBtn.style.display = \"none\";\n\t\tthis.querySelector(\"cq-section.loader\").style.display = \"none\";\n\t\tthis.showData();\n\t}\n\n\t/**\n\t * Realigns tab select from the KeystrokeHub\n\t * @private\n\t *\n\t * @tsmember WebComponents.DataDialog\n\t */\n\tresetTabSelect() {\n\t\tconst {\n\t\t\tuiManager: { keystrokeHub }\n\t\t} = this.context;\n\n\t\tkeystrokeHub.highlightAlign();\n\t}\n\n\t/**\n\t * Constructs and displays form for loaded files.\n\t *\n\t * @tsmember WebComponents.DataDialog\n\t */\n\tshowData() {\n\t\tconst {\n\t\t\tcontext: { stx, config = {} },\n\t\t\tkeystrokeHub\n\t\t} = this;\n\n\t\tconst setAbortFunc = (fileName) => {\n\t\t\treturn (selector) => {\n\t\t\t\tselector.setAttribute(\"fields\", fileName);\n\t\t\t\tselector.addEventListener(\"pointerup\", (e) => {\n\t\t\t\t\te.preventDefault(); // stop submit event!\n\t\t\t\t\tCIQ.UI.containerExecute(selector, \"abortImport\", [e]);\n\t\t\t\t});\n\t\t\t};\n\t\t};\n\n\t\tlet main = false;\n\t\tlet tmpl = this.querySelector(\"template\");\n\t\tfor (const entries of this.fileMap) {\n\t\t\tconst [file, reader] = entries;\n\t\t\tconst fileName = file.name;\n\t\t\tconst frag = tmpl.content.cloneNode(true);\n\t\t\tfrag.firstElementChild.id += `${fileName}`;\n\t\t\tfrag.firstElementChild.setAttribute(\"name\", fileName);\n\n\t\t\tconst fieldSet = frag.querySelector(\"fieldset\");\n\t\t\tif (fieldSet) {\n\t\t\t\tfieldSet.setAttribute(\"fields\", fileName);\n\t\t\t\tfieldSet.setAttribute(\"name\", \"fields\");\n\t\t\t}\n\n\t\t\tconst title = frag.querySelector(\"legend.file-name\");\n\t\t\ttitle.innerText = `File: ${fileName}`;\n\n\t\t\tconst name = frag.querySelector(\".data-name input\");\n\t\t\tname.setAttribute(\"placeholder\", fileName);\n\t\t\tname.value = fileName;\n\n\t\t\tconst periodicity = frag.querySelector(\".ciq-select[name='periodicity']\");\n\t\t\tconst periodicities =\n\t\t\t\tCIQ.getFromNS(config, \"menus.period.content\") ||\n\t\t\t\tconfig.menuPeriodicity ||\n\t\t\t\t(function () {\n\t\t\t\t\tconst periodicity = stx.getPeriodicity();\n\t\t\t\t\treturn [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue: periodicity,\n\t\t\t\t\t\t\tlabel: `${periodicity.period}, ${periodicity.timeUnit}`\n\t\t\t\t\t\t}\n\t\t\t\t\t];\n\t\t\t\t})();\n\t\t\tperiodicities\n\t\t\t\t.filter((m) => m.label)\n\t\t\t\t.forEach((p) => {\n\t\t\t\t\tconst opt = document.createElement(\"option\");\n\t\t\t\t\topt.innerText = p.label;\n\t\t\t\t\tlet value = p.value;\n\t\t\t\t\tif (Array.isArray(p.value)) {\n\t\t\t\t\t\tvalue = {};\n\t\t\t\t\t\t[\"period\", \"interval\", \"timeUnit\"].forEach((v, i) => {\n\t\t\t\t\t\t\tvalue[v] = p.value[i];\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\topt.value = JSON.stringify(value);\n\t\t\t\t\tperiodicity.append(opt);\n\t\t\t\t});\n\n\t\t\tconst fieldsSection = frag.querySelector(\".data-fields ul\");\n\t\t\tlet { fields = [] } = reader;\n\n\t\t\tfields.forEach((cell) => {\n\t\t\t\tconst item = document.createElement(\"li\");\n\t\t\t\titem.innerText = cell;\n\t\t\t\tfieldsSection.append(item);\n\t\t\t});\n\n\t\t\tconst display = frag.querySelector(\"[name=display]\");\n\t\t\tconst secondaryOptions = frag.querySelector(\".secondary-options\");\n\n\t\t\tif (!main) main = true;\n\t\t\telse {\n\t\t\t\tdisplay.value = \"secondary\";\n\t\t\t\tsecondaryOptions.style.display = \"block\";\n\t\t\t}\n\n\t\t\tdisplay.addEventListener(\"change\", function (e) {\n\t\t\t\tlet show = this.value.toLowerCase() === \"secondary\";\n\t\t\t\tsecondaryOptions.style.display = show ? \"block\" : \"none\";\n\t\t\t\tkeystrokeHub.highlightAlign();\n\t\t\t});\n\n\t\t\tfrag.querySelectorAll(\".abort\").forEach(setAbortFunc(fileName));\n\n\t\t\tCIQ.UI.pickSwatchColor(this, frag.querySelector(\"cq-swatch\"));\n\t\t\tthis.form.append(frag);\n\n\t\t\t// Prevent accidental submit from inputs\n\t\t\tthis.form.querySelectorAll(\"input:not([type=submit]\").forEach((input) => {\n\t\t\t\tinput.addEventListener(\"keypress\", (e) => {\n\t\t\t\t\tif (e.key === \"Enter\") e.preventDefault();\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\tthis.importBtn.style.display = \"inline\";\n\t\tCIQ.UI.containerExecute(this, \"resize\");\n\t\tthis.resetTabSelect();\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.DataDialog\n\t */\n\tsetContext(context) {\n\t\tthis.context = context;\n\t\tthis.addDefaultMarkup();\n\n\t\tthis.form = this.querySelector(\"form\");\n\t\tthis.fileInput = this.querySelector(\"input[type=file]\");\n\t\tthis.loadDataBtn = this.querySelector(\"button.load\");\n\t\tthis.importBtn = this.querySelector(\"button.import\");\n\t\tthis.controls = this.querySelector(\"div.ciq-dialog-cntrls\");\n\n\t\tthis.warning = this.querySelector(\".invalid-warning\");\n\t\tthis.warningTitle = this.warning.querySelector(\".invalid-warning-title\");\n\t\tthis.warningText = this.warning.querySelector(\".invalid-warning-text\");\n\n\t\tthis.form.dialog = this;\n\t\tthis.form.addEventListener(\"submit\", this.importData);\n\t\tthis.form.addEventListener(\"change\", this.validate());\n\n\t\tthis.fileInput.addEventListener(\"change\", this.validateFileInput());\n\n\t\tthis.keystrokeHub = context.uiManager.keystrokeHub;\n\t}\n\n\t/**\n\t * Custom validate method for the determining whether the data is ready to be submitted for import.\n\t * **NOTE** this validate method is for the form, not for validating files set on input\n\t * @return {boolean} valid status\n\t *\n\t * @tsmember WebComponents.DataDialog\n\t */\n\tvalidate() {\n\t\tconst self = this;\n\t\treturn function (e) {\n\t\t\tself.getFormData();\n\t\t\tlet isMain;\n\t\t\tlet valid = true;\n\t\t\tfor (const entry of self.fileMap) {\n\t\t\t\tconst [, reader] = entry;\n\t\t\t\tconst { formData, fields } = reader;\n\t\t\t\tconst display = formData.get(\"display\");\n\t\t\t\tconst periodicity = formData.get(\"periodicity\");\n\n\t\t\t\tlet validFields =\n\t\t\t\t\t(fields.includes(\"DT\") || fields.includes(\"Date\")) &&\n\t\t\t\t\tfields.some((f) => f === \"Close\" || f === \"Value\");\n\n\t\t\t\tif (!validFields) {\n\t\t\t\t\tvalid = false;\n\t\t\t\t\treturn reportValidity(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmessageTitle: \"Invalid Data fields\",\n\t\t\t\t\t\t\tmessageText:\n\t\t\t\t\t\t\t\t'Your data contains invalid schema to display. It must include a \"DT\" column and either a \"Close\" or \"Value\" column.'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tvalid\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (display === \"secondary\") {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!CIQ.equals(\n\t\t\t\t\t\t\tJSON.parse(periodicity),\n\t\t\t\t\t\t\tself.context.stx.getPeriodicity()\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\treturn reportValidity(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmessageTitle: \"Mis-matched periodicities:\",\n\t\t\t\t\t\t\t\tmessageText:\n\t\t\t\t\t\t\t\t\t\"Having mixed periodicities can result in chart displaying incorrect time scales. Check your data and try again.\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tvalid\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (isMain) {\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\treturn reportValidity(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmessageTitle: \"Multiple Main series\",\n\t\t\t\t\t\t\t\tmessageText:\n\t\t\t\t\t\t\t\t\t\"Detected multiple data files set to display main data. Only one data file can be main.\"\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tvalid\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tisMain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn reportValidity({ messageTitle: \"\", messageText: \"\" }, valid);\n\n\t\t\tfunction reportValidity({ messageTitle, messageText }, valid) {\n\t\t\t\tself.warn(messageTitle, messageText, valid);\n\t\t\t\tself.resetTabSelect();\n\t\t\t\tself.emitCustomEvent({\n\t\t\t\t\teffect: \"validate\",\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\tmessageTitle,\n\t\t\t\t\t\tmessageText,\n\t\t\t\t\t\tvalid\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn valid;\n\t\t\t}\n\t\t};\n\t}\n\n\t/**\n\t * Validation function for File Input.\n\t * **NOTE** Not the same as the validation for the form\n\t * @return {function} Funtion that runs on file input change event\n\t *\n\t * @tsmember WebComponents.DataDialog\n\t */\n\tvalidateFileInput() {\n\t\tconst self = this;\n\t\treturn function (e) {\n\t\t\t// Determine whether called by the dialog or the input then set files\n\t\t\tconst files = self.files || self.fileInput.files;\n\n\t\t\tlet valid = true,\n\t\t\t\ttitle = \"\",\n\t\t\t\tmessage = \"\";\n\t\t\tObject.values(files).forEach(function (file) {\n\t\t\t\tconst { name } = file;\n\t\t\t\tconst extension =\n\t\t\t\t\tname.lastIndexOf(\".\") > 0 &&\n\t\t\t\t\tname.slice(name.lastIndexOf(\".\"), name.length);\n\t\t\t\tif (\n\t\t\t\t\t(extension && extension !== \".csv\") ||\n\t\t\t\t\tDataDialog.mimeTypes.indexOf(file.type) == -1\n\t\t\t\t) {\n\t\t\t\t\ttitle = \"Invalid File Type\";\n\t\t\t\t\tmessage =\n\t\t\t\t\t\t\"Data Importer requires a text/csv file to work. Please select a CSV file.\";\n\t\t\t\t\tvalid = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!files.length) {\n\t\t\t\ttitle = `Please select a file!`;\n\t\t\t\tmessage =\n\t\t\t\t\t\"Data Importer requires a text/csv file to work. Please select a CSV file.\";\n\t\t\t\tvalid = false;\n\t\t\t}\n\t\t\tself.warn(title, message, valid);\n\t\t\tself.resetTabSelect();\n\t\t};\n\t}\n\n\t/**\n\t * Displays or clears warning messages based on the validity of the form.\n\t *\n\t * @param {string} title Title text of warning to display.\n\t * @param {string} text Body text of warning to display.\n\t * @param {boolean} valid Should be valid property from validiity\n\t *\n\t * @tsmember WebComponents.DataDialog\n\t */\n\twarn(title, text, valid) {\n\t\tthis.warningTitle.innerText = title;\n\t\tthis.warningText.innerText = text;\n\t\tif (!valid) this.warning.setAttribute(\"cq-active\", true);\n\t\telse this.warning.removeAttribute(\"cq-active\");\n\t}\n}\n\n/**\n * Valid MIME types that the DataDialog will recognize.\n * By default the file input only accepts the extensions listed here.\n *\n * For more information about extension and MIME types see https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types\n * @static\n * @type {string[]}\n *\n * @tsmember WebComponents.DataDialog\n */\nDataDialog.mimeTypes = [\n\t\"text/csv\",\n\t\"application/csv\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n\t\"application/vnd.ms-excel\"\n];\n\n/**\n * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.DataDialog\n */\nDataDialog.markup = `\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t
    \n\t\t
    \n\t\t\n\t\t\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\n\t\n\t
    \n\t\n\t`;\nCIQ.UI.addComponentDefinition(\"cq-data-dialog\", DataDialog);\n\n};\n\n\nlet __js_webcomponents_dialog_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

    <cq-dialog>

    \n *\n * Manages general dialog interaction such as display, hide, location, size, tap interaction, etc.\n *\n * _**Attributes**_\n *\n * This component observes the following attributes and will change behavior if these attributes are modified:\n * | attribute | description |\n * | :-------------- | :---------- |\n * | cq-title | Display text in dialog heading. |\n * | cq-description | Optional description of dialog. |\n * | cq-close-button | Set to \"false\" to hide the close (X) button in uppper right corner. Note: Users can still close the dialog by clicking outside of it or pressing the Esc key. |\n *\n * Initial attribute values can be configured in the context configuration.\n *\n * _**Emitters**_\n *\n * A custom event will be emitted by the component when it is opened or closed.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | effect | \"hide\", \"show\" |\n * | title | heading of dialog |\n * | type | tag name of dialog being wrapped |\n *\n * @example A dialog container\n *\t\n *\t\t\n *\t\t ...\n *\t\t\n *\t\n *\n * @example Configuring the attributes\n *\tstxx.uiContext.config.dialogs.timezone = {\n *\t\ttag: \"cq-timezone-dialog\",\n *\t\tattributes: {\n *\t\t\t\"cq-title\": \"Choose Timezone\",\n *\t\t\tdescription: \"To set your timezone use the location button below, or scroll through the following list...\"\n *\t\t}\n *\t];\n *\n * @alias WebComponents.Dialog\n * @extends CIQ.UI.BaseComponent\n * @class\n * @protected\n * @since\n * - 9.1.0 Observes attributes. Added emitter.\n */\nclass Dialog extends CIQ.UI.BaseComponent {\n\tstatic get observedAttributes() {\n\t\treturn [\"cq-title\", \"cq-description\", \"cq-close-button\"];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.activeAttributes = {};\n\t}\n\n\tconnectedCallback() {\n\t\tif (!this.isConnected || this.attached) return;\n\t\tthis.isDialog = true;\n\t\tsuper.connectedCallback();\n\n\t\tconst handleTap = (e) => this.tap(e);\n\n\t\tCIQ.UI.stxtap(this, handleTap);\n\n\t\tconst uiManager = CIQ.UI.getUIManager(this);\n\t\tuiManager.registerForResize(this);\n\t\tthis.uiManager = uiManager;\n\n\t\tif (!this.hasAttribute(\"cq-no-claim\")) this.addClaim(this);\n\t\tif (!this.hasAttribute(\"tabindex\")) this.setAttribute(\"tabindex\", \"0\");\n\n\t\t// Attach cq-close, h4 header and description if needed\n\t\tthis._renderTitleElement();\n\t\tthis._renderCloseButton();\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, Dialog);\n\t}\n\n\tdisconnectedCallback() {\n\t\tif (this.doNotDisconnect) return;\n\t\tthis.removeClaim(this);\n\t\tthis.uiManager.unregisterForResize(this);\n\t\tsuper.disconnectedCallback();\n\t}\n\n\t/**\n\t * Renders the close button on the dialog, if applicable\n\t *\n\t * @tsmember WebComponents.Dialog\n\t * @private\n\t */\n\t_renderCloseButton() {\n\t\tconst showCloseButton = this.getAttribute(\"cq-close-button\") !== \"false\";\n\t\tlet closeButtonEl = this.querySelector(\"cq-close\");\n\n\t\tif (showCloseButton && !closeButtonEl) {\n\t\t\t// TODO: make this a button element once everything else works\n\t\t\tcloseButtonEl = document.createElement(\"cq-close\");\n\t\t\tcloseButtonEl.setAttribute(\"role\", \"button\");\n\t\t\tcloseButtonEl.setAttribute(\"title\", \"Close\");\n\t\t\tcloseButtonEl.setAttribute(\"tabindex\", \"0\");\n\t\t\t// Close button is appended to the end so it is read last by screen readers. Visually,\n\t\t\t// it appears in the upper right corner.\n\t\t\tthis.append(closeButtonEl);\n\t\t} else if (!showCloseButton && closeButtonEl) {\n\t\t\tcloseButtonEl.remove();\n\t\t}\n\t}\n\n\t/**\n\t * Renders the title on the dialog, if applicable\n\t *\n\t * @return {HTMLElement} Element containing the title.\n\t * @tsmember WebComponents.Dialog\n\t * @private\n\t */\n\t_renderTitleElement() {\n\t\tconst title = this.getAttribute(\"cq-title\") || \"\";\n\t\tconst titleId = this.getAttribute(\"aria-labelledby\");\n\t\tlet titleEl = this.querySelector(\"#\" + titleId);\n\n\t\tif (!title && titleEl) titleEl.remove();\n\t\telse if (title) {\n\t\t\tif (!titleEl) {\n\t\t\t\ttitleEl = document.createElement(\"h4\");\n\t\t\t\ttitleEl.id = titleId;\n\t\t\t\tthis.prepend(titleEl);\n\t\t\t}\n\n\t\t\tif (this.context)\n\t\t\t\tCIQ.makeTranslatableElement(titleEl, this.context.stx, title);\n\t\t\telse titleEl.innerText = title;\n\t\t}\n\n\t\tif (titleEl) {\n\t\t\tlet sibling = titleEl.nextSibling;\n\t\t\tconst hasDesc = sibling && sibling.matches(\"p[id]\");\n\t\t\tconst description = this.getAttribute(\"cq-description\") || \"\";\n\t\t\tif (!description) {\n\t\t\t\tif (hasDesc) sibling.remove();\n\t\t\t} else {\n\t\t\t\tif (!hasDesc) {\n\t\t\t\t\tsibling = document.createElement(\"p\");\n\t\t\t\t\t// Add the description directly after the title\n\t\t\t\t\ttitleEl.parentElement.insertBefore(sibling, titleEl.nextSibling);\n\t\t\t\t}\n\t\t\t\tsibling.id = this.getAttribute(\"aria-describedby\");\n\t\t\t\tif (this.context)\n\t\t\t\t\tCIQ.makeTranslatableElement(sibling, this.context.stx, description);\n\t\t\t\telse sibling.innerHTML = description;\n\t\t\t}\n\t\t}\n\t\treturn titleEl;\n\t}\n\n\t/**\n\t * Forces a title change, even if the title is the same as before.\n\t * Use this method to change the title of the dialog rather than just changing the cq-title attribute;\n\t *\n\t * @param {string} title New title\n\t *\n\t * @tsmember WebComponents.Dialog\n\t */\n\tsetTitle(title) {\n\t\tthis.setAttribute(\"cq-title\", \"\");\n\t\tthis.setAttribute(\"cq-title\", title);\n\t}\n\n\t/**\n\t * Processes attribute changes. This is called whenever an observed attribute has changed.\n\t *\n\t * @param {string} name Attribute name\n\t * @param {string} oldValue Original attribute value\n\t * @param {string} newValue new Attribute value\n\t *\n\t * @tsmember WebComponents.Dialog\n\t */\n\thandlePropertyChange(name, oldValue, newValue) {\n\t\tif (newValue === oldValue) return;\n\t\tthis[name] = newValue;\n\t\tswitch (name) {\n\t\t\tcase \"cq-title\":\n\t\t\tcase \"cq-description\":\n\t\t\t\tthis._renderTitleElement();\n\t\t\t\treturn;\n\t\t\tcase \"cq-close-button\":\n\t\t\t\tthis._renderCloseButton();\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\t/**\n\t * Finds the first element in `items` that has a `cq-focused` attribute or a name attribute\n\t * that matches the value of `activeElementName`. If found, that element is focused.\n\t *\n\t * @tsmember WebComponents.Dialog\n\t */\n\trefreshFocus() {\n\t\tconst items = this.getKeyboardSelectableItems();\n\t\tlet focused = this.findFocused(items)[0];\n\t\tif (!focused)\n\t\t\tfocused = Array.from(items || []).find((item) =>\n\t\t\t\titem.matches(\"[name=\" + this.activeElementName + \"]\")\n\t\t\t);\n\t\tif (focused) this.focusItem(focused);\n\t}\n\n\t/**\n\t * Returns an array of dialog elements that are keyboard selectable.\n\t *\n\t * @return {NodeList} An array of DOM elements\n\t *\n\t * @tsmember WebComponents.Dialog\n\t */\n\tgetKeyboardSelectableItems() {\n\t\treturn this.querySelectorAll(\n\t\t\t\"[keyboard-selectable='true'], [tabindex='0'], input, .ciq-select, cq-swatch, .ciq-btn, .ciq-btn-negative, cq-scroll li, ul cq-item, .ciq-filter\"\n\t\t);\n\t}\n\n\t/**\n\t * Handle the keystroke event to keyboard navigate the dialog.\n\t * Tab and Enter are supported.\n\t *\n\t * @param {CIQ.UI.KeystrokeHub} hub The hub that processed the key\n\t * @param {string} key Key that was stroked\n\t * @param {Event} e The event object\n\t * @return {boolean} true if keystroke was processed\n\t *\n\t * @tsmember WebComponents.Dialog\n\t */\n\tkeyStroke(hub, key, e) {\n\t\tif (hub.tabActiveModals[0] !== this) return false;\n\t\tconst { shiftKey: reverse } = e || {};\n\n\t\tconst nativeTabbing = this.hasAttribute(\"native-tabbing\");\n\n\t\tconst items = this.getKeyboardSelectableItems();\n\t\tif (key === \"Tab\" && !nativeTabbing) {\n\t\t\tconst focused = this.focusNextItem(items, reverse, true);\n\t\t\tconst scroll = this.querySelector(\"cq-scroll\");\n\t\t\tif (focused && scroll) {\n\t\t\t\t// Scroll to the element that was focused\n\t\t\t\tscroll.scrollToElement(focused);\n\t\t\t\t// Let the scroll complete before aligning the highlight\n\t\t\t\tsetTimeout(() => hub.highlightAlign());\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else if (key == \"Enter\") {\n\t\t\tconst focused = this.findFocused(items)[0];\n\t\t\tif (focused) {\n\t\t\t\tthis.clickItem(focused, e, this);\n\t\t\t\tif (focused.tagName === \"INPUT\" && typeof focused.click === \"function\")\n\t\t\t\t\tfocused.click();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Hides the highlight on select because the study dialog contents re-render quite often, throwing off the highlight position (e.g. When a dropdown selection is made).\n\t * Called when dialog becomes keyboard navigable\n\t *\n\t * @tsmember WebComponents.Dialog\n\t */\n\tonKeyboardSelection() {\n\t\t// Pressing the tab key will re-focus the next appropriate item and helps the user re-orient themselves.\n\t\tthis.keyboardNavigation.highlightHide();\n\t}\n\n\t/**\n\t * If we're using keyboard navigation, returns the highlight to the tab selected element.\n\t * Called when dialog is no longer keyboard navigable.\n\t *\n\t * @tsmember WebComponents.Dialog\n\t */\n\tonKeyboardDeselection() {\n\t\tif (this.keyboardNavigation && this.keyboardNavigation !== null)\n\t\t\tthis.keyboardNavigation.highlightAlign();\n\t}\n\n\t/**\n\t * Click a keyboard selectable element.\n\t *\n\t * @param {HTMLElement} item Element to click.\n\t * @param {Event} e The keystroke event.\n\t * @param {HTMLElement} originationElement The keyboard active element which initiated the click.\n\t *\n\t * @tsmember WebComponents.Dialog\n\t */\n\tclickItem(item, e, originationElement) {\n\t\t// Pass control to the dropdown. Dropdowns within the dialog become detached from their\n\t\t// parent in the dom and cannot pass comtrol directly.\n\t\tif (item && this.keyboardNavigation) {\n\t\t\tconst dropdown = item.querySelector(\"cq-dropdown, cq-menu-dropdown\");\n\t\t\tif (dropdown) {\n\t\t\t\tdropdown.keyboardOriginationElement = originationElement;\n\t\t\t\tthis.keyboardNavigation.setKeyControlElement(dropdown);\n\t\t\t}\n\t\t}\n\t\tsuper.clickItem(item, e, this);\n\t}\n\n\t/**\n\t * Handle escape key press.\n\t *\n\t * @param {CIQ.UI.KeystrokeHub} hub The hub that processed the key.\n\t * @return {boolean} returns false if nothing was done.\n\t *\n\t * @tsmember WebComponents.Dialog\n\t */\n\tprocessEsc(hub) {\n\t\t// See if we need to use Esc to clean up the dialog\n\t\tif (this.closeActiveMenu()) {\n\t\t\t// If there's another modal available at position 0, set it as active\n\t\t\tif (hub.tabActiveModals[0])\n\t\t\t\thub.setKeyControlElement(hub.tabActiveModals[0]);\n\t\t\t// Returning true prevents the keyHub from processing esc.\n\t\t\treturn true;\n\t\t}\n\t\t// If nothing was done, pass false to process esc in the keyHub\n\t\treturn false;\n\t}\n\n\t/**\n\t * Close the active menu.\n\t *\n\t * @return {boolean} returns true if a menu was closed.\n\t *\n\t * @tsmember WebComponents.Dialog\n\t */\n\tcloseActiveMenu() {\n\t\tconst activeMenu = this.querySelector(\"*.stxMenuActive\");\n\t\tif (activeMenu) {\n\t\t\tconst uiManager = CIQ.UI.getUIManager(this);\n\t\t\tif (uiManager) uiManager.closeMenu(activeMenu);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Creates a new attribute to be activated when the dialog is open. Use this to style the dialog.\n\t * This is automatically set by any component that is derived from DialogContentTag.\n\t *\n\t * @param {string} attribute The attribute to add or remove\n\t * @since 4.1.0\n\t * @example\n\t * \n\t * \n\t *\n\t * @tsmember WebComponents.Dialog\n\t */\n\taddActiveAttribute(attribute) {\n\t\tthis.activeAttributes[attribute] = true;\n\t}\n\n\tcenter() {\n\t\treturn;\n\t}\n\n\t/**\n\t * Close the dialog and make it inactive. Calls the `onClose()` function if it is defined on this component.\n\t * @param {boolean} [propagate] True if child elements should also call onClose functions\n\t *\n\t * @tsmember WebComponents.Dialog\n\t */\n\tclose(propagate) {\n\t\tthis.uiManager.closeMenu(this);\n\t\tif (this.onClose) this.onClose(propagate);\n\t\tthis.parentElement.removeAttribute(\"cq-active\");\n\t}\n\n\t/**\n\t * Hide the dialog.\n\t *\n\t * @tsmember WebComponents.Dialog\n\t */\n\thide() {\n\t\tthis.enableMultichartColorPickerFloat(false);\n\t\tif (!this.active || this.querySelector(\":invalid\")) return;\n\t\tthis.active = false;\n\t\t// Call the \"hide()\" function for any immediate children. This will allow nested\n\t\t// components to clean themselves up when a dialog is removed from outside of their scope.\n\t\t[...this.children].forEach((child) => {\n\t\t\tif (typeof child.hide == \"function\") child.hide();\n\t\t});\n\t\tif (\n\t\t\tthis.uiManager.overlay &&\n\t\t\tthis.uiManager.overlay.hasAttribute(\"cq-active\")\n\t\t)\n\t\t\tthis.uiManager.overlay.removeAttribute(\"cq-active\");\n\t\t//this.uiManager.overlay=null;\n\t\tfor (let attribute in this.activeAttributes) {\n\t\t\tif (this.hasAttribute(attribute)) this.removeAttribute(attribute);\n\t\t}\n\t\tthis.activeAttributes = {};\n\n\t\t// blur any input boxes that are inside the dialog we're closing, to get rid of soft keyboard\n\t\t[...this.querySelectorAll(\"input\")].forEach((input) => {\n\t\t\tif (input == input.ownerDocument.activeElement) input.blur();\n\t\t});\n\n\t\t// Blur any focused elements\n\t\tthis.removeFocused();\n\t\t// Remove this dialog from the active index\n\t\tconst { keystrokeHub } = this.ownerDocument.body;\n\t\tif (keystrokeHub) keystrokeHub.removeActiveModal(this);\n\t\tthis.parentElement.removeAttribute(\"cq-active\");\n\t\tif (!this.matches(\"cq-color-picker\"))\n\t\t\tthis.ownerDocument.body.classList.remove(\"ciq-dialog-open\");\n\t\tthis.setAttribute(\"role\", \"dialog\");\n\t\tthis.ariaHidden = \"true\";\n\n\t\tif (\n\t\t\tdocument.activeElement.tagName !== \"INPUT\" &&\n\t\t\tdocument.activeElement.tagName !== \"TEXTAREA\"\n\t\t) {\n\t\t\tlet { caller } = this;\n\t\t\t// If a caller isn't set, jump back to the beginning\n\t\t\tif ((!caller || !caller.focus) && this.context)\n\t\t\t\tcaller = this.context.topNode.querySelector(\"cq-chart-instructions\");\n\n\t\t\twhile (caller && !CIQ.trulyVisible(caller)) caller = caller.parentElement;\n\t\t\tif (caller)\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (!caller.closest(\"[native-tabbing]\")) caller.tabIndex = -1;\n\t\t\t\t\tcaller.focus();\n\t\t\t\t}, 10);\n\t\t}\n\n\t\tthis.emitCustomEvent({\n\t\t\taction: null,\n\t\t\tcause: \"helper\",\n\t\t\teffect: \"hide\",\n\t\t\tdetail: {\n\t\t\t\ttitle: this[\"cq-title\"],\n\t\t\t\ttype: this.wraps\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Hook for launching color picker, it needs to close menus.\n\t *\n\t * @tsmember WebComponents.Dialog\n\t * @private\n\t */\n\tlaunchColorPicker() {\n\t\tif (this.uiManager) this.uiManager.closeMenu(null, \"CQ-MENU\");\n\t}\n\n\t/**\n\t * Open the dialog.\n\t *\n\t * @param {object} params Dialog parameters\n\t * @param {HTMLElement} params.caller The HTML element that triggered this dialog to open\n\t *\n\t * @tsmember WebComponents.Dialog\n\t */\n\topen(params) {\n\t\tthis.uiManager.openMenu(this, params);\n\t\t// Capture context to be able to later notify dialog closing in channel\n\t\tconst { context, caller } = params || {};\n\t\tthis.context = context;\n\t\tif (!context || !context.config) {\n\t\t\tthis.onClose = null;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.caller = caller || document.activeElement;\n\n\t\tconst {\n\t\t\tconfig: { channels },\n\t\t\tstx\n\t\t} = context;\n\n\t\tif (stx.translateUI) stx.translateUI(this);\n\n\t\tthis.onClose = (propagate) => {\n\t\t\tthis.channelWrite(channels.dialog || \"channel.dialog\", {}, stx);\n\t\t\tthis.onClose = null;\n\t\t\tif (!propagate) return;\n\t\t\t// If Dialog content has a hide method, call it.\n\t\t\t[...this.children].forEach((child) => {\n\t\t\t\tif (child.hide) child.hide();\n\t\t\t\tif (child.onClose) child.onClose();\n\t\t\t});\n\t\t};\n\t\tthis.parentElement.setAttribute(\"cq-active\", true);\n\t\tthis.ariaHidden = \"false\";\n\t\tif (!this.matches(\"cq-color-picker\")) {\n\t\t\tthis.ownerDocument.body.classList.add(\"ciq-dialog-open\");\n\t\t\t// The color picker will focus itself\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.tabIndex = -1;\n\t\t\t\tthis.focus();\n\t\t\t}, 10);\n\t\t}\n\t\tthis.emitCustomEvent({\n\t\t\taction: null,\n\t\t\tcause: \"helper\",\n\t\t\teffect: \"show\",\n\t\t\tdetail: {\n\t\t\t\ttitle: this[\"cq-title\"],\n\t\t\t\ttype: this.wraps\n\t\t\t}\n\t\t});\n\n\t\tthis.enableMultichartColorPickerFloat(true);\n\t}\n\n\t/**\n\t * Configure CSS layering to enable the color picker to float above the dialog.\n\t *\n\t * @param {boolean} [val=true] Setting \"val\" to false will restore the original style values of the element.\n\t *\n\t * @tsmember CIQ.UI.DialogContentTag\n\t * @since 9.3.0\n\t */\n\tenableMultichartColorPickerFloat(val) {\n\t\tconst tagName = (Object.entries(this.activeAttributes).find(\n\t\t\t([k, v]) => k !== \"cq-active\" && v\n\t\t) || [])[0];\n\t\tif (!tagName) return;\n\t\tif (tagName.includes(\"-context\")) return;\n\n\t\tdocument\n\t\t\t.querySelectorAll(\n\t\t\t\t\"cq-context-wrapper, .ciq-multi-chart-container-wrapper\"\n\t\t\t)\n\t\t\t.forEach((el) => (el.style.zIndex = val ? \"inherit\" : \"\"));\n\t\tdocument\n\t\t\t.querySelectorAll(\".ciq-multi-chart-container-wrapper\")\n\t\t\t.forEach((el) => (el.style.overflow = val ? \"visible\" : \"\"));\n\t}\n\n\t/**\n\t * Handles dialog resizing. Resizes child `cq-scroll` elements. Centers the dialog.\n\t *\n\t * @tsmember WebComponents.Dialog\n\t */\n\tresize() {\n\t\tconst scrollers = this.querySelectorAll(\"cq-scroll\");\n\t\t[...scrollers].forEach((scroller) => {\n\t\t\tif (scroller.resize) scroller.resize();\n\t\t});\n\t\tif (this.params && this.params.x) {\n\t\t\tthis.stxContextMenu();\n\t\t} else {\n\t\t\tthis.center();\n\t\t}\n\t}\n\n\t/**\n\t * Show the dialog. Use X,Y *screen location* (pageX, pageY from an event) for where to display context menus. If the context menu cannot fit on the screen then it will be adjusted leftward and upward\n\t * by enough pixels so that it shows.\n\t * @param {object} [params] Parameters\n\t * @param {Boolean} [params.bypassOverlay=false] If true will not display the scrim overlay\n\t * @param {Number} [params.x] X location of top left corner. Use for context menus, otherwise dialog will be centered.\n\t * @param {Number} [params.y] Y location of top left corner. Use for context menus, otherwise dialog will be centered.\n\t *\n\t * @tsmember WebComponents.Dialog\n\t */\n\tshow(params) {\n\t\tif (this.active) return;\n\t\tthis.params = params;\n\t\tif (!params) params = this.params = {};\n\t\tconst context = params.context || CIQ.UI.getMyContext(this);\n\t\tif (!this.uiManager.overlay && !params.bypassOverlay) {\n\t\t\tthis.uiManager.overlay = document.createElement(\"cq-dialog-overlay\");\n\t\t\tif (context) context.node.append(this.uiManager.overlay);\n\t\t}\n\t\tthis.active = true;\n\t\tconst timeoutFcn = () => {\n\t\t\t// to get the opacity transition effect\n\t\t\tif (this.uiManager.overlay && !params.bypassOverlay) {\n\t\t\t\tif (this.uiManager.overlay.getAttribute(\"cq-active\") !== \"true\")\n\t\t\t\t\tthis.uiManager.overlay.setAttribute(\"cq-active\", \"true\");\n\t\t\t}\n\t\t\tthis.activeAttributes[\"cq-active\"] = true; // cq-active is what css uses to display the dialog\n\t\t\tfor (let attribute in this.activeAttributes) {\n\t\t\t\tif (this.getAttribute(attribute) !== \"true\")\n\t\t\t\t\tthis.setAttribute(attribute, \"true\");\n\t\t\t}\n\t\t\tthis.resize();\n\t\t};\n\t\tsetTimeout(timeoutFcn.bind(this));\n\n\t\t// Add the theme class to the dialog. It exists outside of the theme context so it will not inherit the theme.\n\t\tif (context && context.config && context.config.themes) {\n\t\t\tconst themes = Object.keys(context.config.themes.builtInThemes);\n\t\t\t// First remove any existing theme classes on the dialog\n\t\t\tthis.classList.remove(...themes);\n\t\t\tconst activeTheme = themes.find(\n\t\t\t\t(r) => context.topNode.classList.contains(r) === true\n\t\t\t);\n\t\t\t// Add the active theme class to the dialog\n\t\t\tif (activeTheme) this.classList.add(activeTheme);\n\t\t}\n\n\t\t// Set this dialog as active for tab navigation\n\t\tconst { keystrokeHub } = this.ownerDocument.body;\n\t\tif (keystrokeHub) keystrokeHub.addActiveModal(this);\n\t}\n\n\t/**\n\t * Set context menu position to mouse location.\n\t *\n\t * @tsmember WebComponents.Dialog\n\t */\n\tstxContextMenu() {\n\t\tlet parent = this.parentElement;\n\t\tif (parent.tagName == \"BODY\") parent = window;\n\t\tconst gSz = CIQ.guaranteedSize(parent);\n\t\tconst w = gSz.width;\n\t\tconst h = gSz.height;\n\t\tconst outer = CIQ.elementDimensions(this, {\n\t\t\tpadding: 1,\n\t\t\tborder: 1\n\t\t});\n\t\tlet cw = outer.width;\n\t\tlet ch = outer.height;\n\t\tlet left = this.params.x;\n\t\tlet top = this.params.y;\n\t\tlet saveAdjustedPosition = false;\n\n\t\t[...this.querySelectorAll(\"cq-menu.stxMenuActive\")].forEach(\n\t\t\t(activeMenu) => {\n\t\t\t\tif (activeMenu.querySelector(\".context-menu-right\")) {\n\t\t\t\t\tconst siblings = [...activeMenu.parentNode.children];\n\t\t\t\t\tconst overlapItemCount =\n\t\t\t\t\t\tsiblings.length - siblings.indexOf(activeMenu);\n\n\t\t\t\t\tconst outerMenu = CIQ.elementDimensions(activeMenu, {\n\t\t\t\t\t\tpadding: 1,\n\t\t\t\t\t\tborder: 1\n\t\t\t\t\t});\n\t\t\t\t\tconst outerContext = CIQ.elementDimensions(\n\t\t\t\t\t\tactiveMenu.querySelector(\".context-menu-right\"),\n\t\t\t\t\t\t{ padding: 1, border: 1 }\n\t\t\t\t\t);\n\t\t\t\t\tcw += outer.width;\n\t\t\t\t\tch += outerContext.height - outerMenu.height * overlapItemCount;\n\t\t\t\t\tsaveAdjustedPosition = true;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\tconst insideChartContext = this.closest(\"cq-context\");\n\t\tconst leftOffset = insideChartContext\n\t\t\t? this.params.context.topNode.getBoundingClientRect().left\n\t\t\t: 0;\n\t\tconst topOffset = insideChartContext\n\t\t\t? this.params.context.topNode.getBoundingClientRect().top\n\t\t\t: 0;\n\n\t\tif (left - leftOffset + cw > w) left = leftOffset + (w - cw);\n\t\tif (top - topOffset + ch > h) top = topOffset + (h - ch);\n\t\tif (top < 0) top = 0;\n\t\tif (saveAdjustedPosition) {\n\t\t\tthis.params.x = left;\n\t\t\tthis.params.y = top;\n\t\t}\n\n\t\tObject.assign(this.style, {\n\t\t\ttop: `${top}px`,\n\t\t\tleft: `${left}px`,\n\t\t\t\"margin-top\": \"auto\"\n\t\t});\n\t}\n\n\t/**\n\t * Tap event handler for dialog.\n\t * Prevents touch and mouse events from propagating outside of the dialog.\n\t *\n\t * @param {Event} e tap event\n\t *\n\t * @tsmember WebComponents.Dialog\n\t */\n\ttap(e) {\n\t\tconst topMenu = this.uiManager.topMenu();\n\t\tif (topMenu === this) {\n\t\t\te.stopPropagation(); // prevent a tap inside the dialog from closing itself\n\t\t\treturn;\n\t\t}\n\t\tif (!e.currentTarget.active) {\n\t\t\te.stopPropagation(); // If the dialog we tapped on is closed, then we must have closed it manually. Don't allow a body tap otherwise we'll close two dialogs!\n\t\t}\n\t}\n}\n\nCIQ.UI.addComponentDefinition(\"cq-dialog\", Dialog);\n\n};\n\n\nlet __js_webcomponents_doubleSlider_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * Double range slider web component ``.\n *\n * A double slider has a thumb (slidable control) at each end of the slider track.\n *\n * This web component is an implementation of a low/high range slider. The left thumb sets the low\n * value of the slider; the right thumb, the high value.\n *\n * The value of the slider is an object specifying the high and low values. The component includes\n * a text readout of the values.\n *\n * **Attributes**\n * - min — Minimum value of the slider\n * - max — Maximum value of the slider\n * - low — Preset value for the left thumb\n * - high — Preset value for the right thumb\n * - step — The absolute amount (positive or negative) the movement of a thumb changes a\n * slider setting\n *\n * See the example below.\n *\n * @namespace WebComponents.cq-double-slider\n * @since 8.3.0\n *\n * @example\n * \n * Strike \n * \n */\nclass DoubleSlider extends CIQ.UI.BaseComponent {\n\tconnectedCallback() {\n\t\tif (!this.isConnected || this.attached) return;\n\t\tsuper.connectedCallback();\n\t\tthis.init();\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, DoubleSlider);\n\t\tthis.constructor = DoubleSlider;\n\t}\n\n\tinit() {\n\t\tthis.addDefaultMarkup();\n\t\tthis.textRange = this.querySelector(\".ciq-double-slider-text\");\n\t\tthis.lowSlider = this.querySelector(\n\t\t\t\".ciq-double-slider-range[range='low']\"\n\t\t);\n\t\tthis.highSlider = this.querySelector(\n\t\t\t\".ciq-double-slider-range[range='high']\"\n\t\t);\n\t\tthis.backing = this.querySelector(\"cq-double-slider-range\");\n\t\tthis.name = this.getAttribute(\"name\") || CIQ.uniqueID();\n\t\t[\"min\", \"max\", \"step\", \"low\", \"high\"].forEach((prop) => {\n\t\t\tif (this.hasAttribute(prop)) this[prop] = Number(this.getAttribute(prop));\n\t\t});\n\n\t\tthis.setBounds(this);\n\t\tconst self = this;\n\n\t\tfunction slide(slider, event) {\n\t\t\tlet value = slider.value;\n\t\t\tif (event) {\n\t\t\t\tconst touch = event.touches[0];\n\t\t\t\tconst boundingClientRect = self.highSlider.getBoundingClientRect();\n\t\t\t\tlet { height, width } = getComputedStyle(self.highSlider);\n\t\t\t\theight = parseFloat(height);\n\t\t\t\twidth = parseFloat(width);\n\t\t\t\tlet ratio = 1;\n\t\t\t\tif (height > width) {\n\t\t\t\t\tconst boundedOffset = Math.max(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tMath.min(height, touch.pageY - boundingClientRect.top)\n\t\t\t\t\t);\n\t\t\t\t\tratio = boundedOffset / height;\n\t\t\t\t} else {\n\t\t\t\t\tconst boundedOffset = Math.max(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tMath.min(width, touch.pageX - boundingClientRect.left)\n\t\t\t\t\t);\n\t\t\t\t\tratio = boundedOffset / width;\n\t\t\t\t}\n\t\t\t\tvalue = self.min + ratio * (self.max - self.min);\n\t\t\t}\n\t\t\t// If we are performing an initial slide, figure out whether we are closer to high or to low\n\t\t\tif (!self.whichSlider) {\n\t\t\t\tself.whichSlider =\n\t\t\t\t\tvalue * 2 >\n\t\t\t\t\t(isNaN(self.high) ? self.max : self.high) +\n\t\t\t\t\t\t(isNaN(self.low) ? self.min : self.low) +\n\t\t\t\t\t\t1\n\t\t\t\t\t\t? self.highSlider\n\t\t\t\t\t\t: self.lowSlider;\n\t\t\t}\n\t\t\tif (self.whichSlider === self.lowSlider) {\n\t\t\t\tself.low = self.lowSlider.value = Math.min(\n\t\t\t\t\ttypeof self.high === \"undefined\" ? self.max : self.high,\n\t\t\t\t\tvalue\n\t\t\t\t);\n\t\t\t} else if (self.whichSlider === self.highSlider) {\n\t\t\t\tself.high = self.highSlider.value = Math.max(\n\t\t\t\t\ttypeof self.low === \"undefined\" ? self.min : self.low,\n\t\t\t\t\tvalue\n\t\t\t\t);\n\t\t\t}\n\t\t\tself.setValue(self);\n\t\t}\n\n\t\t[this.highSlider, this.lowSlider].forEach((slider) => {\n\t\t\t[\"mousedown\", \"pointerdown\"].forEach((ev) => {\n\t\t\t\tslider.addEventListener(ev, (evt) => {\n\t\t\t\t\tself.whichSlider = null;\n\t\t\t\t});\n\t\t\t});\n\t\t\tslider.addEventListener(\"input\", () => slide(slider));\n\t\t\tif (CIQ.touchDevice) {\n\t\t\t\tslider.addEventListener(\n\t\t\t\t\t\"touchstart\",\n\t\t\t\t\t(evt) => {\n\t\t\t\t\t\tself.whichSlider = null;\n\t\t\t\t\t\tself.engaged = true;\n\t\t\t\t\t\tslide(slider, evt);\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpassive: false\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tslider.addEventListener(\n\t\t\t\t\t\"touchmove\",\n\t\t\t\t\t(evt) => {\n\t\t\t\t\t\tif (self.engaged) slide(slider, evt);\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpassive: false\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tslider.addEventListener(\n\t\t\t\t\t\"touchend\",\n\t\t\t\t\t(evt) => {\n\t\t\t\t\t\tself.engaged = false;\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpassive: false\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Sets the min, max, and step of the slider.\n\t *\n\t * @param {object} bounds Contains min, max, and step values.\n\t *\n\t * @alias setBounds\n\t * @memberof! WebComponents.cq-double-slider\n\t * @since 8.3.0\n\t */\n\tsetBounds(bounds) {\n\t\tArray.from(this.querySelectorAll('input[type=\"range\"]')).forEach((el) => {\n\t\t\t[\"min\", \"max\", \"step\"].forEach((prop) => {\n\t\t\t\tif (bounds[prop] || bounds[prop] === 0) {\n\t\t\t\t\tel.setAttribute(prop, bounds[prop]);\n\t\t\t\t\tthis[prop] = bounds[prop];\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tthis.updateVisual();\n\t}\n\n\t/**\n\t * Sets the high and low values of the slider.\n\t *\n\t * The high and low values are restricted to the range of the max and min.\n\t *\n\t * @param {object} [data] Contains high and low values.\n\t *\n\t * @alias setValue\n\t * @memberof! WebComponents.cq-double-slider\n\t * @since 8.3.0\n\t */\n\tsetValue(data) {\n\t\tconst obj = {};\n\t\tif (data) {\n\t\t\tif (data.low !== undefined) {\n\t\t\t\tobj.low =\n\t\t\t\t\tthis.min === undefined ? data.low : Math.max(this.min, data.low);\n\t\t\t}\n\t\t\tif (data.high !== undefined) {\n\t\t\t\tobj.high =\n\t\t\t\t\tthis.max === undefined ? data.high : Math.min(this.max, data.high);\n\t\t\t}\n\t\t}\n\t\tif (!CIQ.equals(this.value, obj)) this.value = obj;\n\t\tthis.low = obj.low;\n\t\tthis.high = obj.high;\n\t\tthis.updateVisual();\n\t}\n\n\t/**\n\t * Updates the slider view based on the slider attributes.\n\t *\n\t * @alias updateVisual\n\t * @memberof! WebComponents.cq-double-slider\n\t * @since 8.3.0\n\t */\n\tupdateVisual() {\n\t\tthis.setAttribute(\"min\", this.min);\n\t\tthis.setAttribute(\"max\", this.max);\n\t\tthis.setAttribute(\"low\", this.low);\n\t\tthis.setAttribute(\"high\", this.high);\n\t\tthis.setAttribute(\"step\", this.step);\n\n\t\tconst style = getComputedStyle(this.textRange);\n\t\tconst inColor = style.color;\n\t\tconst outColor = style.borderLeftColor;\n\t\tlet low = this.low;\n\t\tif (isNaN(low) || low < this.min) low = this.min;\n\t\tlet high = this.high;\n\t\tif (isNaN(high) || high > this.max) high = this.max;\n\t\tthis.lowSlider.value = low;\n\t\tthis.highSlider.value = high;\n\n\t\t// let input element do the rounding for us\n\t\tif (typeof low !== \"undefined\") low = Number(this.lowSlider.value);\n\t\tif (typeof high !== \"undefined\") high = Number(this.highSlider.value);\n\n\t\tconst min = low - this.min;\n\t\tconst max = high - this.min;\n\t\tthis.textRange.innerHTML = low + \"-\" + high;\n\t\tconst range = this.max - this.min;\n\t\tconst stop = [(min / range) * 100, (max / range) * 100];\n\t\tthis.backing.style.background = `linear-gradient(to right,\n\t\t\t${outColor} 0% ${stop[0]}%,\n\t\t\t${inColor} ${stop[0]}% ${stop[1]}%,\n\t\t\t${outColor} ${stop[1]}% 100%)`;\n\t}\n}\n\nDoubleSlider.markup = `\n\t\t\n\t\t\n\t\t\n\t\t\n`;\n\nCIQ.UI.addComponentDefinition(\"cq-double-slider\", DoubleSlider);\n\n};\n\n\nlet __js_webcomponents_drawingContext_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

    <cq-drawing-context>

    \n *\n * This component appears when a drawing is right-clicked. A menu of actions are displayed relevant to that drawing.\n *\n * _**Emitters**_\n *\n * A custom event will be emitted by the component when an action is clicked from the displayed menu.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"editsettings\", \"edittext\", \"clone\", remove\", \"layertop\", \"layerbottom\", \"layerup\", \"layerdown\", or other custom action |\n * | action | \"click\" |\n * | item | _object on which the action occurs, usually a study descriptor_ |\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * @alias WebComponents.DrawingContext\n * @extends CIQ.UI.DialogContentTag\n * @class\n * @protected\n * @since\n * - 6.2.0\n * - 9.1.0 Added emitter.\n */\nclass DrawingContext extends CIQ.UI.DialogContentTag {\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, DrawingContext);\n\t\tthis.constructor = DrawingContext;\n\t}\n\n\t/**\n\t * Open the context menu as a dialog.\n\t *\n\t * @param {Object} params\n\t * @param {number} params.x used to position the dialog\n\t * @param {number} params.y used to position the dialog\n\t * @param {CIQ.Drawing} params.drawing sets the `drawing` instance property\n\t * @param {CIQ.UI.Context} params.context passed to the components setContext method\n\t * @since 6.2.0\n\t *\n\t * @tsmember WebComponents.DrawingContext\n\t */\n\topen(params) {\n\t\tthis.addDefaultMarkup();\n\t\tthis.classList.add(\"ciq-context-menu\");\n\n\t\tthis.drawing = params.drawing;\n\t\tconst textEdit = this.node.find(\"[cq-edit-text]\");\n\t\tif (this.drawing.edit) {\n\t\t\ttextEdit.show();\n\t\t} else {\n\t\t\ttextEdit.hide();\n\t\t}\n\t\treturn super.open(params);\n\t}\n\n\t/**\n\t * Called after an stxtap event is fired.\n\t * Emits the event for the action performed.\n\t *\n\t * @param {string} effect What action was performed as a result of the stxtap event.\n\t *\n\t * @tsmember WebComponents.DrawingContext\n\t */\n\tpostProcess(effect) {\n\t\tthis.emitCustomEvent({\n\t\t\teffect,\n\t\t\tdetail: { item: this.drawing }\n\t\t});\n\t}\n}\n\n/**\n * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.DrawingContext\n */\nDrawingContext.markup = `\n\t\t
    Edit Text
    \n\t\t
    Edit Settings
    \n\t\t
    Clone Drawing
    \n\t\t\n\t\t\t\n\t\t\t\tBring to Top\n\t\t\t\tBring Forward\n\t\t\t\tSend Backward\n\t\t\t\tSend to Bottom\n\t\t\t\n\t\t\t\n\t\t\t
    Layer Management
    \n\t\t
    \n\t\t
    Delete Drawing
    \n\t`;\nCIQ.UI.addComponentDefinition(\"cq-drawing-context\", DrawingContext);\n\n};\n\n\nlet __js_webcomponents_dropdown_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

    <cq-dropdown>

    \n *\n * This component is a container of menu options which can be scrolled though and selected. The component is typically revealed\n * after a cq-menu component is opened. This component is usually nested within a `cq-menu` tag.\n * The items that are listed in the dropdown are specified in a configuration. See example below.\n * To bind the component's configuration, set its `config` attribute to an object in the {@link CIQ.UI.Context}.config.menus object.\n *\n * This component automatically allows for scrolling through its elements, when the size of the list exceeds the dropdown's dimensions.\n *\n * _**Attributes**_\n *\n * This component observes the following attributes and will change behavior if these attributes are modified:\n * | attribute | description |\n * | :---------- | :---------- |\n * | maximize | Set to true to have the dropdown extend in height to the height of the chart container even when there are not enough items in the dropdown to fill it. |\n * | noresize | Set to true to prevent resizing of dropdown. Otherwise, sizing is based on number of elements in the dropdown. |\n * | config | Key pointing to a component configuration entry which specifies the content items. |\n *\n * If no markup is specified in this component, a default markup will be provided. It is **strongly suggested** to allow the default markup\n * to be used. In order to use the default markup, the selections in the menu must be configured in the context configuration file and specified\n * by key in the `config` attribute. See example.\n *\n * _**Emitters**_\n *\n * A custom event will be emitted by the component when an item in the component is toggled, selected, or edited.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"toggle\", \"select\", \"edit\" |\n * | action | \"click\" |\n * | menu | _menu element which owns this component_ |\n * | params | _properties set in configuration object for the item specified by the action_ |\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * _**Configuration**_\n *\n * Configuration is accomplished by setting up an object within the context configuration's menus object. Each menu dropdown is assigned a unique name which is\n * itself an object property of the menus object. This property name is used as the value of the `config` attribute of the owning menu component.\n * Let's call the object containing the configuration `items`. `items` will contain a property called `content` whose value is an array.\n * Each array element is an object which represents one item in the dropdown. Let's call one of these array elements, `item`.\n * Each `item` has several properties which describe the nature of the dropdown item to display. The following table of properties describes what they mean.\n *\n * | property | description |\n * | :---------- | :---------- |\n * | type | Describes what type of item to display. Valid values are described in the table below. |\n * | label | Text to display. |\n * | className | Optional class name to apply to item. |\n * | active | Set to true to manually set the active state on the item. Note the active state is usually set with a bound value. |\n * | tap | Name of helper function to execute when item is clicked. |\n * | setget | Same as tap except used to bind values when `type` is `radio`, `switch`, or `checkbox`. |\n * | bind | Name of helper function to execute when binding has changed. This is not a common option. |\n * | options | Name of helper function to execute when clicking the options icon, which only appears when this prooperty is set. |\n * | iconCls | Optional class name of an icon to display on the item. |\n * | value | Array of arguments to pass to `tap`, `stxget`, or `bind` functions; or, name of component when `type=\"component\"`. |\n * | feature | Name of add-on to which this option belongs. If the add-on is not loaded, the option will not appear. |\n * | attributes | Object containiing attributes for a `type=\"component\"` item. |\n * | selector | Used to specify the selector for `type=\"clickable\"`. |\n * | method | Used to specify the method for `type=\"clickable\"`. |\n * | menuPersist | Normally menus close when selecting any item type besides `checkbox` or `switch`. Setting this property to \"true\" will keep the menu from closing after selection. |\n * | filterFor | A label to specify the element to filter. The element to filter must also have its `filter-name` attribute set to this value. If `filter-for` is omitted, will filter this element's next sibling. |\n * | filterMin | The number of filterable records below which the filter input will not appear. If omitted, filter input will never appear. |\n * | helpId | A key to the correct help text in CIQ.Help.Content. |\n *\n * Valid `type`s are described here:\n * | type | description |\n * | :-------- | :---------- |\n * | item | Standard text which when clicked will execute `tap` or `setget` action via a helper. |\n * | switch | Same as item except value is bound and displayed with a slider switch. |\n * | checkbox | Same as item except value is bound and displayed with a checkbox. |\n * | radio | Same as item except value is bound and displayed with a radio. |\n * | clickable | Embeds a `cq-clickable` which executes an action, usually opening a dialog. |\n * | heading | Unclickable text displayed in `

    ` tag. May be configured to allow filtering of another element's items. |\n * | template | Embeds markup specified with a `name` attribute equal to this component's `value` attribute. The markup to be embedded needs to be found in the document within a unique template which has the attribute `cq-dropdown-templates`. |\n * | component | Embeds a component specified by `value` with attributes specified by `attributes`. |\n * | separator | Unclickable horizontal line, used to separate two menu sections. |\n *\n * @example Dropdown tag:\n * \n * @example Sample configuration for the above dropdown tag:\n * stxx.uiContext.config.menus.example = {\n * \t\tcontent: [\n *\t\t\t{ type: \"radio\", label: \"Show Dynamic Callout\", setget: \"Layout.HeadsUp\", value: \"dynamic\" },\n *\t\t\t{ type: \"radio\", label: \"Show Tooltip\", setget: \"Layout.HeadsUp\", feature: \"tooltip\", value: \"floating\" }\n * \t\t]\n * };\n * @example Template example:\n * \n * \n *\n * @alias WebComponents.Dropdown\n * @extends CIQ.UI.BaseComponent\n * @class\n * @protected\n * @since\n * - 9.1.0 This new component supersedes `cq-menu-dropdown` component.\n */\nclass Dropdown extends CIQ.UI.BaseComponent {\n\tstatic get observedAttributes() {\n\t\treturn [\"maximize\", \"noresize\", \"config\"];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tCIQ.UI.makeShadow(this);\n\t}\n\n\tconnectedCallback() {\n\t\tif (!this.isConnected || this.attached) return;\n\t\tthis.handlesBinding = true;\n\t\tsuper.connectedCallback();\n\n\t\tif (this.isShadowComponent && this.children.length) {\n\t\t\tconst parent = document.createElement(\"div\");\n\t\t\tthis.root.appendChild(parent);\n\t\t\twhile (this.children.length) {\n\t\t\t\tparent.appendChild(this.firstChild);\n\t\t\t}\n\t\t} else if (!this.children.length) {\n\t\t\tconst ul = document.createElement(\"ul\");\n\t\t\tthis.root.appendChild(ul);\n\t\t}\n\n\t\tthis.contentRoot =\n\t\t\tthis.root.querySelector(\".content\") || this.root.firstChild;\n\t\tthis.contentRoot.classList.add(\"content\");\n\t\tthis.contentRoot.setAttribute(\"role\", \"menu\");\n\n\t\tthis.contentRoot.addEventListener(\"scroll\", (e) =>\n\t\t\tthis.highlightItem(e.currentTarget.querySelector(\"[cq-focused]\"))\n\t\t);\n\n\t\tthis.addClaim(this);\n\t\tthis.setupShadow();\n\n\t\tthis.owningMenu = CIQ.climbUpDomTree(this, \"cq-menu\", true)[0];\n\t\tthis.fireConfigChange();\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, Dropdown);\n\t\tthis.constructor = Dropdown;\n\t}\n\n\t/**\n\t * Sets up the binding for the dropdown item.\n\t *\n\t * @param {HTMLElement} elem Dropdown item to bind.\n\t * @param {string} evtType Type of event to emit when the item is clicked.\n\t *\n\t * @tsmember WebComponents.Dropdown\n\t */\n\tbind(elem, evtType) {\n\t\tif (!elem) return;\n\t\tif (elem.matches(\"[stxtap], [stxsetget], [stxbind]\")) {\n\t\t\tCIQ.UI.BaseComponent.scheduleForBinding(elem, this);\n\t\t}\n\t\tconst manualBinding = (e) => {\n\t\t\tif (Date.now() - elem.lastClick < 1000) return; // click following pointerup\n\t\t\telem.lastClick = Date.now();\n\t\t\tif (elem.matches(\".radio-item[stxtap]\")) {\n\t\t\t\tthis.contentRoot.querySelectorAll(\".radio-item\").forEach((sibling) => {\n\t\t\t\t\tif (sibling !== elem) {\n\t\t\t\t\t\tsibling.classList.remove(\"ciq-active\");\n\t\t\t\t\t\tsibling.ariaChecked = \"false\";\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\telem.classList.add(\"ciq-active\");\n\t\t\t\telem.ariaChecked = \"true\";\n\t\t\t}\n\t\t\tthis.emitCustomEvent({\n\t\t\t\teffect: evtType,\n\t\t\t\tdetail: {\n\t\t\t\t\tmenu: this.owningMenu,\n\t\t\t\t\tparams: elem.params\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t\t[\"mouseup\", \"touchend\", \"pointerup\", \"click\"].forEach((evt) =>\n\t\t\telem.addEventListener(evt, manualBinding)\n\t\t);\n\t}\n\n\t/**\n\t * Remove keyboard navigation when item is clicked and its owning menu is hidden.\n\t *\n\t * @tsmember WebComponents.Dropdown\n\t */\n\tdisablekeyboardNavigation() {\n\t\tif (this.keyboardNavigation) {\n\t\t\tthis.keyboardNavigation.setKeyControlElement();\n\t\t}\n\t\t// Remove focus from any selected menu item\n\t\tthis.removeFocused(this.root.querySelectorAll(\"[cq-focused]\"));\n\t}\n\n\t/**\n\t * Forces config attribute to change, even if the value of the config attribute didn't change.\n\t * This is useful if the underlying object representing the configuration did change.\n\t *\n\t * @tsmember WebComponents.Dropdown\n\t */\n\tfireConfigChange() {\n\t\tthis.handlePropertyChange(\"config\", this.config, \"\");\n\t\tthis.handlePropertyChange(\"config\", \"\", this.getAttribute(\"config\"));\n\t}\n\n\t/**\n\t * @private\n\t * @deprecated I cannot find the caller?\n\t *\n\t * @tsmember WebComponents.Dropdown\n\t */\n\tfocused() {\n\t\tconst focused = this.qsa(\"[cq-focused]\", this, true);\n\t\tif (focused.length) return focused[0];\n\t\treturn null;\n\t}\n\n\t/**\n\t * Processes attribute changes. This is called whenever an observed attribute has changed.\n\t *\n\t * @param {string} name Attribute name\n\t * @param {string} oldValue Original attribute value\n\t * @param {string} newValue new Attribute value\n\t *\n\t * @tsmember WebComponents.Dropdown\n\t */\n\thandlePropertyChange(name, oldValue, newValue) {\n\t\tif (oldValue === newValue) return;\n\t\tswitch (name) {\n\t\t\tcase \"config\":\n\t\t\t\tif (!this.attached) break;\n\t\t\t\tconst helper = CIQ.UI.BaseComponent.getHelper(this, \"MenuConfig\");\n\t\t\t\tif (!helper || !helper[newValue]) break;\n\t\t\t\tObject.assign(this, helper[newValue]);\n\t\t\t\tthis.config = newValue;\n\t\t\t\tthis.populate();\n\t\t\t\tbreak;\n\t\t\tcase \"maximize\":\n\t\t\tcase \"noresize\":\n\t\t\t\tthis[name] = newValue || newValue === \"true\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (this.attached) this.resize();\n\t}\n\n\t/**\n\t * Handler for keyboard interaction.\n\t * Arrow keys move around the dropdown, while `Space` or `Enter` will select.\n\t *\n\t * @param {CIQ.UI.KeystrokeHub} hub The hub that processed the key\n\t * @param {string} key Key that was stroked\n\t * @param {Event} e The event object\n\t * @return {boolean} true if keystroke was processed\n\t *\n\t * @tsmember WebComponents.Dropdown\n\t */\n\tkeyStroke(hub, key, e) {\n\t\tif (\n\t\t\t!this.keyboardNavigation &&\n\t\t\t!this.owningMenu.matches(\".stxMenuActive\")\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!CIQ.trulyVisible(this.contentRoot)) return false;\n\t\t/*if (this.keyboardNavigationWait && !this.keyboardNavigation) {\n\t\t\treturn;\n\t\t}*/\n\n\t\tconst items = this.qsa(\n\t\t\t\"[keyboard-selectable]:not(.item-hidden)\",\n\t\t\tthis.contentRoot,\n\t\t\ttrue\n\t\t);\n\n\t\tif (!items.length) return false;\n\t\tconst focused = this.findFocused(items);\n\n\t\tconst keyFn = (k) => {\n\t\t\treturn (\n\t\t\t\t{\n\t\t\t\t\t\" \": { fn: \"click\" },\n\t\t\t\t\tSpacebar: { fn: \"click\" },\n\t\t\t\t\tEnter: { fn: \"click\" },\n\t\t\t\t\tArrowDown: { fn: \"scroll\" },\n\t\t\t\t\tArrowUp: { fn: \"scroll\", rev: true },\n\t\t\t\t\tArrowLeft: { fn: \"select\", rev: true },\n\t\t\t\t\tArrowRight: { fn: \"select\" },\n\t\t\t\t\tDown: { fn: \"scroll\" },\n\t\t\t\t\tUp: { fn: \"scroll\", rev: true },\n\t\t\t\t\tLeft: { fn: \"select\", rev: true },\n\t\t\t\t\tRight: { fn: \"select\" }\n\t\t\t\t}[k] || {}\n\t\t\t);\n\t\t};\n\n\t\tswitch (keyFn(key).fn) {\n\t\t\tcase \"click\":\n\t\t\t\tif (!focused.length) return;\n\t\t\t\tconst childItemsSelected = focused[0].querySelectorAll(\n\t\t\t\t\t\"[keyboard-selectable-child][cq-focused]\"\n\t\t\t\t);\n\t\t\t\tif (childItemsSelected.length) this.clickItem(childItemsSelected[0], e);\n\t\t\t\telse this.clickItem(focused[0], e);\n\t\t\t\tbreak;\n\t\t\tcase \"scroll\":\n\t\t\t\tconst isRev = keyFn(key).rev;\n\t\t\t\tif (!this.focusNextItem(items, isRev) && isRev) {\n\t\t\t\t\tthis.contentRoot.scrollTop = 0;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"select\":\n\t\t\t\tif (!focused.length) return;\n\t\t\t\tconst childItems = focused[0].querySelectorAll(\n\t\t\t\t\t\"[keyboard-selectable-child]\"\n\t\t\t\t);\n\t\t\t\tif (childItems.length) {\n\t\t\t\t\tconst isRev = keyFn(key).rev;\n\t\t\t\t\tconst next = this.focusNextItem(childItems, isRev);\n\t\t\t\t\tif (isRev && !next) {\n\t\t\t\t\t\t// If the beginning of the child items has been reached select the parent item instead\n\t\t\t\t\t\tthis.removeFocused(childItems);\n\t\t\t\t\t\tthis.focusItem(focused[0]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Builds a dropdown item when the `type=\"component\"`. Called by {@link WebComponents.Dropdown#populate}.\n\t *\n\t * @param {string} name Component name.\n\t * @param {object} [attributes] attribute settings for the component.\n\t *\n\t * @tsmember WebComponents.Dropdown\n\t */\n\tmakeComponent(name, attributes) {\n\t\tconst stringifyAttributes = () => {\n\t\t\tif (!attributes || typeof attributes !== \"object\") return \"\";\n\t\t\tlet acc = \"\";\n\t\t\tfor (const key in attributes) {\n\t\t\t\tacc += ` ${key}`;\n\t\t\t\tif (attributes[key] != null) acc += `=\"${attributes[key]}\"`;\n\t\t\t}\n\t\t\treturn acc;\n\t\t};\n\t\treturn `<${name}${stringifyAttributes()}>`;\n\t}\n\n\t/**\n\t * If using keyboard navigation, return the highlight to the tab selected element.\n\t *\n\t * @tsmember WebComponents.Dropdown\n\t */\n\tonKeyboardDeselection() {\n\t\t// If we're using keyboard navigation, return the highlight to the tab selected element\n\t\tif (this.keyboardNavigation) this.keyboardNavigation.highlightPosition();\n\t}\n\n\t/**\n\t * Creates the dropdown items by parsing the configuration object and using the default markup to create each item.\n\t *\n\t * @tsmember WebComponents.Dropdown\n\t */\n\tpopulate() {\n\t\tconst contentArr = this.content;\n\t\tconst templateContainer = this.ownerDocument.querySelector(\n\t\t\t\"template[cq-dropdown-templates]\"\n\t\t);\n\t\tif (Array.isArray(contentArr)) {\n\t\t\twhile (this.contentRoot.firstChild) this.contentRoot.firstChild.remove();\n\t\t\tcontentArr.forEach((item) => {\n\t\t\t\tconst div = document.createElement(\"div\");\n\t\t\t\tif (item.type === \"template\" && templateContainer) {\n\t\t\t\t\tconst templates = CIQ.UI.makeFromTemplate(templateContainer);\n\t\t\t\t\titem.content = templates.find(`[name=${item.value}]`)[0].outerHTML;\n\t\t\t\t} else if (item.type === \"component\") {\n\t\t\t\t\titem.content = this.makeComponent(item.value, item.attributes);\n\t\t\t\t\titem.type = \"template\";\n\t\t\t\t}\n\t\t\t\tdiv.innerHTML = this.constructor.itemTemplate(item);\n\t\t\t\tconst menuItem = div.children[0];\n\t\t\t\tif (item.options) {\n\t\t\t\t\tconst ariaCheckedObserver = new MutationObserver((mutations) => {\n\t\t\t\t\t\tmutations.forEach((mutation) => {\n\t\t\t\t\t\t\tmenuItem.querySelector(\"[role=menuitemradio]\").ariaChecked =\n\t\t\t\t\t\t\t\tmutation.target.ariaChecked;\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\tariaCheckedObserver.observe(menuItem, {\n\t\t\t\t\t\tattributeFilter: [\"aria-checked\"]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis.contentRoot.appendChild(menuItem);\n\t\t\t\tif (\n\t\t\t\t\t!(\"menuPersist\" in item) &&\n\t\t\t\t\t[\"separator\", \"heading\", \"switch\"].includes(item.type)\n\t\t\t\t)\n\t\t\t\t\titem.menuPersist = true;\n\t\t\t\tmenuItem.params = item;\n\t\t\t\tthis.bind(menuItem, item.type === \"switch\" ? \"toggle\" : \"select\");\n\t\t\t\tthis.bind(menuItem.querySelector(\".options\"), \"edit\");\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Resizes a dropdown when the screen is resized, or even if the configuraton is reloaded to add or remove items.\n\t *\n\t * @tsmember WebComponents.Dropdown\n\t */\n\tresize() {\n\t\t/*share.js appends this class to the body.\n\t\t\tDo not attempt unnecessary resize of scroll\n\t\t\tfor a chart about to become a shared image.*/\n\t\tif (this.closest(\".sharing\")) return;\n\t\tif (this.noresize) return;\n\n\t\tconst { contentRoot } = this;\n\n\t\tconst { opacity, display } = this.style;\n\t\tObject.assign(this.style, { opacity: 0, display: \"block\" });\n\t\tconst { top } = contentRoot.getBoundingClientRect();\n\t\tconst { paddingTop, paddingBottom } = getComputedStyle(contentRoot);\n\t\tconst padding = CIQ.stripPX(paddingTop) + CIQ.stripPX(paddingBottom);\n\t\tObject.assign(this.style, { opacity, display });\n\t\t// defaulted to 45 to take into account 15px of padding on menus and then an extra 5px for aesthetics\n\t\tconst reduceMenuHeight = this.reduceMenuHeight || 45;\n\t\tlet contextHeight, contextTop;\n\t\t/*if (context && context.topNode) {\n\t\t\tconst contextRect = context.topNode.getBoundingClientRect();\n\t\t\tcontextHeight = contextRect.height;\n\t\t\tcontextTop = contextRect.top;\n\t\t} else {*/\n\t\t// Fallback to the window height if context element cannot be found\n\t\tcontextHeight = window.innerHeight;\n\t\tcontextTop = 0;\n\t\t//}\n\t\tif (!contextHeight) return;\n\t\tlet height =\n\t\t\tcontextHeight - (top - contextTop) - reduceMenuHeight - padding;\n\n\t\tconst holders = CIQ.climbUpDomTree(\n\t\t\tcontentRoot,\n\t\t\t\".stx-holder,.stx-subholder,.chartContainer\",\n\t\t\ttrue\n\t\t);\n\t\tif (holders.length) {\n\t\t\tholders.forEach((holder) => {\n\t\t\t\tconst holderBottom =\n\t\t\t\t\tholder.getBoundingClientRect().top +\n\t\t\t\t\tCIQ.elementDimensions(holder).height;\n\t\t\t\theight = Math.min(height, holderBottom - top - 5); // inside a holder we ignore reduceMenuHeight, but take off 5 pixels just for aesthetics\n\t\t\t});\n\t\t}\n\n\t\t// If there are subsequent siblings that have a fixed height then make room for them\n\t\t/*const nextAll = contentRoot.nextAll();\n\t\tfor (let i = 0; i < nextAll.length; i++) {\n\t\t\tconst sibling = nextAll[i];\n\t\t\tif (sibling && !CIQ.trulyVisible(sibling)) continue; // skip hidden siblings\n\t\t\theight -= CIQ.elementDimensions(sibling, {\n\t\t\t\tborder: 1,\n\t\t\t\tpadding: 1,\n\t\t\t\tmargin: 1\n\t\t\t}).height;\n\t\t}*/\n\t\tif (this.maximize) contentRoot.style.height = height + \"px\";\n\t\tcontentRoot.style[\"max-height\"] = height + \"px\";\n\n\t\tconst scrollImpl = this.scrollImplementation();\n\t\tif (!this.noscroll && scrollImpl) {\n\t\t\tcontentRoot.style.overflowY = \"auto\";\n\t\t\tscrollImpl.refresh(contentRoot);\n\t\t}\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent(\"refresh\", { detail: { node: contentRoot } })\n\t\t);\n\t}\n\n\t/**\n\t * Sets the active dropdown item to a certain location. The dropdown will scroll if necessary.\n\t *\n\t * @param {HTMLElement} item Element to scroll to.\n\t *\n\t * @tsmember WebComponents.Dropdown\n\t */\n\tscrollToElement(item) {\n\t\tconst { contentRoot } = this;\n\t\tconst { top: contentTop, bottom: contentBottom } =\n\t\t\tcontentRoot.getBoundingClientRect();\n\t\tconst { top, bottom } = item.getBoundingClientRect();\n\t\tif (top > contentTop && bottom < contentBottom) return;\n\t\tif (bottom >= contentBottom) {\n\t\t\tcontentRoot.scrollTop = Math.max(\n\t\t\t\tbottom - contentBottom + contentRoot.scrollTop,\n\t\t\t\t0\n\t\t\t);\n\t\t} else {\n\t\t\tcontentRoot.scrollTop = Math.max(\n\t\t\t\ttop - contentTop + contentRoot.scrollTop,\n\t\t\t\t0\n\t\t\t);\n\t\t}\n\t\tthis.resize();\n\t}\n\n\t/**\n\t * Gets the scroll implementation set in the UI configuration. This is used to scroll the dropdown, if found.\n\t *\n\t * @return The scrolling implementation\n\t *\n\t * @tsmember WebComponents.Dropdown\n\t */\n\tscrollImplementation() {\n\t\tconst context =\n\t\t\tCIQ.UI.shadowComponents.get(this) || this.closest(\"cq-context\");\n\t\tif (context && context.config) return context.config.scrollbarStyling;\n\t\treturn CIQ.UI.scrollbarStyling;\n\t}\n\n\t/**\n\t * Sets the focus on a specific item in the dropdown.\n\t *\n\t * @param {HTMLElement} selector Element to focus.\n\t *\n\t * @tsmember WebComponents.Dropdown\n\t */\n\tsetFocus(selector) {\n\t\tconst element = this.qsa(selector, this.contentRoot, true)[0];\n\t\tif (element) element.focus();\n\t}\n}\n\n/**\n * Default markup generator for an item's innerHTML. This function is called for each item in the dropdown.\n * Based on the parameters passed in, the appropriate markup is generated.\n * This function is called by {@link WebComponents.Dropdown#populate}.\n *\n * @param {Object} params\n * @param {String} params.type Type of item, e.g. `item`, `heading`, `switch`, etc.\n * @param {Boolean} [params.active] Active state of item (applied as `.ciq-active` class)\n * @param {String} [params.className] Class name of item\n * @param {String} [params.options] Helper function to execute when the options icon is clicked\n * @param {String} [params.feature] Name of add-on which when loaded, this item will become visible\n * @param {String} [params.helpId] Name associated with help for this item\n * @param {String} [params.iconCls] Class for the icon in the item\n * @param {String} [params.label] Text for the item\n * @param {String} [params.bind] Helper function for binding\n * @param {String} [params.tap] Helper function for tapping\n * @param {String} [params.setget] Helper function for tapping and binding\n * @param {String} [params.selector] For `clickable` type, target selector\n * @param {String} [params.method] For `clickable` type, target method name on the above selector\n * @param {Array|String} [params.value] Parameter(s) to pass to the `bind`, `tap`, or `setget` functions.\n * \t\t\t\t\tIf these aren't supplied, value will be stored in a `data` attribute.\n * \t\t\t\t\tThe value is always available in the `data-value` attribute.\n * @param {String} [params.content] For `template` type, the HTML corresponding to the template's name\n * @param {Number} [params.filterMin] For `heading` type, the minimum number of records to allow filtering\n * @param {String} [params.filterLabel] For `heading` type, the placeholder text that appears in the filter search input\n * @param {String} [params.filterFor] For `heading` type, the element to filter should have its `filter-name` attribute set to this parameter's value.\n *\n * @return {String} Markup for a single dropdown item.\n * @static\n *\n * @tsmember WebComponents.Dropdown\n */\nDropdown.itemTemplate = ({\n\ttype,\n\tactive,\n\tclassName,\n\toptions,\n\tfeature,\n\thelpId,\n\ticonCls,\n\tlabel,\n\tbind,\n\ttap,\n\tsetget,\n\tselector,\n\tmethod,\n\tvalue,\n\tcontent,\n\tfilterMin,\n\tfilterLabel,\n\tfilterFor\n}) => {\n\tconst classString = `${className ? `${className} ` : \"\"}${\n\t\tactive ? \"ciq-active \" : \"\"\n\t}`;\n\tconst params =\n\t\tvalue && value !== 0\n\t\t\t? Array.isArray(value)\n\t\t\t\t? value.map((i) => (typeof i === \"string\" ? `'${i}'` : i)).join()\n\t\t\t\t: `'${value}'`\n\t\t\t: \"\";\n\tconst role = options\n\t\t? \"group\"\n\t\t: {\n\t\t\t\tseparator: \"separator\",\n\t\t\t\theading: \"presentation\",\n\t\t\t\ttemplate: \"group\",\n\t\t\t\tclickable: \"presentation\",\n\t\t\t\tcheckbox: \"menuitemcheckbox\",\n\t\t\t\tswitch: \"menuitemcheckbox\",\n\t\t\t\tradio: \"menuitemradio\"\n\t\t }[type] || \"menuitem\";\n\tconst subrole =\n\t\t{\n\t\t\tcheckbox: \"menuitemcheckbox\",\n\t\t\tswitch: \"menuitemcheckbox\",\n\t\t\tradio: \"menuitemradio\"\n\t\t}[type] || \"menuitem\";\n\tconst tabbable = ![\"separator\", \"heading\", \"template\"].includes(type);\n\n\treturn `\n\t\t
  • \\\n\t\t\t${type === \"separator\" ? `
    ` : \"\"}\\\n\t\t\t${type === \"template\" ? `${content}` : \"\"}\\\n\t\t\t${\n\t\t\t\ttype === \"clickable\"\n\t\t\t\t\t? ``\n\t\t\t\t\t: \"\"\n\t\t\t}\\\n\t\t\t${\n\t\t\t\ttype === \"heading\"\n\t\t\t\t\t? `

    `\n\t\t\t\t\t: label\n\t\t\t\t\t? `
    \n\t\t\t\t\t\t${\n\t\t\t\t\t\t\ticonCls\n\t\t\t\t\t\t\t\t? ``\n\t\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t\t}\\\n\t\t\t\t\t\t${label}\n\t\t\t\t\t\t${\n\t\t\t\t\t\t\thelpId\n\t\t\t\t\t\t\t\t? `(Help available, press question mark key)\n\t\t\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t\t}\\\n\t\t\t\t\t\t${\n\t\t\t\t\t\t\toptions\n\t\t\t\t\t\t\t\t? `\n\t\t\t\t\t\t\t\t
    Set ${label} Options
    \n\t\t\t\t\t\t\t\t
    `\n\t\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t\t}\\\n\t\t\t\t\t\t\n\t\t\t\t
    `\n\t\t\t\t\t: \"\"\n\t\t\t}\\\n\t\t\t${type === \"clickable\" ? `
    ` : \"\"}\\\n\t\t
  • `;\n};\n\nCIQ.UI.addComponentDefinition(\"cq-dropdown\", Dropdown);\n\n};\n\n\nlet __js_webcomponents_fibSettingsDialog_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

    <cq-fib-settings-dialog>

    \n *\n * Additional dialog for setting fibonacci tool settings, specifically what levels will be shown for the fibonacci drawings.\n *\n * A custom event will be emitted from the component when any of its fields are changed.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"select\" |\n * | action | \"click\" |\n * | type | _fibonacci drawing type_ |\n * | levels | _comma-delimited list of displayed levels_ |\n *\n * @alias WebComponents.FibSettingsDialog\n * @extends CIQ.UI.DialogContentTag\n * @class\n * @protected\n * @since\n * - 3.0.9\n * - 9.1.0 Added emitter.\n */\nclass FibSettingsDialog extends CIQ.UI.DialogContentTag {\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, FibSettingsDialog);\n\t\tthis.constructor = FibSettingsDialog;\n\t}\n\n\t/**\n\t * Adds a custom fib level\n\t *\n\t * @tsmember WebComponents.FibSettingsDialog\n\t * @since 5.2.0\n\t */\n\tadd() {\n\t\tlet level = this.querySelector(\"[cq-custom-fibonacci-setting] input\").value;\n\t\tif (!level) return;\n\t\tlevel = parseFloat(level) / 100;\n\t\tif (isNaN(level)) return;\n\t\tconst defaultFibs =\n\t\t\tthis.context.stx.currentVectorParameters.fibonacci.fibs || [];\n\t\tlet fib, newFib;\n\t\tfor (let index = 0; index < defaultFibs.length; index++) {\n\t\t\tfib = defaultFibs[index];\n\t\t\tif (fib.level > level) {\n\t\t\t\tnewFib = CIQ.clone(fib);\n\t\t\t\tnewFib.level = level;\n\t\t\t\tnewFib.display = true;\n\t\t\t\tif (newFib.parameters) newFib.parameters.opacity = 0.25;\n\t\t\t\tdefaultFibs.splice(index, 0, newFib);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!newFib) {\n\t\t\tif (defaultFibs.length) fib = CIQ.clone(defaultFibs[0]);\n\t\t\telse\n\t\t\t\tfib = {\n\t\t\t\t\tcolor: \"auto\",\n\t\t\t\t\tparameters: { pattern: \"solid\", opacity: 0.25, lineWidth: 1 }\n\t\t\t\t};\n\t\t\tnewFib = CIQ.clone(fib);\n\t\t\tnewFib.level = level;\n\t\t\tnewFib.display = true;\n\t\t\tdefaultFibs.push(newFib);\n\t\t}\n\t\tthis.open();\n\t}\n\n\t/**\n\t * Fires a \"change\" event and closes the dialog.\n\t *\n\t * @tsmember WebComponents.FibSettingsDialog\n\t * @since 6.2.0\n\t */\n\tclose() {\n\t\tif (this.opener) {\n\t\t\tconst event = new Event(\"change\", {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: true\n\t\t\t});\n\n\t\t\tthis.opener.dispatchEvent(event);\n\t\t\tconst { currentVectorParameters } = this.context.stx;\n\t\t\tconst { fibonacci, vectorType } = currentVectorParameters;\n\t\t\tfibonacci.fibsAlreadySet = true;\n\t\t\tthis.emitCustomEvent({\n\t\t\t\teffect: \"save\",\n\t\t\t\tdetail: {\n\t\t\t\t\ttype: vectorType,\n\t\t\t\t\tlevels: fibonacci.fibs\n\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t(i) => i.display && (i.level >= 0 || vectorType != \"fibarc\")\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.map((i) => i.level)\n\t\t\t\t\t\t.join()\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tsuper.close();\n\t}\n\n\t/**\n\t * Opens the dialog.\n\t *\n\t * @param {Object} params Parameters\n\t * @param {HTMLElement} params.caller The HTML element that triggered this dialog to open\n\t *\n\t * @tsmember WebComponents.FibSettingsDialog\n\t */\n\topen(params) {\n\t\tthis.addDefaultMarkup();\n\t\tsuper.open(params);\n\t\tif (params) this.opener = params.caller;\n\t\tconst vectorParameters = this.context.stx.currentVectorParameters;\n\t\tconst { vectorType } = vectorParameters;\n\n\t\tconst dialog = this.closest(\"cq-dialog\");\n\n\t\t// clear the existing web components\n\t\tconst parameters = this.querySelectorAll(\n\t\t\t\"cq-fibonacci-settings > *:not(template)\"\n\t\t);\n\t\t[...parameters].forEach((el) => el.remove());\n\n\t\t// fibonacci type\n\t\tif (vectorParameters.fibonacci && vectorType != \"fibtimezone\") {\n\t\t\tdialog.setTitle(\"Fibonacci Settings\");\n\t\t\tconst defaultFibs = vectorParameters.fibonacci.fibs || [];\n\n\t\t\tdefaultFibs.forEach((fib) => {\n\t\t\t\t// no negative values for fibonacci arc\n\t\t\t\tif (vectorType === \"fibarc\" && fib.level < 0) return;\n\n\t\t\t\tconst newParam = CIQ.UI.makeFromTemplate(\n\t\t\t\t\tthis.querySelector(\"template\"),\n\t\t\t\t\tthis.querySelector(\"cq-fibonacci-settings\")\n\t\t\t\t)[0];\n\t\t\t\tconst convertPercent = fib.level * 100;\n\t\t\t\tnewParam.querySelector(\".ciq-heading\").innerText =\n\t\t\t\t\tconvertPercent.toFixed(1) + \"%\";\n\t\t\t\tconst paramInput = newParam.querySelector(\"input\");\n\n\t\t\t\tif (fib.display) {\n\t\t\t\t\tparamInput.checked = true;\n\t\t\t\t}\n\n\t\t\t\tthis.setChangeEvent(paramInput, \"fib\", fib.level);\n\t\t\t\tnewParam.querySelector(\".stx-data\").append(paramInput);\n\t\t\t});\n\t\t}\n\t\t// settings dialog default\n\t\telse {\n\t\t\tdialog.setTitle(\"Settings\");\n\t\t}\n\t\tthis.querySelector(\"[cq-custom-fibonacci-setting] input\").value = \"\";\n\t}\n\n\t/**\n\t * Sets up a handler to process changes to fields\n\t * @param {HTMLElement} node The input field\n\t * @param {string} section The section that is being updated\n\t * @param {string} name The name of the field being updated\n\t *\n\t * @tsmember WebComponents.FibSettingsDialog\n\t * @private\n\t */\n\tsetChangeEvent(node, section, item) {\n\t\tnode.addEventListener(\"change\", () => {\n\t\t\tconst vectorParameters = this.context.stx.currentVectorParameters;\n\t\t\tconst { vectorType } = vectorParameters;\n\n\t\t\t// fibonacci type\n\t\t\tif (vectorParameters.fibonacci && vectorType != \"fibtimezone\") {\n\t\t\t\tconst defaultFibs = vectorParameters.fibonacci.fibs || [];\n\t\t\t\tif (node.type == \"checkbox\") {\n\t\t\t\t\tdefaultFibs.forEach((fib) => {\n\t\t\t\t\t\tif (fib.level === item) {\n\t\t\t\t\t\t\tfib.display = node.checked ? true : false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Default markup for the comparison legend's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.FibSettingsDialog\n */\nFibSettingsDialog.markup = `\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t
    \n\t\t\t\t%\n\t\t\t\t
    Add
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t
    Done
    \n\t\t
    \n\t`;\nCIQ.UI.addComponentDefinition(\"cq-fib-settings-dialog\", FibSettingsDialog);\n\n};\n\n\nlet __js_webcomponents_floatingWindow_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

    <cq-floating-window>

    \n *\n * This component manages a \"floating window\" containing content.\n * A floating window can be moved around the screen within the boundaries of the context container.\n * It can also be resized on each edge and corner. Finally, it can be collapsed and expanded via its title bar.\n *\n * Note that the actually window contents are not found within the DOM of this component; rather, this component has a\n * \"windowImplementation\" which points to the actual DOM element containing the window.\n * The implementation is of the class {@link WebComponents.FloatingWindow.DocWindow}.\n *\n * @alias WebComponents.FloatingWindow\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n * @since\n * - 8.2.0\n * - 9.1.0 Observes attributes. Added emitter.\n */\nclass FloatingWindow extends CIQ.UI.ContextTag {\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, FloatingWindow);\n\t\tthis.constructor = FloatingWindow;\n\t}\n\n\t/**\n\t * Initializes the context of the floating window component. Dynamically adds a listener for\n\t * the \"floatingWindow\" event based on the `type` parameter of the event (see\n\t * [floatingWindowEventListener]{@link CIQ.ChartEngine~floatingWindowEventListener}).\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.FloatingWindow\n\t * @since 8.2.0\n\t */\n\tsetContext(context) {\n\t\tconst { stx } = context;\n\t\tif (!stx.callbackListeners.floatingWindow) {\n\t\t\tstx.callbackListeners.floatingWindow = [];\n\t\t}\n\n\t\tstx.addEventListener(\"floatingWindow\", (message) => {\n\t\t\tconst exec = this[\"on\" + CIQ.capitalize(message.type)];\n\t\t\tif (exec) {\n\t\t\t\texec.call(this, message);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * The listener for \"floatingWindow\" events where the `type` parameter of the event is\n\t * \"shortcut\" (see\n\t * [floatingWindowEventListener]{@link CIQ.ChartEngine~floatingWindowEventListener}).\n\t *\n\t * Creates and positions a floating window for keyboard shortcuts. This is a scrollable, informational window.\n\t *\n\t * @param {object} params Listener parameters.\n\t * @param {string} params.content The contents of the floating window, typically an HTML\n\t * \t\tstring.\n\t * @param {HTMLElement} [params.container] The DOM element that visually contains the floating\n\t * \t\twindow. The window is positioned on screen relative to the element (see\n\t * \t\t{@link WebComponents.FloatingWindow.DocWindow#positionRelativeTo}). Defaults to\n\t * \t\t`document.body`.\n\t * @param {string} [params.title] Text that appears in the title bar of the floating window.\n\t * @param {number} [params.width] The width of the floating window in pixels.\n\t * @param {boolean} [params.status] The state of the floating window: true, to open the\n\t * \t\twindow; false, to close it. If the parameter is not provided, the floating window is\n\t * \t\ttoggled (opened if closed, closed if open).\n\t * @param {string} [params.tag] A label that identifies the floating window type; for example,\n\t * \t\t\"shortcut\", which indicates that the floating window contains the keyboard shortcuts\n\t * \t\tlegend. See the `tag` parameter of\n\t * \t\t[floatingWindowEventListener]{@link CIQ.ChartEngine~floatingWindowEventListener}.\n\t * @param {function} [params.onClose] A callback to execute when the floating window is\n\t * \t\tclosed.\n\t *\n\t * @tsmember WebComponents.FloatingWindow\n\t * @since 8.2.0\n\t */\n\tonShortcut({ container, title, tag, content, width, status, onClose }) {\n\t\tif (this.shortcutWindow) {\n\t\t\tthis.shortcutWindow.toggle(status).ensureVisible();\n\t\t\treturn;\n\t\t}\n\t\tthis.shortcutWindow = this.constructor.windowImplementation.get({\n\t\t\ttag,\n\t\t\tcontent: content,\n\t\t\ttitle,\n\t\t\tcontainer: container || document.body,\n\t\t\tonClose\n\t\t});\n\n\t\tthis.shortcutWindow.titleBarEl.setAttribute(\n\t\t\t\"title\",\n\t\t\t\"Keyboard Shortcut Guide. \" +\n\t\t\t\tthis.shortcutWindow.titleBarEl.getAttribute(\"title\")\n\t\t);\n\n\t\tthis.shortcutWindow.toggle(true).update({ width }).positionRelativeTo();\n\t}\n\n\t/**\n\t * The listener for \"floatingWindow\" events where the `type` parameter of the event is\n\t * \"documentation\" (see\n\t * [floatingWindowEventListener]{@link CIQ.ChartEngine~floatingWindowEventListener}).\n\t *\n\t * Creates and positions a floating window for feature help documentation. There is a buton in the window to activate the feature.\n\t *\n\t * @param {object} params Listener parameters.\n\t * @param {string} params.content The contents of the floating window, typically an HTML\n\t * \t\tstring.\n\t * @param {HTMLElement} [params.container] The DOM element that visually contains the floating\n\t * \t\twindow. The window is positioned on screen relative to the element (see\n\t * \t\t{@link WebComponents.FloatingWindow.DocWindow#positionRelativeTo}). Defaults to\n\t * \t\t`document.body`.\n\t * @param {string} [params.title] Text that appears in the title bar of the floating window.\n\t * @param {number} [params.width] The width of the floating window in pixels.\n\t * @param {HTMLElement} [params.targetElement] Element to set focus on when window is closed.\n\t * @param {object[]} [params.actionButtons] Properties of the buttons which enable the feature.\n\t * @param {string} [params.actionButtons.label] Text for the button.\n\t * @param {string|function} [params.actionButtons.action] What happens when button is pressed.\n\t * If \"close\", will close the window; if a function, will call that function.\n\t * @param {string} [params.tag] A label that identifies the floating window type; for example,\n\t * \t\t\"shortcut\", which indicates that the floating window contains the keyboard shortcuts\n\t * \t\tlegend. See the `tag` parameter of\n\t * \t\t[floatingWindowEventListener]{@link CIQ.ChartEngine~floatingWindowEventListener}.\n\t * @param {function} [params.onClose] A callback to execute when the floating window is\n\t * \t\tclosed.\n\t *\n\t * @tsmember WebComponents.FloatingWindow\n\t * @since 8.2.0\n\t */\n\tonDocumentation({\n\t\tcontainer,\n\t\ttitle,\n\t\ttag,\n\t\tcontent,\n\t\ttargetElement,\n\t\tactionButtons,\n\t\twidth,\n\t\tonClose\n\t}) {\n\t\tfunction processButtonAction(action, documentationWindow) {\n\t\t\treturn () => {\n\t\t\t\tif (action === \"close\") {\n\t\t\t\t\tdocumentationWindow.toggle(false);\n\t\t\t\t} else if (typeof action === \"function\") {\n\t\t\t\t\taction();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tthis.documentationWindow = this.constructor.windowImplementation.get({\n\t\t\ttag,\n\t\t\tcontent: content + \"
    \",\n\t\t\ttitle,\n\t\t\tcontainer: container || document.body,\n\t\t\tonClose\n\t\t});\n\n\t\tthis.documentationWindow.targetElement = targetElement;\n\n\t\tconst actionButtonContainer = document.createElement(\"div\");\n\t\tactionButtonContainer.classList.add(\"ciq-window-actions\");\n\t\tthis.documentationWindow.bodyEl.appendChild(actionButtonContainer);\n\n\t\t// Add action buttons\n\t\tfor (let buttonData of actionButtons) {\n\t\t\tconst actionButton = document.createElement(\"button\");\n\t\t\tactionButton.innerText = buttonData.label;\n\t\t\tactionButton.style.marginTop = \"1em\";\n\t\t\tactionButton.style.marginRight = \"1em\";\n\t\t\tactionButton.classList.add(\"ciq-btn\");\n\t\t\tCIQ.safeClickTouch(\n\t\t\t\tactionButton,\n\t\t\t\tprocessButtonAction(buttonData.action, this.documentationWindow)\n\t\t\t);\n\t\t\tactionButtonContainer.appendChild(actionButton);\n\t\t}\n\n\t\tif (this.context.stx.translateUI)\n\t\t\tthis.context.stx.translateUI(this.documentationWindow.w);\n\n\t\tthis.documentationWindow.titleBarEl.setAttribute(\n\t\t\t\"title\",\n\t\t\t\"Help window. \" +\n\t\t\t\tthis.documentationWindow.titleBarEl.getAttribute(\"title\")\n\t\t);\n\n\t\tthis.documentationWindow\n\t\t\t.toggle(true)\n\t\t\t.update({ width })\n\t\t\t.positionRelativeTo();\n\t}\n}\n\n/**\n * The window implementation of the [cq-floating-window]{@link WebComponents.FloatingWindow}\n * web component.\n *\n * @alias WebComponents.FloatingWindow.DocWindow\n * @class\n * @protected\n * @since 8.2.0\n */\nclass DocWindow {\n\t/**\n\t * Creates the floating window DOM element and binds event handlers to the window.\n\t *\n\t * @param {object} params Constructor parameters.\n\t * @param {string} params.content The contents of the floating window, typically an HTML\n\t * \t\tstring.\n\t * @param {HTMLElement} [params.container] The DOM element that visually contains the floating\n\t * \t\twindow. The window is positioned on screen relative to the container element.\n\t * @param {string} [params.title] Text that appears in the title bar of the floating window.\n\t * @param {string} [params.tag] A label that identifies the floating window type; for example,\n\t * \t\t\"shortcut\", which indicates that the floating window contains the keyboard shortcuts\n\t * \t\tlegend.\n\t * @param {number} [params.minWidth] The minimum width of the floating window.\n\t * @param {number} [params.minHeight] The minimum height of the floating window.\n\t * @param {function} [params.onClose] A callback function to execute when the floating window\n\t * \t\tcloses.\n\t *\n\t * @tsmember WebComponents.FloatingWindow.DocWindow\n\t * @private\n\t * @since 8.2.0\n\t */\n\tconstructor({\n\t\tcontent,\n\t\ttitle,\n\t\ttag,\n\t\tminWidth,\n\t\tminHeight,\n\t\tcontainer,\n\t\tonClose\n\t}) {\n\t\tconst w = document.createElement(\"div\");\n\t\tw.innerHTML = this.constructor.markup;\n\t\tw.classList.add(\"ciq-window\");\n\t\t(container.ownerDocument || document).body.append(w);\n\t\tw.tag = tag;\n\t\tw.docWindow = this;\n\t\tObject.assign(this, {\n\t\t\tisDragging: false,\n\t\t\tisResizing: false,\n\t\t\tisOpen: false,\n\t\t\txDiff: 0,\n\t\t\tyDiff: 0,\n\t\t\tx: 50,\n\t\t\ty: 50,\n\t\t\tw\n\t\t});\n\t\tthis.bindEvents();\n\n\t\tconst closestContextContainer = CIQ.UI.closestContextContainer(container);\n\t\tif (closestContextContainer && closestContextContainer.currentTheme) {\n\t\t\tw.classList.add(closestContextContainer.currentTheme);\n\t\t\tconst { stx } = closestContextContainer.CIQ.UI.context;\n\t\t\tstx.addEventListener(\"theme\", () => {\n\t\t\t\tw.className = `ciq-window ${closestContextContainer.currentTheme}`;\n\t\t\t});\n\t\t}\n\n\t\tthis.titleEl = w.querySelector(\".ciq-window-title\");\n\t\tthis.bodyEl = w.querySelector(\".ciq-window-body\");\n\t\tthis.titleBarEl = w.querySelector(\".ciq-window-bar\");\n\n\t\tthis.setProps({ title, content, minWidth, minHeight, container, onClose });\n\t\tthis.render();\n\t}\n\n\t/**\n\t * Stores the function parameters as properties of the floating window object.\n\t *\n\t * @param {object} params Parameters to store as properties.\n\t * @param {string} [params.title] Text that appears in the title bar of the floating window.\n\t * @param {string} [params.content] The contents of the floating window, typically an HTML\n\t * \t\tstring.\n\t * @param {HTMLElement} [params.container] The DOM element that visually contains the floating\n\t * \t\twindow. The window is positioned on screen relative to the container element (see\n\t * \t\t[positionRelativeTo]{@link WebComponents.FloatingWindow.DocWindow#positionRelativeTo}).\n\t * @param {number} [params.minWidth] The minimum width of the floating window.\n\t * @param {number} [params.minHeight] The minimum height of the floating window.\n\t * @param {function} [params.onClose] A callback function to execute when the floating windows\n\t * \t\tcloses.\n\t *\n\t * @tsmember WebComponents.FloatingWindow.DocWindow\n\t * @since 8.2.0\n\t */\n\tsetProps({ title, content, minWidth, minHeight, container, onClose }) {\n\t\tconst { w, titleEl, bodyEl } = this;\n\t\ttitleEl.removeAttribute(\"cq-translate-original\");\n\t\tbodyEl.removeAttribute(\"cq-translate-original\");\n\t\tif (title !== undefined) titleEl.textContent = title;\n\t\tif (content !== undefined) bodyEl.innerHTML = content;\n\t\tif (minWidth !== undefined) w.style.minWidth = minWidth + \"px\";\n\t\tif (minHeight !== undefined) w.style.minHeight = minHeight + \"px\";\n\t\tif (container) this.container = container;\n\t\tif (onClose !== undefined) this.onClose = onClose;\n\t}\n\n\t/**\n\t * Adds event listeners to the floating window.\n\t *\n\t * The listeners enable the window to be moved, resized, collapsed/expanded, and closed.\n\t *\n\t * @tsmember WebComponents.FloatingWindow.DocWindow\n\t * @since 8.2.0\n\t */\n\tbindEvents() {\n\t\tconst { w } = this;\n\t\tconst qs = (path) => w.querySelector(path);\n\n\t\tqs(\".ciq-window-bar\").addEventListener(\n\t\t\t\"mousedown\",\n\t\t\tthis.onStartDrag.bind(this)\n\t\t);\n\n\t\tconst toggleCollapse = this.toggleCollapse.bind(this);\n\t\tqs(\".ciq-window-bar\").addEventListener(\"dblclick\", toggleCollapse);\n\t\tqs(\".ciq-window-collapse\").addEventListener(\"click\", toggleCollapse);\n\n\t\tconst resizeControls = (\n\t\t\t\"top, right, bottom, left, \" +\n\t\t\t\"top-right, bottom-right, bottom-left, top-left\"\n\t\t).split(/, /);\n\t\tresizeControls.forEach((control) => {\n\t\t\tqs(`.ciq-window-resize-${control}`).addEventListener(\n\t\t\t\t\"mousedown\",\n\t\t\t\tstartResize(this)\n\t\t\t);\n\t\t});\n\t\tw.ownerDocument.addEventListener(\"mousemove\", this.onMouseMove.bind(this));\n\t\tw.ownerDocument.addEventListener(\"mouseup\", this.onMouseUp.bind(this));\n\n\t\tqs(\".ciq-window-close\").addEventListener(\n\t\t\t\"click\",\n\t\t\tthis.toggle.bind(this, false)\n\t\t);\n\n\t\tw.ownerDocument.defaultView.addEventListener(\n\t\t\t\"resize\",\n\t\t\tthis.ensureVisible.bind(this)\n\t\t);\n\n\t\tfunction startResize(self) {\n\t\t\treturn (e) => {\n\t\t\t\tif (e.button !== 0) return;\n\t\t\t\tCIQ.extend(self, {\n\t\t\t\t\tisResizing: e.target.className.replace(/ciq-window-resize-/, \"\"),\n\t\t\t\t\tdownX: e.pageX,\n\t\t\t\t\tdownY: e.pageY,\n\t\t\t\t\tstartWidth: self.width,\n\t\t\t\t\tstartHeight: self.height,\n\t\t\t\t\tstartLeft: self.x,\n\t\t\t\t\tstartTop: self.y\n\t\t\t\t});\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\t * Updates properties of the floating window.\n\t *\n\t * @param {object} params Floating window properties.\n\t * @param {number} [params.x] The horizontal position of the floating window in pixels.\n\t * @param {number} [params.y] The vertical position of the floating window in pixels.\n\t * @param {number} [params.width] The width of the floating window in pixels.\n\t * @param {number} [params.height] The height of the floating window in pixels.\n\t *\n\t * @tsmember WebComponents.FloatingWindow.DocWindow\n\t * @since 8.2.0\n\t */\n\tupdate({ x, y, width, height }) {\n\t\tObject.assign(this, { x, y, width, height });\n\t\tthis.render();\n\t\treturn this;\n\t}\n\n\t/**\n\t * Positions the floating window relative to the\n\t * \n\t * DOMRect of a DOM element.\n\t *\n\t * @param {object} params Positioning parameters.\n\t * @param {HTMLElement} [params.container] The DOM element relative to which the floating\n\t * \t\twindow is positioned. Defaults to the `container` parameter of the\n\t * \t\t[floatingWindowEventListener]{@link CIQ.ChartEngine~floatingWindowEventListener} or,\n\t * \t\tif the `container` parameter is not available, `document.body`.\n\t * @param {string} [params.location=\"center\"] The location of the floating window within the\n\t * \t\tcontainer element's bounding rectangle. If the value is \"center\" (the default), the\n\t * \t\tfloating window is centered horizontally and vertically within the container\n\t * \t\trectangle. Otherwise, the window is positioned in the upper left corner of the\n\t * \t\trectangle.\n\t *\n\t * @tsmember WebComponents.FloatingWindow.DocWindow\n\t * @since 8.2.0\n\t */\n\tpositionRelativeTo({ container, location = \"center\" } = {}) {\n\t\tconst { x, y, width, height } = (\n\t\t\tcontainer ||\n\t\t\tthis.container ||\n\t\t\tdocument.body\n\t\t).getBoundingClientRect();\n\n\t\tconst scrollTop = this.w.ownerDocument.documentElement.scrollTop;\n\t\tconst scrollLeft = this.w.ownerDocument.documentElement.scrollLeft;\n\n\t\tif (this.width > width - 20) this.width = width - 20;\n\t\tif (this.height > height - 20) this.height = height - 20;\n\n\t\tif (location === \"center\") {\n\t\t\tthis.x = scrollLeft + (x + width / 2 - this.width / 2);\n\t\t\tthis.y = scrollTop + (y + height / 2 - this.height / 2);\n\t\t}\n\n\t\tthis.render();\n\t\treturn this;\n\t}\n\n\t/**\n\t * Repositions the floating window (if necessary) when the display is resized to keep the\n\t * window within the document view.\n\t *\n\t * @tsmember WebComponents.FloatingWindow.DocWindow\n\t * @since 8.2.0\n\t */\n\tensureVisible() {\n\t\tif (!this.isOpen) return;\n\t\tconst { x, y, width } = this.w.getBoundingClientRect();\n\t\tconst { innerWidth, innerHeight } = this.w.ownerDocument.defaultView;\n\n\t\tif (y > innerHeight - 20) {\n\t\t\tthis.y = innerHeight - 20;\n\t\t}\n\t\tif (x > innerWidth - width) {\n\t\t\tthis.x = innerWidth - width;\n\t\t}\n\t\tthis.render();\n\t}\n\n\t/**\n\t * Renders the position updates and open/close, dragging, and resizing state changes made to\n\t * the floating window by other methods of this class.\n\t *\n\t * @tsmember WebComponents.FloatingWindow.DocWindow\n\t * @private\n\t * @since 8.2.0\n\t */\n\trender() {\n\t\tconst { x, y } = this;\n\t\tObject.assign(this.w.style, {\n\t\t\tdisplay: this.isOpen ? \"\" : \"none\",\n\t\t\ttransform: \"translate(\" + x + \"px, \" + y + \"px)\"\n\t\t});\n\t\tthis.w.classList.toggle(\n\t\t\t\"ciq-wdragging\",\n\t\t\tthis.isDragging || this.isResizing\n\t\t);\n\t}\n\n\tget width() {\n\t\treturn this.w.offsetWidth;\n\t}\n\tset width(value) {\n\t\tif (value) {\n\t\t\tthis.w.style.width = value + \"px\";\n\t\t}\n\t}\n\n\tget height() {\n\t\treturn this.w.offsetHeight;\n\t}\n\tset height(value) {\n\t\tif (value) {\n\t\t\tthis.w.style.height = value + \"px\";\n\t\t}\n\t}\n\n\t/**\n\t * Helper function that constrains the floating window to the document view when the window\n\t * is dragged horizontally.\n\t *\n\t * Clamps the horizontal position of the floating window between 0 (so the window cannot be\n\t * dragged off the left side of the view) and the width of the document view minus the width\n\t * of the floating window (so the window cannot be dragged off the right side of the view).\n\t *\n\t * @param {number} value The position of the mouse relative to the left edge of the floating\n\t * \t\twindow.\n\t * @return {number} The value for the clamped horizontal position of the floating window:\n\t * - `value` if `value` is greater than 0 and less than the width of the document view minus\n\t * the width of the floating window\n\t * - 0 if `value` is less than 0\n\t * - The width of the document view minus the width of the floating window if `value` is\n\t * greater than the width of the document view minus the width of the floating window\n\t *\n\t * @tsmember WebComponents.FloatingWindow.DocWindow\n\t * @since 8.2.0\n\t */\n\tclampX(value) {\n\t\treturn Math.min(\n\t\t\tMath.max(value, 0),\n\t\t\tthis.w.ownerDocument.defaultView.innerWidth - this.w.offsetWidth\n\t\t);\n\t}\n\n\t/**\n\t * Helper function that constrains the floating window to the document view when the window\n\t * is dragged vertically.\n\t *\n\t * Clamps the vertical position of the floating window between 0 (so the window cannot be\n\t * dragged off the top of the view) and the height of the document view minus the height of\n\t * the floating window title bar and a margin (so the window title bar cannot be dragged off\n\t * the bottom of the view).\n\t *\n\t * @param {number} n The position of the mouse relative to the top edge of the floating window.\n\t * @return {number} The value for the clamped vertical position of the floating window:\n\t * - `n` if `n` is greater than 0 and less than the height of the document view minus the\n\t * height of the floating window title bar and margin\n\t * - 0 if `n` is less than 0\n\t * - The height of the document view minus the height of the floating window title bar and\n\t * margin if `n` is greater than the height of the document view minus the height of the\n\t * floating window title bar and margin\n\t *\n\t * @tsmember WebComponents.FloatingWindow.DocWindow\n\t * @since 8.2.0\n\t */\n\tclampY(n) {\n\t\tconst margin = 8;\n\t\treturn Math.min(\n\t\t\tMath.max(n, 0),\n\t\t\tthis.w.ownerDocument.defaultView.innerHeight -\n\t\t\t\tthis.titleBarEl.offsetHeight -\n\t\t\t\tmargin\n\t\t);\n\t}\n\n\t/**\n\t * The event listener for mouse move events that occur when a floating window is being dragged\n\t * or resized.\n\t *\n\t * Moves or resizes the floating window.\n\t *\n\t * @param {MouseEvent} e The\n\t * \t\t\n\t * \t\tmouse event object.\n\t *\n\t * @tsmember WebComponents.FloatingWindow.DocWindow\n\t * @since 8.2.0\n\t */\n\tonMouseMove(e) {\n\t\tconst { isDragging, isResizing } = this;\n\n\t\tif (!isDragging && !isResizing) return;\n\n\t\tconst xDiff = e.pageX - this.downX;\n\t\tconst yDiff = e.pageY - this.downY;\n\n\t\tif (isDragging) {\n\t\t\tthis.x = this.clampX(xDiff);\n\t\t\tthis.y = this.clampY(yDiff);\n\t\t}\n\t\tconst { startWidth, startHeight } = this;\n\t\tconst margin = 2;\n\t\tlet height, width;\n\n\t\tif (/left/.test(isResizing)) {\n\t\t\twidth = this.startWidth - xDiff;\n\t\t\tthis.width = width;\n\t\t\tthis.x = this.startLeft + xDiff;\n\t\t}\n\n\t\tif (/top/.test(isResizing)) {\n\t\t\theight = this.startHeight - yDiff;\n\t\t\tthis.height = height;\n\t\t\tthis.y = this.startTop + yDiff;\n\t\t}\n\n\t\tif (isResizing && /right|bottom/.test(isResizing)) {\n\t\t\tthis.width = /right/.test(isResizing)\n\t\t\t\t? xDiff + startWidth\n\t\t\t\t: width || startWidth;\n\n\t\t\tthis.height = /bottom/.test(isResizing)\n\t\t\t\t? yDiff + startHeight\n\t\t\t\t: height || startHeight;\n\n\t\t\tconst win = this.w.ownerDocument.defaultView;\n\t\t\tif (this.x + this.width - margin > win.innerWidth) {\n\t\t\t\tthis.width = win.innerWidth - this.x - margin;\n\t\t\t}\n\t\t\tif (this.y + this.height - margin > win.innerHeight) {\n\t\t\t\tthis.height = win.innerHeight - this.y - margin;\n\t\t\t}\n\t\t}\n\n\t\tthis.render();\n\t}\n\n\t/**\n\t * The event listener for mouse down events that occur on the floating window's title bar.\n\t *\n\t * The mouse down event starts a click-and-drag action on the floating window.\n\t *\n\t * @param {MouseEvent} e The\n\t * \t\t\n\t * \t\tmouse event object.\n\t *\n\t * @tsmember WebComponents.FloatingWindow.DocWindow\n\t * @since 8.2.0\n\t */\n\tonStartDrag(e) {\n\t\tif (e.button !== 0) return;\n\n\t\tthis.isDragging = true;\n\t\tthis.downX = e.pageX - this.x;\n\t\tthis.downY = e.pageY - this.y;\n\t}\n\n\t/**\n\t * The event listener for mouse up events that occur on a floating window.\n\t *\n\t * Stops a dragging or resizing action of the floating window.\n\t *\n\t * @tsmember WebComponents.FloatingWindow.DocWindow\n\t * @since 8.2.0\n\t */\n\tonMouseUp() {\n\t\tthis.isDragging = false;\n\t\tthis.isResizing = false;\n\t\tthis.render();\n\t}\n\n\t/**\n\t * Opens and closes the floating window.\n\t *\n\t * @param {boolean} [value] If true, the floating window is opened. If false, the\n\t * \t\tfloating window is closed. If undefined, the floating window is toggled; that is,\n\t * \t\topened if it is currently closed, closed if it is currently open.\n\t *\n\t * @tsmember WebComponents.FloatingWindow.DocWindow\n\t * @since 8.2.0\n\t */\n\ttoggle(value) {\n\t\tconst newValue = value === undefined ? !this.isOpen : value;\n\t\tconst changed = this.isOpen !== newValue;\n\t\tthis.isOpen = newValue;\n\t\tif (this.isOpen) {\n\t\t\tthis.w.setAttribute(\"aria-labelledby\", \"floating-window-title\");\n\t\t\tthis.w.setAttribute(\"aria-hidden\", \"false\");\n\t\t\tthis.w.setAttribute(\"role\", \"alertdialog\");\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.w.tabIndex = -1;\n\t\t\t\tthis.w.focus();\n\t\t\t}, 10);\n\t\t} else {\n\t\t\tthis.w.removeAttribute(\"role\");\n\t\t\tthis.w.setAttribute(\"aria-hidden\", \"true\");\n\t\t\tif (this.targetElement) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.targetElement.tabIndex = -1;\n\t\t\t\t\tthis.targetElement.focus();\n\t\t\t\t}, 10);\n\t\t\t}\n\t\t}\n\t\tif (changed && !this.isOpen && this.onClose) {\n\t\t\tthis.onClose();\n\t\t\tif (this.isCollapsed) this.toggleCollapse(); // reset to open for next time\n\t\t}\n\t\tthis.render();\n\t\treturn this;\n\t}\n\n\t/**\n\t * Toggles the display state — expanded or collapsed — of the floating window.\n\t *\n\t * In the expanded state, the full floating window is displayed; in the collapsed state, only\n\t * the floating window title bar appears.\n\t *\n\t * @tsmember WebComponents.FloatingWindow.DocWindow\n\t * @since 8.2.0\n\t */\n\ttoggleCollapse() {\n\t\tthis.isCollapsed = !this.isCollapsed;\n\t\tif (this.isCollapsed) {\n\t\t\tthis.prevHeight = this.height;\n\t\t\tthis.w.classList.add(\"ciq-window-collapsed\");\n\t\t\tthis.height = this.titleBarEl.offsetHeight;\n\t\t\tif (this.onCollapse) this.onCollapse();\n\t\t} else {\n\t\t\tthis.height = this.prevHeight;\n\t\t\tthis.w.classList.remove(\"ciq-window-collapsed\");\n\t\t}\n\t\tconst collapseEl = this.w.querySelector(\".ciq-window-collapse\");\n\t\tcollapseEl.title = this.isCollapsed ? \"Expand\" : \"Collapse\";\n\t\tthis.render();\n\t}\n}\n\n/**\n * Default markup for the component's innerHTML.\n *\n * @tsmember WebComponents.FloatingWindow.DocWindow\n * @static\n * @type {string}\n * @since 8.2.0\n */\nDocWindow.markup = `\n\t
    \n\t\t

    \n\t\t\n\t\t\n\t
    \n\t
    \n\t
    \n\t
    \n\t
    \n\t
    \n\t
    \n\t
    \n\t
    \n\t
    \n`;\n\n/**\n * Gets a floating window instance.\n *\n * If the `tag` parameter is provided, the function checks whether the document already contains\n * a floating window with that tag. If so, the function parameters are stored as properties of the\n * floating window object (see\n * [setProps]{@link WebComponents.FloatingWindow.DocWindow#setProps}), and a reference to the\n * floating window is returned. Otherwise, the function returns a new floating window created with\n * the provided parameters.\n *\n * **Note:** Tags can be used to manage floating windows in multi-chart documents. For more\n * information, see the `tag` parameter of\n * [floatingWindowEventListener]{@link CIQ.ChartEngine~floatingWindowEventListener}.\n *\n * @param {object} params Floating window parameters.\n * @param {string} params.content The contents of the floating window, typically an HTML string.\n * @param {HTMLElement} [params.container] The DOM element that visually contains the floating\n * \t\twindow. The floating window is positioned on screen relative to the container element (see\n * \t\t[positionRelativeTo]{@link WebComponents.FloatingWindow.DocWindow#positionRelativeTo}).\n * @param {string} [params.title] Text that appears in the title bar of the floating window.\n * @param {string} [params.tag] A label that identifies the floating window type; for example,\n * \t\t\"shortcut\", which indicates that the floating window contains the chart keyboard shortcuts\n * \t\tlegend.\n * @param {number} [params.minWidth] The minimum width of the floating window.\n * @param {number} [params.minHeight] The minimum height of the floating window.\n * @param {function} [params.onClose] A callback function to execute when the floating window\n * \t\tcloses.\n * @return {object} A [DocWindow]{@link WebComponents.FloatingWindow.DocWindow} instance.\n *\n * @tsmember WebComponents.FloatingWindow.DocWindow\n * @static\n * @since 8.2.0\n */\nDocWindow.get = function (params) {\n\tlet w;\n\tif (params.tag) {\n\t\tw = Array.from(\n\t\t\t(params.container.ownerDocument || document).querySelectorAll(\n\t\t\t\t\".ciq-window\"\n\t\t\t)\n\t\t).find((el) => el.tag === params.tag);\n\t\tif (w) {\n\t\t\tw.docWindow.setProps(params);\n\t\t\treturn w.docWindow;\n\t\t}\n\t}\n\treturn new this(params);\n};\n\n/**\n * A reference to the class that implements the floating window.\n *\n * @default [DocWindow]{@link WebComponents.FloatingWindow.DocWindow}\n * @type {WebComponents.FloatingWindow.DocWindow}\n * @since 8.2.0\n *\n * @tsmember WebComponents.FloatingWindow\n */\nFloatingWindow.windowImplementation = DocWindow;\n\nCIQ.UI.addComponentDefinition(\"cq-floating-window\", FloatingWindow);\n\n};\n\n\nlet __js_webcomponents_gridSizePicker_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

    <cq-grid-size-picker>

    \n *\n * Creates a `` web component.\n *\n * This component supports the following attributes:\n * | attribute | description |\n * | :-------- | :---------- |\n * | maxrows | Maximum number of rows allowed |\n * | maxcols | Maximum number of columns allowed |\n * | resize | Set to fixed will always have picker table at fixed max size |\n *\n * _**Emitters**_\n *\n * A custom event will be emitted by the component when a template or new size is picked.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"update-grid\" |\n * | action | \"click\" |\n * | columns | number of columns |\n * | rows | number of rows |\n * | template | selected template |\n *\n * @example\n *\t\t\n *\n * @alias WebComponents.GridSizePicker\n * @extends CIQ.UI.BaseComponent\n * @class\n * @protected\n * @since 7.2.0\n * @since 9.3.0 Added new emitter\n */\nclass GridSizePicker extends CIQ.UI.BaseComponent {\n\tconnectedCallback() {\n\t\tif (!this.isConnected || this.attached) return;\n\t\tsuper.connectedCallback();\n\t\tthis.innerHTML = this.render();\n\t\tthis.columns = 2;\n\t\tthis.rows = 2;\n\t\tthis.generateTable(this.columns, this.rows);\n\t\tthis.highlightTable(this.columns - 1, this.rows - 1);\n\t\tthis.querySelector(\"table\").addEventListener(\"mouseleave\", () => {\n\t\t\tthis.generateTable(this.columns + 1, this.rows + 1);\n\t\t\tthis.highlightTable(this.columns, this.rows);\n\t\t});\n\n\t\tconst { srMapping = {} } = this.constructor;\n\n\t\tconst createGridLayoutButton = (layoutClass) => {\n\t\t\tlet elem = document.createElement(\"li\");\n\t\t\telem.className = \"ciq-multi-chart-button \" + layoutClass;\n\t\t\tconst srContent = srMapping[layoutClass] || \"Custom Template\";\n\t\t\tif (srContent) elem.setAttribute(\"aria-label\", srContent);\n\t\t\telem.setAttribute(\"role\", \"menuitem\");\n\t\t\tCIQ.safeClickTouch(\n\t\t\t\telem,\n\t\t\t\tfunction (event) {\n\t\t\t\t\tthis.triggerUpdateGridEvent({\n\t\t\t\t\t\ttemplate: layoutClass\n\t\t\t\t\t});\n\t\t\t\t}.bind(this)\n\t\t\t);\n\t\t\treturn elem;\n\t\t};\n\n\t\tif (this.templates) {\n\t\t\tconst layoutPicker = this.querySelector(\".ciq-grid-layout-picker\");\n\t\t\tthis.templates.split(\" \").forEach((template) => {\n\t\t\t\tlayoutPicker.appendChild(createGridLayoutButton(template));\n\t\t\t});\n\t\t\t// Add empty div elements to fill in the layout icon.\n\t\t\tlayoutPicker.childNodes.forEach((elem) => {\n\t\t\t\tconst elemStyles = getComputedStyle(elem);\n\t\t\t\tlet cellCt = 0;\n\t\t\t\tif (\n\t\t\t\t\telemStyles.gridTemplateAreas &&\n\t\t\t\t\telemStyles.gridTemplateAreas != \"none\"\n\t\t\t\t) {\n\t\t\t\t\tlet uniqueTemplateAreas = [\n\t\t\t\t\t\t...new Set(elemStyles.gridTemplateAreas.match(/([a-z])+/gi))\n\t\t\t\t\t];\n\t\t\t\t\tcellCt = uniqueTemplateAreas.length;\n\t\t\t\t} else if (elemStyles.getPropertyValue(\"--grid-dimension\")) {\n\t\t\t\t\tcellCt =\n\t\t\t\t\t\tparseInt(elemStyles.getPropertyValue(\"--grid-dimension\")) || 0;\n\t\t\t\t\t// It will always have an extra chart initially, spanning the full width\n\t\t\t\t\tcellCt++;\n\t\t\t\t}\n\n\t\t\t\tfor (let idx = 0; idx < cellCt; idx++) {\n\t\t\t\t\telem.innerHTML += \"
    \";\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis.setAttribute(\"role\", \"menu\");\n\t\tthis.setAttribute(\"aria-label\", \"Multichart grid selector\");\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, GridSizePicker);\n\t\tthis.constructor = GridSizePicker;\n\t}\n\n\tget maxcols() {\n\t\treturn this.getAttribute(\"maxcols\") || 4;\n\t}\n\n\tset maxcols(newValue) {\n\t\tthis.setAttribute(\"maxcols\", newValue);\n\t}\n\n\tget maxrows() {\n\t\treturn this.getAttribute(\"maxrows\") || 4;\n\t}\n\n\tset maxrows(newValue) {\n\t\tthis.setAttribute(\"maxrows\", newValue);\n\t}\n\n\tget templates() {\n\t\treturn this.getAttribute(\"templates\") || \"\";\n\t}\n\n\tset templates(newValue) {\n\t\tthis.setAttribute(\"templates\", newValue);\n\t}\n\n\tget resize() {\n\t\treturn this.getAttribute(\"resize\") || \"\";\n\t}\n\n\tset resize(newValue) {\n\t\tthis.setAttribute(\"resize\", newValue);\n\t}\n\n\t/**\n\t * Generates grid size picker table\n\t *\n\t * @param {number} columns Table column count\n\t * @param {number} rows Table row count\n\t *\n\t * @tsmember WebComponents.GridSizePicker\n\t */\n\tgenerateTable(columns, rows) {\n\t\tconst self = this;\n\t\tif (this.resize == \"fixed\") {\n\t\t\tcolumns = this.maxcols;\n\t\t\trows = this.maxrows;\n\t\t}\n\t\tfunction mouseEnterFcn(event) {\n\t\t\tconst { column, row } = event.target.dataset;\n\t\t\t// Clamp the rows and cols to their max setting before generating the new table\n\t\t\tlet newColCt = parseInt(column) + 1;\n\t\t\tif (newColCt > self.maxcols) newColCt = self.maxcols;\n\t\t\tlet newRowCt = parseInt(row) + 1;\n\t\t\tif (newRowCt > self.maxrows) newRowCt = self.maxrows;\n\n\t\t\tif (this.resize != \"fixed\") self.generateTable(newColCt, newRowCt);\n\t\t\t// Hilite based on the selected cell, not the expected grid size\n\t\t\tself.highlightTable(parseInt(column), parseInt(row));\n\t\t}\n\n\t\tlet parentElem = this.querySelector(\"table\");\n\n\t\tif (!parentElem) return;\n\t\t// Clear out the existing table\n\t\tthis.cleanTable(columns, rows);\n\n\t\tcolumns = columns || 1;\n\t\trows = rows || 1;\n\n\t\tfor (let idx = 1; idx <= Math.min(rows, this.maxrows); idx++) {\n\t\t\tlet tmpRow;\n\t\t\tif (parentElem.childNodes[idx - 1]) {\n\t\t\t\ttmpRow = parentElem.childNodes[idx - 1];\n\t\t\t} else {\n\t\t\t\ttmpRow = document.createElement(\"tr\");\n\t\t\t\tparentElem.appendChild(tmpRow);\n\t\t\t}\n\t\t\tfor (let jdx = 1; jdx <= Math.min(columns, this.maxcols); jdx++) {\n\t\t\t\tif (!tmpRow.childNodes[jdx - 1]) {\n\t\t\t\t\tlet tmpCell = document.createElement(\"td\");\n\t\t\t\t\ttmpCell.dataset.row = idx;\n\t\t\t\t\ttmpCell.dataset.column = jdx;\n\t\t\t\t\ttmpCell.dataset.rows = rows;\n\t\t\t\t\ttmpCell.dataset.columns = columns;\n\t\t\t\t\ttmpCell.addEventListener(\"mouseenter\", mouseEnterFcn);\n\t\t\t\t\ttmpCell.setAttribute(\n\t\t\t\t\t\t\"aria-label\",\n\t\t\t\t\t\t`${idx} row${idx - 1 ? \"s\" : \"\"} ${jdx} column${jdx - 1 ? \"s\" : \"\"}`\n\t\t\t\t\t);\n\t\t\t\t\ttmpCell.setAttribute(\"role\", \"menuitem\");\n\t\t\t\t\ttmpCell.addEventListener(\n\t\t\t\t\t\t\"click\",\n\t\t\t\t\t\tfunction (event) {\n\t\t\t\t\t\t\tthis.triggerUpdateGridEvent({\n\t\t\t\t\t\t\t\tcolumns: event.target.dataset.column,\n\t\t\t\t\t\t\t\trows: event.target.dataset.row\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}.bind(this)\n\t\t\t\t\t);\n\n\t\t\t\t\ttmpCell.appendChild(document.createElement(\"div\"));\n\n\t\t\t\t\ttmpRow.appendChild(tmpCell);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Triggers grid upgrade event.\n\t *\n\t * @param {object} params Event parameters\n\t * @param {string|number} params.columns Grid columns\n\t * @param {string|number} params.rows Grid columns\n\t * @param {string|number} params.template Grid template\n\t *\n\t * @private\n\t *\n\t * @tsmember WebComponents.GridSizePicker\n\t */\n\ttriggerUpdateGridEvent({ columns, rows, template }) {\n\t\tthis.columns = +columns;\n\t\tthis.rows = +rows;\n\t\tthis.template = template || \"\";\n\t\tthis.highlightTable(this.columns, this.rows);\n\t\tthis.highlightTemplate();\n\t\tthis.emitCustomEvent({\n\t\t\teffect: \"update-grid\",\n\t\t\tdetail: {\n\t\t\t\tcolumns: columns,\n\t\t\t\trows: rows,\n\t\t\t\ttemplate: template\n\t\t\t}\n\t\t});\n\t\tconst context = this.closest(\"cq-context, [cq-context]\");\n\t\tcontext.dispatchEvent(\n\t\t\tnew CustomEvent(\"update-grid\", {\n\t\t\t\tdetail: {\n\t\t\t\t\tcolumns: columns,\n\t\t\t\t\trows: rows,\n\t\t\t\t\ttemplate: template,\n\t\t\t\t\tcontainer: this.closest(\"cq-context\")\n\t\t\t\t},\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true\n\t\t\t})\n\t\t);\n\t}\n\n\t/**\n\t * Highlights provided number of rows and columns\n\t *\n\t * @param {number} columns Columns to highlight\n\t * @param {number} rows Rows to highlight\n\t *\n\t * @tsmember WebComponents.GridSizePicker\n\t */\n\thighlightTable(columns, rows) {\n\t\tfor (let gridCell of this.querySelectorAll(\"td\")) {\n\t\t\tif (gridCell.dataset.column <= columns && gridCell.dataset.row <= rows) {\n\t\t\t\tgridCell.classList.add(\"highlight\");\n\t\t\t} else {\n\t\t\t\tgridCell.classList.remove(\"highlight\");\n\t\t\t}\n\t\t}\n\t\tconst rowEl = this.querySelector(\".row.count\");\n\t\tconst multEl = this.querySelector(\".multiply\");\n\t\tconst hideRows = this.maxrows < 2;\n\t\trowEl.style.display = hideRows ? \"none\" : \"\";\n\t\tmultEl.style.display = hideRows ? \"none\" : \"\";\n\t\trowEl.innerHTML = rows;\n\t\tthis.querySelector(\".column.count\").innerHTML = columns;\n\t}\n\n\t/**\n\t * Applies highlight on the idenified template\n\t *\n\t * @param {string|undefined} gridTemplate Template to highlight\n\t *\n\t * @tsmember WebComponents.GridSizePicker\n\t */\n\thighlightTemplate(gridTemplate) {\n\t\tif (gridTemplate) this.template = gridTemplate;\n\t\tconst templateButtons = this.querySelectorAll(\n\t\t\t\".ciq-grid-layout-picker .ciq-multi-chart-button\"\n\t\t);\n\t\ttemplateButtons.forEach((button) => {\n\t\t\tbutton.classList.remove(\"active\");\n\t\t});\n\t\tif (this.template) {\n\t\t\tconst activeButton = Array.from(templateButtons).find((button) =>\n\t\t\t\tbutton.classList.contains(this.template)\n\t\t\t);\n\t\t\tif (activeButton) activeButton.classList.add(\"active\");\n\t\t}\n\t}\n\n\t/**\n\t * Removes unused rows and columns in the grid size picker table\n\t *\n\t * @param {number} columns Columns to keep\n\t * @param {number} rows Rows to keep\n\t *\n\t * @tsmember WebComponents.GridSizePicker\n\t */\n\tcleanTable(columns, rows) {\n\t\tlet element = this.querySelector(\"table\");\n\t\t// Remove unused rows\n\t\twhile (element.childNodes.length > rows) {\n\t\t\telement.removeChild(element.lastChild);\n\t\t}\n\t\t// Remove unused columns from remaining rows\n\t\tfor (let rowNode of element.childNodes) {\n\t\t\twhile (rowNode.childNodes.length > columns) {\n\t\t\t\trowNode.removeChild(rowNode.lastChild);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Returns the component content as a string to render it\n\t *\n\t * @returns {string} Component content\n\t * @tsmember WebComponents.GridSizePicker\n\t */\n\trender() {\n\t\treturn `\n\t\t\t\t
      \n\t\t\t\t\n\t\t\t\t
      \n\t\t\t\t

      1 + 1

      \n\t\t\t`;\n\t}\n}\n\n/**\n * Grid template mapping to sceen reader content\n *\n * @static\n * @type {string}\n *\n * @tsmember WebComponents.GridSizePicker\n * @since 9.3.0\n */\nGridSizePicker.srMapping = {\n\t\"ciq-auto-grid-1\": \"Top 1 chart, bottom 2 charts\",\n\t\"ciq-auto-grid-2\": \"Top 2 charts, bottom 1 chart\",\n\t\"ciq-auto-grid-3\": \"Left 1 chart, right 2 charts\",\n\t\"ciq-auto-grid-4\": \"Left 2 charts, right 1 chart\",\n\t\"ciq-auto-grid-5\": \"Top 1 chart, bottom 3 charts\",\n\t\"ciq-auto-grid-6\": \"Top 3 charts, bottom 1 chart\",\n\t\"ciq-auto-grid-7\": \"Left 1 chart, right 3 charts\",\n\t\"ciq-auto-grid-8\": \"Left 3 charts, right 1 chart\",\n\t\"ciq-auto-grid-9\": \"Top 1 chart, bottom 4 charts\",\n\t\"ciq-auto-grid-10\": \"Top 4 charts, bottom 1 chart\",\n\t\"ciq-auto-grid-11\": \"Left 1 chart, right 4 charts\",\n\t\"ciq-auto-grid-12\": \"Left 4 charts, right 1 chart\"\n};\n\nCIQ.UI.addComponentDefinition(\"cq-grid-size-picker\", GridSizePicker);\n\n};\n\n\nlet __js_webcomponents_heading_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

      <cq-heading>

      \n *\n * In addition to representing the inner text of this component as an <h4> level header, this component also\n * allows one to filter what is displayed in a list of elements beneath another element in the DOM. The filtering\n * is triggered by typing into to a search input.\n *\n * Note a MutationObserver is attached to the filterable element so if its contents change, this component will be\n * aware and render accordingly (see `filter-min` below).\n *\n * _**Attributes**_\n *\n * This component observes the following attributes and will change behavior if these attributes are modified:\n * | attribute | description |\n * | :----------- | :---------- |\n * | filter-for | A label to specify the element to filter. The element to filter must also have its _filter-name_ attribute set to this value. If _filter-for_ is omitted, will filter this element's next sibling. |\n * | filter-label | Text to put in the placeholder of the search input. If omitted, will use \"Search\". |\n * | filter-min | The number of filterable records below which the filter input will not appear. If omitted, filter input will never appear. |\n * | icon | Optional icon class name to put on left of filter. |\n * | text | Heading text. Appears whether or not filtering is enabled. |\n *\n * Note that the `filter-for` attribute is disregarded if the component's `itemContainer` property is set. This property should be set to a valid container selector if used.\n *\n * _**Emitters**_\n *\n * A custom event will be emitted by the component whenever the search input is changed.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"search\" |\n * | action | \"input\" |\n * | value | _search string_ |\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * @example Study search filter\n * \n * ...\n *\n * @alias WebComponents.Heading\n * @extends CIQ.UI.BaseComponent\n * @class\n * @protected\n * @since\n * - 9.1.0 Observes attributes. Added emitter.\n */\nclass Heading extends CIQ.UI.BaseComponent {\n\tstatic get observedAttributes() {\n\t\treturn [\"filter-for\", \"filter-label\", \"filter-min\", \"icon\", \"text\"];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tCIQ.UI.makeShadow(this);\n\t}\n\n\tconnectedCallback() {\n\t\tif (!this.isConnected || this.attached) return;\n\t\tsuper.connectedCallback();\n\t\tif (this.innerText && !this.text) this.text = this.innerText.trim();\n\t\tif (this.isShadowComponent && this.children.length) {\n\t\t\twhile (this.children.length) {\n\t\t\t\tthis.root.appendChild(this.firstChild);\n\t\t\t}\n\t\t}\n\t\tthis.markup = this.trimInnerHTMLWhitespace();\n\t\tthis.usingMarkup = !!this.markup.match(/\\{\\{(.{1,20}?)\\}\\}/g);\n\t\tthis.build();\n\n\t\tthis.setupShadow();\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, Heading);\n\t\tthis.constructor = Heading;\n\t}\n\n\t/**\n\t * Processes attribute changes. This is called whenever an observed attribute has changed.\n\t *\n\t * @param {string} name Attribute name\n\t * @param {string} oldValue Original attribute value\n\t * @param {string} newValue new Attribute value\n\t *\n\t * @tsmember WebComponents.Heading\n\t */\n\thandlePropertyChange(name, oldValue, newValue) {\n\t\tif (oldValue === newValue) return;\n\t\tthis[name] = newValue;\n\t\tif (this.usingMarkup && this.attached) this.build();\n\t}\n\n\t/**\n\t * Creates the component's markup.\n\t *\n\t * @tsmember WebComponents.Heading\n\t */\n\tbuild() {\n\t\tconst { children } = this.root;\n\t\tif (!children.length || this.usingMarkup) {\n\t\t\tthis.usingMarkup = true;\n\t\t\tif (children.length) {\n\t\t\t\t[...children].forEach((child) => {\n\t\t\t\t\tif (![\"LINK\", \"STYLE\"].includes(child.tagName)) child.remove();\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.addDefaultMarkup(null, this.getMarkup());\n\t\t\tthis.makeFilter();\n\t\t}\n\t}\n\n\t/**\n\t * Formats the default markup, replacing any variables with the actual values provided by the attributes.\n\t *\n\t * @return {string} The prepared markup\n\t *\n\t * @tsmember WebComponents.Heading\n\t */\n\tgetMarkup() {\n\t\tlet markup = this.markup || this.constructor.markup;\n\t\tconst names = markup.match(/\\{\\{(.{1,20}?)\\}\\}/g);\n\t\tif (names)\n\t\t\tnames.forEach((name) => {\n\t\t\t\tconst key = name.substring(2, name.length - 2);\n\t\t\t\tconst attr = this[key];\n\t\t\t\tif (key === \"icon\") markup = markup.replace(name, attr || \"hidden\");\n\t\t\t\telse\n\t\t\t\t\tmarkup = markup.replace(\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tattr || (key === \"filter-label\" ? \"Search\" : \"\")\n\t\t\t\t\t);\n\t\t\t});\n\t\treturn markup;\n\t}\n\n\t/**\n\t * Initializes the component's filter.\n\t *\n\t * @tsmember WebComponents.Heading\n\t */\n\tmakeFilter() {\n\t\tconst wrapper = this.qsa(\".searchFilter\", this, true)[0];\n\t\tif (!this[\"filter-min\"]) {\n\t\t\tif (wrapper) wrapper.remove();\n\t\t\treturn;\n\t\t}\n\n\t\tconst filterFor = this[\"filter-for\"];\n\t\tlet itemContainer =\n\t\t\tthis.itemContainer ||\n\t\t\t(filterFor\n\t\t\t\t? this.qsa(`[filter-name='${filterFor}']`, null, true)[0]\n\t\t\t\t: this.nextElementSibling);\n\t\tif (!itemContainer || (!itemContainer.root && !itemContainer.children)) {\n\t\t\t// item to filter not yet in DOM\n\t\t\tsetTimeout(() => this.makeFilter(), 100);\n\t\t\treturn;\n\t\t}\n\t\tif (itemContainer.root && itemContainer !== itemContainer.root)\n\t\t\titemContainer = itemContainer.root;\n\t\tlet previousValue = \"\";\n\n\t\tconst updateListVisibility = ({ target: { value } }) => {\n\t\t\tconst re = new RegExp(value, \"i\");\n\n\t\t\t[...itemContainer.children]\n\t\t\t\t.filter((c) => !c.contains(this))\n\t\t\t\t.forEach((el) => {\n\t\t\t\t\tconst visibilityAction =\n\t\t\t\t\t\tvalue && !re.test(el.textContent) ? \"add\" : \"remove\";\n\t\t\t\t\tel.classList[visibilityAction](\"item-hidden\");\n\t\t\t\t\tel.ariaHidden = visibilityAction === \"add\";\n\t\t\t\t\tif (previousValue !== value) {\n\t\t\t\t\t\tpreviousValue = value;\n\t\t\t\t\t\tthis.removeFocused.apply(itemContainer);\n\t\t\t\t\t\tthis.qsa(\".cq-keyboard-selected-highlight\").forEach(\n\t\t\t\t\t\t\t(highlightEl) => {\n\t\t\t\t\t\t\t\thighlightEl.classList.add(\"disabled\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t\tinput.focus();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\tthis.emitCustomEvent({\n\t\t\t\taction: \"input\",\n\t\t\t\teffect: \"search\",\n\t\t\t\tdetail: { value }\n\t\t\t});\n\t\t};\n\t\tconst input = this.qsa(\"input\", this, true)[0];\n\t\tif (input) {\n\t\t\tinput.addEventListener(\"stxtap\", (e) => e.stopPropagation(), true);\n\t\t\tinput.addEventListener(\"input\", updateListVisibility);\n\t\t}\n\n\t\tconst minItemCount = this[\"filter-min\"] || 15;\n\t\tif (wrapper) {\n\t\t\tconst showFilterIfNecessary = () => {\n\t\t\t\tconst itemCount = itemContainer.children.length;\n\t\t\t\twrapper.classList[itemCount > minItemCount ? \"add\" : \"remove\"](\n\t\t\t\t\t\"active\"\n\t\t\t\t);\n\t\t\t};\n\n\t\t\t// Delay the execution of the filter activation check until sibling child nodes\n\t\t\t// have been created providing reference to the need for filter\n\t\t\t// based on filter-min setting\n\t\t\tif (typeof MutationObserver === \"undefined\") {\n\t\t\t\twrapper.classList.add(\"active\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.mutationObserver) this.mutationObserver.disconnect();\n\t\t\tthis.mutationObserver = new MutationObserver(showFilterIfNecessary);\n\t\t\tthis.mutationObserver.observe(itemContainer, {\n\t\t\t\tchildList: true,\n\t\t\t\tsubtree: true\n\t\t\t});\n\n\t\t\tshowFilterIfNecessary();\n\t\t}\n\t}\n}\n\n/**\n * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * This markup contains placeholder values which the component replaces with values from its attributes.\n * Variables are represented in double curly-braces, for example: `{{text}}`.\n * The following variables are defined:\n * | variable | source |\n * | :----------- | :----- |\n * | text | from attribute value |\n * | icon | from attribute value |\n * | filter-label | from attribute value |\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.Heading\n */\nHeading.markup = `\n\t\t
      {{text}}
      \n\t\t
      \n\t\t\t\n\t\t\t\n\t\t
      \n\t`;\n\nCIQ.UI.addComponentDefinition(\"cq-heading\", Heading);\n\n};\n\n\nlet __js_webcomponents_headsupDynamic_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

      <cq-hu-dynamic>

      \n *\n * This web component displays the dynamic heads up display. This is a display of the market information at the point where the cursor lay.\n * The dynamic heads-up marker follows the mouse cursor.\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * @alias WebComponents.HeadsUpDynamic\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n * @since 7.5.0\n */\nclass HeadsUpDynamic extends CIQ.UI.ContextTag {\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, HeadsUpDynamic);\n\t\tthis.constructor = HeadsUpDynamic;\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback();\n\t\tthis.attached = true; // prevent recursive recreation\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * Creates an instance of {@link CIQ.UI.HeadsUp}. Subscribes to the `headsUp` channel\n\t * which provides messages to start and stop the marker.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.HeadsUpDynamic\n\t * @since 7.5.0\n\t */\n\tsetContext(context) {\n\t\tthis.addDefaultMarkup();\n\t\tconst UIHeadsUpDynamic = new CIQ.UI.HeadsUp(this, context, {\n\t\t\tfollowMouse: true,\n\t\t\tautoStart: false\n\t\t});\n\n\t\tconst headsUp =\n\t\t\tcontext.config && context.config.channels\n\t\t\t\t? context.config.channels.headsUp\n\t\t\t\t: \"layout.headsUp\";\n\t\tthis.channelSubscribe(headsUp, (value) => {\n\t\t\tUIHeadsUpDynamic[\n\t\t\t\tvalue === \"dynamic\" || (value || {}).dynamic ? \"begin\" : \"end\"\n\t\t\t]();\n\t\t});\n\t}\n}\n\n/**\n * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.HeadsUpDynamic\n */\nHeadsUpDynamic.markup = `\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t
      \n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t
      Volume
      \n\t\t\t\t\t
      \n\t\t\t\t\t
      \n\t\t\t\t
      \n\t\t\t
      \n\t\t\t\n\t\t\t\t
      Open
      \n\t\t\t\t
      Close
      \n\t\t\t\t
      High
      \n\t\t\t\t
      Low
      \n\t\t\t
      \n\t\t
      \n\t`;\nCIQ.UI.addComponentDefinition(\"cq-hu-dynamic\", HeadsUpDynamic);\n\n};\n\n\nlet __js_webcomponents_headsupStatic_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

      <cq-hu-static>

      \n *\n * This web component displays the static heads up display. This is a display of the market information at the point where the cursor lay.\n * The static heads-up marker does not follow the mouse cursor; rather, it shows in a static location on the chart as a marker.\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * @alias WebComponents.HeadsUpStatic\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n * @since 7.5.0\n */\nclass HeadsUpStatic extends CIQ.UI.ContextTag {\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, HeadsUpStatic);\n\t\tthis.constructor = HeadsUpStatic;\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback();\n\t\tthis.attached = true; // prevent recursive recreation\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * Creates an instance of {@link CIQ.UI.HeadsUp}. Subscribes to the `headsUp` channel\n\t * which provides messages to start and stop the marker.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.HeadsUpStatic\n\t * @since 7.5.0\n\t */\n\tsetContext(context) {\n\t\tthis.addDefaultMarkup();\n\t\tconst UIHeadsUpStatic = new CIQ.UI.HeadsUp(this, context, {\n\t\t\tautoStart: true\n\t\t});\n\n\t\tconst headsUp =\n\t\t\tcontext.config && context.config.channels\n\t\t\t\t? context.config.channels.headsUp\n\t\t\t\t: \"layout.headsUp\";\n\t\tthis.channelSubscribe(headsUp, (value) => {\n\t\t\tUIHeadsUpStatic[\n\t\t\t\tvalue === \"static\" || (value || {}).static ? \"begin\" : \"end\"\n\t\t\t]();\n\t\t});\n\t}\n}\n\n/**\n * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.HeadsUpStatic\n */\nHeadsUpStatic.markup = `\n\t\t
      \n\t\t\t
      Price
      \n\t\t\t
      Open
      \n\t\t\t
      Close
      \n\t\t
      \n\t\t
      \n\t\t\t
      Vol
      \n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t
      High
      \n\t\t\t
      Low
      \n\t\t
      \n\t`;\nCIQ.UI.addComponentDefinition(\"cq-hu-static\", HeadsUpStatic);\n\n};\n\n\nlet __js_webcomponents_help_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

      <cq-help>

      \n *\n * When long-pressed, this component can display help text. The text is displayed in a floating window popup over the chart.\n * The text which is discplayed is configured in the CIQ.Help namespace.\n * Sample help configuration is provided in the sample file in your library package, in /examples/help/helpContent.js.\n *\n * The long-press time is set in the [stxx.longHoldTime]{@link https://documentation.chartiq.com/CIQ.ChartEngine.html#callbacks%5B%60longhold%60%5D} function.\n *\n * _**Attributes**_\n *\n * This component observes the following attributes and will change behavior if these attributes are modified:\n * | attribute | description |\n * | :-------- | :---------- |\n * | help-id | A key to the correct help text in CIQ.Help.Content. |\n *\n * _**Emitters**_\n *\n * A custom event will be emitted by the component when it is long-pressed enough for the help text to show.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"help\" |\n * | action | \"longpress\" |\n * | helpId | _key_ |\n * | helpData | _text_ |\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * @example Help component within a toggle:\n * \n * \t\t\n * \t\t\n *\t\n *\n * @alias WebComponents.Help\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n * @since\n * - 9.1.0 Observes attributes. Added emitter.\n */\nclass Help extends CIQ.UI.ContextTag {\n\tstatic get observedAttributes() {\n\t\treturn [\"help-id\"];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tCIQ.UI.makeShadow(this);\n\t}\n\n\tconnectedCallback() {\n\t\tif (!this.isConnected || this.attached) return;\n\t\tsuper.connectedCallback();\n\n\t\t[\"mousedown\", \"pointerdown\", \"touchstart\"].forEach((eventName) =>\n\t\t\tthis.addEventListener(eventName, this.mouseTouchDown, { passive: false })\n\t\t);\n\t\t[\"mouseup\", \"pointerup\", \"touchend\", \"touchmove\", \"click\"].forEach(\n\t\t\t(eventName) =>\n\t\t\t\tthis.addEventListener(eventName, this.mouseTouchUp, { passive: false })\n\t\t);\n\t\tthis.setupShadow();\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, Help);\n\t\tthis.constructor = Help;\n\t}\n\n\tdisconnectedCallback() {\n\t\tif (this.doNotDisconnect) return;\n\t\tthis.removeClaim(this);\n\t\tsuper.disconnectedCallback();\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.Help\n\t */\n\tsetContext(context) {\n\t\tthis.addDefaultMarkup();\n\t\tlet { stx } = context;\n\t\tif (CIQ.Help) CIQ.UI.activatePluginUI(stx, \"help\");\n\t\tthis.ensureMessagingAvailable(stx);\n\t\tthis.addClaim(this);\n\t}\n\n\t/**\n\t * Handler for beginning a long-press.\n\t *\n\t * @param {Event} evt The mousedown event\n\t *\n\t * @tsmember WebComponents.Help\n\t */\n\tmouseTouchDown(evt) {\n\t\tthis.stopPropagation = false;\n\t\tif (\n\t\t\t!CIQ.Help ||\n\t\t\t!CIQ.Help.Content ||\n\t\t\t!CIQ.Help.Content[this[\"help-id\"]] ||\n\t\t\tthis.pressTimer ||\n\t\t\t(evt.button && evt.button >= 2)\n\t\t)\n\t\t\treturn;\n\t\tthis.pressTimer = setTimeout(() => {\n\t\t\tthis.pressTimer = null;\n\t\t\t// Allow the press highlight animation to complete before removing\n\t\t\tsetTimeout(() => this.classList.remove(\"pressing\"), 1000);\n\t\t\tthis.press();\n\t\t}, this.context.stx.longHoldTime);\n\t\tthis.classList.add(\"pressing\");\n\t}\n\n\t/**\n\t * Handler for ending a long-press. If the threshold time is reached (`pressing` class remains set), the help display is triggered.\n\t *\n\t * @param {Event} evt The mousedown event\n\t *\n\t * @tsmember WebComponents.Help\n\t */\n\tmouseTouchUp(evt) {\n\t\tif (this.stopPropagation) evt.stopPropagation();\n\t\tif (\n\t\t\t!CIQ.Help ||\n\t\t\t!CIQ.Help.Content ||\n\t\t\t!CIQ.Help.Content[this[\"help-id\"]] ||\n\t\t\t(evt.button && evt.button >= 2)\n\t\t)\n\t\t\treturn;\n\t\tif (evt.type === \"click\") {\n\t\t\tif (!evt.detail && !this.classList.contains(\"pressing\")) this.press();\n\t\t\tthis.classList.remove(\"pressing\");\n\t\t}\n\t\tif (!this.pressTimer) return;\n\t\tclearTimeout(this.pressTimer);\n\t\tthis.pressTimer = null;\n\t}\n\n\t/**\n\t * Handler for keyboard interaction.\n\t *\n\t * Question mark `?` key will trigger the help for the active component, if available.\n\t *\n\t * @param {CIQ.UI.KeystrokeHub} hub The hub that processed the key\n\t * @param {string} key Key that was stroked\n\t * @param {Event} e The event object\n\t * @return {boolean} true if keystroke was processed\n\t *\n\t * @tsmember WebComponents.Help\n\t */\n\tkeyStroke(hub, key, e) {\n\t\tif (key !== \"?\") return false;\n\t\tconst myId = this[\"help-id\"];\n\t\tlet elemWithHelp = this.qsa(\"[help-id]\", CIQ.getActiveElement(), true);\n\t\tif (elemWithHelp.length === 1) elemWithHelp = elemWithHelp[0];\n\t\telse elemWithHelp = null;\n\t\tif (!elemWithHelp)\n\t\t\telemWithHelp = CIQ.climbUpDomTree(\n\t\t\t\tCIQ.getActiveElement(),\n\t\t\t\t\"[help-id]\",\n\t\t\t\ttrue\n\t\t\t)[0];\n\t\tif (!elemWithHelp && hub.tabActiveElement)\n\t\t\telemWithHelp = this.qsa(\n\t\t\t\t\"[help-id]\",\n\t\t\t\thub.tabActiveElement.element,\n\t\t\t\ttrue\n\t\t\t)[0];\n\t\tif (!elemWithHelp || myId !== elemWithHelp.getAttribute(\"help-id\"))\n\t\t\treturn false;\n\t\tthis.press();\n\t\treturn true;\n\t}\n\n\t/**\n\t * Ensures that an instance of the [cq-floating-window]{@link WebComponents.FloatingWindow}\n\t * web component is available to handle event messaging and create the shortcuts legend floating\n\t * window.\n\t *\n\t * This function is called when the component's context is set (on load).\n\t *\n\t * @param {CIQ.ChartEngine} stx The chart engine that provides the UI context, which contains the\n\t * [cq-floating-window]{@link WebComponents.FloatingWindow} web component.\n\t *\n\t * @since 8.4.0\n\t *\n\t * @tsmember WebComponents.Help\n\t */\n\tensureMessagingAvailable(stx) {\n\t\tsetTimeout(() => {\n\t\t\tconst contextContainer = stx.uiContext.topNode;\n\t\t\tif (!contextContainer.querySelector(\"cq-floating-window\")) {\n\t\t\t\tcontextContainer.append(document.createElement(\"cq-floating-window\"));\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Adds class `help-available` if a property matching this element's help-id attribute\n\t * can be found in CIQ.Help.Content object. This class can be used to indicate that help\n\t * is available for the element. For example, a small dot can be shown.\n\t *\n\t * @since 8.4.0\n\t *\n\t * @tsmember WebComponents.Help\n\t */\n\tverifyHelpContent() {\n\t\tif (!CIQ.Help || !CIQ.Help.Content) return;\n\t\tlet helpData = CIQ.Help.Content[this[\"help-id\"]];\n\t\tif (helpData) {\n\t\t\tthis.classList.add(\"help-available\");\n\t\t} else {\n\t\t\tthis.classList.remove(\"help-available\");\n\t\t}\n\t}\n\n\t/**\n\t * Called from mouseTouchUp, this method will send the help text to the floating window for display.\n\t *\n\t * @since 8.4.0\n\t *\n\t * @tsmember WebComponents.Help\n\t */\n\tpress() {\n\t\tif (!CIQ.Help || !CIQ.Help.Content) return;\n\t\tlet { stx } = this.context;\n\t\tlet helpId = this[\"help-id\"] || \"default\";\n\t\tlet helpData = CIQ.Help.Content[helpId] || CIQ.Help.Content[\"default\"];\n\t\tthis.emitCustomEvent({\n\t\t\taction: \"longpress\",\n\t\t\teffect: \"help\",\n\t\t\tdetail: {\n\t\t\t\tparams: Object.assign({ helpId }, helpData)\n\t\t\t}\n\t\t});\n\t\tif (!helpData) return;\n\t\t// Add \"close\" & \"enable\" action buttons if no actions are provided\n\t\tif (!helpData.actions) helpData.actions = [CIQ.Help.Actions.enable];\n\n\t\t// Pass the parent element to each action function\n\t\thelpData.actionButtons = [];\n\n\t\tfunction processAction(actionItem, parentElement) {\n\t\t\treturn () => actionItem.action(parentElement);\n\t\t}\n\n\t\tfor (let actionItem of helpData.actions) {\n\t\t\tlet { label, action } = actionItem;\n\t\t\tif (typeof action === \"function\") {\n\t\t\t\taction = processAction(\n\t\t\t\t\tactionItem,\n\t\t\t\t\tthis.parentElement || this.getRootNode().host\n\t\t\t\t);\n\t\t\t}\n\t\t\thelpData.actionButtons.push({ label, action });\n\t\t}\n\n\t\tstx.dispatch(\"floatingWindow\", {\n\t\t\ttype: \"documentation\",\n\t\t\ttitle: helpData.title,\n\t\t\tcontent: helpData.content,\n\t\t\ttargetElement: this.parentElement || this.getRootNode().host,\n\t\t\tactionButtons: helpData.actionButtons,\n\t\t\tcontainer: stx.chart.panel.subholder,\n\t\t\tonClose: () => true,\n\t\t\twidth: 500,\n\t\t\tstatus: true,\n\t\t\ttag: \"help\"\n\t\t});\n\n\t\tthis.stopPropagation = true;\n\t}\n}\n\n/**\n * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n * This markup contains a dot which can be displayed when help is available.\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.Help\n */\nHelp.markup = `\n\t\t
      \n\t\t
      \n\t\t\t\n\t\t\t\n\t\t
      \n\t`;\nCIQ.UI.addComponentDefinition(\"cq-help\", Help);\n\n};\n\n\nlet __js_webcomponents_instantChart_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\nlet InstantChart_movedDialogs = false;\n\n/**\n * Container web component ``. Used to contain charts in multi-chart\n * environments.\n *\n * The `` element has the following custom attributes:\n * - `tmpl-src` — Specifies a template source file that contains the chart user interface\n * elements.\n * - `symbol` — Provides the primary chart symbol.\n * - `env-container` — Identifies an HTML DOM node (for example \"body\") that is used to\n * contain transient user interface elements such as dialog boxes and color pickers.\n * - `cq-event-flag` — Indicates that an instant chart container has dispatched an event.\n * Enables the container element to be identified so that an event handler can be called for the\n * element. See the *sample-template-multi-charts.html* template for an example.\n *\n * Dispatches a `signal-chart-ready` event. Event listeners typically run a handler that\n * configures the chart.\n *\n * @namespace WebComponents.cq-instant-chart\n *\n * @example\n *
      \n *
      \n */\nclass InstantChart extends HTMLElement {\n\tconnectedCallback() {\n\t\tif (this.hasAttribute(\"attached\")) return;\n\t\tthis.setAttribute(\"attached\", \"\");\n\n\t\tconst self = this;\n\n\t\tconst environmentContainer = this.getAttribute(\"env-container\") || \"body\";\n\t\tconst tmplSrc = this.getAttribute(\"tmpl-src\");\n\t\tlet context = this.querySelector(\"cq-context\");\n\t\tif (!context)\n\t\t\tcontext = this.appendChild(document.createElement(\"cq-context\"));\n\t\tconst noLocalStorage = this.hasAttribute(\"no-save\");\n\n\t\tthis.style.visibility = \"hidden\";\n\n\t\tCIQ.loadUI(tmplSrc, context, function (err) {\n\t\t\tif (err) return;\n\n\t\t\tconst chartTitle = self.querySelector(\"cq-chart-title\");\n\t\t\tif (chartTitle) chartTitle.removeAttribute(\"cq-browser-tab\");\n\n\t\t\tconst elementBlocks = self.querySelectorAll(\n\t\t\t\t\"cq-ui-manager, cq-dialog, cq-color-picker\"\n\t\t\t);\n\t\t\tfor (let eb = 0; eb < elementBlocks.length; eb++) {\n\t\t\t\tconst elementBlock = elementBlocks[eb];\n\t\t\t\telementBlock.parentNode.removeChild(elementBlock);\n\t\t\t\tif (!InstantChart_movedDialogs)\n\t\t\t\t\tdocument\n\t\t\t\t\t\t.querySelector(environmentContainer)\n\t\t\t\t\t\t.appendChild(elementBlock);\n\t\t\t}\n\t\t\tInstantChart_movedDialogs = true;\n\n\t\t\tconst params = {\n\t\t\t\textendedHours: true,\n\t\t\t\trangeSlider: true,\n\t\t\t\tinactivityTimer: true,\n\t\t\t\tfullScreen: false,\n\t\t\t\tinitialSymbol: self.getAttribute(\"symbol\") || undefined,\n\t\t\t\trestore: !noLocalStorage\n\t\t\t};\n\n\t\t\tself.signalEvent = new CustomEvent(\"signal-chart-ready\", {\n\t\t\t\tdetail: { node: self, params }\n\t\t\t});\n\t\t\tself.setAttribute(\"cq-event-flag\", \"\");\n\t\t\tself.style.visibility = \"\";\n\n\t\t\tself.ownerDocument.body.dispatchEvent(self.signalEvent);\n\t\t});\n\t}\n\tdisconnectedCallback() {\n\t\tthis.stx.destroy();\n\t}\n}\n\ncustomElements.define(\"cq-instant-chart\", InstantChart); // do not use addComponentsDefinition for this component!\n\n};\n\n\nlet __js_webcomponents_languageDialog_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\nif (!CIQ.I18N) {\n\tconsole.error(\n\t\t\"languageDialog component requires first activating i18n feature.\"\n\t);\n} else {\n\t/**\n\t * @classdesc\n\t *\n\t * This is a custom HtmlElement (Web Component). The tag name is the following:\n\t *\n\t *

      <cq-language-dialog>

      \n\t *\n\t * Creates a dialog that the user can use to change the language.\n\t *\n\t * The actual language choices are obtained from {@link CIQ.I18N.languages}. Choosing a different language causes the entire\n\t * UI to be translated through use of the {@link CIQ.I18N.setLanguage} method.\n\t *\n\t * The `setHtmlLang` configuration property is used to control whether this component should change the page's default language,\n\t * To disable this functionality, set this attribute to false. This can be done as illustrated in the example below,\n\t *\n\t * _**Emitters**_\n\t *\n\t * A custom event will be emitted from the component when a language is selected.\n\t * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n\t * The details of the event contain the following:\n\t * | property | value |\n\t * | :------- | :---- |\n\t * | emitter | this component |\n\t * | cause | \"useraction\" |\n\t * | effect | \"change\" |\n\t * | action | \"click\" |\n\t * | language | _language code_ |\n\t *\n\t * @example\n\t * \n\t * \n\t * \n\t * \n\t *\n\t * @example Adjust context config to not set <html> `lang` attribute\n\t * stxx.uiContext.config.setHtmlLang = false;\n\t *\n\t * @alias WebComponents.LanguageDialog\n\t * @extends CIQ.UI.DialogContentTag\n\t * @class\n\t * @protected\n\t * @since\n\t * - 4.0.0 New component added.\n\t * - 4.1.0 Now it calls {@link CIQ.I18N.localize} instead of {@link CIQ.I18N.setLocale}.\n\t * - 9.1.0 Added emitter.\n\t * - 9.2.0 Added `cq-set-htmllang` attribute.\n\t */\n\tclass LanguageDialog extends CIQ.UI.DialogContentTag {\n\t\tadoptedCallback() {\n\t\t\tsuper.adoptedCallback();\n\t\t\tCIQ.UI.flattenInheritance(this, LanguageDialog);\n\t\t\tthis.constructor = LanguageDialog;\n\t\t}\n\n\t\t/**\n\t\t * Closes dialog box.\n\t\t *\n\t\t * @tsmember WebComponents.LanguageDialog\n\t\t * @since 4.0.0\n\t\t */\n\t\tclose() {\n\t\t\tconst langDialog = this.ownerDocument.querySelector(\"cq-language-dialog\");\n\t\t\tif (langDialog) langDialog.closest(\"cq-dialog,cq-menu\").close();\n\t\t}\n\n\t\t/**\n\t\t * Opens the language dialog.\n\t\t *\n\t\t * @param {Object} [params] Contains the chart context.\n\t\t * @param {CIQ.UI.Context} [params.context] A context to set for the dialog. See\n\t\t * \t\t{@link CIQ.UI.DialogContentTag#setContext}.\n\t\t *\n\t\t * @tsmember WebComponents.LanguageDialog\n\t\t * @since 4.0.0\n\t\t */\n\t\topen(params) {\n\t\t\tthis.addDefaultMarkup();\n\t\t\tsuper.open(params);\n\n\t\t\tconst cqLanguages = this.querySelector(\"cq-languages\");\n\t\t\t[...cqLanguages.children].forEach((child) => {\n\t\t\t\tif (!child.matches(\"template\")) child.remove();\n\t\t\t});\n\t\t\tconst template = this.querySelector(\"template\");\n\t\t\tconst { languages } = CIQ.I18N;\n\t\t\tif (!languages) return;\n\n\t\t\tconst switchToLanguage = (language) => {\n\t\t\t\treturn () => {\n\t\t\t\t\tCIQ.UI.contextsForEach(function () {\n\t\t\t\t\t\tconst { stx } = this;\n\t\t\t\t\t\tCIQ.I18N.localize(stx, language);\n\t\t\t\t\t\tif (this.config.setHtmlLang)\n\t\t\t\t\t\t\tdocument.documentElement.setAttribute(\"lang\", language);\n\t\t\t\t\t\tstx.preferences.language = language;\n\t\t\t\t\t\tstx.changeOccurred(\"preferences\");\n\t\t\t\t\t\tstx.draw();\n\t\t\t\t\t}, this);\n\t\t\t\t\tCIQ.I18N.translateUI(language, this.dialog);\n\t\t\t\t\tthis.emitCustomEvent({\n\t\t\t\t\t\teffect: \"change\",\n\t\t\t\t\t\tdetail: { language }\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t};\n\t\t\tfor (let langCode in languages) {\n\t\t\t\tconst node = CIQ.UI.makeFromTemplate(template, cqLanguages)[0];\n\t\t\t\tnode.querySelector(\"cq-language-name\").innerText = languages[langCode];\n\t\t\t\tnode.querySelector(\"cq-flag\").setAttribute(\"cq-lang\", langCode);\n\t\t\t\tCIQ.UI.stxtap(node, switchToLanguage(langCode));\n\t\t\t}\n\t\t\t// Set the main dialog as keyboard active to reset the highlight when this panel reloads\n\t\t\tif (this.ownerDocument.body.keystrokeHub) {\n\t\t\t\tlet { tabActiveModals } = this.ownerDocument.body.keystrokeHub;\n\t\t\t\tif (tabActiveModals[0])\n\t\t\t\t\tthis.ownerDocument.body.keystrokeHub.setKeyControlElement(\n\t\t\t\t\t\ttabActiveModals[0]\n\t\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n\t *\n\t * @static\n\t * @type {String}\n\t *\n\t * @tsmember WebComponents.LanguageDialog\n\t */\n\tLanguageDialog.markup = `\n\t\t\n\t\t\t\n\t\t\n\t`;\n\tCIQ.UI.addComponentDefinition(\"cq-language-dialog\", LanguageDialog);\n}\n\n};\n\n\nlet __js_webcomponents_loader_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

      <cq-loader>

      \n *\n * CSS loading icon.\n * The component may be shown or hidden either by calling its `show()` or `hide()` methods; or by adding or removing the `stx-show` class.\n *\n * @alias WebComponents.Loader\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n */\nclass Loader extends CIQ.UI.ContextTag {\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, Loader);\n\t}\n\n\t/**\n\t * Shows the loading icon.\n\t *\n\t * @tsmember WebComponents.Loader\n\t */\n\tshow() {\n\t\tthis.classList.add(\"stx-show\");\n\t}\n\n\t/**\n\t * Hides the loading icon.\n\t *\n\t * @tsmember WebComponents.Loader\n\t */\n\thide() {\n\t\tthis.classList.remove(\"stx-show\");\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.Loader\n\t */\n\tsetContext(context) {\n\t\tcontext.setLoader(this);\n\t\tthis.hide();\n\t}\n}\n\nCIQ.UI.addComponentDefinition(\"cq-loader\", Loader);\n\n};\n\n\nlet __js_webcomponents_lookup_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\nif (!CIQ.ChartEngine.Driver) {\n\tconsole.error(\n\t\t\"lookup component requires first activating quoteFeed feature.\"\n\t);\n} else if (!CIQ.ChartEngine.Driver.Lookup) {\n\tconsole.error(\n\t\t\"lookup component requires first activating symbolLookupBase feature.\"\n\t);\n} else {\n\t/**\n\t * @classdesc\n\t *\n\t * This is a custom HtmlElement (Web Component). The tag name is the following:\n\t *\n\t *

      <cq-lookup>

      \n\t *\n\t * This component presents a search input for the user to enter either a ticker symbol or a part\n\t * of the symbol's description. Results of the search are presented in a dropdown for the user to choose. \n\t *\n\t * A {@link CIQ.ChartEngine.Driver.Lookup} must be connected to this web component. The lookup\n\t * driver searches financial exchanges for symbols that match the text entered in the\n\t * component's input field.\n\t *\n\t * The symbol lookup can be toggled using the Ctrl+Alt+S keystroke combination (see the\n\t * `symbolLookup` action in `hotkeyConfig.hotkeys` in *js/defaultConfiguration.js*).\n\t *\n\t * A default lookup driver is specified in the chart configuration object (see the\n\t * Chart Configuration\n\t * tutorial).\n\t *\n\t * You can provide a different driver in the following ways:\n\t * - Assign the driver to the\n\t * \n\t * lookupDriver property of the chart configuration\n\t * object\n\t * - Connect the driver to this component using\n\t * [setDriver]{@link WebComponents.Lookup#setDriver}\n\t * - Add the driver to the UI context with {@link CIQ.UI.Context#setLookupDriver}\n\t *\n\t * **Note:** If the lookup component is unable to access a lookup driver, the component's\n\t * input field is active, but the component does not produce results.\n\t *\n\t * _**Keyboard control**_\n\t *\n\t * When selected with tab key navigation and activated with Return/Enter, this component has\n\t * the following internal controls:\n\t * - Up/Down arrow — Move selection between search input, filters, and search results\n\t * - Left/Right arrow — Switch between search result filters\n\t *\n\t * _**Attributes**_\n\t *\n\t * This component observes the following attributes and will change behavior if these attributes are modified:\n\t * | attribute | description |\n\t * | :------------------- | :---------- |\n\t * | cq-keystroke-default | Enables the component to respond to keystrokes when the lookup input field does not have focus.

      **Warning:** This feature may conflict with keyboard shortcuts set in other components. |\n\t * | cq-uppercase | Forces text to uppercase. |\n\t * | cq-exchanges | Comma-delimited list of financial exchanges searched by the lookup driver. Overrides the `exchanges` parameter of {@link CIQ.ChartEngine.Driver.Lookup}. |\n\t *\n\t * In addition, the following attributes are also supported:\n\t * | attribute | description |\n\t * | :------------------- | :---------- |\n\t * | cq-keystroke-claim | Enables processing of keyboard input. |\n\t *\n\t * _**Emitters**_\n\t *\n\t * A custom event will be emitted by the component when a search is performed.\n\t * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n\t * The details of the event contain the following:\n\t * | property | value |\n\t * | :------- | :---- |\n\t * | emitter | this component |\n\t * | cause | \"useraction\" |\n\t * | effect | \"search\" |\n\t * | action | \"input\" |\n\t * | value | _search string_ |\n\t * | filter | _filter_ |\n\t * | exchanges | _exchange list_ |\n\t *\n\t * A custom event will be emitted by the component when a result is selected.\n\t * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n\t * The details of the event contain the following:\n\t * | property | value |\n\t * | :------- | :---- |\n\t * | emitter | this component |\n\t * | cause | \"useraction\" |\n\t * | effect | \"select\" |\n\t * | action | \"click\" |\n\t * | data | _symbol or symbolObject_ |\n\t *\n\t *\n\t * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n\t * The default markup provided has accessibility features.\n\t *\n\t * _**Customization**_\n\t *\n\t * - To hide the lookup results window, modify the CSS as follows:\n\t * ```css\n\t * .stxMenuActive cq-lookup-results { opacity: 0 }\n\t * ```\n\t *\n\t * - To preload default results (rather than an empty result pane) on initial load, set an\n\t * `onChartReady` handler in the chart configuration object (see the\n\t * Chart Configuration\n\t * tutorial); for example:\n\t *\n\t * ```\n\t * config.onChartReady = (stx) => {\n\t * const defaultResults = [\n\t * {\n\t * \"display\": [\"KW\", \"Kennedy - Wilson Holdings Inc\", \"NYSE\"],\n\t * \"data\": {\n\t * \"symbol\": \"KW\",\n\t * \"name\": \"Kennedy - Wilson Holdings Inc\",\n\t * \"exchDisp \": \"NYSE\"\n\t * }\n\t * },\n\t * {\n\t * \"display\": [\"RWR\", \"SPDR Series Trust - SPDR DJ Wilshire REIT ETF\", \"NYSEArca\"],\n\t * \"data\": {\n\t * \"symbol\": \"RWR\",\n\t * \"name\": \"SPDR Series Trust - SPDR DJ Wilshire REIT ETF\",\n\t * \"exchDisp\": \"NYSEArca\"\n\t * }\n\t * }\n\t * ];\n\t *\n\t * const UISymbolLookup = document.querySelector(\".ciq-search cq-lookup\");\n\t * UISymbolLookup.results(defaultResults);\n\t * }\n\t * ````\n\t *\n\t * - The placeholder is programmatically set based on the width of the chart.\n\t * On larger screens \"Enter Symbol\" is used, but on smaller screens only \"Symbol\" is used.\n\t * As such, it is not sufficient to set a placeholder value on the HTML, as it will be overwritten by the Web Component logic.\n\t * The following script will update the placeholder according to breakpoint values set in placeholderMapping.\n\t * It should be placed inside the [onWebComponentsReady]{@tutorial Chart Configuration} callback provided in the\n\t * `defaultConfiguration` object to ensure it is executed once all Web Components have been properly initialized.\n\t * The approach here is to add a second breakpoint channel listener for the lookup component that overwrites the value set by default in the library.\n\t *\n\t * ```\n\t * function setLookupPlaceholders(placeholderMapping = {\n\t * \"break-lg\": \"Change symbol\",\n\t * \"break-md\": \"+ symbol\",\n\t * \"break-sm\": \"\"\n\t * }) {\n\n \t * Array.from(uiContext.topNode.querySelectorAll('cq-lookup'))\n \t * .forEach(el => {\n\t * const { channels = {} } = el.context.config;\n\t * el.channelSubscribe(\n\t * channels.breakpoint || \"channel.breakpoint\",\n\t * (breakPoint) => {\n\t * const symbolValue = placeholderMapping[breakpoint] || \"Change symbol\";\n\t *\n\t * const symbolInput = el.querySelector(\"input\");\n\t * symbolInput.setAttribute(\"placeholder\", symbolValue);\n\t * );\n\t * });\n\t * });\n\t * }\n\t * setLookupPlaceholders();\n\t * ```\n\t *\n\t * @example Markup for lookup component\n\t * \n\t * \t\t\n\t * \n\t *\n\t * @alias WebComponents.Lookup\n\t * @extends CIQ.UI.ContextTag\n\t * @class\n\t * @protected\n\t * @since\n\t * - 4.0.0 Added optional `cq-uppercase` attribute.\n\t * - 7.4.0 Added optional `cq-exchanges` attribute.\n\t * - 8.3.0 Enabled internal keyboard navigation and selection.\n\t * - 9.1.0 Observes attributes. Added emitter.\n\t */\n\tclass Lookup extends CIQ.UI.ContextTag {\n\t\tstatic get observedAttributes() {\n\t\t\treturn [\"cq-exchanges\", \"cq-keystroke-default\", \"cq-uppercase\"];\n\t\t}\n\n\t\tconstructor() {\n\t\t\tsuper();\n\t\t\tthis.usingEmptyDriver = false;\n\t\t\tthis.currentFilter = null;\n\t\t\t// Will hold references to filter tabs for keyboard navigation\n\t\t\tthis.filterElements = null;\n\t\t\tthis.params = {};\n\t\t\tthis.overrideIsActive = false;\n\t\t\t//CIQ.UI.stxtap(this, () => {}); // forces composed path to be from within this element\n\t\t\tCIQ.UI.makeShadow(this);\n\t\t}\n\n\t\tconnectedCallback() {\n\t\t\tif (!this.isConnected || this.attached) return;\n\t\t\tsuper.connectedCallback();\n\t\t\tthis.attached = true;\n\t\t\tthis.setupShadow();\n\t\t}\n\n\t\tadoptedCallback() {\n\t\t\tsuper.adoptedCallback();\n\t\t\tCIQ.UI.flattenInheritance(this, Lookup);\n\t\t\tthis.constructor = Lookup;\n\t\t}\n\n\t\tdisconnectedCallback() {\n\t\t\tif (this.doNotDisconnect) return;\n\t\t\tthis.removeClaim(this);\n\t\t\tsuper.disconnectedCallback();\n\t\t}\n\n\t\t/**\n\t\t * Performs the search of symbols based on the parameters input.\n\t\t *\n\t\t * With the decoupling of the uiHelper to the Lookup.Driver you must be sure to include both an argument for maxResults and the closure to handle the results.\n\t\t * maxResults must either be a number or a string to result in default value of 100.\n\t\t *\n\t\t * @param {string} value String to search for.\n\t\t * @param {string} filter Name of exchange to limit results to. The valid names are implementation-specific.\n\t\t *\n\t\t * @tsmember WebComponents.Lookup\n\t\t * @since 3.0.0\n\t\t */\n\t\tacceptText(value, filter) {\n\t\t\tif (!this.params.driver) {\n\t\t\t\tif (this.context.lookupDriver) {\n\t\t\t\t\tthis.setDriver(this.context.lookupDriver);\n\t\t\t\t} else {\n\t\t\t\t\tthis.setDriver(new CIQ.ChartEngine.Driver.Lookup());\n\t\t\t\t\tthis.usingEmptyDriver = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst closure = (results) => {\n\t\t\t\tthis.params.driver.exchanges = this.params.driver.exchanges;\n\t\t\t\tthis.results(results);\n\t\t\t};\n\t\t\tconst exchanges = this[\"cq-exchanges\"];\n\t\t\tif (exchanges) this.params.driver.exchanges = exchanges.split(\",\");\n\t\t\tthis.emitCustomEvent({\n\t\t\t\teffect: \"search\",\n\t\t\t\tdetail: { value, filter, exchanges }\n\t\t\t});\n\t\t\tthis.params.driver.acceptText(value, filter, null, closure);\n\t\t}\n\n\t\t/**\n\t\t * Closes the results list dropdown and passes the chosen symbol to be loaded onto the chart.\n\t\t *\n\t\t * @param {object} params\n\t\t * @param {HTMLElement} params.node The element within the results list containing the chosen result.\n\t\t *\n\t\t * @tsmember WebComponents.Lookup\n\t\t */\n\t\tchooseResult({ node }) {\n\t\t\tCIQ.blur(this.input);\n\t\t\tthis.selectItem(node.params.data);\n\t\t\tthis.input.value = \"\";\n\t\t\tsetTimeout(this.close.bind(this));\n\t\t}\n\n\t\t/**\n\t\t * Closes the results list dropdown.\n\t\t *\n\t\t * @tsmember WebComponents.Lookup\n\t\t */\n\t\tclose() {\n\t\t\tif (this.keyboardNavigation) {\n\t\t\t\t// Position the highlight over the input to wait for the collapse animation to complete\n\t\t\t\tthis.highlightItem(\n\t\t\t\t\tthis.input,\n\t\t\t\t\t1000 * (this.getOpenCloseTransition() || 0)\n\t\t\t\t);\n\n\t\t\t\t// Remove any focused property from the filter tabs\n\t\t\t\tthis.removeFocused(this.filterElements);\n\t\t\t\t// Remove keyboard control from container\n\t\t\t\tthis.resultList.keyboardNavigation = null;\n\t\t\t} else {\n\t\t\t\t// Reset the highlight in the event that tab navigation is activated while the lookup is open\n\t\t\t\tconst keystrokeHub = this.ownerDocument.body.keystrokeHub;\n\t\t\t\tif (keystrokeHub) setTimeout(() => keystrokeHub.highlightAlign(), 250);\n\t\t\t}\n\t\t\tconst menu = CIQ.climbUpDomTree(this, \"cq-dialog,cq-menu\", true)[0];\n\t\t\tif (menu) menu.close();\n\t\t}\n\n\t\t/**\n\t\t * Takes whatever was input in the search box and uses it as the symbol to load the chart.\n\t\t *\n\t\t * @tsmember WebComponents.Lookup\n\t\t */\n\t\tforceInput() {\n\t\t\tconst input = this.input;\n\t\t\tthis.selectItem({ symbol: input.value });\n\t\t\tCIQ.blur(input);\n\t\t\tthis.close();\n\t\t\tinput.value = \"\";\n\t\t}\n\n\t\t/**\n\t\t * Finds the width transition for the input box, which is used when focusing or unfocusing the search input.\n\t\t *\n\t\t * @return {String} Found transition value\n\t\t * @private\n\t\t *\n\t\t * @tsmember WebComponents.Lookup\n\t\t */\n\t\tgetOpenCloseTransition() {\n\t\t\tlet { transition } = getComputedStyle(this);\n\t\t\tif (transition) {\n\t\t\t\ttransition = transition.match(/width ((\\d{1,4}\\.)?\\d{1,4})s/);\n\t\t\t\tif (transition) transition = transition[1];\n\t\t\t}\n\t\t\treturn transition;\n\t\t}\n\n\t\t/**\n\t\t * Creates the markup of the component, and sets up event handlers.\n\t\t *\n\t\t * @tsmember WebComponents.Lookup\n\t\t */\n\t\tinitialize() {\n\t\t\tconst { root } = this;\n\t\t\tthis.addDefaultMarkup();\n\t\t\tthis.resultList = root.querySelector(\"cq-dropdown\");\n\n\t\t\tthis.input = root.querySelector(\"input\");\n\t\t\tif (!this.input) {\n\t\t\t\tconst hiddenInput = document.createElement(\"input\");\n\t\t\t\thiddenInput.setAttribute(\"type\", \"hidden\");\n\t\t\t\thiddenInput.value = \"\";\n\t\t\t\tthis.input = root.appendChild(hiddenInput);\n\t\t\t}\n\t\t\tCIQ.UI.stxtap(this.input, function () {\n\t\t\t\tthis.focus();\n\t\t\t});\n\t\t\tconst self = this;\n\t\t\tArray.from(this.input).forEach(function (input) {\n\t\t\t\tinput.addEventListener(\"paste\", function (e) {\n\t\t\t\t\tconst input = e.target;\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tself.acceptText(input.value, self.currentFilter);\n\t\t\t\t\t}, 0);\n\t\t\t\t});\n\t\t\t});\n\t\t\tconst filters = root.querySelectorAll(\".filters > *\");\n\t\t\tif (filters) {\n\t\t\t\tfilters.forEach(function (filter) {\n\t\t\t\t\tself.makeTap(filter, function () {\n\t\t\t\t\t\tfilters.forEach(function (f) {\n\t\t\t\t\t\t\tf.classList.remove(\"true\");\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis.classList.add(\"true\");\n\t\t\t\t\t\tself.currentFilter =\n\t\t\t\t\t\t\tthis.getAttribute(\"cq-translate-original\") || this.innerHTML;\n\t\t\t\t\t\tself.acceptText(self.input.value, self.currentFilter);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.hasAttribute(\"cq-keystroke-claim\")) {\n\t\t\t\t// add keyboard claim for entire body\n\t\t\t\tthis.addClaim(this);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns active state of the search input box.\n\t\t *\n\t\t * @return {boolean} True if active\n\t\t *\n\t\t * @tsmember WebComponents.Lookup\n\t\t */\n\t\tisActive() {\n\t\t\treturn this.input.value !== \"\";\n\t\t}\n\n\t\t/**\n\t\t * Handler for keyboard interaction.\n\t\t *\n\t\t * Note that this captures keystrokes on the body. If the input box is focused then we need to allow the input box itself\n\t\t * to handle the strokes but we still want to capture them in order to display the lookup results. We first check\n\t\t * activeElement to see if the input is focused. If so then we bypass logic that manipulates the input.value. In order make\n\t\t * sure that the lookup menu is responding to an up-to-date input.value therefore we have to put all of those pieces of code\n\t\t * in setTimeout(0)\n\t\t *\n\t\t * Note that when comparisons are enabled, there are two Lookup components on the screen. Each keypress will therefore pass\n\t\t * through this function twice, once for each Lookup component. Only the active component will process the keystroke.\n\t\t *\n\t\t * @param {CIQ.UI.KeystrokeHub} hub The hub that processed the key\n\t\t * @param {string} key Key that was stroked\n\t\t * @param {Event} e The event object\n\t\t * @param {CIQ.UI.Keystroke} keystroke Contains status of function keys\n\t\t * @return {boolean} true if keystroke was processed\n\t\t *\n\t\t * @tsmember WebComponents.Lookup\n\t\t */\n\t\tkeyStroke(hub, key, e, keystroke) {\n\t\t\tif (keystroke.ctrl || keystroke.cmd) return false;\n\t\t\tif (key == \"Meta\" || key == \"Win\") return false;\n\n\t\t\tconst input = this.input;\n\t\t\tconst activeElement = CIQ.getActiveElement();\n\t\t\tconst focused = activeElement === input; // If focused then we need to allow the input box to get most keystrokes\n\t\t\tlet result = false;\n\t\t\t// Rejecting alt key combinations only when the input is out of focus because some special chars can be typed with an alt key\n\t\t\tif (\n\t\t\t\t!focused &&\n\t\t\t\t(e.altKey ||\n\t\t\t\t\t(activeElement &&\n\t\t\t\t\t\t(activeElement.tagName == \"INPUT\" ||\n\t\t\t\t\t\t\tactiveElement.tagName == \"TEXTAREA\")))\n\t\t\t) {\n\t\t\t\treturn false; // either an alt key combination was pressed or some other input has focus\n\t\t\t}\n\n\t\t\tlet iAmActive = false,\n\t\t\t\tiAmDisplayed = false;\n\t\t\tconst menu = CIQ.climbUpDomTree(this, \".stxMenuActive\", true)[0];\n\n\t\t\tif (menu) iAmDisplayed = true; // if my menu chain is active then I'm alive\n\t\t\tif (focused || iAmDisplayed) iAmActive = true; // If my input is focused or I'm displayed, then I'm alive\n\t\t\tif (!iAmActive) {\n\t\t\t\t// Otherwise, I may still be alive under certain conditions\n\t\t\t\tif (!this[\"cq-keystroke-default\"]) return; // I'm always alive if I have default body keystrokes\n\t\t\t\tif (!iAmDisplayed && this.uiManager.topMenu()) return; // unless there's another menu active and it isn't me\n\t\t\t}\n\t\t\tif ((key === \" \" || key === \"Spacebar\") && input.value === \"\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tlet focusedElements = this.findFocused(this.filterElements);\n\n\t\t\tswitch (key) {\n\t\t\t\tcase \"Delete\":\n\t\t\t\tcase \"Backspace\":\n\t\t\t\tcase \"Del\":\n\t\t\t\t\tif (input.value.length) {\n\t\t\t\t\t\t//ctrl-a or highlight all text + delete implies remove all text\n\t\t\t\t\t\tif (window.getSelection().toString()) {\n\t\t\t\t\t\t\tinput.value = \"\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (!focused)\n\t\t\t\t\t\t\t\tinput.value = input.value.substring(0, input.value.length - 1);\n\t\t\t\t\t\t\tif (input.value.length) {\n\t\t\t\t\t\t\t\tthis.acceptText(input.value, this.currentFilter);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult = true; // only capture delete key if there was something to delete\n\t\t\t\t\t}\n\t\t\t\t\tif (key == \"Backspace\") result = true; // always capture backspace because otherwise chrome will navigate back\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Escape\":\n\t\t\t\tcase \"Esc\":\n\t\t\t\t\tinput.value = \"\";\n\t\t\t\t\tthis.close();\n\t\t\t\t\tCIQ.blur(input);\n\t\t\t\t\tresult = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Enter\":\n\t\t\t\t\tif (this.resultList.focused()) {\n\t\t\t\t\t\tinput.value = \"\";\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (activeElement === input) {\n\t\t\t\t\t\tlet { value } = input;\n\t\t\t\t\t\tconst toUpperCase =\n\t\t\t\t\t\t\t[\"false\", \"0\", null].indexOf(this[\"cq-uppercase\"]) == -1;\n\t\t\t\t\t\tif (toUpperCase) value = value.toUpperCase();\n\t\t\t\t\t\tthis.selectItem({ symbol: value });\n\t\t\t\t\t\tCIQ.blur(input);\n\t\t\t\t\t\tthis.close();\n\t\t\t\t\t\tinput.value = \"\";\n\t\t\t\t\t}\n\t\t\t\t\tif (this[\"cq-keystroke-default\"]) result = true;\n\t\t\t\t\telse result = this.qsa(\"[cq-focused]\", this, true).length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ArrowRight\":\n\t\t\t\tcase \"Right\":\n\t\t\t\t\tif (focusedElements.length) {\n\t\t\t\t\t\t// Remove control from the result list\n\t\t\t\t\t\tif (this.resultList.keyboardNavigation)\n\t\t\t\t\t\t\tthis.resultList.keyboardNavigation = null;\n\t\t\t\t\t\t// Ignore right if a tab is not focused to allow cursor movement in input\n\t\t\t\t\t\tthis.focusNextItem(this.filterElements);\n\t\t\t\t\t\tthis.clickFocusedItem(this.filterElements, e);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ArrowLeft\":\n\t\t\t\tcase \"Left\":\n\t\t\t\t\t// Remove control from the result list\n\t\t\t\t\tif (this.resultList.keyboardNavigation)\n\t\t\t\t\t\tthis.resultList.keyboardNavigation = null;\n\t\t\t\t\t// Ignore left if a tab is not focused to allow cursor movement in input\n\t\t\t\t\tif (focusedElements.length) {\n\t\t\t\t\t\tthis.focusNextItem(this.filterElements, true);\n\t\t\t\t\t\tthis.clickFocusedItem(this.filterElements, e);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ArrowDown\":\n\t\t\t\tcase \"Down\":\n\t\t\t\t\t// Up/Down arrows are only used in this component when keyboard navigation is enabled\n\t\t\t\t\tif (!this.keyboardNavigation) break;\n\t\t\t\t\t// If no tab is focused, then give the first one focus, otherwise, pass control to the resultList\n\t\t\t\t\tfocusedElements = this.findFocused(this.filterElements);\n\t\t\t\t\tif (!focusedElements.length) {\n\t\t\t\t\t\t// If a tab hasn't been focused, highlight the active one.\n\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\tlet filterIdx = 0;\n\t\t\t\t\t\t\tfilterIdx < this.filterElements.length;\n\t\t\t\t\t\t\tfilterIdx++\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst filterElement = this.filterElements[filterIdx];\n\t\t\t\t\t\t\tif (filterElement.classList.contains(\"true\")) {\n\t\t\t\t\t\t\t\tthis.focusItem(filterElement);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!this.resultList.keyboardNavigation) {\n\t\t\t\t\t\t// Only pass control to the result list if there are results\n\t\t\t\t\t\tconst resultItem = this.qsa(\n\t\t\t\t\t\t\t\"[keyboard-selectable]\",\n\t\t\t\t\t\t\tthis.resultList,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t)[0];\n\t\t\t\t\t\tif (resultItem) {\n\t\t\t\t\t\t\tthis.resultList.keyboardNavigation = this.keyboardNavigation;\n\t\t\t\t\t\t\tthis.focusItem(resultItem);\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tCIQ.blur(input);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ArrowUp\":\n\t\t\t\tcase \"Up\":\n\t\t\t\t\t// Up/Down arrows are only used in this component when keyboard navigation is enabled\n\t\t\t\t\tif (!this.keyboardNavigation) break;\n\t\t\t\t\t// resultList has its own up/down control.\n\t\t\t\t\tif (this.resultList.keyboardNavigation) {\n\t\t\t\t\t\t// If the scroll has control, check for the top item selected and move highlight back to the tabs\n\t\t\t\t\t\tconst firstResult = this.qsa(\n\t\t\t\t\t\t\t\".item:first-of-type [cq-focused]\",\n\t\t\t\t\t\t\tthis.resultList,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t)[0];\n\t\t\t\t\t\tif (firstResult) {\n\t\t\t\t\t\t\tfirstResult.removeAttribute(\"cq-focused\");\n\t\t\t\t\t\t\tthis.resultList.keyboardNavigation = null;\n\t\t\t\t\t\t\tthis.highlightFocusedItem(this.filterElements);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (focusedElements.length) {\n\t\t\t\t\t\t//If a tab has the highlight, reset the highlight back to the input\n\t\t\t\t\t\tthis.removeFocused(focusedElements);\n\t\t\t\t\t\tthis.highlightItem(input);\n\t\t\t\t\t\tCIQ.focus(input);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t// Prevent keys like Control and ArrowLeft from triggering focus\n\t\t\t\t\tif (key.length === 1) {\n\t\t\t\t\t\t// Changes the value when keystrokes are registered against the body.\n\t\t\t\t\t\tif (!focused) input.value = input.value + key;\n\t\t\t\t\t\tthis.acceptText(input.value, this.currentFilter);\n\t\t\t\t\t\tresult = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (result) {\n\t\t\t\t// If we're focused, then keep the lookup open unless we hit escape.\n\t\t\t\t// Otherwise, if there is no length close it (user hit \"escape\", \"enter\", or \"backspace/delete\" while unfocused)\n\t\t\t\tif (\n\t\t\t\t\tthis.usingEmptyDriver ||\n\t\t\t\t\t(!input.value.length &&\n\t\t\t\t\t\t(key == \"Escape\" || key == \"Esc\" || key == \"Enter\" || !focused))\n\t\t\t\t) {\n\t\t\t\t\tthis.close();\n\t\t\t\t} else {\n\t\t\t\t\tthis.open();\n\t\t\t\t}\n\t\t\t\tif (focused) return { allowDefault: true };\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Opens the results list dropdown.\n\t\t *\n\t\t * @tsmember WebComponents.Lookup\n\t\t */\n\t\topen() {\n\t\t\t// Reposition the highlight after css animation is complete.\n\t\t\tthis.highlightItem(\n\t\t\t\tthis.input,\n\t\t\t\t1000 * (this.getOpenCloseTransition() || 0)\n\t\t\t);\n\t\t\tconst menu = CIQ.climbUpDomTree(this, \"cq-dialog,cq-menu\", true)[0];\n\t\t\tif (menu) menu.open({ e: { target: this } });\n\t\t}\n\n\t\t/**\n\t\t * Handler for when losing keyboard focus.\n\t\t *\n\t\t * @tsmember WebComponents.Lookup\n\t\t */\n\t\tonKeyboardDeselection() {\n\t\t\tCIQ.blur(this.input);\n\t\t\tthis.close();\n\t\t\t// If we're using keyboard navigation, return the highlight to the tab selected element\n\t\t\tif (this.keyboardNavigation) this.keyboardNavigation.highlightPosition();\n\t\t\tthis.resultList.keyboardNavigationWait = false;\n\t\t}\n\n\t\t/**\n\t\t * Handler for when gaining keyboard focus.\n\t\t *\n\t\t * @tsmember WebComponents.Lookup\n\t\t */\n\t\tonKeyboardSelection() {\n\t\t\t// If we're using keyboard navigation, return the highlight to the tab selected element\n\t\t\tthis.highlightItem(this.input);\n\t\t\tCIQ.focus(this.input);\n\t\t\tthis.resultList.keyboardNavigationWait = true;\n\t\t\tthis.open();\n\t\t}\n\n\t\t/**\n\t\t * Clear out the input and results list.\n\t\t *\n\t\t * @tsmember WebComponents.Lookup\n\t\t */\n\t\treset() {\n\t\t\tthis.input[0].value = \"\";\n\t\t\tthis.resultList.empty();\n\t\t}\n\n\t\t/**\n\t\t * Displays an array of results returned by the {@link CIQ.ChartEngine.Driver.Lookup}.\n\t\t *\n\t\t * Each element in the array should be in the following format (see\n\t\t * {@link CIQ.ChartEngine.Driver.Lookup#acceptText}):\n\t\t * ```\n\t\t * {\n\t\t * display: [\"symbol ID\", \"symbol description\", \"exchange\"],\n\t\t * data: {\n\t\t * symbol: \"symbol ID\",\n\t\t * name: \"symbol description\",\n\t\t * exchDis: \"exchange\"\n\t\t * }\n\t\t * }\n\t\t * ```\n\t\t *\n\t\t * The lookup component by default displays three columns as represented by the array. The\n\t\t * data object can be a format required by your quote feed, or it can be a simple string\n\t\t * if you just need to support a stock symbol.\n\t\t *\n\t\t * @param {array} arr The array of results.\n\t\t *\n\t\t * @tsmember WebComponents.Lookup\n\t\t */\n\t\tresults(arr) {\n\t\t\tconst container = this.root.querySelector(\"cq-dropdown\");\n\t\t\tconst helper = CIQ.UI.BaseComponent.getHelper(this, \"MenuConfig\");\n\t\t\tif (container && helper) {\n\t\t\t\tconst id = CIQ.uniqueID();\n\t\t\t\tconst content = [];\n\t\t\t\tarr.forEach((item) => {\n\t\t\t\t\tconst [sym, desc, exch] = item.display;\n\t\t\t\t\tconst label = `${sym}${desc}${exch}`;\n\t\t\t\t\tconst result = {\n\t\t\t\t\t\ttype: \"item\",\n\t\t\t\t\t\tlabel,\n\t\t\t\t\t\ttap: \"chooseResult\",\n\t\t\t\t\t\tdata: item.data\n\t\t\t\t\t};\n\t\t\t\t\tcontent.push(result);\n\t\t\t\t});\n\t\t\t\thelper[id] = { content };\n\t\t\t\tcontainer.setAttribute(\"config\", id);\n\t\t\t\tdelete helper[this.lastResultId];\n\t\t\t\tthis.lastResultId = id;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Accepts a new symbol or symbol object.\n\t\t *\n\t\t * @param {object} data Contains a symbol or symbol object in a form accepted by\n\t\t * \t\t{@link CIQ.ChartEngine#loadChart}.\n\t\t * @param {function} fn Function to execute when the callback set by\n\t\t * \t\t[setCallback]{@link WebComponents.Lookup#setCallback} finishes.\n\t\t *\n\t\t * @since 8.2.0 Removed the `params` parameter. Added the `fn` parameter.\n\t\t *\n\t\t * @tsmember WebComponents.Lookup\n\t\t */\n\t\tselectItem(data, fn) {\n\t\t\tif (this.params.cb) {\n\t\t\t\tthis.params.cb(data, fn);\n\t\t\t}\n\t\t\tif (data)\n\t\t\t\tthis.emitCustomEvent({\n\t\t\t\t\taction: \"input\",\n\t\t\t\t\teffect: \"select\",\n\t\t\t\t\tdetail: data\n\t\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Sets a callback function to be called when the user selects a symbol.\n\t\t *\n\t\t * @param {function} cb The callback function; for example, an implementation of\n\t\t * \t\t{@link CIQ.UI.Context#changeSymbol}.\n\t\t *\n\t\t * @tsmember WebComponents.Lookup\n\t\t */\n\t\tsetCallback(cb) {\n\t\t\tthis.params.cb = cb;\n\t\t}\n\n\t\t/**\n\t\t * Called for a registered component when the context is constructed.\n\t\t * Sets the context property of the component.\n\t\t *\n\t\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t\t *\n\t\t * @tsmember WebComponents.Lookup\n\t\t */\n\t\tsetContext(context) {\n\t\t\tthis.initialize();\n\n\t\t\tconst { config, stx } = context;\n\t\t\tif (!config) return;\n\t\t\tconst { channels = {} } = config;\n\n\t\t\tthis.channelSubscribe(\n\t\t\t\tchannels.breakpoint || \"channel.breakpoint\",\n\t\t\t\t(breakPoint) => {\n\t\t\t\t\tlet placeholder = stx.crossSection\n\t\t\t\t\t\t? stx.crossSection.symbolInputType\n\t\t\t\t\t\t: \"Symbol\";\n\t\t\t\t\tif (breakPoint === \"break-lg\") {\n\t\t\t\t\t\tplaceholder = \"Enter \" + placeholder;\n\t\t\t\t\t} else if (breakPoint === \"break-sm\") {\n\t\t\t\t\t\tplaceholder = \"\";\n\t\t\t\t\t}\n\t\t\t\t\tthis.input.setAttribute(\n\t\t\t\t\t\t\"cq-translate-placeholder-original\",\n\t\t\t\t\t\tplaceholder\n\t\t\t\t\t);\n\t\t\t\t\tthis.input.setAttribute(\"placeholder\", stx.translateIf(placeholder));\n\t\t\t\t\tif (stx.translateUI) stx.translateUI(this.input.parentElement);\n\t\t\t\t\tthis.root.querySelector(\"cq-dropdown\").resize();\n\t\t\t\t}\n\t\t\t);\n\n\t\t\t// Get a list of filter tabs for keyboard navigation\n\t\t\tthis.filterElements = this.root.querySelectorAll(\".filters > *\");\n\n\t\t\tif (!this.params.cb && context.changeSymbol)\n\t\t\t\tthis.params.cb = context.changeSymbol;\n\t\t}\n\n\t\t/**\n\t\t * Called for a registered component when the context is changed in a multichart environment.\n\t\t *\n\t\t * @param {CIQ.UI.Context} newContext The chart user interface context.\n\t\t *\n\t\t * @tsmember WebComponents.Lookup\n\t\t */\n\t\tchangeContext(newContext) {\n\t\t\tif (this.params.cb && newContext.changeSymbol)\n\t\t\t\tthis.params.cb = newContext.changeSymbol;\n\t\t}\n\n\t\t/**\n\t\t * Connects a {@link CIQ.ChartEngine.Driver.Lookup} to the web component.\n\t\t *\n\t\t * The lookup driver searches financial exchanges for symbols that match the text entered\n\t\t * in the component's input field.\n\t\t *\n\t\t * @param {CIQ.ChartEngine.Driver.Lookup} driver The lookup driver to connect to the web\n\t\t * \t\tcomponent.\n\t\t *\n\t\t * @tsmember WebComponents.Lookup\n\t\t */\n\t\tsetDriver(driver) {\n\t\t\tthis.params.driver = driver;\n\t\t}\n\t}\n\n\t/**\n\t * Default markup for the comparison legend's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n\t *\n\t * @static\n\t * @type {String}\n\t *\n\t * @tsmember WebComponents.Lookup\n\t */\n\tLookup.markup = `\n\t\t

      \n\t\t\t\n\t\t\t\n\t\t\t
      Search
      \n\t\t
      \n\t\t
      \n\t\t\t
        \n\t\t\t\t
      • ALL
      • \n\t\t\t\t
      • STOCKS
      • \n\t\t\t\t
      • FX
      • \n\t\t\t\t
      • INDEXES
      • \n\t\t\t\t
      • FUNDS
      • \n\t\t\t\t
      • FUTURES
      • \n\t\t\t
      \n\t\t\t\n\t\t
      \n\t`;\n\tCIQ.UI.addComponentDefinition(\"cq-lookup\", Lookup);\n}\n\n};\n\n\nlet __js_webcomponents_lookupDialog_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\n\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

      <cq-lookup-dialog>

      \n *\n * This dialog allows the search and selection of securities to load on the chart.\n * It supports both primary and secondary series (comparison) selection.\n *\n * _**Attributes**_\n *\n * This component observes the following attributes and will change behavior if these attributes are modified:\n * | attribute | description |\n * | :----------- | :---------- |\n * | filter | Security type filter for search results. |\n *\n * In addition, the following attributes are also supported:\n * | attribute | description |\n * | :--------------- | :---------- |\n * | comparison | INdicates that the dialog is for secondary series (comparisons). |\n * | cq-maintain-case | Set to something falsey to force capitalization of symbol. |\n *\n * _**Emitters**_\n *\n * A custom event will be emitted by the component whenever the search input is changed.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"search\" |\n * | action | \"input\" |\n * | value | _search string_ |\n *\n * A custom event will be emitted by the component whenever the search string is activated (the symbol is loaded).\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"select\" |\n * | action | \"click\" |\n * | symbol | _symbol_ |\n * | name | _symbol description_ |\n * | exchDisp | _symbol exchange_ |\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * @alias WebComponents.LookupDialog\n * @extends CIQ.UI.DialogContentTag\n * @class\n * @protected\n * @since\n * - 8.8.0\n * - 9.1.0 Added emitter.\n */\nclass LookupDialog extends CIQ.UI.DialogContentTag {\n\tstatic get observedAttributes() {\n\t\treturn [\"filter\"];\n\t}\n\n\tconstructor(params = {}) {\n\t\tsuper();\n\t\tthis.params = params;\n\t\tthis.swatchColors = CIQ.UI.defaultSwatchColors;\n\t\tthis.initialized = false;\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, LookupDialog);\n\t\tthis.constructor = LookupDialog;\n\t}\n\n\tdisconnectedCallback() {\n\t\tif (this.doNotDisconnect) return;\n\t\tthis.removeClaim(this);\n\t\tsuper.disconnectedCallback();\n\t}\n\n\t/**\n\t * Processes attribute changes. This is called whenever an observed attribute has changed.\n\t *\n\t * @param {string} name Attribute name\n\t * @param {string} oldValue Original attribute value\n\t * @param {string} newValue new Attribute value\n\t *\n\t * @tsmember WebComponents.LookupDialog\n\t */\n\thandlePropertyChange(name, oldValue, newValue) {\n\t\tif (newValue === oldValue) return;\n\t\tthis[name] = newValue;\n\t\tswitch (name) {\n\t\t\tcase \"filter\":\n\t\t\t\tif (this.form) {\n\t\t\t\t\tconst { filter, symbol } = this.form.elements;\n\t\t\t\t\tfilter.value = newValue;\n\t\t\t\t\tthis.acceptText(symbol.value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/**\n\t * Handles accepted text by the input and sends text to Lookup Driver.\n\t * Passes results to {@link WebComponents.LookupDialog#results}.\n\t *\n\t * @param {string} value Input text\n\t *\n\t * @tsmember WebComponents.LookupDialog\n\t */\n\tacceptText(value) {\n\t\tthis.params.driver.acceptText(value, this.filter, null, (results) =>\n\t\t\tthis.results(results)\n\t\t);\n\t\tthis.emitCustomEvent({\n\t\t\taction: \"input\",\n\t\t\teffect: \"search\",\n\t\t\tdetail: { value }\n\t\t});\n\t}\n\n\t/**\n\t * Opens the dialog tag and displays it over the chart. Works with the dialog channel.\n\t * @param {object} params Dialog box parameters.\n\t * @param {CIQ.UI.Context} params.context The chart user interface context.\n\t * @param {HTMLElement} [params.caller] caller element that triggered the opening.\n\t *\n\t * @tsmember WebComponents.LookupDialog\n\t *\n\t * @since 9.0.0 respect caller element cq-maintain-case for symbols added from input box.\n\t */\n\topen(params) {\n\t\tconst { caller, context } = params;\n\n\t\tconst isComparison = caller && caller.hasAttribute(\"comparison\");\n\t\tif (isComparison && !context.stx.chart.symbol) {\n\t\t\treturn;\n\t\t}\n\t\tthis.maintainCase =\n\t\t\tcaller &&\n\t\t\t![\"false\", \"0\", null].includes(caller.getAttribute(\"cq-maintain-case\"));\n\t\tsuper.open(params);\n\t\tthis.isComparison = isComparison;\n\t\tthis.dialog.setTitle(isComparison ? \"Add Comparison\" : \"Symbol Lookup\");\n\n\t\tif (isComparison) {\n\t\t\tthis.input.parentElement.parentElement.classList.add(\"comparison\");\n\t\t\tCIQ.UI.pickSwatchColor(this, this.swatch);\n\t\t} else {\n\t\t\tthis.input.parentElement.parentElement.classList.remove(\"comparison\");\n\t\t}\n\n\t\tif (!this.filter) {\n\t\t\tconst element = this.filters.firstElementChild;\n\t\t\tthis.currentFilter = element;\n\t\t\tthis.filter = element.innerText;\n\t\t\telement.classList.add(\"true\");\n\t\t\telement.ariaChecked = \"true\";\n\t\t}\n\n\t\tthis.dialog.setAttribute(\"native-tabbing\", true);\n\t\tsetTimeout(() => {\n\t\t\t// input is not in viewport until after parent dialog opens\n\t\t\tthis.input.focus();\n\t\t}, 10);\n\t}\n\n\t/**\n\t * Closes the dialog and resets the input.\n\t *\n\t * @tsmember WebComponents.LookupDialog\n\t */\n\tclose() {\n\t\tthis.channelWrite(\"channel.lookup\", false, this.context.stx);\n\t\tthis.input.value = \"\";\n\n\t\tsuper.close();\n\t}\n\n\t/**\n\t * Hides the dialog. This performs UI cleanup of the color picker.\n\t *\n\t * @tsmember WebComponents.LookupDialog\n\t */\n\thide() {\n\t\tif (this.swatch.colorPicker) this.swatch.colorPicker.close();\n\t}\n\n\t/**\n\t * Initializes the component the first time it has been opened.\n\t * Sets all the default markup and adds listeners.\n\t *\n\t * @tsmember WebComponents.LookupDialog\n\t */\n\tinitialize() {\n\t\tthis.addDefaultMarkup();\n\n\t\tthis.form = this.querySelector(\"form\");\n\t\tthis.input = this.querySelector(\"cq-lookup-input input\");\n\t\tthis.filters = this.querySelector(\"cq-lookup-filters\");\n\t\tthis.resultList = this.querySelector(\".ciq-lookup-results\");\n\t\tthis.resultTemplate = this.querySelector(\"template#lookupResult\");\n\t\tthis.swatch = this.querySelector(\"cq-swatch\");\n\t\tthis.submit = this.querySelector(\"[type=submit]\");\n\n\t\tthis.input.addEventListener(\"input\", (e) => {\n\t\t\tthis.acceptText(e.target.value);\n\t\t});\n\n\t\tthis.form.addEventListener(\"submit\", (e) => {\n\t\t\te.preventDefault();\n\t\t\tthis.selectItem(this.input.value);\n\t\t});\n\n\t\tthis.onClose = () => this.reset();\n\n\t\tthis.initialized = true;\n\n\t\tif (CIQ.UI.scrollbarStyling) {\n\t\t\tCIQ.UI.scrollbarStyling.refresh(this.resultList, {\n\t\t\t\tmaxScrollbarLength: 500\n\t\t\t});\n\t\t}\n\n\t\tthis.addClaim(this);\n\t\tthis.filters.addEventListener(\"click\", this.setFilter.bind(this));\n\t\tthis.filters.addEventListener(\"mousedown\", (e) => {\n\t\t\tthis.context.stx.ownerWindow.requestAnimationFrame(() => e.target.blur());\n\t\t});\n\t\tthis.verticalStructure = LookupDialog.verticalStructure.map((selector) => {\n\t\t\treturn this.querySelector(selector);\n\t\t});\n\t}\n\n\t/**\n\t * Resets the dialog back to its default state with no search results\n\t *\n\t * @tsmember WebComponents.LookupDialog\n\t */\n\treset() {\n\t\tconst { input, resultList } = this;\n\t\tinput.value = \"\";\n\n\t\twhile (resultList.firstChild) {\n\t\t\tresultList.removeChild(resultList.firstChild);\n\t\t}\n\t}\n\n\t/**\n\t * Processes the results returned from the {@link CIQ.ChartEngine.Driver.Lookup}\n\t * @param {object[]} resultsArr\n\t *\n\t * @tsmember WebComponents.LookupDialog\n\t */\n\tresults(resultsArr) {\n\t\tconst { resultList } = this;\n\n\t\twhile (resultList.firstChild) {\n\t\t\tresultList.removeChild(resultList.firstChild);\n\t\t}\n\n\t\tthis.input.ariaExpanded = \"false\";\n\n\t\tresultsArr.forEach((result) => {\n\t\t\tconst li = document.createElement(\"li\");\n\t\t\tlet { data, display } = result;\n\n\t\t\tli.classList.add(\"result\");\n\n\t\t\t// Filter data by display array;\n\t\t\tlet show = Object.entries(data).filter((entry) => {\n\t\t\t\treturn display.find((d) => entry[1] === d);\n\t\t\t});\n\t\t\tli.innerHTML = itemize(\n\t\t\t\tshow\n\t\t\t\t\t.map((entry) => {\n\t\t\t\t\t\treturn `${entry[1]}`;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\"\")\n\t\t\t);\n\n\t\t\t// Use stxtap so that scrolling doesn't select the item.\n\t\t\tCIQ.UI.stxtap(li.firstChild, () => this.selectItem(data));\n\t\t\tresultList.append(li);\n\t\t});\n\n\t\tthis.input.ariaExpanded = \"true\";\n\n\t\tfunction itemize(inner) {\n\t\t\treturn `${inner}`;\n\t\t}\n\t}\n\n\t/**\n\t * Function that triggers when an item is selected from either the input or results list.\n\t *\n\t * @param {string|object} value Either the value of the item selected or a symbolObject containing the symbol.\n\t *\n\t * @tsmember WebComponents.LookupDialog\n\t *\n\t * @since 8.8.0 `value` param accepts a string or symbolObject.\n\t */\n\tselectItem(value) {\n\t\tconst symbolObject = (value.symbol && value) || { symbol: value };\n\t\tlet symbolValue = value.symbol || value;\n\t\t// Do not allow a symbol that is empty or white space.\n\t\tif (\n\t\t\t!symbolValue ||\n\t\t\ttypeof symbolValue !== \"string\" ||\n\t\t\t!symbolValue.trim().length\n\t\t)\n\t\t\treturn;\n\n\t\t// Capitalize the symbol unless cq-maintain-case is set on invoking element\n\t\tif (!this.maintainCase) symbolValue = symbolValue.toUpperCase();\n\t\tsymbolObject.symbol = symbolValue;\n\n\t\tconst { stx, changeSymbol } = this.context;\n\t\tconst { symbol } = stx.chart;\n\n\t\tif (this.isComparison) {\n\t\t\t// Do not allow a comparison of the same symbol as the main chart\n\t\t\tif (symbol.toLowerCase() === symbolValue.toLowerCase()) {\n\t\t\t\tstx.dispatch(\"notification\", \"duplicatesymbol\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tstx.addSeries(symbolValue, {\n\t\t\t\tname: \"comparison \" + symbolValue,\n\t\t\t\tsymbolObject,\n\t\t\t\tcolor: this.swatch.style.backgroundColor,\n\t\t\t\tisComparison: true\n\t\t\t});\n\t\t} else {\n\t\t\tchangeSymbol(symbolObject);\n\t\t}\n\t\tthis.emitCustomEvent({\n\t\t\teffect: \"select\",\n\t\t\tdetail: value.symbol ? value : { symbol: value }\n\t\t});\n\t\tthis.close();\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.LookupDialog\n\t */\n\tsetContext(context) {\n\t\tthis.context = context;\n\n\t\tthis.dialog = this.closest(\"cq-dialog\");\n\t\tthis.dialog.setAttribute(\"native-tabbing\", true);\n\n\t\tif (!this.params.driver) this.setDriver(context.lookupDriver);\n\t\tif (!this.initialized) this.initialize();\n\t}\n\n\t/**\n\t * Sets a selected filter as the active filter that is applied to {@link WebComponents.LookupDialog#acceptText}\n\t *\n\t * @param {PointerEvent} e Emitted pointer event\n\t *\n\t * @tsmember WebComponents.LookupDialog\n\t */\n\tsetFilter(e) {\n\t\tif (this.currentFilter) this.currentFilter.classList.remove(\"true\");\n\t\tthis.currentFilter.ariaChecked = \"false\";\n\n\t\tconst src = e.target;\n\t\te.preventDefault();\n\n\t\tsrc.classList.add(\"true\");\n\t\tsrc.ariaChecked = \"true\";\n\t\tthis.filter = src.innerText;\n\t\tthis.currentFilter = src;\n\t}\n\n\t/**\n\t * Connects a {@link CIQ.ChartEngine.Driver.Lookup} to the web component.\n\t *\n\t * The lookup driver searches financial exchanges for symbols that match the text entered\n\t * in the component's input field.\n\t *\n\t * @param {CIQ.ChartEngine.Driver.Lookup} driver The lookup driver to connect to the web\n\t * \t\tcomponent.\n\t *\n\t * @tsmember WebComponents.LookupDialog\n\t */\n\tsetDriver(driver) {\n\t\tthis.params.driver = driver;\n\t}\n\n\t/**\n\t * Handle the keystroke event to keyboard navigate the dialog.\n\t * Arrow keys and Enter are supported.\n\t *\n\t * @param {CIQ.UI.KeystrokeHub} hub The hub that processed the key\n\t * @param {string} key Key that was stroked\n\t * @param {Event} e The event object\n\t * @return {boolean} true if keystroke was processed\n\t *\n\t * @tsmember WebComponents.LookupDialog\n\t */\n\tkeyStroke(hub, key, e) {\n\t\t// Allow Dialog to handle color picker\n\t\tconst topMenu = this.context.uiManager.topMenu();\n\t\tif (topMenu && topMenu.matches(\"cq-color-picker\")) return;\n\n\t\tconst active = this.ownerDocument.activeElement;\n\t\tconst parent = active.parentElement;\n\t\tconst findIdx = (items) => items.findIndex((item) => item === active);\n\t\tlet items, idx, next, target;\n\t\tconst vertialIdx = this.verticalStructure.findIndex((i) => {\n\t\t\treturn i.contains(active);\n\t\t});\n\n\t\tconst isItem = active.matches(\"cq-item\");\n\t\tconst isRadio = active.matches(\"[role=radio]\");\n\t\tswitch (key) {\n\t\t\tcase \"ArrowDown\":\n\t\t\tcase \"Down\":\n\t\t\t\tif (isRadio) {\n\t\t\t\t\ttarget = active.nextElementSibling;\n\t\t\t\t\tif (target) break;\n\t\t\t\t}\n\t\t\t\tif (isItem) {\n\t\t\t\t\titems = this.naturalTabElements(this.resultList);\n\t\t\t\t\tidx = findIdx(items);\n\t\t\t\t\ttarget = items[idx + 1];\n\t\t\t\t} else {\n\t\t\t\t\tnext = this.verticalStructure[vertialIdx + 1];\n\t\t\t\t\ttarget = this.naturalTabElements(next)[0];\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"ArrowUp\":\n\t\t\tcase \"Up\":\n\t\t\t\tif (isRadio) {\n\t\t\t\t\ttarget = active.previousElementSibling;\n\t\t\t\t\tif (target) break;\n\t\t\t\t}\n\t\t\t\tif (isItem) {\n\t\t\t\t\titems = this.naturalTabElements(this.resultList);\n\t\t\t\t\tidx = findIdx(items);\n\t\t\t\t\ttarget = items[idx - 1];\n\t\t\t\t\t// Break out of the top of the resultList\n\t\t\t\t\tif (idx === 0) {\n\t\t\t\t\t\tnext = this.verticalStructure[vertialIdx - 1];\n\t\t\t\t\t\ttarget = this.naturalTabElements(next)[0];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnext = this.verticalStructure[vertialIdx - 1];\n\t\t\t\t\ttarget = this.naturalTabElements(next)[0];\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"ArrowLeft\":\n\t\t\tcase \"Left\":\n\t\t\t\ttarget = active.previousElementSibling;\n\t\t\t\tbreak;\n\n\t\t\tcase \"ArrowRight\":\n\t\t\tcase \"Right\":\n\t\t\t\ttarget = active.nextElementSibling;\n\t\t\t\tbreak;\n\n\t\t\tcase \"Enter\":\n\t\t\t\tif (parent === this.filters) this.setFilter(e);\n\t\t\t\tif (active === this.input || active === this.submit) {\n\t\t\t\t\tif (this.form.requestSubmit) this.form.requestSubmit();\n\t\t\t\t\telse this.form.dispatchEvent(new Event(\"submit\"));\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tif (target) {\n\t\t\tthis.removeFocused(items);\n\t\t\tthis.focusItem(target);\n\t\t}\n\t}\n}\n\n/**\n * Defines order of subsections within the component.\n *\n * @static\n * @type {String[]}\n *\n * @tsmember WebComponents.LookupDialog\n */\nLookupDialog.verticalStructure = [\n\t\"cq-lookup-input\",\n\t\"cq-lookup-filters\",\n\t\".ciq-lookup-results\"\n];\n\n/**\n * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.LookupDialog\n */\nLookupDialog.markup = `\n\t
      \n\t\t
      \n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t
      \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t
      \n\t
        \n\t\n\t`;\nCIQ.UI.addComponentDefinition(\"cq-lookup-dialog\", LookupDialog);\n\n};\n\n\nlet __js_webcomponents_marker_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-marker>

        \n *\n * This is an implementation of the ContextTag that gets positioned as a marker.\n * This is similar the `cq-marker` attribute found on some webcomponents, except sometimes there\n * is a need to identify a certain group of DOM nodes as a marker.\n * For this reason, this component wraps around the DOM nodes in order that it be converted into a marker.\n *\n * @example Full-screen navigation menu as marker\n * \t\n *\t\t\n *\t\t\n *\t\t\n *\t\t\n *\t\t\n *\t\t\n *\t\n *\n * @alias WebComponents.Marker\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n * @since 9.1.0\n */\nclass Marker extends CIQ.UI.ContextTag {\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, Marker);\n\t}\n}\n\nCIQ.UI.addComponentDefinition(\"cq-marker\", Marker);\n\n};\n\n\nlet __js_webcomponents_measurementLineSettingsDialog_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-measurementline-settings-dialog>

        \n *\n * Additional dialog for setting measurement line settings, specifically what is to appear in the callout for the measurement line drawing tool.\n *\n * A custom event will be emitted from the component when any of its fields are changed.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"select\" |\n * | action | \"click\" |\n * | field | _name of field toggled_ |\n * | value | _true or false_ |\n *\n * @alias WebComponents.MeasurementlineSettingsDialog\n * @extends CIQ.UI.DialogContentTag\n * @class\n * @protected\n * @since\n * - 8.9.0\n * - 9.1.0 Added emitter.\n */\nclass MeasurementlineSettingsDialog extends CIQ.UI.DialogContentTag {\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, MeasurementlineSettingsDialog);\n\t\tthis.constructor = MeasurementlineSettingsDialog;\n\t}\n\n\t/**\n\t * Ensures that when the dialog is opened the input field is populated with the correct value.\n\t * Also installs a listener to report changes to the value so the drawing can get updated.\n\t *\n\t * @param {Object} params parameters\n\t * @param {HTMLElement} params.caller The HTML element that triggered this dialog to open\n\t * @since 8.9.0\n\t *\n\t * @tsmember WebComponents.MeasurementlineSettingsDialog\n\t */\n\topen(params) {\n\t\tthis.addDefaultMarkup();\n\t\tsuper.open(params);\n\n\t\tif (params) this.opener = params.caller;\n\t\tconst { currentVectorParameters: vectorParams } = this.context.stx;\n\t\tconst settings = vectorParams.measurementline || {};\n\t\tconst inputFieldHover = this.querySelector(\n\t\t\t'div[fieldname=\"hoverdisplay\"] input'\n\t\t);\n\t\tinputFieldHover.checked = settings.calloutOnHover;\n\t\tif (inputFieldHover.changeHandler)\n\t\t\tinputFieldHover.removeEventListener(\n\t\t\t\t\"change\",\n\t\t\t\tinputFieldHover.changeHandler\n\t\t\t);\n\n\t\tinputFieldHover.changeHandler = ({ target }) => {\n\t\t\tconst checkedState = target.checked;\n\n\t\t\tsettings.calloutOnHover = checkedState;\n\t\t\tconst event = new Event(\"change\", {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: true\n\t\t\t});\n\t\t\tthis.opener.dispatchEvent(event);\n\t\t\tthis.emitCustomEvent({\n\t\t\t\teffect: \"select\",\n\t\t\t\tdetail: {\n\t\t\t\t\tfield: \"hoverdisplay\",\n\t\t\t\t\tvalue: checkedState\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tinputFieldHover.addEventListener(\"change\", inputFieldHover.changeHandler);\n\n\t\tObject.keys(settings.displayGroups).forEach((groupName) => {\n\t\t\tconst inputField = this.querySelector(\n\t\t\t\t`div[fieldname=\"${groupName}\"] input`\n\t\t\t);\n\t\t\tif (!inputField) return;\n\t\t\tinputField.checked = settings.displayGroups[groupName];\n\t\t\tinputField.groupName = groupName;\n\t\t\tif (inputField.changeHandler)\n\t\t\t\tinputField.removeEventListener(\"change\", inputField.changeHandler);\n\n\t\t\tinputField.changeHandler = ({ target }) => {\n\t\t\t\tconst { checked, groupName } = target;\n\n\t\t\t\tsettings.displayGroups[groupName] = checked;\n\t\t\t\tconst event = new Event(\"change\", {\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcancelable: true\n\t\t\t\t});\n\t\t\t\tthis.opener.dispatchEvent(event);\n\t\t\t\tthis.emitCustomEvent({\n\t\t\t\t\teffect: \"select\",\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\tfield: groupName,\n\t\t\t\t\t\tvalue: checked\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tinputField.addEventListener(\"change\", inputField.changeHandler);\n\t\t});\n\t}\n}\n\n/**\n * Default markup for the comparison legend's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.MeasurementlineSettingsDialog\n */\nMeasurementlineSettingsDialog.markup = `\n\t\n\t\t
        \n\t\t\t
        Display Info on Hover
        \n\t\t\t
        \n\t\t\t\t\n\t\t\t
        \n\t\t
        \n\n\t\t
        \n\t\t\t
        # Bars
        \n\t\t\t
        \n\t\t\t\t\n\t\t\t
        \n\t\t
        \n\t\t
        \n\t\t\t
        Delta (% Delta)
        \n\t\t\t
        \n\t\t\t\t\n\t\t\t
        \n\t\t
        \n\t\t
        \n\t\t\t
        Annualized %
        \n\t\t\t
        \n\t\t\t\t\n\t\t\t
        \n\t\t
        \n\t\t\n\t\t
        \n\t\t\t
        Volume
        \n\t\t\t
        \n\t\t\t\t\n\t\t\t
        \n\t\t
        \n\t\t
        \n\t\t\t
        Studies
        \n\t\t\t
        \n\t\t\t\t\n\t\t\t
        \n\t\t
        \n\t
        \n\t
        \n\t\t
        Done
        \n\t
        \n`;\nCIQ.UI.addComponentDefinition(\n\t\"cq-measurementline-settings-dialog\",\n\tMeasurementlineSettingsDialog\n);\n\n};\n\n\nlet __js_webcomponents_menu_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-menu>

        \n *\n * When tapped/clicked, this component will reveal or hide a dropdown menu.\n * The component is represented by either text, an icon, both, or either depending on the browser dimensions.\n *\n * _**Attributes**_\n *\n * This component observes the following attributes and will change behavior if these attributes are modified:\n * | attribute | description |\n * | :---------- | :---------- |\n * | binding | Helper function to call which will register a listener when the menu is opened/closed. Usually used to reflect the current menu selection as text or an icon. |\n * | config | Key pointing to a configuration file entry which specifies the menu options. |\n * | help-id | A key to the correct help text in CIQ.Help.Content. |\n * | icon | Class name for image to use for the menu. |\n * | reader | Accessibility text when focused by a screen reader. If omitted, will use value of `text` attribute. |\n * | responsive | Set this attribute if the text displayed on this component should change to an icon when the viewport's dimensions are reduced. |\n * | state | The current state of the menu. |\n * | text | Displayed label for this menu. |\n * | tooltip | Text for the tooltip which appears when hovering over the component. |\n * | lift-dropdown | Lifts dropdown to the top level of the css stacking context. |\n *\n * Do not include the `icon` or `text` attributes if you don't want any icon or text, respectively.\n *\n * In addition, the following attributes are also supported:\n * | attribute | description |\n * | :---------- | :---------- |\n * | cq-focus | A selector to an element within the menu for which to provide focus. |\n * | cq-no-close | Set to true to force the menu to stay open when clicking on something in it (deprecated). |\n *\n * If no markup is specified in the menu component, a default markup will be provided.\n * In order to use the default markup, the selections in the menu's dropdown must be configured in the chart configuration file and specified\n * by key in the `config` attribute. See example.\n *\n * _**Emitters**_\n *\n * A custom event will be emitted by the component when it is opened or closed.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"open\", \"close\" |\n * | action | \"click\" |\n *\n * `cause` and `action` are set only when the menu is opened or closed as a direct result of clicking on the component.\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * @example Menu with binding:\n * \n * @example Menu with responsive icon:\n * \n * @example Sample configuration of a menu:\n * // set the menu component's config attribute to \"example\"\n * // This is documented further in the cq-dropdown component\n * stxx.uiContext.config.menus.example = {\n * \t\tcontent: [\n *\t\t\t{ type: \"radio\", label: \"Show Dynamic Callout\", setget: \"Layout.HeadsUp\", value: \"dynamic\" },\n *\t\t\t{ type: \"radio\", label: \"Show Tooltip\", setget: \"Layout.HeadsUp\", feature: \"tooltip\", value: \"floating\" }\n * \t\t]\n * };\n *\n * @alias WebComponents.Menu\n * @extends CIQ.UI.BaseComponent\n * @class\n * @protected\n * @since\n * - 9.1.0 Observes attributes. Added emitter.\n */\nclass Menu extends CIQ.UI.BaseComponent {\n\tstatic get observedAttributes() {\n\t\treturn [\n\t\t\t\"binding\",\n\t\t\t\"config\",\n\t\t\t\"help-id\",\n\t\t\t\"icon\",\n\t\t\t\"reader\",\n\t\t\t\"responsive\",\n\t\t\t\"state\",\n\t\t\t\"text\",\n\t\t\t\"tooltip\",\n\t\t\t\"lift-dropdown\"\n\t\t];\n\t}\n\n\t/**\n\t * READ ONLY. The value of the `cq-focus` attribute.\n\t *\n\t * @type {String}\n\t * @since 7.5.0\n\t * @tsmember WebComponents.Menu\n\t * @tsdeclaration\n\t * const focusElement : String\n\t */\n\tget focusElement() {\n\t\treturn this.getAttribute(\"cq-focus\");\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tCIQ.UI.makeShadow(this);\n\t\tthis.activeClassName = \"stxMenuActive\";\n\t\tthis.active = false;\n\t\tthis.adjustLiftPosition = this.adjustLiftPosition.bind(this);\n\t}\n\n\tconnectedCallback() {\n\t\tif (!this.isConnected || this.attached) return;\n\t\tsuper.connectedCallback();\n\n\t\tthis.uiManager = CIQ.UI.getUIManager(this);\n\n\t\tif (this.isShadowComponent && this.children.length) {\n\t\t\twhile (this.children.length) {\n\t\t\t\tthis.root.appendChild(this.firstChild);\n\t\t\t}\n\t\t}\n\t\tthis.markup = this.trimInnerHTMLWhitespace();\n\t\tthis.usingMarkup = !!this.markup.match(/\\{\\{(.{1,20}?)\\}\\}/g);\n\t\tthis.setMarkup();\n\t\tthis.setupShadow();\n\n\t\tif (!this.listenersAdded) {\n\t\t\tthis.addEventListener(\"stxtap\", (e) => this.captureTap(e), true);\n\t\t\tCIQ.UI.stxtap(this, (e) => this.tap(e));\n\t\t\tthis.listenersAdded = true;\n\t\t}\n\n\t\twindow.addEventListener(\"resize\", this.adjustLiftPosition);\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, Menu);\n\t\tthis.constructor = Menu;\n\t}\n\n\t/**\n\t * Processes attribute changes. This is called whenever an observed attribute has changed.\n\t *\n\t * @param {string} name Attribute name\n\t * @param {string} oldValue Original attribute value\n\t * @param {string} newValue new Attribute value\n\t *\n\t * @tsmember WebComponents.Menu\n\t */\n\thandlePropertyChange(name, oldValue, newValue) {\n\t\tif (oldValue === newValue) return;\n\t\tthis[name] = newValue;\n\t\tconst isLifted = this.lifts;\n\t\tif (isLifted) this.unlift();\n\t\tif (name === \"state\") this.processStateChange();\n\t\telse if (this.usingMarkup) {\n\t\t\tthis.setMarkup();\n\t\t} else {\n\t\t\t// do nothing when using predefined content\n\t\t}\n\t\tif (isLifted) this.lift();\n\t}\n\n\tdisconnectedCallback() {\n\t\tif (this.doNotDisconnect) return;\n\t\twindow.removeEventListener(\"resize\", this.adjustLiftPosition);\n\t\tsuper.disconnectedCallback();\n\t}\n\n\t/**\n\t * Captures a tap event *before* it descends down to what it is clicked on. The key thing this does is determine\n\t * whether the thing clicked on was inside of a \"cq-no-close\" section. We do this on the way down, because the act\n\t * of clicking on something may release it from the dom, making it impossible to figure out on propagation.\n\t * @param {Event} e Event\n\t * @private\n\t *\n\t * @tsmember WebComponents.Menu\n\t */\n\tcaptureTap(e) {\n\t\tconst clickedMenuIcons = () => {\n\t\t\tconst bounds = this.getBoundingClientRect();\n\t\t\treturn (\n\t\t\t\te.pageX >= bounds.left &&\n\t\t\t\te.pageX <= bounds.right &&\n\t\t\t\te.pageY >= bounds.top &&\n\t\t\t\te.pageY <= bounds.bottom\n\t\t\t);\n\t\t};\n\n\t\t// Determine if the tapped element has menu persistence enabled\n\t\tconst composedPath = e.composedPath();\n\t\t// this === composedPath[0] means that means user clicked on non-clickable portion of dropdown, if clickedMenuIcons() returns false\n\t\tthis.noClose =\n\t\t\t(this === composedPath[0] && !clickedMenuIcons()) ||\n\t\t\tcomposedPath.some((el) => {\n\t\t\t\tconst attr = el.getAttribute && el.getAttribute(\"cq-no-close\");\n\t\t\t\treturn (\n\t\t\t\t\t(attr !== null && attr !== undefined && attr !== \"false\") ||\n\t\t\t\t\t(el.params && el.params.menuPersist)\n\t\t\t\t);\n\t\t\t});\n\n\t\t// Old stuff\n\t\t// Determine if the tapped element was inside of something untappable, like a cq-heading or cq-separator\n\t\tif (!this.noClose) {\n\t\t\tthis.noClose = e.composedPath().some((el) => {\n\t\t\t\treturn el.matches && el.matches(\"cq-separator,cq-heading\");\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Closes the menu. This call will be passed to the UI Manager to close any parent menus.\n\t *\n\t * @tsmember WebComponents.Menu\n\t */\n\tclose() {\n\t\tthis.uiManager.closeMenu(this);\n\t}\n\n\t/**\n\t * Returns the menu to its collapsed state. This will restore any lifts as well.\n\t * This is called indirectly by {@link WebComponents.Menu#close}.\n\t *\n\t * @tsmember WebComponents.Menu\n\t */\n\thide() {\n\t\tif (!this.active) return;\n\t\tthis.unlift();\n\t\tthis.classList.remove(this.activeClassName);\n\t\tthis.setAriaPressed();\n\t\tconst screenReaderButton = this.root.querySelector(\"[aria-expanded]\");\n\t\tif (screenReaderButton) screenReaderButton.ariaExpanded = false;\n\t\tthis.active = false;\n\t\tthis.state = \"closed\";\n\t\t// blur any input boxes that are inside the menu we're closing, to get rid of soft keyboard\n\t\tthis.qsa(\"input\", this, true).forEach((i) => {\n\t\t\tif (i === CIQ.getActiveElement()) i.blur();\n\t\t});\n\t\tthis.root.querySelectorAll(\"cq-lookup\").forEach((s) => {\n\t\t\ts.classList.remove(\"active\");\n\t\t});\n\t\t// Disable keyboardNavigation controls in the dropdown\n\t\tconst dropdown = this.root.querySelector(\"cq-dropdown, cq-menu-dropdown\");\n\t\tif (dropdown) {\n\t\t\tdropdown.disablekeyboardNavigation();\n\t\t}\n\t\tif (this.ownerDocument.body.keystrokeHub) {\n\t\t\tlet { tabActiveModals } = this.ownerDocument.body.keystrokeHub;\n\t\t\tif (tabActiveModals[0])\n\t\t\t\tthis.ownerDocument.body.keystrokeHub.setKeyControlElement(\n\t\t\t\t\ttabActiveModals[0]\n\t\t\t\t);\n\t\t}\n\n\t\t// Close the lookup component\n\t\tconst lookup = this.root.querySelector(\"cq-lookup\");\n\t\tif (lookup) lookup.close();\n\t}\n\n\t/**\n\t * Repositions any menus which are nested within another menu or dialog so that they do not get cut off by their container's\n\t * boundaries. Lifts are menu dropdowns which have an attribute `cq-lift`.\n\t *\n\t * @tsmember WebComponents.Menu\n\t */\n\tlift() {\n\t\tconst findLifts = () => {\n\t\t\treturn [...this.querySelectorAll(\"*[cq-lift]\")].filter((lift) => {\n\t\t\t\t// only valid if the closest cq-menu or cq-dialog parent is the menu itself\n\t\t\t\t// otherwise the lift is in a nested menu\n\t\t\t\treturn CIQ.climbUpDomTree(lift, \"cq-menu,cq-dialog\", true)[0] == this;\n\t\t\t});\n\t\t};\n\t\tconst context = CIQ.UI.getMyContext(this);\n\t\tconst lifts = (this.lifts = findLifts());\n\t\tlifts.forEach((lift) => {\n\t\t\t// The lifted menu will no longer inherit the active theme class. Attach it directly to the element.\n\t\t\tif (context && context.config && context.config.themes) {\n\t\t\t\tlet themes = Object.keys(context.config.themes.builtInThemes);\n\t\t\t\t// First remove any existing theme classes on the dialog\n\t\t\t\tlift.classList.remove(...themes);\n\t\t\t\tlet activeTheme = themes.find(\n\t\t\t\t\t(r) => context.topNode.classList.contains(r) === true\n\t\t\t\t);\n\t\t\t\t// Add the active theme class to the dialog\n\t\t\t\tif (activeTheme) lift.classList.add(activeTheme);\n\t\t\t}\n\n\t\t\tconst scrollElement = lift.closest(\"cq-scroll\"); // TODO: cq-dialog has built-in scrolling? Change element\n\t\t\tif (scrollElement) {\n\t\t\t\tlift.boundResize = lift.resize.bind(lift);\n\t\t\t\tscrollElement.addEventListener(\"scroll\", this.adjustLiftPosition);\n\t\t\t\tscrollElement.addEventListener(\"scroll\", lift.boundResize);\n\t\t\t}\n\n\t\t\tthis.uiManager.lift(lift);\n\t\t\tlift.remember.scrollParent = scrollElement;\n\t\t\t// Focus the lifted menu\n\t\t\tsetTimeout(() => {\n\t\t\t\tconst root = lift.contentRoot || lift;\n\t\t\t\troot.tabIndex = -1;\n\t\t\t\troot.focus();\n\t\t\t}, 10);\n\t\t\tthis.adjustLiftPosition();\n\t\t});\n\t}\n\n\t/**\n\t * Computes the positioning for lifted menu dropdowns.\n\t *\n\t * @tsmember WebComponents.Menu\n\t */\n\tadjustLiftPosition() {\n\t\tif (!this.lifts) return;\n\t\tthis.lifts.forEach((lift) => {\n\t\t\tconst { parentNode } = lift.remember;\n\t\t\tconst rect = parentNode.getBoundingClientRect();\n\t\t\tconst PARENT_BORDER_WIDTH = 1;\n\n\t\t\tlift.style.top = rect.bottom - PARENT_BORDER_WIDTH + \"px\";\n\t\t\tlift.style.left = rect.left + \"px\";\n\t\t});\n\t}\n\n\t/**\n\t * Callback handler for when the keyboard navigation is removed from the element.\n\t * This implementation closes the menu.\n\t *\n\t * @tsmember WebComponents.Menu\n\t */\n\tonKeyboardDeselection() {\n\t\tthis.close();\n\t}\n\n\t/**\n\t * Opens the menu. This call will be passed to the UI Manager to handle any overhead associated with menu opening.\n\t *\n\t * @param {object} params Menu configuration parameters\n\t * @param {Event} params.e The event triggering the menu open.\n\t *\n\t * @tsmember WebComponents.Menu\n\t */\n\topen(params) {\n\t\tthis.uiManager.openMenu(this, params);\n\t}\n\n\t/**\n\t * Opens or closes the menu if the attribute changes.\n\t * @private\n\t *\n\t * @tsmember WebComponents.Menu\n\t */\n\tprocessStateChange() {\n\t\tswitch (this.state) {\n\t\t\tcase \"open\":\n\t\t\t\tif (!this.active) this.open();\n\t\t\t\tbreak;\n\t\t\tcase \"closed\":\n\t\t\t\tif (this.active) this.close();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\t\tthis.emitCustomEvent({\n\t\t\taction: this.clicked ? \"click\" : null,\n\t\t\teffect: this.state\n\t\t});\n\t}\n\n\t/**\n\t * Sets the content.\n\t *\n\t * @param {object[]} content Menu content.\n\t * @param {boolean} [lift] Set to true to lift the menu dropdown.\n\t *\n\t * @tsmember WebComponents.Menu\n\t */\n\tsetContent(content, lift) {\n\t\tthis.content = content;\n\t\tthis.liftAttribute = lift;\n\t\tif (this.attached) this.setMarkup();\n\t}\n\n\t/**\n\t * Sets the aria-pressed attribute.\n\t *\n\t * @param {boolean} [on] Set to true to set the aria attribute.\n\t *\n\t * @tsmember WebComponents.Menu\n\t */\n\tsetAriaPressed(on) {\n\t\tconst ariaElem = this.root.querySelector(\"[aria-pressed]\");\n\t\tif (ariaElem) {\n\t\t\tariaElem.ariaPressed = !!on;\n\t\t}\n\t}\n\n\t/**\n\t * Initializes the inner HTML of the component when the component is attached to the DOM without any existing inner HTML.\n\t *\n\t * @tsmember WebComponents.Menu\n\t */\n\tsetMarkup() {\n\t\tconst { children } = this.root;\n\t\tif (!children.length || this.usingMarkup) {\n\t\t\tthis.usingMarkup = true;\n\t\t\tif (children.length) {\n\t\t\t\t[...children].forEach((child) => {\n\t\t\t\t\tif (![\"LINK\", \"STYLE\"].includes(child.tagName)) child.remove();\n\t\t\t\t});\n\t\t\t}\n\t\t\tlet markup = this.markup || this.constructor.markup;\n\t\t\tconst names = markup.match(/\\{\\{(.{1,20}?)\\}\\}/g);\n\t\t\tif (names)\n\t\t\t\tnames.forEach((name) => {\n\t\t\t\t\tconst key = name.substring(2, name.length - 2);\n\t\t\t\t\tif (key.includes(\"_class\")) return;\n\t\t\t\t\tconst attr = this[key];\n\t\t\t\t\tif (attr == null) {\n\t\t\t\t\t\tif (key === \"reader\" && this.text)\n\t\t\t\t\t\t\tmarkup = markup.replace(name, this.text);\n\t\t\t\t\t\telse if (key === \"icon\") markup = markup.replace(name, \"hidden\");\n\t\t\t\t\t\telse if (key === \"help-id\")\n\t\t\t\t\t\t\tmarkup = markup.replace(/\\{\\{help_class\\}\\}/g, \"hidden\");\n\t\t\t\t\t\telse if (key === \"text\")\n\t\t\t\t\t\t\tmarkup = markup.replace(\"{{label_class}}\", \"hidden\");\n\t\t\t\t\t\telse if (key === \"tooltip\")\n\t\t\t\t\t\t\tmarkup = markup.replace(\"{{tooltip_class}}\", \"hidden\");\n\t\t\t\t\t\telse markup = markup.replace(name, \"\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (key === \"help-id\")\n\t\t\t\t\t\t\tmarkup = markup.replace(/\\{\\{help_class\\}\\}/g, \"\");\n\t\t\t\t\t\telse if (key === \"text\")\n\t\t\t\t\t\t\tmarkup = markup.replace(\"{{label_class}}\", \"\");\n\t\t\t\t\t\telse if (key === \"tooltip\")\n\t\t\t\t\t\t\tmarkup = markup.replace(\"{{tooltip_class}}\", \"\");\n\t\t\t\t\t\telse if (key === \"responsive\")\n\t\t\t\t\t\t\tmarkup = markup.replace(\"{{responsive}}\", \"responsive\");\n\t\t\t\t\t\telse if (key === \"lift-dropdown\")\n\t\t\t\t\t\t\tmarkup = markup.replace(\"{{lift-dropdown}}\", \"cq-lift\");\n\t\t\t\t\t\tmarkup = markup.replace(name, attr);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\tthis.addDefaultMarkup(null, markup);\n\n\t\t\tif (this.content && !this.config) {\n\t\t\t\tconst dropDown = this.root.querySelector(\"cq-dropdown\");\n\t\t\t\tif (dropDown) {\n\t\t\t\t\tdropDown.content = this.content;\n\t\t\t\t\tdropDown.noscroll = this.noscroll;\n\t\t\t\t\tdropDown.populate();\n\t\t\t\t\tif (this.liftAttribute) dropDown.setAttribute(\"cq-lift\", \"\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst iconSpan = this.qsa(\".menu-clickable .icon\", this, true)[0];\n\t\t\tif (iconSpan && this.binding && this.hasAttribute(\"icon\")) {\n\t\t\t\ticonSpan.setAttribute(\"ciq-menu-icon\", \"\");\n\t\t\t\tthis.classList.add(\"ciq-menu-icon\");\n\t\t\t} else {\n\t\t\t\tthis.classList.remove(\"ciq-menu-icon\");\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Expands the menu.\n\t * This is called indirectly by {@link WebComponents.Menu#open}.\n\t *\n\t * @tsmember WebComponents.Menu\n\t */\n\tshow() {\n\t\tif (this.active) return;\n\t\tthis.active = true;\n\t\tthis.classList.add(this.activeClassName);\n\t\tthis.state = \"open\";\n\t\tthis.setAriaPressed(true);\n\t\tconst screenReaderButton = this.root.querySelector(\"[aria-expanded]\");\n\t\tif (screenReaderButton) screenReaderButton.ariaExpanded = true;\n\t\tthis.lift();\n\t\tthis.root.querySelectorAll(\"cq-lookup\").forEach((s) => {\n\t\t\ts.classList.add(\"active\");\n\t\t});\n\t\t// For good measure, call resize on any nested scrollables to give them\n\t\t// a chance to change their height and scrollbars\n\t\tthis.root.querySelectorAll(\"cq-dropdown\").forEach((s) => s.resize());\n\t\t// Pass keyboard navigation over to the dropdown if it exists\n\t\tif (this.ownerDocument.body.keystrokeHub) {\n\t\t\tconst dropdown = this.root.querySelector(\"cq-dropdown\");\n\t\t\tif (dropdown)\n\t\t\t\tthis.ownerDocument.body.keystrokeHub.setKeyControlElement(\n\t\t\t\t\tdropdown,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Handler for the stxtap event which is fired in non-capture mode. This means it fires after {@link WebComponents.Menu@captureTap}.\n\t * Will alternate between opening and closing the menu.\n\t *\n\t * @param {Event} e Event\n\t *\n\t * @tsmember WebComponents.Menu\n\t */\n\ttap(e) {\n\t\te.stopPropagation();\n\t\tconst doc = this.document || document;\n\t\tif (e.ciqStamp && e.ciqStamp <= doc.lastTap) return; // stopPropagation not working on Safari with VO\n\t\tthis.clicked = true;\n\t\tconst { uiManager } = this;\n\t\tif (this.active) {\n\t\t\t// tapping on the menu if it is open will close it\n\t\t\tif (!this.noClose) {\n\t\t\t\tuiManager.closeMenu(this);\n\t\t\t}\n\t\t} else {\n\t\t\t// if we've clicked on the label for the menu, then open the menu\n\n\t\t\t// If the tap came from within this menu's cq-dropdown then this is probably an accidental\n\t\t\t// \"re-open\", which occurs when a click on a menu item causes an action that closes the menu, tricking\n\t\t\t// it into thinking it should re-open\n\t\t\tconst insideDropdown = e\n\t\t\t\t.composedPath()\n\t\t\t\t.includes(this.root.querySelector(\"cq-dropdown\"));\n\t\t\tif (insideDropdown) return;\n\n\t\t\tlet child = false;\n\t\t\te.composedPath()\n\t\t\t\t.filter((el) => el.matches && el.matches(\"cq-menu\"))\n\t\t\t\t.forEach((parent) => {\n\t\t\t\t\tif (parent.active) child = true;\n\t\t\t\t});\n\n\t\t\tif (!child) {\n\t\t\t\tconst isInDialog = CIQ.climbUpDomTree(e.target, \"cq-dialog\", true)[0];\n\t\t\t\tuiManager.closeMenu(\n\t\t\t\t\tnull,\n\t\t\t\t\t\"cq-menu,cq-color-picker\" + (isInDialog ? \"\" : \",cq-dialog\")\n\t\t\t\t); // close all menus or color pickers, unless we're the child of an active menu (cascading)\n\t\t\t}\n\t\t\tthis.open({ e });\n\n\t\t\tif (this.focusElement && !CIQ.isMobile) {\n\t\t\t\tconst el = this.qsa(this.focusElement, this, true)[0];\n\t\t\t\tif (el) el.focus();\n\t\t\t\tconst dropdown = this.qsa(\"cq-dropdown\", this, true)[0];\n\t\t\t\tif (dropdown) dropdown.setFocus(this.focusElement);\n\t\t\t}\n\t\t}\n\t\tdelete this.clicked;\n\t}\n\n\t/**\n\t * Restores any menus that were lifted using {@link WebComponents.Menu#lift}.\n\t * This is usually done automatically when the menu is closed.\n\t *\n\t * @tsmember WebComponents.Menu\n\t */\n\tunlift() {\n\t\tconst restoreLift = (element) => {\n\t\t\tif (!element) return;\n\t\t\tconst { remember } = element;\n\t\t\tconst scrollElement = remember.scrollParent;\n\t\t\tif (scrollElement) {\n\t\t\t\tscrollElement.removeEventListener(\"scroll\", this.adjustLiftPosition);\n\t\t\t\tscrollElement.removeEventListener(\"scroll\", element.boundResize);\n\t\t\t}\n\n\t\t\telement.doNotDisconnect = true;\n\t\t\telement.remove();\n\t\t\tdelete element.doNotDisconnect;\n\t\t\tObject.assign(element.style, remember.css);\n\t\t\tremember.parentNode.appendChild(element);\n\t\t};\n\t\tconst { lifts } = this;\n\t\tif (!lifts) return;\n\t\tlifts.forEach((lift) => restoreLift(lift));\n\t\tthis.lifts = null;\n\t}\n}\n\n/**\n * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * This markup contains placeholder values which the component replaces with values from its attributes.\n * Variables are represented in double curly-braces, for example: `{{text}}`.\n * The following variables are defined:\n * | variable | source |\n * | :------------ | :----- |\n * | binding | from attribute value |\n * | config | from attribute value |\n * | reader | from attribute value |\n * | icon | from attribute value |\n * | text | from attribute value |\n * | responsive | from attribute value |\n * | help-id | from attribute value |\n * | tooltip | from attribute value |\n * | tooltip_class | \"hidden\" if `tooltip` attribute not specified |\n * | help_class | \"hidden\" if `help-id` attribute not specified |\n * | label_class | \"hidden\" if `text` attribute not specified |\n * | lift-dropdown | replaces the attribute value with a setting to lift the dropdown to the top level of the css stacking context |\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.Menu\n */\nMenu.markup = `\n\t\t
        \n\t\t\t\n\t\t\t\n\t\t\t\t
        {{tooltip}}
        \n\t\t\t
        \n\t\t\t{{text}}\n\t\t
        \n\t\t
        \n\t\t\t\n\t\t\t(Help available, press question mark key)\n\t\t
        \n\t\t\n\t`;\n\nCIQ.UI.addComponentDefinition(\"cq-menu\", Menu);\n\n};\n\n\nlet __js_webcomponents_messageToaster_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-message-toaster>

        \n *\n * Displays pop-up messages, also known as toasts.\n *\n * Listens for a chart engine event of type \"notification\" and displays the notification as a\n * pop-up message over the chart.\n *\n * To trigger the notification event, call {@link CIQ.ChartEngine#dispatch} with the\n * \"notification\" type and the required notification listener data (see\n * [notificationEventListener]{@link CIQ.ChartEngine~notificationEventListener}), for example:\n * ```\n * stxx.dispatch(\"notification\", { message: \"A toast!\" });\n * ```\n *\n * Toasts are displayed immediately unless another toast is already on screen. Concurrent toasts\n * are displayed sequentially, not simultaneously.\n *\n * When a toast is created, it's added to a display queue. The toast at the front of the queue is\n * dequeued and displayed when no other toasts are on screen. Toasts can be prioritized (that is,\n * reordered in the queue) by setting the `priority` parameter of the\n * [notificationEventListener]{@link CIQ.ChartEngine~notificationEventListener} argument.\n *\n * _**Attributes**_:\n *\n * | Name | Description | Valid Values |\n * | ---- | ----------- | ------------ |\n * | `default-display-time` | Amount of time, in seconds, toasts are displayed before being automatically dismissed (removed from the display). | Integer numbers >= 0. A value of 0 causes toasts to remain on screen — blocking the toast display queue — until selected by the user. |\n * | `default-position` | Vertical on-screen position of toasts relative to the chart. (Toasts are centered horizontally.) | \"top\" or \"bottom\" |\n * | `default-transition` | Animation used to display and dismiss toasts. | \"fade\", \"slide\", \"pop\" or \"drop\" | The default is no transition.\n *\n * **Note:** All attributes can be overridden by the argument provided to\n * [notificationEventListener]{@link CIQ.ChartEngine~notificationEventListener}.\n *\n * _**Emitters**_\n *\n * A custom event will be emitted by the component when a toast message is dismissed due to either:\n * - click (user interaction)\n * - alert (internal removal request)\n * - timeout (expiration)\n *\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\", \"alert\", \"timeout\" |\n * | effect | \"remove\" |\n * | action | \"click\", null |\n * | displayTime | _time before automatically dismissing_ |\n * | message | _toast message_ |\n * | priority | _toast priority_ |\n * | type | _toast style_ |\n *\n * A custom event will be emitted by the component when a toast message is displayed, or removed from the message queue.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"alert\" |\n * | effect | \"display\", \"recall\" |\n * | action | null |\n * | displayTime | _time before automatically dismissing_ |\n * | message | _toast message_ |\n * | priority | _toast priority_ |\n * | type | _toast style_ |\n *\n * @example\n * \n *\n * @alias WebComponents.MessageToaster\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n * @since\n * - 8.2.0 Added\n * - 9.1.0 Observes attributes. Added emitter.\n */\nclass MessageToaster extends CIQ.UI.ContextTag {\n\tstatic get observedAttributes() {\n\t\treturn [\"default-display-time\", \"default-transition\", \"default-position\"];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\t/**\n\t * Initializes the message toaster web component.\n\t *\n\t * @private\n\t * @since 8.2.0\n\t * @tsmember WebComponents.MessageToaster\n\t */\n\tconnectedCallback() {\n\t\tsuper.connectedCallback();\n\n\t\tthis.messageQueue = [];\n\t\tthis.displayTimer = null;\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, MessageToaster);\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.MessageToaster\n\t */\n\tsetContext(context) {\n\t\t// Listen for notification events from the chartEngine\n\t\tcontext.stx.addEventListener(\"notification\", (params) => {\n\t\t\tthis.newMessage(params);\n\t\t});\n\n\t\tthis.addInjection(\"append\", \"resizeChart\", () => this.handleResize());\n\t}\n\n\t/**\n\t * Updates the position settings of all toasts (all DOM elements with class\n\t * `cq-toast-message`), including those not currently displayed, when the chart is resized.\n\t *\n\t * @tsmember WebComponents.MessageToaster\n\t *\n\t * @since 8.2.0\n\t */\n\thandleResize() {\n\t\tfor (let idx = 0; idx < this.messageQueue.length; idx++) {\n\t\t\tif (this.messageQueue[idx].isDisplayed)\n\t\t\t\tthis.positionElement(this.messageQueue[idx]);\n\t\t}\n\t}\n\n\t/**\n\t * Sets the display position of the toast identified by `messageElement` within the bounds of\n\t * the chart canvas. Centers the toast horizontally and positions it vertically based on the\n\t * toast's \n\t * position setting.\n\t *\n\t * @param {HTMLElement} messageElement The toast DOM element to position.\n\t *\n\t * @tsmember WebComponents.MessageToaster\n\t *\n\t * @since 8.2.0\n\t */\n\tpositionElement(messageElement) {\n\t\tconst canvasBounds = this.context.stx.chart.canvas.getBoundingClientRect();\n\t\tconst contextBounds = this.context.topNode.getBoundingClientRect();\n\t\tconst bottomAlign = messageElement.classList.contains(\"align-bottom\");\n\n\t\tlet offsetTop = canvasBounds.top - contextBounds.top;\n\t\tlet offsetLeft = canvasBounds.left - contextBounds.left;\n\n\t\tObject.assign(messageElement.style, {\n\t\t\ttop: bottomAlign\n\t\t\t\t? offsetTop + canvasBounds.height + \"px\"\n\t\t\t\t: offsetTop + \"px\",\n\t\t\tleft: offsetLeft + canvasBounds.width * 0.5 + \"px\"\n\t\t});\n\t}\n\n\t/**\n\t * Creates a new toast DOM element. Toast elements have the `cq-toast-message` class attribute.\n\t *\n\t * @param {object} notification Data object from a \"notification\" event. See\n\t * \t\t[notificationEventListener]{@link CIQ.ChartEngine~notificationEventListener}.\n\t * \t\t

        **Note:** This parameter does not accommodate the string type specified in\n\t * \t\t[notificationEventListener]{@link CIQ.ChartEngine~notificationEventListener}.\n\t * @param {string} notification.message Text to display in the toast notification. Strings\n\t * \t\tlonger than 160 characters are truncated.\n\t * @param {string} [notification.position=\"top\"] Position of the toast on the chart: \"top\" or\n\t * \t\t\"bottom\". Overrides the `default-position` attribute of the\n\t * \t\t[``]{@link WebComponents.MessageToaster} element.\n\t * @param {string} [notification.type=\"info\"] Toast style: \"info\", \"error\", \"warning\", or\n\t * \t\t\"confirmation\". Overrides the `default-transition` attribute of the\n\t * \t\t[``]{@link WebComponents.MessageToaster} element.\n\t * @param {string} [notification.transition] Type of animation used to display and dismiss the\n\t * \t\ttoast: \"fade\", \"slide\", \"pop\" or \"drop\". The default is no transition.\n\t * @param {number} [notification.displayTime=10] Number of seconds to display the toast before\n\t * \t\tautomatically dismissing it. A value of 0 causes the toast to remain on\n\t * \t\tscreen — preventing other toasts from\n\t * \t\tdisplaying — until the toast is selected by the user. Overrides the\n\t * \t\t`default-display-time` attribute of the\n\t * \t\t[``]{@link WebComponents.MessageToaster} element.\n\t * @param {number} [notification.priority=0] Priority of the toast relative to others in the\n\t * \t\tdisplay queue. Higher priority toasts are displayed before toasts with lower priority.\n\t * \t\tFor example, a toast with priority = 4 is displayed before a toast with\n\t * \t\tpriority = 1. Toasts with the same priority are displayed in the order\n\t * \t\tthey were created; that is, in the order they entered the display queue.\n\t * @param {Function} [notification.callback] Function to call when the toast is selected\n\t * \t\t(dismissed) by the user. If the toast is dismissed automatically (see `displayTime`),\n\t * \t\tthis function is not called.\n\t * @return {HTMLElement} A toast DOM element.\n\t *\n\t * @tsmember WebComponents.MessageToaster\n\t *\n\t * @since 8.2.0\n\t */\n\tcreateMessageElement(notification) {\n\t\tif (!notification.message) return;\n\n\t\tlet {\n\t\t\tmessage,\n\t\t\tposition,\n\t\t\ttype,\n\t\t\ttransition,\n\t\t\tdisplayTime,\n\t\t\tpriority,\n\t\t\tcallback\n\t\t} = notification;\n\n\t\tlet defaultDisplayTime = +this.getAttribute(\"default-display-time\"); // Time in seconds\n\t\tif (isNaN(defaultDisplayTime)) defaultDisplayTime = 10;\n\t\tconst defaultMessagePosition =\n\t\t\tthis.getAttribute(\"default-position\") || \"top\";\n\t\tconst defaultMessageTransition =\n\t\t\tthis.getAttribute(\"default-transition\") || \"\"; // Default is no transition\n\t\t// A value of 0 will prevent the message from removing automatically.\n\t\tif (displayTime !== 0) displayTime = displayTime || defaultDisplayTime;\n\t\tposition = position || defaultMessagePosition;\n\t\ttransition = transition || defaultMessageTransition;\n\t\tpriority = priority || 0;\n\t\ttype = type || \"info\";\n\n\t\t// Truncate a string longer than 160 characters\n\t\tif (message.length > 160) {\n\t\t\tmessage = message.slice(0, 160) + \"...\";\n\t\t}\n\n\t\tlet messageElement = document.createElement(\"div\");\n\t\tmessageElement.innerHTML = `\n\t\t\t

        \n\t\t\t\t
        \n\t\t\t\t
        \n\t\t\t
        `;\n\t\tlet textElement = messageElement.querySelector(\".cq-message-text\");\n\t\tCIQ.makeTranslatableElement(textElement, this.context.stx, message);\n\t\tmessageElement.classList.add(\"cq-toast-message\");\n\t\tmessageElement.classList.add(\"type-\" + type);\n\t\tmessageElement.setAttribute(\"aria-label\", \"Toast Message\");\n\t\tmessageElement.setAttribute(\"role\", \"alert\");\n\t\tif (transition)\n\t\t\tmessageElement.classList.add(\"animate\", \"transition-\" + transition);\n\t\tif (position == \"bottom\") messageElement.classList.add(\"align-bottom\");\n\t\tmessageElement.displayTime = displayTime;\n\t\tmessageElement.priority = priority;\n\t\tmessageElement.message = message;\n\t\tmessageElement.type = type;\n\n\t\tCIQ.safeClickTouch(\n\t\t\tmessageElement,\n\t\t\tfunction (messageElement, callback, event) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tif (callback) callback();\n\t\t\t\tthis.removeMessageNode(messageElement, \"click\");\n\t\t\t}.bind(this, messageElement, callback)\n\t\t);\n\n\t\tthis.positionElement(messageElement);\n\n\t\treturn messageElement;\n\t}\n\n\t/**\n\t * Displays the next toast in the display queue and sets a timer based on the toast\n\t * \n\t * displayTime property to automatically dismiss the toast.\n\t *\n\t * @tsmember WebComponents.MessageToaster\n\t *\n\t * @since 8.2.0\n\t */\n\tdisplayNextMessage() {\n\t\tif (!this.messageQueue.length) return;\n\n\t\tlet messageNodes = this.context.topNode.querySelector(\".cq-toast-message\");\n\t\tif (!messageNodes) {\n\t\t\tlet nextMessage = this.messageQueue[0];\n\t\t\t// Toast Message nodes are added to the body to ensure they appear over all other UI elements (e.g. Dialogs)\n\t\t\tthis.context.topNode.appendChild(nextMessage);\n\t\t\tnextMessage.isDisplayed = true;\n\t\t\tthis.emitCustomEvent({\n\t\t\t\temitter: this,\n\t\t\t\taction: null,\n\t\t\t\tcause: \"alert\",\n\t\t\t\teffect: \"display\",\n\t\t\t\tdetail: (({ displayTime, priority, message, type }) => ({\n\t\t\t\t\tdisplayTime,\n\t\t\t\t\tpriority,\n\t\t\t\t\tmessage,\n\t\t\t\t\ttype\n\t\t\t\t}))(nextMessage)\n\t\t\t});\n\t\t\tif (nextMessage.displayTime !== 0) {\n\t\t\t\tthis.displayTimer = window.setTimeout(\n\t\t\t\t\tthis.removeMessageNode.bind(this, nextMessage, \"timeout\"),\n\t\t\t\t\tnextMessage.displayTime * 1000\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Removes the toast specified by `messageNode` from the display queue and displays the next\n\t * message in the queue.\n\t *\n\t * @param {HTMLElement} messageNode The toast to remove from the display queue.\n\t * @param {string} [reason] The reason for the removal. Ex: \"click\" or \"timeout\".\n\t *\n\t * @tsmember WebComponents.MessageToaster\n\t *\n\t * @since 8.2.0\n\t */\n\tremoveMessageNode(messageNode, reason) {\n\t\tif (messageNode.classList.contains(\"hide\")) return;\n\n\t\tmessageNode.classList.add(\"hide\");\n\t\tlet delayTime = messageNode.classList.contains(\"animate\") ? 500 : 0;\n\n\t\twindow.setTimeout(() => {\n\t\t\t// Remove the node from the dom\n\t\t\tmessageNode.remove();\n\t\t\tthis.emitCustomEvent({\n\t\t\t\temitter: this,\n\t\t\t\taction: reason === \"click\" ? \"click\" : null,\n\t\t\t\tcause: reason === \"click\" ? \"useraction\" : reason || \"alert\",\n\t\t\t\teffect: \"remove\",\n\t\t\t\tdetail: (({ displayTime, priority, message, type }) => ({\n\t\t\t\t\tdisplayTime,\n\t\t\t\t\tpriority,\n\t\t\t\t\tmessage,\n\t\t\t\t\ttype\n\t\t\t\t}))(messageNode)\n\t\t\t});\n\t\t\t// Remove the node from the queue\n\t\t\tthis.messageQueue.splice(this.messageQueue.indexOf(messageNode), 1);\n\t\t\tif (this.displayTimer)\n\t\t\t\tthis.displayTimer = window.clearTimeout(this.displayTimer);\n\t\t\tthis.displayNextMessage();\n\t\t}, delayTime);\n\t}\n\n\t/**\n\t * Removes the toast specified by `messageNode` from the DOM but not from the display queue.\n\t *\n\t * Use this function to interrupt a toast and display one of higher priority. The interrupted\n\t * toast is re-displayed by the next call to\n\t * [displayNextMessage](WebComponents.MessageToaster.html#displayNextMessage).\n\t *\n\t * @param {HTMLElement} messageNode The toast to recall.\n\t *\n\t * @tsmember WebComponents.MessageToaster\n\t *\n\t * @since 8.2.0\n\t */\n\trecallMessageNode(messageNode) {\n\t\tif (messageNode.isDisplayed) {\n\t\t\tif (this.displayTimer)\n\t\t\t\tthis.displayTimer = window.clearTimeout(this.displayTimer);\n\t\t\tmessageNode.isDisplayed = false;\n\t\t\tthis.context.topNode.removeChild(messageNode);\n\t\t\tthis.emitCustomEvent({\n\t\t\t\temitter: this,\n\t\t\t\taction: null,\n\t\t\t\tcause: \"alert\",\n\t\t\t\teffect: \"recall\",\n\t\t\t\tdetail: (({ displayTime, priority, message, type }) => ({\n\t\t\t\t\tdisplayTime,\n\t\t\t\t\tpriority,\n\t\t\t\t\tmessage,\n\t\t\t\t\ttype\n\t\t\t\t}))(messageNode)\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Creates a new toast and adds it to a queue that determines the display sequence of\n\t * concurrent toasts.\n\t *\n\t * This function is the \"notification\" event listener. See\n\t * [notificationEventListener]{@link CIQ.ChartEngine~notificationEventListener}.\n\t *\n\t * @param {object|string} notification Either an object containing data relevant to the\n\t * \t\tnotification event or a string that identifies a property of the `systemMessages`\n\t * \t\tproperty of the chart configuration object. The property contained in `systemMessages`\n\t * \t\tis an object literal that specifies data relevant to the notification event (see\n\t * \t\t\n\t * \t\tsystemMessages in the\n\t * \t\tChart Configuration\n\t * \t\ttutorial).\n\t * @param {string} notification.message Text to display in the toast notification. Strings\n\t * \t\tlonger than 160 characters are truncated.\n\t * @param {string} [notification.position=\"top\"] Position of the toast on the chart: \"top\" or\n\t * \t\t\"bottom\". Overrides the `default-position` attribute of the\n\t * \t\t[``]{@link WebComponents.MessageToaster} element.\n\t * @param {string} [notification.type=\"info\"] Toast style: \"info\", \"error\", \"warning\", or\n\t * \t\t\"confirmation\". Overrides the `default-transition` attribute of the\n\t * \t\t[``]{@link WebComponents.MessageToaster} element.\n\t * @param {string} [notification.transition] Type of animation used to display and dismiss the\n\t * \t\ttoast: \"fade\", \"slide\", \"pop\" or \"drop\". The default is no transition.\n\t * @param {number} [notification.displayTime=10] Number of seconds to display the toast before\n\t * \t\tautomatically dismissing it. A value of 0 causes the toast to remain on\n\t * \t\tscreen — preventing other toasts from\n\t * \t\tdisplaying — until the toast is selected by the user. Overrides the\n\t * \t\t`default-display-time` attribute of the\n\t * \t\t[``]{@link WebComponents.MessageToaster} element.\n\t * @param {number} [notification.priority=0] Priority of the toast relative to others in the\n\t * \t\tdisplay queue. Higher priority toasts are displayed before toasts with lower priority.\n\t * \t\tFor example, a toast with priority = 4 is displayed before a toast with\n\t * \t\tpriority = 1. Toasts with the same priority are displayed in the order\n\t * \t\tthey were created; that is, in the order they entered the display queue.\n\t * @param {Function} [notification.callback] Function to call when the toast is selected\n\t * \t\t(dismissed) by the user. If the toast is dismissed automatically (see `displayTime`),\n\t * \t\tthis function is not called.\n\t *\n\t * @tsmember WebComponents.MessageToaster\n\t *\n\t * @since\n\t * - 8.2.0\n\t * - 8.4.0 Calling this method with a message that is already displayed or in the queue\n\t * \t\twill return without doing anything.\n\t */\n\tnewMessage(notification) {\n\t\tif (typeof notification === \"string\" && this.context.config) {\n\t\t\tif (this.context.config.systemMessages)\n\t\t\t\tnotification = this.context.config.systemMessages[notification];\n\t\t}\n\t\tif (!notification || typeof notification !== \"object\") return;\n\t\tif (notification.remove) {\n\t\t\tfor (const queueItem of this.messageQueue) {\n\t\t\t\tif (queueItem.message === notification.message) {\n\t\t\t\t\tthis.dismissMessage(notification.message);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tlet newMessage = this.createMessageElement(notification);\n\t\tif (newMessage) {\n\t\t\t// Determine if the message priority places it ahead of other messages in the queue\n\t\t\tconst index = this.messageQueue.findIndex(\n\t\t\t\t(m) => m.priority < newMessage.priority\n\t\t\t);\n\t\t\tif (index >= 0) {\n\t\t\t\t// Recall the message if it's already displayed\n\t\t\t\tif (this.messageQueue[index].isDisplayed)\n\t\t\t\t\tthis.recallMessageNode(this.messageQueue[index]);\n\t\t\t\t// Inject the new priority message before the first non-priority message\n\t\t\t\tthis.messageQueue.splice(index, 0, newMessage);\n\t\t\t} else {\n\t\t\t\tthis.messageQueue.push(newMessage);\n\t\t\t}\n\t\t\tthis.displayNextMessage();\n\t\t}\n\t}\n\n\t/**\n\t * Dismisses a message by removing it from the queue (including if it is already displayed).\n\t *\n\t * @param {string} message The message to dismiss.\n\t *\n\t * @tsmember WebComponents.MessageToaster\n\t * @since 8.4.0\n\t */\n\tdismissMessage(message) {\n\t\tfor (const notification of this.messageQueue) {\n\t\t\tif (notification.message === message) {\n\t\t\t\tthis.removeMessageNode(notification);\n\t\t\t}\n\t\t}\n\t}\n}\n\nCIQ.UI.addComponentDefinition(\"cq-message-toaster\", MessageToaster);\n\n};\n\n\nlet __js_webcomponents_palette_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-palette>

        \n *\n * Provides a palette to dock alongside the chart or float above it. Palette components must be\n * placed within a `` component.\n *\n * _**Attributes**_\n *\n * This component observes the following attributes and will change behavior if these attributes are modified:\n * | attribute | description |\n * | :---------- | :---------- |\n * | docked | The docked state of the palette. Set to \"false\" to float palette over the chart. |\n * | orientation | Accepted values are \"horizontal\" and \"vertical\". Vertical palettes dock to the left of the chart. Horizontal palettes dock to the top. |\n *\n * In addition, the following attributes are also supported:\n * | attribute | description |\n * | :----------- | :---------- |\n * | min-height | Minimum height, in pixels, to display if not enough content. |\n *\n * _**Emitters**_\n *\n * A custom event will be emitted from the component when it is docked, detached.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"dock\", \"detach\" |\n * | action | \"click\" |\n *\n * A custom event will be emitted from the component when it is moved while undocked.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"reposition\" |\n * | action | \"drag\" |\n * | x | _x coordinate_ |\n * | y | _y coordinate_ |\n *\n * `cause` and `action` are set only when the value is changed as a direct result of clicking on the component.\n *\n *\n * @alias WebComponents.Palette\n * @extends CIQ.UI.BaseComponent\n * @class\n * @protected\n * @since\n * - 7.2.0\n * - 9.1.0 Observes attributes. Added emitter.\n *\n * @example\n * \n *
        \n *
        \n * ...\n *
        \n *
        \n *
        \n */\nclass Palette extends CIQ.UI.ContextTag {\n\tstatic get observedAttributes() {\n\t\treturn [\"docked\", \"orientation\"];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.dragMargin = 10; // number of px to constrain the draggable area within the chart.\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, Palette);\n\t}\n\n\tinit() {\n\t\tthis.isDragging = false;\n\t\tthis.minHeight = parseInt(this.getAttribute(\"min-height\"), 10);\n\t\t// If the minimum height is not set, default to 25\n\t\tif (isNaN(this.minHeight)) {\n\t\t\tthis.minHeight = 25;\n\t\t}\n\t\tthis.paletteDock = this.parentElement.parentElement;\n\t\tthis.dragStrip = this.querySelector(\".drag-strip\");\n\t\tthis.resizeStrip = this.querySelector(\".resize-strip\");\n\n\t\t// Drag actions are managed by the palette dock\n\t\tif (this.dragStrip) {\n\t\t\tthis.dragStrip.addEventListener(\n\t\t\t\t\"mousedown\",\n\t\t\t\tthis.handleDragResize.bind(this, \"dragging\")\n\t\t\t);\n\n\t\t\tthis.dragStrip.addEventListener(\n\t\t\t\t\"touchstart\",\n\t\t\t\tthis.handleDragResize.bind(this, \"dragging\"),\n\t\t\t\t{ passive: false }\n\t\t\t);\n\t\t}\n\n\t\t// Resize actions are managed by the palette dock\n\t\tif (this.resizeStrip) {\n\t\t\tthis.resizeStrip.addEventListener(\n\t\t\t\t\"mousedown\",\n\t\t\t\tthis.handleDragResize.bind(this, \"resizing\")\n\t\t\t);\n\t\t\tthis.resizeStrip.addEventListener(\n\t\t\t\t\"touchstart\",\n\t\t\t\tthis.handleDragResize.bind(this, \"resizing\"),\n\t\t\t\t{ passive: false }\n\t\t\t);\n\t\t}\n\n\t\tif (this.paletteDock.paletteSubscribe) {\n\t\t\tthis.sendMessage = this.paletteDock.paletteSubscribe(\n\t\t\t\tthis.handleMessage.bind(this)\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Processes attribute changes. This is called whenever an observed attribute has changed.\n\t *\n\t * @param {string} name Attribute name\n\t * @param {string} oldValue Original attribute value\n\t * @param {string} newValue new Attribute value\n\t *\n\t * @tsmember WebComponents.Palette\n\t */\n\thandlePropertyChange(name, oldValue, newValue) {\n\t\tif (oldValue === newValue) return;\n\t\tthis[name] = newValue;\n\t\tswitch (name) {\n\t\t\tcase \"docked\":\n\t\t\t\tif (newValue === \"false\") {\n\t\t\t\t\tthis.detach(100, 70, 0.8);\n\t\t\t\t} else {\n\t\t\t\t\tthis.dock();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/**\n\t * Sets dragging property in dock for this palette for mouse and touch events.\n\t *\n\t * @param {string} method Optional type of drag action, either \"dragging\" (default) or resizing\n\t * @param {object} event Event that triggerd this function\n\t *\n\t * @tsmember WebComponents.Palette\n\t */\n\thandleDragResize(method, event) {\n\t\tif (this.paletteDock.hasOwnProperty(\"dragging\")) {\n\t\t\tthis.paletteDock.startDrag(this, method);\n\t\t}\n\t}\n\n\t/**\n\t * Overridden by child objects to respond to messaging sent from other palettes\n\t *\n\t * @param {string} id Identifier for the message\n\t * @param {object | string} message Optional data accompanying the message\n\t *\n\t * @tsmember WebComponents.Palette\n\t */\n\thandleMessage(id, message) {}\n\n\t/**\n\t * Detach palette from dock, positioning it over the chart.\n\t *\n\t * @param {number} xPos X coordinate of palette relative to palette dock.\n\t * @param {number} yPos Y coordinate of palette relative to palette dock.\n\t * @param {number} scale Palette height relative to its current height.\n\t *\n\t * @tsmember WebComponents.Palette\n\t */\n\tdetach(xPos, yPos, scale) {\n\t\tlet breakSm = this.ownerDocument.body.classList.contains(\"break-sm\");\n\t\t// Never detach on small screens\n\t\tif (breakSm) return;\n\n\t\tif (typeof xPos !== \"number\") xPos = null;\n\n\t\tthis.docked = \"false\";\n\t\t// Set a safe default position when detaching\n\t\txPos = xPos || 10;\n\t\tyPos = yPos || 10;\n\n\t\t// Get the parent bounds to check position\n\t\tlet parentBounds = { top: 0, left: 0, width: 0, height: 0 };\n\t\tif (this.paletteDock.getBounds) {\n\t\t\tparentBounds = this.paletteDock.getChartBoundsOffset();\n\t\t}\n\t\t// When the palette is detached to a location, it should show all or most of its contents even if the location is close to the right edge\n\t\t// Check the position of the palette against the right bound of the parent\n\t\tif (xPos > parentBounds.left + parentBounds.width - this.clientWidth) {\n\t\t\txPos = parentBounds.left + parentBounds.width - this.clientWidth;\n\t\t}\n\t\t// Always set the position for instances where repositioning is necessary.\n\t\tthis.setTransformPosition(xPos, yPos);\n\t\tthis.paletteDock.setChartDimensions();\n\t\tthis.context.stx.resizeChart();\n\t\tif (scale) this.setHeightByScale(scale);\n\t\telse this.paletteDock.setVerticalPaletteHeight();\n\n\t\tthis.emitCustomEvent({\n\t\t\teffect: \"detach\"\n\t\t});\n\t}\n\n\t/**\n\t * Fix palette position along edge of chart.\n\t *\n\t * @tsmember WebComponents.Palette\n\t */\n\tdock() {\n\t\tthis.docked = \"true\";\n\t\tthis.transform = \"\";\n\t\tthis.style.left = \"\";\n\t\tthis.style.top = \"\";\n\t\tif (this.paletteDock) this.paletteDock.setChartDimensions();\n\t\tthis.emitCustomEvent({\n\t\t\teffect: \"dock\"\n\t\t});\n\t}\n\n\t/**\n\t * Get the current height of the palette.\n\t *\n\t * @return {number} The element height in pixels.\n\t *\n\t * @tsmember WebComponents.Palette\n\t */\n\tgetHeight() {\n\t\treturn this.clientHeight;\n\t}\n\n\t/**\n\t * Get the current width of the palette.\n\t *\n\t * @return {number} The element width in pixels.\n\t *\n\t * @tsmember WebComponents.Palette\n\t */\n\tgetWidth() {\n\t\treturn this.clientWidth;\n\t}\n\n\t/**\n\t * Get the offset position of the palette and call setTransformPosition\n\t * to clamp the palette position in the event of a chartContainer resize\n\t *\n\t * @tsmember WebComponents.Palette\n\t */\n\tcheckPosition() {\n\t\tlet parentBounds = { top: 0, left: 0, width: 0, height: 0 };\n\t\tif (this.paletteDock.getChartBounds) {\n\t\t\tparentBounds = this.paletteDock.getChartBounds();\n\t\t}\n\t\tlet chartBounds = { top: 0, left: 0, width: 0, height: 0 };\n\t\tif (this.paletteDock.getBounds) {\n\t\t\tchartBounds = this.paletteDock.getBounds();\n\t\t}\n\t\tconst coordinates = (this.transform || [0, 0]).slice(0);\n\t\t// Apply the offsets normally produced by the mouse pointer. Needed to satisfy setTransformPosition\n\t\tcoordinates[0] =\n\t\t\tchartBounds.left +\n\t\t\tMath.min(\n\t\t\t\tcoordinates[0] + this.dragStrip.clientWidth * 0.5,\n\t\t\t\tparentBounds.left + parentBounds.width - this.clientWidth\n\t\t\t);\n\t\tcoordinates[1] =\n\t\t\tchartBounds.top +\n\t\t\tMath.min(\n\t\t\t\tcoordinates[1] + this.dragStrip.clientHeight * 0.5,\n\t\t\t\tparentBounds.top + parentBounds.height - this.clientHeight\n\t\t\t);\n\n\t\tthis.setTransformPosition(coordinates[0], coordinates[1]);\n\t}\n\n\t/**\n\t * Set the palette transform position clamping palette within the chart area.\n\t * Calls `setTransform`.\n\t *\n\t * @param {number} x X coordinate of palette relative to palette dock.\n\t * @param {number} y Y coordinate of palette relative to palette dock.\n\t *\n\t * @tsmember WebComponents.Palette\n\t */\n\tsetTransformPosition(x, y) {\n\t\tlet parentBounds = { top: 0, left: 0, width: 0, height: 0 };\n\t\tif (this.paletteDock.getBounds) {\n\t\t\tparentBounds = this.paletteDock.getChartBoundsOffset();\n\t\t}\n\t\tlet chartBounds = { top: 0, left: 0, width: 0, height: 0 };\n\t\tif (this.paletteDock.getBounds) {\n\t\t\tchartBounds = this.paletteDock.getBounds();\n\t\t}\n\t\tlet nextTop = Math.floor(y - this.dragStrip.clientHeight * 0.5);\n\t\tlet nextLeft = Math.floor(x - this.dragStrip.clientWidth * 0.5);\n\n\t\t// Clamp the top position within chart bounds\n\t\tnextTop =\n\t\t\tMath.min(\n\t\t\t\tMath.max(nextTop, parentBounds.top + this.dragMargin),\n\t\t\t\tparentBounds.height - (this.dragStrip.clientHeight + this.dragMargin)\n\t\t\t) - chartBounds.top;\n\t\t// Clamp the left position within chart bounds\n\t\tnextLeft =\n\t\t\tMath.min(\n\t\t\t\tMath.max(nextLeft, parentBounds.left + this.dragMargin),\n\t\t\t\tparentBounds.width - (this.dragStrip.clientWidth + this.dragMargin)\n\t\t\t) - chartBounds.left;\n\n\t\tthis.setTransform(nextLeft, nextTop);\n\t}\n\n\t/**\n\t * Set the palette transform property explicitly.\n\t *\n\t * @param {number} x X coordinate of palette relative to palette dock.\n\t * @param {number} y Y coordinate of palette relative to palette dock.\n\t *\n\t * @tsmember WebComponents.Palette\n\t */\n\tsetTransform(x, y) {\n\t\tthis.transform = [x, y];\n\t\tthis.style.left = x + \"px\";\n\t\tthis.style.top = y + \"px\";\n\t\tthis.emitCustomEvent({\n\t\t\taction: this.paletteDock.dragging ? \"drag\" : null,\n\t\t\teffect: \"reposition\",\n\t\t\tdetail: { x, y }\n\t\t});\n\t}\n\n\t/**\n\t * Set the palette height property based on location.\n\t *\n\t * @param {number} yPosition Y coordinate of palette bottom\n\t *\n\t * @tsmember WebComponents.Palette\n\t */\n\tsetHeightToPosition(yPosition) {\n\t\tlet parentBounds = { top: 0, left: 0, width: 0, height: 0 };\n\t\tif (this.paletteDock.getBounds) {\n\t\t\tparentBounds = this.paletteDock.getBounds();\n\t\t}\n\n\t\tlet paletteViewportOffset = this.getBoundingClientRect();\n\t\tlet nextHeight = yPosition - paletteViewportOffset.top;\n\n\t\tif (this.orientation === \"vertical\") {\n\t\t\tif (\n\t\t\t\tnextHeight > this.minHeight &&\n\t\t\t\tnextHeight + (paletteViewportOffset.top - parentBounds.top) <\n\t\t\t\t\tparentBounds.height\n\t\t\t) {\n\t\t\t\tthis.setHeight(nextHeight);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Set the palette height property relative to its current height property.\n\t * For example, a scale of 0.5 will set the palette height to one half of its\n\t * current height.\n\t *\n\t * @param {number} scale Size multiplier.\n\t *\n\t * @tsmember WebComponents.Palette\n\t */\n\tsetHeightByScale(scale) {\n\t\tthis.style.height =\n\t\t\tMath.floor(parseInt(this.style.height, 10) * scale) + \"px\";\n\t}\n\n\t/**\n\t * Set the palette height property explicitly.\n\t *\n\t * @param {number} nextHeight Height in pixels.\n\t *\n\t * @tsmember WebComponents.Palette\n\t */\n\tsetHeight(nextHeight) {\n\t\tthis.style.height = nextHeight + \"px\";\n\t}\n}\n\nCIQ.UI.addComponentDefinition(\"cq-palette\", Palette);\n\n};\n\n\nlet __js_webcomponents_paletteDock_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-palette-dock>

        \n *\n * This is a container for `` components. Provides docking and dragging capabilities to child\n * palettes.\n *\n * The `` element does not wrap the chart. It must be a sibling of the chart\n * container.\n *\n * @example\n * \n *
        \n * ...\n *
        \n *
        \n *\n * @alias WebComponents.PaletteDock\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n * @since 7.2.0\n */\nclass PaletteDock extends CIQ.UI.ContextTag {\n\tconstructor() {\n\t\tsuper();\n\t\t//let shadowRoot = this.attachShadow({mode: 'open'});\n\t\t//shadowRoot.innerHTML = this.render();\n\n\t\tthis.dragging = false; /* pointer to the palette currently dragging */\n\t\tthis.paletteRegistry = [];\n\t\t// Use to store and cancel the mouseout check\n\t\tthis.mouseOutCk = false;\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, PaletteDock);\n\t}\n\n\t/**\n\t * Set up event listeners for dragging and resizing.\n\t * @private\n\t * @tsmember WebComponents.PaletteDock\n\t */\n\tinitListeners() {\n\t\tconst { stx, config = {} } = this.context;\n\t\tconst self = this;\n\n\t\tthis.setVerticalPaletteHeight();\n\n\t\t// palette mouse events are handled here, on the parent, to prevent losing the event if the pointer moves off the palette\n\t\tthis.addEventListener(\"touchend\", (e) => this.stopDrag(e));\n\t\tthis.addEventListener(\"touchmove\", handleTouchMove, { passive: false });\n\n\t\tthis.addEventListener(\"mouseup\", (e) => this.stopDrag(e));\n\t\tthis.addEventListener(\"mouseleave\", handleMouseLeave);\n\t\tthis.addEventListener(\"mouseenter\", handleMouseEnter);\n\t\tthis.addEventListener(\"mousemove\", handleMouseMove);\n\n\t\t// Close a palette context menu when clicking anywhere over the chart\n\t\tthis.addEventListener(\"mousedown\", this.stopContext.bind(this));\n\n\t\t// respond to resizes, prevent loops\n\t\tthis.addInjection(\"append\", \"resizeChart\", () =>\n\t\t\tthis.handleResize({ resizeChart: false })\n\t\t);\n\n\t\tconst channel = (config.channels || {}).drawing || \"channel.drawing\";\n\t\tthis.channelSubscribe(channel, handleEnableDrawing);\n\n\t\tfunction handleMouseLeave(event) {\n\t\t\tstx.showCrosshairs();\n\t\t\t// An extra guard against spastic mousing.\n\t\t\t// Mouseout of the draggable area does not immediately cancel in case\n\t\t\t// the user unintentionally leaves the area for a brief moment\n\t\t\tself.mouseOutCk = setTimeout(() => self.stopDrag(), 500);\n\t\t}\n\n\t\tfunction handleMouseEnter(event) {\n\t\t\tstx.undisplayCrosshairs();\n\t\t\tif (!self.dragging) return;\n\n\t\t\t// Checking for a re-entry while the mouse button is still down\n\t\t\tif (event.buttons === 1) {\n\t\t\t\tclearTimeout(self.mouseOutCk);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// If all else fails, cancel the drag\n\t\t\tself.stopDrag();\n\t\t}\n\n\t\tfunction handleMouseMove(event) {\n\t\t\tif (self.dragging) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tif (self.dragging.classList.contains(\"dragging\")) {\n\t\t\t\t\tself.dragging.setTransformPosition(event.clientX, event.clientY);\n\t\t\t\t}\n\t\t\t\tif (self.dragging.classList.contains(\"resizing\")) {\n\t\t\t\t\tself.dragging.setHeightToPosition(event.clientY);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction handleTouchMove(event) {\n\t\t\tif (self.dragging && event.touches[0]) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tif (self.dragging.classList.contains(\"dragging\")) {\n\t\t\t\t\tself.dragging.setTransformPosition(\n\t\t\t\t\t\tevent.touches[0].clientX,\n\t\t\t\t\t\tevent.touches[0].clientY\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (self.dragging.classList.contains(\"resizing\")) {\n\t\t\t\t\tself.dragging.setHeightToPosition(event.touches[0].clientY);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction handleEnableDrawing(value) {\n\t\t\tself.setChartDimensions();\n\t\t\t// if (value) this.dockAllPalettes();\n\t\t\tstx.resizeChart();\n\t\t}\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.PaletteDock\n\t */\n\tsetContext(context) {\n\t\tthis.initListeners();\n\t}\n\n\t/**\n\t * Put a message on the palette registry to execute on.\n\t *\n\t * @param {string} id\n\t * @param {string} message\n\t *\n\t * @private\n\t *\n\t * @tsmember WebComponents.PaletteDock\n\t */\n\tpalettePublish(id, message) {\n\t\tthis.paletteRegistry.forEach((cb) => cb(id, message));\n\t}\n\n\t/**\n\t * Register a palette callback.\n\t *\n\t * @param {function} paletteCallback Function to register\n\t * @return {function} Bound palettePublish function\n\t *\n\t * @private\n\t *\n\t * @tsmember WebComponents.PaletteDock\n\t */\n\tpaletteSubscribe(paletteCallback) {\n\t\tthis.paletteRegistry.push(paletteCallback);\n\t\treturn this.palettePublish.bind(this);\n\t}\n\n\t/**\n\t * Get bounds of the palette container\n\t *\n\t * @private\n\t *\n\t * @tsmember WebComponents.PaletteDock\n\t */\n\tgetBounds() {\n\t\treturn this.parentNode.getBoundingClientRect();\n\t}\n\n\t/**\n\t * Get bounds of the chart within the chart container\n\t *\n\t * @private\n\t *\n\t * @tsmember WebComponents.PaletteDock\n\t */\n\tgetChartBounds() {\n\t\tlet clientBounds = this.parentNode.getBoundingClientRect();\n\t\tlet bounds = {\n\t\t\ttop: 0,\n\t\t\tleft: 0,\n\t\t\theight: clientBounds.height,\n\t\t\twidth: clientBounds.width\n\t\t};\n\n\t\tconst palettes = this.querySelectorAll('[docked=\"true\"]');\n\t\t[...palettes].forEach((palette) => {\n\t\t\tif (palette.orientation === \"vertical\") {\n\t\t\t\tbounds.width -= palette.getWidth();\n\t\t\t\tbounds.left += palette.getWidth();\n\t\t\t} else if (palette.orientation === \"horizontal\") {\n\t\t\t\tbounds.height -= palette.getHeight();\n\t\t\t\tbounds.top += palette.getHeight();\n\t\t\t}\n\t\t});\n\t\treturn bounds;\n\t}\n\n\t/**\n\t * Get bounds of the chart within the chart container, but offset from top and left\n\t *\n\t * @private\n\t *\n\t * @tsmember WebComponents.PaletteDock\n\t */\n\tgetChartBoundsOffset() {\n\t\tlet clientBounds = this.parentNode.getBoundingClientRect();\n\t\tlet bounds = this.getChartBounds();\n\n\t\tbounds.top += clientBounds.top;\n\t\tbounds.left += clientBounds.left;\n\n\t\treturn bounds;\n\t}\n\n\t/**\n\t * Handle the drawing palette contextual menu open state to allow clicking anywhere over the chart to close\n\t *\n\t * @private\n\t *\n\t * @tsmember WebComponents.PaletteDock\n\t */\n\tstartContext() {\n\t\tthis.classList.add(\"context\");\n\t}\n\n\t/**\n\t * Stop handling started by startContext()\n\t *\n\t * @private\n\t *\n\t * @tsmember WebComponents.PaletteDock\n\t */\n\tstopContext() {\n\t\tthis.classList.remove(\"context\");\n\t\tthis.palettePublish(\"context\", \"stop\");\n\t}\n\n\t/**\n\t * Indicate a palette is presently in dragging mode\n\t * Extends overlay via css in dragging mode to capture mouse position\n\t *\n\t * @param {HTMLElement} palette Palette to start dragging\n\t * @param {string} paletteMode \"dragging\"\n\t *\n\t * @tsmember WebComponents.PaletteDock\n\t */\n\tstartDrag(palette, paletteMode) {\n\t\tconst palettes = this.querySelectorAll('[docked=\"false\"]');\n\t\t[...palettes].forEach(\n\t\t\t(palette) => (palette.style.zIndex = 1) // Drop down any palettes which were previously bumped to the top of the z-index\n\t\t);\n\n\t\t// Default to dragging unless resizing is specified\n\t\tpaletteMode = paletteMode || \"dragging\";\n\t\tthis.dragging = palette;\n\t\t// The palette dock is always dragging regardless of the palette's mode\n\t\tthis.classList.add(\"dragging\");\n\t\tthis.dragging.classList.add(paletteMode);\n\t\tthis.dragging.style.zIndex = 10; // Bump the active palette to the top of the z-index\n\t}\n\n\t/**\n\t * Stop the drag mode\n\t *\n\t * @param {Event} e Event representing end of operation (mouseup, touchend).\n\t *\n\t * @tsmember WebComponents.PaletteDock\n\t */\n\tstopDrag(e) {\n\t\tif (e) e.preventDefault(); // prevent mouse event from firing if both touch and mouse are supported\n\t\tthis.classList.remove(\"dragging\");\n\t\tthis.dragging = false;\n\t\tthis.resizing = false;\n\t\t[...this.querySelectorAll('[docked=\"false\"]')].forEach((docked) =>\n\t\t\tdocked.classList.remove(\"dragging\", \"resizing\")\n\t\t);\n\t}\n\n\t/**\n\t * Indicate a palette is presently in resize mode\n\t * Extends overlay via css in dragging mode to capture mouse position\n\t *\n\t * @param {HTMLElement} palette Palette to start dragging\n\t * @private\n\t *\n\t * @tsmember WebComponents.PaletteDock\n\t */\n\tstartResize(palette) {\n\t\tthis.resizing = palette;\n\t\tthis.classList.add(\"dragging\");\n\t\tthis.dragging.classList.add(\"dragging\");\n\t}\n\n\t/**\n\t * Execute the resize operation.\n\t *\n\t * @param {object} params\n\t * @param {boolean} [params.resizeChart=true] Resize the whole chart\n\t * @private\n\t *\n\t * @tsmember WebComponents.PaletteDock\n\t */\n\thandleResize({ resizeChart = true } = {}) {\n\t\t// Notify palettes that a resize is about to occur\n\t\tthis.palettePublish(\"dockWillResize\");\n\t\tthis.setChartDimensions();\n\t\tthis.setVerticalPaletteHeight();\n\n\t\tconst breakSm = this.ownerDocument.body.classList.contains(\"break-sm\");\n\t\t// Palettes can move out of view or the display context can change to mobile,\n\t\t// so adjust the floating palettes on resize\n\t\tconst palettes = this.querySelectorAll('[docked=\"false\"]');\n\t\t[...palettes].forEach((palette) => {\n\t\t\tif (breakSm) {\n\t\t\t\t// If in the mobile context, double check that all palettes are docked\n\t\t\t\tpalette.dock();\n\t\t\t} else {\n\t\t\t\t// Set detached palettes positions equal to themselves. setTransformPosition will\n\t\t\t\t// check against the chart bounds and move the palette if it will go off-screen\n\t\t\t\tpalette.checkPosition();\n\t\t\t}\n\t\t});\n\n\t\t// Notify palettes that a resize has occured\n\t\tthis.palettePublish(\"dockDidResize\");\n\n\t\t// prevent loop as this function is can be invoked on resizeChart injection\n\t\tif (resizeChart) this.context.stx.resizeChart();\n\t}\n\n\t/**\n\t * Sets height of vertically oriented palettes.\n\t *\n\t * @private\n\t *\n\t * @tsmember WebComponents.PaletteDock\n\t */\n\tsetVerticalPaletteHeight() {\n\t\t// Set height of vertically oriented child palettes\n\t\t[...this.querySelectorAll(\"[orientation=vertical]\")].forEach((elem) => {\n\t\t\tif (elem.getAttribute(\"docked\") === \"true\") {\n\t\t\t\telem.style.height = this.parentNode.clientHeight + \"px\";\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Resize chart to accommodate palette gutters\n\t *\n\t * @private\n\t *\n\t * @tsmember WebComponents.PaletteDock\n\t */\n\tsetChartDimensions() {\n\t\tconst chartContainer = this.context.stx.container;\n\t\tconst { top, left, width, height } = this.getChartBounds();\n\n\t\tconst { config } = this.context;\n\n\t\tconst { isMultiChartHost } = this.context.topNode;\n\t\tlet sidePanelWidth = 0;\n\t\tif (config && config.channels) {\n\t\t\tthis.channelWrite(\n\t\t\t\tconfig.channels.drawingPalettes || \"channel.drawingPalettes\",\n\t\t\t\t{\n\t\t\t\t\ttop,\n\t\t\t\t\tleft,\n\t\t\t\t\twidth,\n\t\t\t\t\theight\n\t\t\t\t}\n\t\t\t);\n\t\t\tif (isMultiChartHost)\n\t\t\t\tsidePanelWidth =\n\t\t\t\t\tthis.channelRead(\n\t\t\t\t\t\tconfig.channels.sidepanelSize || \"channel.sidepanelSize\"\n\t\t\t\t\t) || 0;\n\t\t} else {\n\t\t\t// configuration not available support previous direct updates (React app using v7.3)\n\t\t\tchartContainer.style.width = width + \"px\";\n\t\t\tchartContainer.style.height = height + \"px\";\n\n\t\t\tchartContainer.style.top = top + \"px\";\n\t\t\tchartContainer.style.left = left + \"px\";\n\n\t\t\tif (isMultiChartHost)\n\t\t\t\tsidePanelWidth = +(\n\t\t\t\t\tthis.context.topNode.querySelector(\"cq-side-panel\") || {\n\t\t\t\t\t\tstyle: { width: \"\" }\n\t\t\t\t\t}\n\t\t\t\t).style.width.replace(\"px\", \"\");\n\t\t}\n\n\t\t// Align any horizontal docked palettes with the chart left\n\t\tconst hPalettes = this.querySelectorAll(\n\t\t\t'[orientation=\"horizontal\"][docked=\"true\"]'\n\t\t);\n\t\t[...hPalettes].forEach((hPalette) => {\n\t\t\t// Offset horizontal palettes by the width of the vertical palettes\n\t\t\t// Add 1px for the border\n\t\t\thPalette.style.left = left + 1 + \"px\";\n\t\t\thPalette.style.width = width - sidePanelWidth - 3 + \"px\";\n\t\t});\n\t\t// Align any vertical docked palettes with the chart left\n\t\tconst vPalettes = this.querySelectorAll('[orientation=\"vertical\"]');\n\t\t[...vPalettes].forEach((vPalette) => {\n\t\t\t// Only offset vertical palettes when undocked. Docked vertical palettes are flush with the chart top edge.\n\t\t\tif (vPalette.docked === \"false\") {\n\t\t\t\tvPalette.style.top = top + \"px\";\n\t\t\t} else {\n\t\t\t\tvPalette.style.top = 0;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Dock all palettes.\n\t *\n\t * @private\n\t *\n\t * @tsmember WebComponents.PaletteDock\n\t */\n\tdockAllPalettes() {\n\t\tconst palettes = this.querySelectorAll('[docked=\"false\"]');\n\t\t[...palettes].forEach((palette) => palette.dock());\n\t}\n}\n\nCIQ.UI.addComponentDefinition(\"cq-palette-dock\", PaletteDock);\n\n};\n\n\nlet __js_webcomponents_redo_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-redo>

        \n *\n * This component will redo an undone drawing. This works with complementary component [cq-undo]{@link WebComponents.Undo}.\n *\n * @example\n * \n * Undo\n * Redo\n * \n\n * @alias WebComponents.Redo\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n */\nclass Redo extends CIQ.UI.ContextTag {\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, Redo);\n\t}\n\n\t/**\n\t * Finds {@link WebComponents.Undo} and pairs with it to find the last undo and reverse it.\n\t * @param {WebComponents.Undo} undo A cq-undo webcomponent\n\t * @example\n\t * document.querySelector(\"cq-redo\").pairUp(document.querySelector(\"cq-undo\"));\n\t *\n\t * @tsmember WebComponents.Redo\n\t */\n\tpairUp(undo) {\n\t\tthis.undo = undo;\n\t\tthis.undo.redoButton = this;\n\t\tCIQ.UI.stxtap(this, () => this.undo.redo());\n\t\tthis.undo.setButtonStyle();\n\t}\n}\n\nCIQ.UI.addComponentDefinition(\"cq-redo\", Redo);\n\n};\n\n\nlet __js_webcomponents_scroll_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-scroll>

        \n *\n * This component creates a scrollable container, which resizes itself when the screen\n * is resized. If CIQ.UI.scrollbarStyling is initialized to a scrollbar implementation (such as\n * PerfectScrollbar), the scrollbar implementation replaces the native scrollbar.\n *\n * _**Attributes**_\n *\n * This component supports the following attributes:\n * | attribute | description |\n * | :------------- | :---------- |\n * | cq-no-claim | Do not apply any keystroke capturing |\n * | cq-no-maximize | Do not automatically maximize the height (but keep it showing on screen) |\n * | cq-no-resize | Do not apply any sizing logic |\n * | cq-max-height | Maximum height |\n *\n * _**Keyboard Control**_\n *\n * When selected with tab key navigation and activated with Return/Enter, this component has the\n * following internal controls:\n * | key | action |\n * | :--------------- | :----- |\n * | Up/Down arrow | Move selection between internal cq-item elements. |\n * | Left/Right arrow | Select a control within a selected element. |\n *\n * @example\n * \n * \n * ALL\n * STOCKS\n * FX\n * INDEXES\n * FUNDS\n * FUTURES\n * \n * \n * \n *\n * @alias WebComponents.Scroll\n * @extends CIQ.UI.BaseComponent\n * @class\n * @protected\n * @since\n * - 6.1.0 Added `cq-no-claim` attribute.\n * - 8.3.0 Enabled internal keyboard navigation and selection.\n */\nclass Scroll extends CIQ.UI.BaseComponent {\n\tconnectedCallback() {\n\t\tif (!this.isConnected || this.attached) return;\n\t\tsuper.connectedCallback();\n\t\tif (!this.hasAttribute(\"cq-no-claim\")) this.addClaim(this);\n\t\tif (this.hasAttribute(\"cq-no-scroll\")) return;\n\t\t// Setting CSS in constructor will throw exception when calling document.createElement (done in plugins)\n\t\t// So set default CSS here when connected instead.\n\t\tthis.style.overflowY = \"auto\";\n\t\tthis.uiManager = CIQ.UI.getUIManager(this);\n\t\tif (this.uiManager.length) this.uiManager = this.uiManager[0];\n\n\t\t// prevent mousewheel event from propagating up to parents, such as when embedded\n\t\t// in a chart, e.g. comparison lookup component\n\t\tthis.addEventListener(CIQ.wheelEvent, (e) => e.stopPropagation(), {\n\t\t\tpassive: false\n\t\t});\n\n\t\tCIQ.UI.addResizeListener(this, () => this.resize());\n\t\tthis.resize();\n\n\t\tthis.maxHeight = this.getAttribute(\"cq-max-height\");\n\t\tthis.addEventListener(\"scroll\", () => {\n\t\t\tthis.uiManager.closeOpenColorPicker();\n\t\t});\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, Scroll);\n\t}\n\n\tdisconnectedCallback() {\n\t\tif (this.doNotDisconnect) return;\n\t\tthis.removeClaim(this);\n\t\tCIQ.UI.removeResizeListener(this);\n\t\tif (CIQ.UI.scrollbarStyling) CIQ.UI.scrollbarStyling.destroy(this);\n\t\tsuper.disconnectedCallback();\n\t}\n\n\t/**\n\t * Returns the focused element or null. An item is focused if it has\n\t * attribute cq-focused.\n\t *\n\t * @return {HTMLElement} The element or null\n\t *\n\t * @tsmember WebComponents.Scroll\n\t */\n\tfocused() {\n\t\treturn this.querySelector(\"cq-item[cq-focused]\");\n\t}\n\n\t/**\n\t * Handler for keyboard interaction.\n\t *\n\t * Scroll components can handle up and down enter keystrokes.\n\t * They do not register for claims directly. Another section of code must\n\t * establish the claim on their behalf or proxy the keystroke.\n\t *\n\t * Up and Down arrows will iterate through the scrollable elements. The attribute\n\t * cq-focused will be added to the currently focused tag. This can then be\n\t * queried later, such as when a user hits enter.\n\t *\n\t * Left and Right arrows will iterate through the elements on the focused scrollable element,\n\t * such as Remove and Edit buttons. Child elements must have the attribute `keyboard-selectable-child`\n\t * set to \"true\" to be selectable with these keys.\n\t *\n\t * Space bar or Enter will call the selectFC callback on the element if it exists.\n\t *\n\t * @param {CIQ.UI.KeystrokeHub} hub The hub that processed the key\n\t * @param {string} key Key that was stroked\n\t * @param {Event} e The event object\n\t * @return {boolean} true if keystroke was processed\n\t *\n\t * @tsmember WebComponents.Scroll\n\t */\n\tkeyStroke(hub, key, e) {\n\t\tif (!this.keyboardNavigation) {\n\t\t\tif (this.keyboardNavigationWait || !this.matches(\".stxMenuActive *\"))\n\t\t\t\treturn;\n\t\t}\n\n\t\tif (!CIQ.trulyVisible(this)) return false;\n\n\t\tconst items = this.querySelectorAll(\n\t\t\t\"[keyboard-selectable='true'], cq-item:not(.item-hidden), li\"\n\t\t);\n\t\tif (!items.length) return false;\n\n\t\tif (key == \" \" || key == \"Spacebar\" || key == \"Enter\") {\n\t\t\tconst focused = this.findFocused(items);\n\t\t\tif (!focused || !focused.length) return false;\n\t\t\tconst childItemsSelected = focused[0].querySelectorAll(\n\t\t\t\t\"[keyboard-selectable-child='true'][cq-focused]\"\n\t\t\t);\n\t\t\tif (childItemsSelected.length) {\n\t\t\t\tconst studyLegend = focused[0].closest(\"cq-study-legend\");\n\t\t\t\tif (studyLegend)\n\t\t\t\t\tstudyLegend.storeFocused(focused, childItemsSelected[0]);\n\t\t\t\tthis.clickItem(childItemsSelected[0], e);\n\t\t\t} else this.clickItem(focused[0], e);\n\t\t} else if (key == \"ArrowDown\" || key == \"Down\") {\n\t\t\tthis.focusNextItem(items);\n\t\t} else if (key == \"ArrowUp\" || key == \"Up\") {\n\t\t\tthis.focusNextItem(items, true);\n\t\t} else if (key == \"ArrowRight\" || key == \"Right\") {\n\t\t\tconst focused = this.findFocused(items);\n\t\t\tif (!focused || !focused.length) return false;\n\t\t\tconst childItems = focused[0].querySelectorAll(\n\t\t\t\t\"[keyboard-selectable-child='true']\"\n\t\t\t);\n\t\t\tif (childItems.length) this.focusNextItem(childItems);\n\t\t} else if (key == \"ArrowLeft\" || key == \"Left\") {\n\t\t\tconst focused = this.findFocused(items)[0];\n\t\t\tif (!focused) return false;\n\t\t\tconst childItems = focused.querySelectorAll(\n\t\t\t\t\"[keyboard-selectable-child='true']\"\n\t\t\t);\n\t\t\t// If the end of the child items has been reached select the parent item instead\n\t\t\tif (childItems.length && !this.focusNextItem(childItems, true)) {\n\t\t\t\tthis.removeFocused(childItems);\n\t\t\t\tthis.focusItem(focused);\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Overrides [focusItem](CIQ.UI.BaseComponent.html#focusItem) in\n\t * [CIQ.UI.BaseComponent]{@link CIQ.UI.BaseComponent}.\n\t *\n\t * Scrolls to an item and gives the item focus.\n\t *\n\t * @param {HTMLElement} item The element to scroll to and focus. Must be a child of this component.\n\t *\n\t * @tsmember WebComponents.Scroll\n\t *\n\t * @since 8.3.0\n\t */\n\tfocusItem(item) {\n\t\tthis.scrollToElement(item);\n\t\tsuper.focusItem(item);\n\t}\n\n\t/**\n\t * If we're using keyboard navigation, returns the highlight to the tab selected element.\n\t *\n\t * @tsmember WebComponents.Scroll\n\t */\n\tonKeyboardDeselection() {\n\t\t// If we're using keyboard navigation, return the highlight to the tab selected element\n\t\tif (this.keyboardNavigation && this.keyboardNavigation !== null)\n\t\t\tthis.keyboardNavigation.highlightPosition();\n\t}\n\n\t/**\n\t * Resizes the componewnt when the screen is resized, or even if the configuraton is reloaded to add or remove items.\n\t *\n\t * @tsmember WebComponents.Scroll\n\t */\n\tresize() {\n\t\tconst context = this.closest(\"cq-context\");\n\t\tif (this.closest(\".sharing\"))\n\t\t\treturn; /*share.js appends this class to the body.\n\t\t\tDo not attempt unnecessary resize of scroll\n\t\t\tfor a chart about to become a shared image.*/\n\t\tif (this.hasAttribute(\"cq-no-resize\")) return;\n\t\tif (this.hasAttribute(\"cq-no-maximize\")) this.noMaximize = true;\n\t\tconst position = this.getBoundingClientRect();\n\t\tif (!position.height) return;\n\t\t// defaulted to 45 to take into account 15px of padding on menus and then an extra 5px for aesthetics\n\t\tconst reduceMenuHeight = this.reduceMenuHeight || 45;\n\t\tlet contextHeight, contextTop;\n\t\tif (context) {\n\t\t\tconst { multiChartContainer } = context;\n\t\t\tconst contextRect = (\n\t\t\t\tmultiChartContainer || context\n\t\t\t).getBoundingClientRect();\n\t\t\tcontextHeight = contextRect.height;\n\t\t\tcontextTop = contextRect.top;\n\t\t} else {\n\t\t\t// Fallback to the window height if context element cannot be found\n\t\t\tcontextHeight = this.ownerDocument.defaultView.innerHeight;\n\t\t\tcontextTop = 0;\n\t\t}\n\t\tif (!contextHeight) return;\n\t\tlet height = contextHeight - (position.top - contextTop) - reduceMenuHeight;\n\t\tconst holders = CIQ.climbUpDomTree(\n\t\t\tthis,\n\t\t\t\".stx-holder,.stx-subholder,.chartContainer\",\n\t\t\ttrue\n\t\t);\n\t\tif (holders.length) {\n\t\t\tholders.forEach((holder) => {\n\t\t\t\tconst holderBottom =\n\t\t\t\t\tholder.getBoundingClientRect().top +\n\t\t\t\t\tCIQ.elementDimensions(holder).height;\n\t\t\t\theight = Math.min(height, holderBottom - position.top - 5); // inside a holder we ignore reduceMenuHeight, but take off 5 pixels just for aesthetics\n\t\t\t});\n\t\t}\n\n\t\t// If there are subsequent siblings that have a fixed height then make room for them\n\t\tconst children = [...this.parentNode.children];\n\t\tconst nextAll = children.slice(children.indexOf(this) + 1);\n\t\tfor (let i = 0; i < nextAll.length; i++) {\n\t\t\tconst sibling = nextAll[i];\n\t\t\tif (sibling && !CIQ.trulyVisible(sibling)) continue; // skip hidden siblings\n\t\t\theight -= CIQ.elementDimensions(sibling, {\n\t\t\t\tborder: 1,\n\t\t\t\tpadding: 1,\n\t\t\t\tmargin: 1\n\t\t\t}).height;\n\t\t}\n\t\tif (this.maxHeight && this.maxHeight < height) {\n\t\t\theight = this.maxHeight;\n\t\t}\n\t\tif (!this.noMaximize) this.style.height = height + \"px\";\n\n\t\t// The drop-up-menu attribute indicates that this element is positioned from its bottom and can potentially flow off screen\n\t\tif (this.hasAttribute(\"cq-drop-up-menu\")) {\n\t\t\tconst currentBottom = +this.style.bottom.replace(\"px\", \"\");\n\t\t\tconst newBottom = Math.min(\n\t\t\t\tposition.top - contextTop - reduceMenuHeight + currentBottom - 4,\n\t\t\t\t25\n\t\t\t);\n\t\t\tthis.style.bottom = newBottom + \"px\";\n\t\t}\n\t\tthis.style.maxHeight = height + \"px\";\n\t\tthis.refresh();\n\t}\n\n\t/**\n\t * Scrolls to an element.\n\t *\n\t * @param {HTMLElement} item The element to scroll to. Must be a child of this component.\n\t *\n\t * @tsmember WebComponents.Scroll\n\t */\n\tscrollToElement(item) {\n\t\tconst bottom = this.clientHeight,\n\t\t\tscrolled = this.scrollTop;\n\t\tconst itemBottom = item.offsetTop + item.clientHeight;\n\t\tif (item.offsetTop > scrolled && itemBottom < bottom + scrolled) return;\n\t\tthis.scrollTop = Math.max(itemBottom - bottom, 0);\n\t\tthis.refresh();\n\t}\n\n\t/**\n\t * Scroll back to top\n\t *\n\t * @tsmember WebComponents.Scroll\n\t */\n\ttop() {\n\t\tthis.scrollTop = 0;\n\t\tthis.refresh();\n\t}\n\n\t/**\n\t * Scroll back to top (calls `top()`).\n\t *\n\t * @tsmember WebComponents.Scroll\n\t */\n\tscrollToTop() {\n\t\tthis.top();\n\t}\n\n\t/**\n\t * Refreshes the scrollbar, if CIQ.UI.scrollbarStyling is enabled.\n\t *\n\t * @since 7.2.0\n\t *\n\t * @tsmember WebComponents.Scroll\n\t */\n\trefresh() {\n\t\tif (CIQ.UI.scrollbarStyling) CIQ.UI.scrollbarStyling.refresh(this);\n\t}\n}\n\nCIQ.UI.addComponentDefinition(\"cq-scroll\", Scroll);\n\n};\n\n\nlet __js_webcomponents_shareButton_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-share-button>

        \n *\n * Button that opens a dialog that can be used to share a chart.\n *\n * _**Attributes**_\n *\n * This component observes the following attributes and will change behavior if these attributes are modified:\n * | attribute | description |\n * | :------------- | :---------- |\n * | help-id | A key to the correct help text in CIQ.Help.Content. |\n * | icon | Class name for image to use. |\n * | reader | Accessibility text when focused by a screen reader. |\n * | responsive | Set this attribute if the text displayed on this component should change to an icon when the viewport's dimensions are reduced. |\n * | text | Displayed label for this button. |\n * | tooltip | Text for the tooltip which appears when hovering over the component. |\n *\n * Do not include the `icon` or `text` attributes if you don't want any icon or text, respectively.\n *\n * _**Emitters**_\n *\n * A custom event will be emitted from the component when button is pressed.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"click\" |\n * | action | \"click\" |\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * @example Button with responsive icon:\n * \n *\n * @alias WebComponents.ShareButton\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n * @since\n * - 9.0.0 Added functionality to export layouts to social media services.\n * - 9.1.0 Observes attributes. Added emitter.\n */\nclass ShareButton extends CIQ.UI.ContextTag {\n\tstatic get observedAttributes() {\n\t\treturn [\"help-id\", \"icon\", \"reader\", \"responsive\", \"text\", \"tooltip\"];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tCIQ.UI.makeShadow(this);\n\t}\n\n\tconnectedCallback() {\n\t\tif (!this.isConnected || this.attached) return;\n\t\tsuper.connectedCallback();\n\t\tif (this.isShadowComponent && this.children.length) {\n\t\t\twhile (this.children.length) {\n\t\t\t\tthis.root.appendChild(this.firstChild);\n\t\t\t}\n\t\t}\n\t\tthis.markup = this.trimInnerHTMLWhitespace();\n\t\tthis.usingMarkup = !!this.markup.match(/\\{\\{(.{1,20}?)\\}\\}/g);\n\n\t\tthis.reset();\n\t\tthis.setupShadow();\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, ShareButton);\n\t\tthis.constructor = ShareButton;\n\t}\n\n\t/**\n\t * Processes attribute changes. This is called whenever an observed attribute has changed.\n\t *\n\t * @param {string} name Attribute name\n\t * @param {string} oldValue Original attribute value\n\t * @param {string} newValue new Attribute value\n\t *\n\t * @tsmember WebComponents.ShareButton\n\t */\n\thandlePropertyChange(name, oldValue, newValue) {\n\t\tif (oldValue === newValue) return;\n\t\tthis[name] = newValue;\n\t\tif (this.usingMarkup) {\n\t\t\tthis.reset();\n\t\t} else {\n\t\t\t// do nothing when using predefined content\n\t\t}\n\t}\n\n\t/**\n\t * Formats the default markup, replacing any variables with the actual values provided by the attributes.\n\t *\n\t * @return {string} The prepared markup\n\t *\n\t * @tsmember WebComponents.ShareButton\n\t */\n\tgetMarkup() {\n\t\tlet markup = this.markup || this.constructor.markup;\n\t\tconst names = markup.match(/\\{\\{(.{1,20}?)\\}\\}/g);\n\t\tif (names)\n\t\t\tnames.forEach((name) => {\n\t\t\t\tconst key = name.substring(2, name.length - 2);\n\t\t\t\tif (key.includes(\"_class\")) return;\n\t\t\t\tconst attr = this[key];\n\t\t\t\tif (attr == null) {\n\t\t\t\t\tif (key === \"reader\" && this.text)\n\t\t\t\t\t\tmarkup = markup.replace(name, this.text);\n\t\t\t\t\telse if (key === \"help-id\")\n\t\t\t\t\t\tmarkup = markup.replace(/\\{\\{help_class\\}\\}/g, \"hidden\");\n\t\t\t\t\telse if (key === \"icon\") markup = markup.replace(name, \"hidden\");\n\t\t\t\t\telse if (key === \"text\")\n\t\t\t\t\t\tmarkup = markup.replace(\"{{label_class}}\", \"hidden\");\n\t\t\t\t\telse if (key === \"tooltip\")\n\t\t\t\t\t\tmarkup = markup.replace(\"{{tooltip_class}}\", \"hidden\");\n\t\t\t\t\telse markup = markup.replace(name, \"\");\n\t\t\t\t} else {\n\t\t\t\t\tif (key === \"text\") markup = markup.replace(\"{{label_class}}\", \"\");\n\t\t\t\t\telse if (key === \"tooltip\")\n\t\t\t\t\t\tmarkup = markup.replace(\"{{tooltip_class}}\", \"\");\n\t\t\t\t\telse if (key === \"help-id\")\n\t\t\t\t\t\tmarkup = markup.replace(/\\{\\{help_class\\}\\}/g, \"\");\n\t\t\t\t\telse if (key === \"responsive\")\n\t\t\t\t\t\tmarkup = markup.replace(\"{{responsive}}\", \"responsive\");\n\t\t\t\t\tmarkup = markup.replace(name, attr);\n\t\t\t\t}\n\t\t\t});\n\t\treturn markup;\n\t}\n\n\t/**\n\t * Called when an attribute changes, will regenerate the shareButton component,\n\t * updating whatever needs to be updated as a result of the attribute change.\n\t *\n\t * @tsmember WebComponents.ShareButton\n\t */\n\treset() {\n\t\tconst { children } = this.root;\n\t\tif (!children.length || this.usingMarkup) {\n\t\t\tthis.usingMarkup = true;\n\t\t\tif (children.length) {\n\t\t\t\t[...children].forEach((child) => {\n\t\t\t\t\tif (![\"LINK\", \"STYLE\"].includes(child.tagName)) child.remove();\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst div = document.createElement(\"div\");\n\t\t\tthis.addDefaultMarkup(div, this.getMarkup());\n\t\t}\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.ShareButton\n\t */\n\tsetContext(context) {\n\t\tthis.makeTap(this, (e) => {\n\t\t\te.stopPropagation();\n\t\t\tthis.tap();\n\t\t});\n\t\tCIQ.Share.onClipboard((shareID) => {\n\t\t\tCIQ.Share.loadChartFromID(this.context.stx, shareID);\n\t\t});\n\t\tthis.reset();\n\t}\n\n\t/**\n\t * Opens a customizable dialog that can share a chart.\n\t *\n\t * @tsmember WebComponents.ShareButton\n\t */\n\ttap() {\n\t\tthis.uiManager.closeMenu(null, \"cq-menu,cq-dialog,cq-color-picker\");\n\t\tconst { context } = this;\n\t\tif (context.config) {\n\t\t\tthis.channelWrite(\n\t\t\t\tcontext.config.channels.dialog,\n\t\t\t\t{ type: \"share\", params: { context } },\n\t\t\t\tcontext.stx\n\t\t\t);\n\t\t} else {\n\t\t\tconst shareDialog = this.ownerDocument.querySelector(\"cq-share-dialog\");\n\t\t\tif (shareDialog && shareDialog.open) shareDialog.open({ context });\n\t\t}\n\t\tthis.emitCustomEvent({ effect: \"click\" });\n\t}\n\n\t/**\n\t * Used to extract a shareID from the clipboard content.\n\t *\n\t * @tsmember WebComponents.ShareButton\n\t */\n\tasync getClipboard() {\n\t\tconst shareID = await CIQ.Share.getClipboard();\n\n\t\tif (shareID) {\n\t\t\tCIQ.Share.loadChartFromID(this.context.stx, shareID);\n\t\t} else {\n\t\t\tthis.tap();\n\t\t}\n\t}\n}\n\n/**\n * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * This markup contains placeholder values which the component replaces with values from its attributes.\n * Variables are represented in double curly-braces, for example: `{{text}}`.\n * The following variables are defined:\n * | variable | source |\n * | :------------ | :----- |\n * | reader | from attribute value |\n * | icon | from attribute value |\n * | text | from attribute value |\n * | help-id | from attribute value |\n * | responsive | from attribute value |\n * | tooltip | from attribute value |\n * | tooltip_class | \"hidden\" if `tooltip` attribute not specified |\n * | help_class | \"hidden\" if `help-id` attribute not specified |\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.ShareButton\n */\nShareButton.markup = `\n\t\t
        \n\t\t\t\n\t\t\t\n\t\t\t\t
        {{tooltip}}
        \n\t\t\t
        \n\t\t\t{{text}}\n\t\t
        \n\t\t
        \n\t\t\t\n\t\t\t(Help available, press question mark key)\n\t\t
        \n\t`;\nCIQ.UI.addComponentDefinition(\"cq-share-button\", ShareButton);\n\n};\n\n\nlet __js_webcomponents_shareDialog_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\nif (!CIQ.Share) {\n\tconsole.error(\n\t\t\"shareDialog component requires first activating share feature.\"\n\t);\n} else {\n\t/**\n\t * @classdesc\n\t *\n\t * This is a custom HtmlElement (Web Component). The tag name is the following:\n\t *\n\t *

        <cq-share-dialog>

        \n\t *\n\t * Dialog form that allows users share/post their charts to a remote service, such as social media or a file server.\n\t *\n\t * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n\t * The default markup provided has accessibility features.\n\t *\n\t * _**Emitters**_\n\t *\n\t * A custom event will be emitted from the component when data is generated for sharing.\n\t * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n\t * The details of the event contain the following:\n\t * | property | value |\n\t * | :------- | :---- |\n\t * | emitter | this component |\n\t * | cause | \"useraction\" or \"auto\" |\n\t * | effect | \"share\" or \"id\" |\n\t * | action | \"click\" or null |\n\t * | value | _link to image, or id_ |\n\t *\n\t * A custom event will be emitted from the component when data is copied to the clipboard.\n\t * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n\t * The details of the event contain the following:\n\t * | property | value |\n\t * | :------- | :---- |\n\t * | emitter | this component |\n\t * | cause | \"useraction\" |\n\t * | effect | \"copy\" |\n\t * | action | \"click\" |\n\t * | value | _contents of clipboard_ |\n\t *\n\t * @alias WebComponents.ShareDialog\n\t * @extends CIQ.UI.DialogContentTag\n\t * @class\n\t * @protected\n\t * @since\n\t * - 9.0.0 Added functionality to export layouts to social media services.\n\t * - 9.1.0 Added emitter.\n\t */\n\tclass ShareDialog extends CIQ.UI.DialogContentTag {\n\t\tadoptedCallback() {\n\t\t\tsuper.adoptedCallback();\n\t\t\tCIQ.UI.flattenInheritance(this, ShareDialog);\n\t\t\tthis.constructor = ShareDialog;\n\t\t}\n\n\t\t/**\n\t\t * Opens the share dialog.\n\t\t *\n\t\t * @param {object} params\n\t\t * @param {CIQ.UI.Context} [params.context] A context to set. See\n\t\t * \t\t[setContext]{@link CIQ.UI.DialogContentTag#setContext}.\n\t\t *\n\t\t * @tsmember WebComponents.ShareDialog\n\t\t */\n\t\topen(params) {\n\t\t\tthis.addDefaultMarkup();\n\t\t\tthis.closeTeamsDialog();\n\n\t\t\tif (\n\t\t\t\t!params.context ||\n\t\t\t\t!params.context.stx ||\n\t\t\t\t!params.context.stx.chart ||\n\t\t\t\t!params.context.stx.chart.canvas\n\t\t\t)\n\t\t\t\treturn;\n\n\t\t\tsuper.open(params);\n\n\t\t\tconst { chartSharing } = params.context.config;\n\n\t\t\tif (chartSharing && chartSharing.getChartLayout) {\n\t\t\t\tthis.querySelector(\"[cq-share-dialog-div]\").classList.add(\n\t\t\t\t\t\"has-live-chart-sharing\"\n\t\t\t\t);\n\t\t\t\tthis.shareChartID(\"auto\");\n\t\t\t} else {\n\t\t\t\tthis.shareChartImage(\"auto\");\n\t\t\t}\n\n\t\t\t// Set the main dialog as keyboard active to reset the highlight when this panel reloads\n\t\t\tif (this.ownerDocument.body.keystrokeHub) {\n\t\t\t\tlet { tabActiveModals } = this.ownerDocument.body.keystrokeHub;\n\t\t\t\tif (tabActiveModals[0])\n\t\t\t\t\tthis.ownerDocument.body.keystrokeHub.setKeyControlElement(\n\t\t\t\t\t\ttabActiveModals[0]\n\t\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Creates an image of the chart.\n\t\t *\n\t\t * @return {Promise}\n\t\t * @async\n\t\t *\n\t\t * @tsmember WebComponents.ShareDialog\n\t\t */\n\t\tasync createImage() {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tconst { stx } = this.context;\n\t\t\t\tconst shareLink = this.querySelector(\n\t\t\t\t\t\".share-image-container .share-copyable-link\"\n\t\t\t\t);\n\t\t\t\tif (shareLink) shareLink.innerHTML = \"Loading...\";\n\n\t\t\t\tconst copyButton = this.querySelector(\n\t\t\t\t\t`.share-image-container .cq-share-copy`\n\t\t\t\t);\n\t\t\t\tif (copyButton) copyButton.setAttribute(\"disabled\", \"\");\n\n\t\t\t\t// \"hide\" is a selector list, of DOM elements to be hidden while an image of the chart is created. \"cq-comparison-add-label\" and \".chartSize\" are hidden by default.\n\t\t\t\tCIQ.UI.bypassBindings = true;\n\t\t\t\tCIQ.Share.createImage(\n\t\t\t\t\tstx,\n\t\t\t\t\t{\n\t\t\t\t\t\thide: [\n\t\t\t\t\t\t\t\".ciq-nav\",\n\t\t\t\t\t\t\t\".ciq-footer\",\n\t\t\t\t\t\t\t\"cq-dialog\",\n\t\t\t\t\t\t\t\"cq-dialogs\",\n\t\t\t\t\t\t\t\".stx_chart_controls\",\n\t\t\t\t\t\t\t\".stx-btn-panel\",\n\t\t\t\t\t\t\t\".stx_jump_today\",\n\t\t\t\t\t\t\t\".stx-baseline-handle\",\n\t\t\t\t\t\t\t\".ciq-edit\",\n\t\t\t\t\t\t\t\".ciq-close\",\n\t\t\t\t\t\t\t\"cq-marker-label\"\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t(data) => {\n\t\t\t\t\t\tCIQ.UI.bypassBindings = false;\n\t\t\t\t\t\tconst id = CIQ.uniqueID();\n\t\t\t\t\t\tconst host = \"https://share.chartiq.com\"; //TODO make configurable\n\t\t\t\t\t\tconst startOffset = stx.getStartDateOffset();\n\t\t\t\t\t\tconst metaData = {\n\t\t\t\t\t\t\tlayout: stx.exportLayout(),\n\t\t\t\t\t\t\tdrawings: stx.exportDrawings(),\n\t\t\t\t\t\t\txOffset: startOffset,\n\t\t\t\t\t\t\tstartDate: stx.chart.dataSegment[startOffset].Date,\n\t\t\t\t\t\t\tendDate:\n\t\t\t\t\t\t\t\tstx.chart.dataSegment[stx.chart.dataSegment.length - 1].Date,\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\tsymbol: stx.chart.symbol\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst url = host + \"/upload/\" + id;\n\t\t\t\t\t\tconst payload = { id, image: data, config: metaData };\n\t\t\t\t\t\tCIQ.Share.uploadImage(data, url, payload, (err, response) => {\n\t\t\t\t\t\t\tif (err !== null) {\n\t\t\t\t\t\t\t\tCIQ.alert(\"error: \" + err);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst link = host + response;\n\t\t\t\t\t\t\t\tif (shareLink) shareLink.innerHTML = link;\n\t\t\t\t\t\t\t\tif (copyButton) copyButton.removeAttribute(\"disabled\");\n\t\t\t\t\t\t\t\tresolve(link);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\t// Set the main dialog as keyboard active to reset the highlight when this panel reloads\n\t\t\t\tif (this.ownerDocument.body.keystrokeHub) {\n\t\t\t\t\tlet { tabActiveModals } = this.ownerDocument.body.keystrokeHub;\n\t\t\t\t\tif (tabActiveModals[0])\n\t\t\t\t\t\tthis.ownerDocument.body.keystrokeHub.setKeyControlElement(\n\t\t\t\t\t\t\ttabActiveModals[0]\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Function for copying PNG image.\n\t\t * @param {object} activator\n\t\t * @param {HTMLElement} activator.node The button which was tapped to execute this function\n\t\t *\n\t\t * @tsmember WebComponents.ShareDialog\n\t\t * @since 9.2.0\n\t\t */\n\t\tcopy_image({ node }) {\n\t\t\tif (!node.disabled) this.copy(\"image\");\n\t\t}\n\n\t\t/**\n\t\t * Function for copying chart layout.\n\t\t * @param {object} activator\n\t\t * @param {HTMLElement} activator.node The button which was tapped to execute this function\n\t\t *\n\t\t * @tsmember WebComponents.ShareDialog\n\t\t * @since 9.2.0\n\t\t */\n\t\tcopy_layout({ node }) {\n\t\t\tif (!node.disabled) this.copy(\"layout\");\n\t\t}\n\n\t\t/**\n\t\t * Copies the chart image or layout ID to the clipboard.\n\t\t *\n\t\t * @param {String} type image|layout\n\t\t *\n\t\t * @tsmember WebComponents.ShareDialog\n\t\t */\n\t\tcopy(type) {\n\t\t\tconst shareLink = this.querySelector(\n\t\t\t\t`.share-${type}-container .share-copyable-link`\n\t\t\t);\n\t\t\tif (!shareLink) return;\n\t\t\tconst linkToCopy = shareLink.innerText;\n\t\t\tconst tempInputElem = document.createElement(\"input\");\n\t\t\ttempInputElem.type = \"text\";\n\t\t\ttempInputElem.value = linkToCopy;\n\t\t\ttempInputElem.contentEditable = true;\n\t\t\ttempInputElem.readOnly = true;\n\t\t\tthis.ownerDocument.body.appendChild(tempInputElem);\n\t\t\ttempInputElem.focus();\n\t\t\ttempInputElem.select();\n\t\t\tif (!CIQ.isIE) {\n\t\t\t\tconst range = document.createRange();\n\t\t\t\trange.selectNodeContents(tempInputElem);\n\t\t\t\tconst s = window.getSelection();\n\t\t\t\ts.removeAllRanges();\n\t\t\t\ts.addRange(range);\n\t\t\t\ttempInputElem.setSelectionRange(0, linkToCopy.length);\n\t\t\t}\n\t\t\tthis.ownerDocument.execCommand(\"copy\");\n\t\t\tthis.ownerDocument.body.removeChild(tempInputElem);\n\t\t\tshareLink.parentElement.classList.add(\"share-copied\");\n\n\t\t\tconst copyButton = this.querySelector(\n\t\t\t\t`.share-${type}-container .cq-share-copy`\n\t\t\t);\n\n\t\t\tconst origText = copyButton.innerHTML;\n\n\t\t\tif (type === \"image\") {\n\t\t\t\tcopyButton.innerHTML = \"URL Copied!\";\n\t\t\t} else {\n\t\t\t\tcopyButton.innerHTML = \"ID Copied!\";\n\t\t\t}\n\n\t\t\tthis.emitCustomEvent({\n\t\t\t\teffect: \"copy\",\n\t\t\t\tdetail: { value: linkToCopy }\n\t\t\t});\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tcopyButton.innerHTML = origText;\n\t\t\t}, 3000);\n\t\t}\n\n\t\t/**\n\t\t * Loads a chart from a provided layout ID.\n\t\t *\n\t\t * @param {object} response\n\t\t * @param {Event} response.e The event triggering the load.\n\t\t *\n\t\t * @tsmember WebComponents.ShareDialog\n\t\t */\n\t\tloadChart(response) {\n\t\t\tCIQ.Share.loadChart(\n\t\t\t\tthis.context.stx,\n\t\t\t\tresponse.e.target.previousElementSibling.value\n\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * Shows the appropriate \"tab\" in the dialog, whether for sharing a chart or an image.\n\t\t *\n\t\t * @param {string} type \"id\" or \"image\".\n\t\t *\n\t\t * @tsmember WebComponents.ShareDialog\n\t\t */\n\t\tactivateTab(type) {\n\t\t\tconst activeTab = this.querySelector(\n\t\t\t\t\t`.ciq-share-chart-tab[type=\"${type}\"]`\n\t\t\t\t),\n\t\t\t\tactiveContent = this.querySelector(\n\t\t\t\t\t`.ciq-share-chart-tab-content[type=\"${type}\"]`\n\t\t\t\t);\n\n\t\t\t[\n\t\t\t\t...this.querySelectorAll(\n\t\t\t\t\t\".ciq-share-chart-tab, .ciq-share-chart-tab-content\"\n\t\t\t\t)\n\t\t\t].forEach((tab) => {\n\t\t\t\ttab.classList.remove(\"ciq-active\");\n\t\t\t});\n\n\t\t\tactiveTab.classList.add(\"ciq-active\");\n\t\t\tactiveContent.classList.add(\"ciq-active\");\n\n\t\t\treturn { activeTab, activeContent };\n\t\t}\n\n\t\t/**\n\t\t * Shares the layout ID to a social media service.\n\t\t *\n\t\t * @param {string} source Indicates a cause for the sharing. Used in the emitter.\n\t\t * @async\n\t\t *\n\t\t * @tsmember WebComponents.ShareDialog\n\t\t */\n\t\tasync shareChartID(source) {\n\t\t\tconst { activeContent: shareContainer } = this.activateTab(\"id\");\n\n\t\t\tCIQ.Share.saveChartLayout(this.context.stx).then((shareID) => {\n\t\t\t\tconst { chartSharing } = this.context.config;\n\n\t\t\t\tthis.emitCustomEvent({\n\t\t\t\t\taction: source ? null : undefined,\n\t\t\t\t\tcause: source,\n\t\t\t\t\teffect: \"share\",\n\t\t\t\t\tdetail: { value: shareID }\n\t\t\t\t});\n\n\t\t\t\tif (chartSharing.generateURL) {\n\t\t\t\t\tchartSharing.generateURL(shareID).then((shareURL) => {\n\t\t\t\t\t\tconst encodedMessage = encodeURI(`${shareURL}`);\n\n\t\t\t\t\t\tconst copyableLinkContainer = this.querySelector(\n\t\t\t\t\t\t\t\".share-layout-container .share-copyable-link\"\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (copyableLinkContainer)\n\t\t\t\t\t\t\tcopyableLinkContainer.innerHTML = shareURL;\n\t\t\t\t\t\tif (shareContainer)\n\t\t\t\t\t\t\tshareContainer.classList.add(\"share-layout-loaded\");\n\n\t\t\t\t\t\tconst copyButton = this.querySelector(\n\t\t\t\t\t\t\t`.share-layout-container .cq-share-copy`\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (copyButton) copyButton.removeAttribute(\"disabled\");\n\n\t\t\t\t\t\tthis.updateSocialLinks(\"layout\", encodedMessage);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Open Microsoft Teams dialog area.\n\t\t *\n\t\t * @tsmember WebComponents.ShareDialog\n\t\t */\n\t\topenTeamsDialog() {\n\t\t\tthis.querySelector(\".ciq-share-teams\").classList.add(\"ciq-active\");\n\t\t\tconst dialog = this.closest(\"cq-dialog\");\n\t\t\tdialog.setTitle(\"Share With Teams\");\n\t\t}\n\n\t\t/**\n\t\t * Close Microsoft Teams dialog area.\n\t\t *\n\t\t * @tsmember WebComponents.ShareDialog\n\t\t */\n\t\tcloseTeamsDialog() {\n\t\t\tthis.querySelector(\".ciq-share-teams\").classList.remove(\"ciq-active\");\n\t\t\tconst dialog = this.closest(\"cq-dialog\");\n\t\t\tdialog.setTitle(\"Share Your Chart\");\n\t\t}\n\n\t\t/**\n\t\t * Update Microsoft Teams posting link.\n\t\t *\n\t\t * @param {Event} e Input event\n\t\t *\n\t\t * @tsmember WebComponents.ShareDialog\n\t\t */\n\t\tupdateTeamsLink(e) {\n\t\t\tconst link = e.target.parentElement.querySelector(\n\t\t\t\t\".ciq-share-teams-link\"\n\t\t\t);\n\t\t\tlink.href = `https://teams.microsoft.com/l/chat/0/0?users=${\n\t\t\t\te.target.value\n\t\t\t}&topicName=View%20Chart&message=${link.getAttribute(\n\t\t\t\t\"ciq-encoded-message\"\n\t\t\t)}`; //TODO use regex to do replacement of message value\n\t\t}\n\n\t\t/**\n\t\t * Update social media posting link.\n\t\t *\n\t\t * @param {string} type \"layout\" or \"image\".\n\t\t * @param {string} encodedMessage URI-encoded data to post.\n\t\t *\n\t\t * @tsmember WebComponents.ShareDialog\n\t\t */\n\t\tupdateSocialLinks(type, encodedMessage) {\n\t\t\tconst { chartSharing } = this.context.config;\n\n\t\t\tif (chartSharing && chartSharing.quickLinks) {\n\t\t\t\tconst { quickLinks } = chartSharing;\n\n\t\t\t\t[\n\t\t\t\t\t...this.querySelectorAll(`.share-${type}-container .ciq-share-link`)\n\t\t\t\t].forEach((button) => {\n\t\t\t\t\tconst name = button.getAttribute(\"cq-share-name\");\n\n\t\t\t\t\t// check if sharing is disabled for this 3rd party service\n\t\t\t\t\tif (quickLinks[name] === false) return;\n\n\t\t\t\t\tswitch (name) {\n\t\t\t\t\t\tcase \"msteams\":\n\t\t\t\t\t\t\tbutton.href = `https://teams.microsoft.com/l/chat/0/0?users=&topicName=View%20Chart&message=${encodedMessage}`; //TODO make configurable\n\t\t\t\t\t\t\tbutton.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tthis.openTeamsDialog();\n\t\t\t\t\t\t\t\tconst teamsLink = this.querySelector(\".ciq-share-teams-link\");\n\t\t\t\t\t\t\t\tconst teamsInput = this.querySelector(\n\t\t\t\t\t\t\t\t\t\".ciq-share-teams textarea\"\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tteamsInput.addEventListener(\"change\", this.updateTeamsLink);\n\t\t\t\t\t\t\t\tteamsInput.addEventListener(\"keyup\", this.updateTeamsLink);\n\t\t\t\t\t\t\t\tteamsLink.setAttribute(\"ciq-encoded-message\", encodedMessage);\n\t\t\t\t\t\t\t\tteamsLink.addEventListener(\"click\", () => {\n\t\t\t\t\t\t\t\t\tthis.closeTeamsDialog();\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"twitter\":\n\t\t\t\t\t\t\tbutton.href = `http://twitter.com/share?text=${encodedMessage}&hashtags=&url=`; //TODO make configurable\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"symphony\":\n\t\t\t\t\t\t\tbutton.href = `https://open.symphony.com/?startChat=&message=${encodedMessage}`; //TODO make configurable\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Shares the image PNG to a social media service.\n\t\t *\n\t\t * @param {string} source Indicates a cause for the sharing. Used in the emitter.\n\t\t * @async\n\t\t *\n\t\t * @tsmember WebComponents.ShareDialog\n\t\t */\n\t\tasync shareChartImage(source) {\n\t\t\tthis.activateTab(\"image\");\n\n\t\t\tconst link = await this.createImage();\n\n\t\t\tthis.updateSocialLinks(\"image\", encodeURI(link));\n\n\t\t\tthis.emitCustomEvent({\n\t\t\t\taction: source ? null : undefined,\n\t\t\t\tcause: source,\n\t\t\t\teffect: \"link\",\n\t\t\t\tdetail: { value: link }\n\t\t\t});\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.tabIndex = -1;\n\t\t\t\tthis.focus();\n\t\t\t}, 10);\n\t\t}\n\t}\n\n\t/**\n\t * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n\t *\n\t * @static\n\t * @type {String}\n\t *\n\t * @tsmember WebComponents.ShareDialog\n\t */\n\tShareDialog.markup = `\n\t\t
        \n\t\t\t
        Enter Teams recipients separated by commas:
        \n\t\t\t\n\t\t\t
        \n\t\t\t\tShare\n\t\t\t
        \n\t\t
        \n\t\t
        \n\t\t\t
        \n\t\t\t\t
        \n\t\t\t\t\t
        \n\t\t\t\t\t\t\n\t\t\t\t\t\tLive Chart\n\t\t\t\t\t
        \n\t\t\t\t\t
        \n\t\t\t\t\t\t\n\t\t\t\t\t\tChart Image\n\t\t\t\t\t
        \n\t\t\t\t
        \n\n\t\t\t\t\n\n\t\t\t\t
        \n\t\t\t\t\t
        \n\t\t\t\t\t\t
        Loading...
        \n\t\t\t\t\t\t\n\t\t\t\t\t
        \n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t
        \n\t\t\t\t
        \n\t\t\t\t\t
        \n\t\t\t\t\t\t
        Loading...
        \n\t\t\t\t\t\t\n\t\t\t\t\t
        \n\t\t\t\t\t\n\t\t\t\t
        \n\t\t\t
        \n\t\t
        \n\t`;\n\tCIQ.UI.addComponentDefinition(\"cq-share-dialog\", ShareDialog);\n}\n\n};\n\n\nlet __js_webcomponents_showRange_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-show-range>

        \n *\n * This component is a container of options which allow selection of a chart's date range. These ranges end at the present time, and begin at various\n * other times which can be programmed in the component's configuration (see example below).\n * To bind the component's configuration, set its `config` attribute to an object in the {@link CIQ.UI.Context}.config.groups object.\n *\n * _**Attributes**_\n *\n * This component observes the following attributes and will change behavior if these attributes are modified:\n * | attribute | description |\n * | :---------- | :---------- |\n * | config | Key pointing to a component configuration entry which specifies the content items. |\n *\n * If no markup is specified in this component, a default markup will be provided. In order to use the default markup, the selections in the menu\n * must be configured in the context configuration file and specified by key in the `config` attribute. See example.\n *\n * _**Emitters**_\n *\n * A custom event will be emitted by the component when that action is triggered on an item.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"select\" |\n * | action | \"click\" |\n * | multiplier | _multiplier_ |\n * | base | _base_ |\n * | periodicity | { inteval: _interval_, period: _period_, timeUnit: _timeUnit_ } |\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * _**Configuration**_\n *\n * Configuration is accomplished by setting up an object within the context configuration's groups object. Each configuration is assigned a unique name which is\n * itself an object property of the groups object. This property name is used as the value of the `config` attribute of this component.\n * Let's call the object containing the configuration `items`. `items` will contain a property called `content` whose value is an array.\n * Each array element is an object which represents one item in the group. Let's call one of these array elements, `item`.\n * Each `item` has several properties which describe the nature of the range to display. The following table of properties describes what they mean.\n *\n * | property | description |\n * | :---------- | :---------- |\n * | type | Describes what type of item to display. Valid values are described in the table below. |\n * | label | Text to display. |\n * | className | Optional class name to apply to item. |\n * | tap | Name of helper function to execute when item is clicked. |\n * | iconCls | Optional class name of an icon to display on the item. |\n * | value | Array of arguments to pass to `tap` function. |\n * | feature | Name of add-on to which this option belongs. If the add-on is not loaded, the option will not appear. |\n * | helpId | A key to the correct help text in CIQ.Help.Content. |\n * | id | DOM id for the item. |\n *\n * Valid `type`s are described here:\n * | type | description |\n * | :-------- | :---------- |\n * | item | Standard text which when clicked will execute `tap` action via a helper. |\n * | heading | Unclickable text displayed in `

        ` tag. May be configured to allow filtering of another element's items. |\n * | separator | Unclickable vertical line, used to separate two menu sections. |\n *\n * @example Show Range tag:\n * \n * @example Sample configuration for the above tag:\n * stxx.uiContext.config.groups.example = {\n * \t\tcontent: [\n *\t\t\t{ type: \"item\", label: \"1D\", tap: \"set\", value: [1, \"today\"] },\n *\t\t\t{ type: \"item\", label: \"1M\", tap: \"set\", value: [1, month\", 30, 8, \"minute\"] }\n * \t\t]\n * };\n *\n * @alias WebComponents.ShowRange\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n * @since\n * - 9.1.0 Observes attributes. Added emitter.\n */\nclass ShowRange extends CIQ.UI.ContextTag {\n\tstatic get observedAttributes() {\n\t\treturn [\"config\"];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tCIQ.UI.makeShadow(this);\n\t}\n\n\tconnectedCallback() {\n\t\tif (!this.isConnected || this.attached) return;\n\t\tsuper.connectedCallback();\n\n\t\tif (this.isShadowComponent && this.children.length) {\n\t\t\tconst parent = document.createElement(\"div\");\n\t\t\tthis.root.appendChild(parent);\n\t\t\twhile (this.children.length) {\n\t\t\t\tparent.appendChild(this.firstChild);\n\t\t\t}\n\t\t} else if (!this.children.length) {\n\t\t\tconst ul = document.createElement(\"ul\");\n\t\t\tthis.root.appendChild(ul);\n\t\t}\n\n\t\tthis.contentRoot =\n\t\t\tthis.root.querySelector(\".content\") || this.root.firstChild;\n\t\tthis.contentRoot.classList.add(\"content\");\n\t\tthis.contentRoot.setAttribute(\"role\", \"menu\");\n\n\t\tthis.setupShadow();\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, ShowRange);\n\t\tthis.constructor = ShowRange;\n\t}\n\n\t/**\n\t * Processes attribute changes. This is called whenever an observed attribute has changed.\n\t *\n\t * @param {string} name Attribute name\n\t * @param {string} oldValue Original attribute value\n\t * @param {string} newValue new Attribute value\n\t *\n\t * @tsmember WebComponents.ShowRange\n\t */\n\thandlePropertyChange(name, oldValue, newValue) {\n\t\tif (oldValue === newValue) return;\n\t\tif (!this.attached) return;\n\t\tif (name === \"config\") {\n\t\t\tconst helper = CIQ.UI.BaseComponent.getHelper(this, \"GroupConfig\");\n\t\t\tif (!helper || !helper[newValue]) return;\n\t\t\tObject.assign(this, helper[newValue]);\n\t\t\tthis.config = newValue;\n\t\t\tthis.populate();\n\t\t}\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.ShowRange\n\t */\n\tsetContext(context) {\n\t\tthis.handlePropertyChange(\"config\", this.config, \"\");\n\t\tthis.handlePropertyChange(\"config\", \"\", this.getAttribute(\"config\"));\n\t}\n\n\t/**\n\t * Creates the group items by parsing the configuration object and using the default markup to create each item.\n\t *\n\t * @tsmember WebComponents.ShowRange\n\t */\n\tpopulate() {\n\t\tconst contentArr = this.content;\n\t\tif (contentArr instanceof Array) {\n\t\t\twhile (this.contentRoot.firstChild) this.contentRoot.firstChild.remove();\n\t\t\tcontentArr.forEach((item) => {\n\t\t\t\tconst div = document.createElement(\"div\");\n\t\t\t\tdiv.innerHTML = this.constructor.itemTemplate(item);\n\t\t\t\tconst menuItem = div.children[0];\n\t\t\t\tthis.contentRoot.appendChild(menuItem);\n\t\t\t\tmenuItem.params = item;\n\t\t\t\tCIQ.UI.BaseComponent.scheduleForBinding(menuItem, this);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Proxies UI requests for span changes to the chart engine.\n\t *\n\t * Usage Examples:\n\t * - `set(5,'day',30,2,'minute')` means that you want to combine two 30-minute bars into a single candle.\n\t * - So your quote feed must return one data object for every 30 minutes. A total of 2 data points per hour.\n\t * - `set(5,'day',2,30,'minute')` means that you want to combine thirty 2-minute bars into a single candle.\n\t * - So your quote feed must return one data object for every 2 minutes. A total of 30 data points per hour.\n\t * - `set(5,'day', 1, 60,'minute')` means that you want to combine sixty 1-minute bars into a single candle.\n\t * - So your quote feed must return one data object for every minute . A total of 60 data points per hour.\n\t * - `set(5,'day', 60, 1,'minute')` means that you want to have a single 60 minute bar per period.\n\t * - So your quote feed must return one data object for every 60 minutes . A total of 1 data point per hour.\n\t *\n\t * @param {Object} activator Activation information\n\t * @param {Number} multiplier The period that will be passed to {@link CIQ.ChartEngine#setSpan}\n\t * @param {Number} base The interval that will be passed to {@link CIQ.ChartEngine#setSpan}\n\t * @param {Number} [interval] Chart interval to use (leave empty for autodetect)\n\t * @param {Number} [period] Chart period to use (leave empty for autodetect)\n\t * @param {Number} [timeUnit] Chart timeUnit to use (leave empty for autodetect)\n\t *\n\t * @tsmember WebComponents.ShowRange\n\t *\n\t * @since 5.1.1 timeUnit added\n\t */\n\tset(activator, multiplier, base, interval, period, timeUnit) {\n\t\tconst { context } = this;\n\t\tif (context.loader) context.loader.show();\n\t\tconst params = {\n\t\t\tmultiplier,\n\t\t\tbase,\n\t\t\tpadding: 40\n\t\t};\n\t\tif (interval) {\n\t\t\tparams.periodicity = {\n\t\t\t\tinterval,\n\t\t\t\tperiod: period || 1,\n\t\t\t\ttimeUnit\n\t\t\t};\n\t\t}\n\t\tcontext.stx.setSpan(params, () => {\n\t\t\tif (context.loader) context.loader.hide();\n\t\t\tdelete params.padding;\n\t\t\tthis.emitCustomEvent({\n\t\t\t\teffect: \"select\",\n\t\t\t\tdetail: { params }\n\t\t\t});\n\t\t});\n\t}\n}\n\n/**\n * Default markup generator for an item's innerHTML. This function is called for each item in the dropdown.\n * Based on the parameters passed in, the appropriate markup is generated.\n * This function is called by {@link WebComponents.ShowRange#populate}.\n *\n * @param {Object} params\n * @param {String} params.type Type of item, e.g. `item`, `heading`, `separator`.\n * @param {String} [params.className] Class name of item\n * @param {String} [params.feature] Name of add-on which when loaded, this item will become visible\n * @param {String} [params.helpId] Name associated with help for this item\n * @param {String} [params.iconCls] Class for the icon in the item\n * @param {String} [params.label] Text for the item\n * @param {String} [params.tap] Helper function for tapping\n * @param {Array|String} [params.value] Parameter(s) to pass to the `tap`, function.\n * \t\t\t\t\tIf these aren't supplied, value will be stored in a `data` attribute.\n * \t\t\t\t\tThe value is always available in the `data-value` attribute.\n * @param {String} [params.id] DOM id atribute for the item.\n *\n * @return {String} Markup for a single item.\n *\n * @tsmember WebComponents.ShowRange\n * @static\n */\nShowRange.itemTemplate = ({\n\ttype,\n\tclassName,\n\tfeature,\n\thelpId,\n\ticonCls,\n\tlabel,\n\ttap,\n\tvalue,\n\tid\n}) => {\n\tconst classString = `${className ? `${className} ` : \"\"}`;\n\tconst params =\n\t\tvalue && value !== 0\n\t\t\t? Array.isArray(value)\n\t\t\t\t? value.map((i) => (typeof i === \"string\" ? `'${i}'` : i)).join()\n\t\t\t\t: `'${value}'`\n\t\t\t: \"\";\n\tconst role =\n\t\t{\n\t\t\tseparator: \"separator\",\n\t\t\theading: \"presentation\"\n\t\t}[type] || \"menuitem\";\n\tconst tabbable = type === \"item\";\n\n\treturn `\n\t\t
      • \\\n\t\t\t${\n\t\t\t\tlabel\n\t\t\t\t\t? type === \"heading\"\n\t\t\t\t\t\t? `

        `\n\t\t\t\t\t\t: `\n\t\t\t\t\t\t\t${helpId ? `` : \"\"}\\\n\t\t\t\t\t\t\t${iconCls ? `` : \"\"}\\\n\t\t\t\t\t\t\t${label}`\n\t\t\t\t\t: \"\"\n\t\t\t}\\\n\t\t\t${\n\t\t\t\thelpId\n\t\t\t\t\t? `
        \n\t\t\t\t\t\t(Help available, press question mark key)\n\t\t\t\t\t
        `\n\t\t\t\t\t: \"\"\n\t\t\t}\\\n\t\t
      • `;\n};\n\nCIQ.UI.addComponentDefinition(\"cq-show-range\", ShowRange);\n\n};\n\n\nlet __js_webcomponents_sideNav_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-side-nav>

        \n *\n * Responds to the `breakpoint` and `sidenav` channels to control side navigation panel\n * availability.\n *\n * @alias WebComponents.SideNav\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n * @since 7.5.0\n */\nclass SideNav extends CIQ.UI.ContextTag {\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, SideNav);\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * Subscribes to the `sidenav`, `breakpoint`, and `tfc` channels. Sets the side navigation\n\t * availability based on the contents of the channels.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.SideNav\n\t * @since 7.5.0\n\t */\n\tsetContext(context) {\n\t\tconst { config: { channels = {} } = {} } = context;\n\t\tif (this.init) return;\n\t\tthis.init = true;\n\t\tconst node = this.querySelector(\"div\");\n\t\tconst toggleWrapper = this.qs(\".sidenav-toggle\", \"thisChart\");\n\t\tconst isOn = this.getAttribute(\"cq-on\") || \"sidenavOn\";\n\t\tconst isOff = this.getAttribute(\"cq-off\") || \"sidenavOff\";\n\t\tconst breakpointChannel = channels.breakpoint || \"channel.breakpoint\";\n\t\tconst crosshairChannel = channels.crosshair || \"layout.crosshair\";\n\t\tconst headsUpChannel = channels.headsUp || \"layout.headsUp\";\n\t\tconst sidenavChannel = channels.sidenav || \"layout.sidenav\";\n\t\tconst sidenavSizeChannel = channels.sidenavSize || \"channel.sidenavSize\";\n\t\tconst tfcChannel = channels.tfc || \"channel.tfc\";\n\n\t\tthis.insertAdjacentHTML(\n\t\t\t\"afterend\",\n\t\t\t\"\"\n\t\t);\n\n\t\tlet prevBreakSm;\n\t\tlet isBreakSm;\n\t\tconst setActive = () => {\n\t\t\tconst breakpointValue = this.channelRead(breakpointChannel);\n\t\t\tconst crosshairActive = this.channelRead(crosshairChannel);\n\t\t\tconst sideChannel = this.channelRead(sidenavChannel);\n\n\t\t\tif (\n\t\t\t\ttypeof breakpointValue === \"string\" &&\n\t\t\t\t!breakpointValue.includes(\"height\")\n\t\t\t) {\n\t\t\t\tisBreakSm = breakpointValue === \"break-sm\";\n\t\t\t}\n\n\t\t\tconst show = isBreakSm && sideChannel === isOn;\n\n\t\t\tif (!node) return;\n\t\t\tnode.classList.remove(\"sidenav\", \"ciq-toggles\");\n\t\t\tnode.classList.add(isBreakSm ? \"sidenav\" : \"ciq-toggles\");\n\n\t\t\tnode.classList[show ? \"add\" : \"remove\"](\"active\");\n\n\t\t\tthis.channelWrite(\n\t\t\t\tsidenavSizeChannel,\n\t\t\t\tshow ? node.getBoundingClientRect().width : 0\n\t\t\t);\n\n\t\t\tif (toggleWrapper) {\n\t\t\t\ttoggleWrapper\n\t\t\t\t\t.querySelectorAll(\"cq-menu\")\n\t\t\t\t\t.forEach((el) => el.setAttribute(\"aria-hidden\", isBreakSm));\n\n\t\t\t\t// For accesibilty sequencing move panel inside wrapper\n\t\t\t\tif (prevBreakSm !== isBreakSm) {\n\t\t\t\t\tprevBreakSm = isBreakSm;\n\t\t\t\t\tif (isBreakSm) {\n\t\t\t\t\t\tthis.preventChildNodeDisconnect();\n\t\t\t\t\t\ttoggleWrapper.append(this);\n\t\t\t\t\t\tthis.preventChildNodeDisconnect(false);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst placeholder = this.qs(\"[sidenav-placeholder]\", \"thisChart\");\n\t\t\t\t\t\tif (placeholder) {\n\t\t\t\t\t\t\tthis.preventChildNodeDisconnect();\n\t\t\t\t\t\t\tplaceholder.before(this);\n\t\t\t\t\t\t\tthis.preventChildNodeDisconnect(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.setAttribute(\"aria-hidden\", isBreakSm && !show);\n\t\t\tif (isBreakSm) {\n\t\t\t\tthis.channelWrite(headsUpChannel, \"static\");\n\t\t\t\tif (!crosshairActive) this.channelWrite(crosshairChannel, false);\n\t\t\t}\n\t\t};\n\n\t\tthis.channelSubscribe(sidenavChannel, setActive);\n\t\tthis.channelSubscribe(breakpointChannel, setActive);\n\t\tthis.channelSubscribe(tfcChannel, (isActive) => {\n\t\t\tif (isActive) this.channelWrite(sidenavChannel, isOff);\n\t\t});\n\t}\n\n\t/**\n\t * Marks child toggle component status for disconnect call\n\t *\n\t * @param {boolean} [val] Value of disconnect status defaults to true preventing disconnect call from running.\n\t * @private\n\t *\n\t * @tsmember WebComponents.SideNav\n\t * @since 9.1.0\n\t */\n\tpreventChildNodeDisconnect(val = true) {\n\t\tthis.querySelectorAll(\"cq-toggle\").forEach((ch) => {\n\t\t\tif (val) ch.doNotDisconnect = val;\n\t\t\telse delete ch.doNotDisconnect;\n\t\t});\n\t}\n}\n\nCIQ.UI.addComponentDefinition(\"cq-side-nav\", SideNav);\n\n};\n\n\nlet __js_webcomponents_sidePanel_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-side-panel>

        \n *\n * This component is a container for one or more plugins that render to the \"side\" of the chart.\n * It controls its own visibility as well as the visibility of the plugins within it.\n *\n * Use component's open() and close() methods to show and hide.\n *\n * _**Attributes**_\n *\n * The following attributes are supported:\n * | attribute | description |\n * | :-------------- | :---------- |\n * | cq-active | Reflects the shown/hidden status of the component. Read only. |\n *\n * _**Emitters**_\n *\n * A custom event will be emitted by the component whenever the component is opened or closed.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"channel\" |\n * | effect | \"open\", \"close\" |\n * | action | null |\n *\n * @alias WebComponents.SidePanel\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n */\nclass SidePanel extends CIQ.UI.ContextTag {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.callbacks = [];\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, SidePanel);\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.SidePanel\n\t */\n\tsetContext(context) {\n\t\tconst { config, stx } = context;\n\t\tif (!config) return;\n\n\t\tconst { channels = {} } = config;\n\t\tconst resizeHandler = this.resizeMyself.bind(this);\n\n\t\tconst handleSizeChanges = () => {\n\t\t\tsetTimeout(resizeHandler);\n\t\t};\n\n\t\tconst handleTfcOpen = (isOpen) => {\n\t\t\tif (isOpen) this.setAttribute(\"cq-active\", true);\n\t\t\telse this.removeAttribute(\"cq-active\");\n\t\t\tthis.emitCustomEvent({\n\t\t\t\taction: null,\n\t\t\t\tcause: \"channel\",\n\t\t\t\teffect: isOpen ? \"open\" : \"close\"\n\t\t\t});\n\n\t\t\thandleSizeChanges();\n\t\t};\n\n\t\tthis.channelSubscribe(\n\t\t\tchannels.breakpoint || \"channel.breakpoint\",\n\t\t\thandleSizeChanges\n\t\t);\n\t\tthis.channelSubscribe(channels.tfc || \"channel.tfc\", handleTfcOpen, stx);\n\t}\n\n\t/**\n\t * Closes child plugins.\n\t * @private\n\t *\n\t * @tsmember WebComponents.SidePanel\n\t */\n\tcleanup() {\n\t\t[...this.children].forEach((child) => {\n\t\t\tif (child.sidePanelActiveClass)\n\t\t\t\tchild.classList.remove(child.sidePanelActiveClass);\n\t\t\t// turn off a child by removing the class name added to it\n\t\t\telse child.removeAttribute(child.sidePanelActiveAttribute); // turn off a child by removing the attribute name added to it\n\t\t});\n\t}\n\n\t/**\n\t * Closes the side panel and all of its child plugins.\n\t *\n\t * @tsmember WebComponents.SidePanel\n\t */\n\tclose() {\n\t\tthis.removeAttribute(\"cq-active\");\n\t\tthis.cleanup();\n\t\tthis.emitCustomEvent({\n\t\t\teffect: \"close\",\n\t\t\taction: null\n\t\t});\n\t\tsetTimeout(() => this.resizeMyself(), 0);\n\t}\n\n\t/**\n\t * Use this method to get the width instead of querying the node directly because the side panel may be animated.\n\t *\n\t * @return {number} The width\n\t *\n\t * @tsmember WebComponents.SidePanel\n\t */\n\tnonAnimatedWidth() {\n\t\tlet width = 0;\n\t\t[...this.children].forEach(\n\t\t\t(child) => (width += CIQ.elementDimensions(child).width)\n\t\t); // accumulate width of all children\n\t\treturn width;\n\t}\n\n\t/**\n\t * Opens the side panel to show more plugins.\n\t *\n\t * @param {Object} params Parameters\n\t * @param {string} params.selector The selector for which child to enable.\n\t * @param {string} [params.className] The class name to add to turn on the panel.\n\t * @param {string} [params.attribute] The attribute to add to turn on the panel.\n\t *\n\t * @tsmember WebComponents.SidePanel\n\t */\n\topen(params) {\n\t\tthis.cleanup();\n\t\tconst children = this.querySelectorAll(params.selector);\n\t\tif (params.className) {\n\t\t\t[...children].forEach((child) => {\n\t\t\t\tchild.classList.add(params.className);\n\t\t\t\tchild.sidePanelActiveClass = params.className; // store the class name used to turn it on\n\t\t\t});\n\t\t} else {\n\t\t\t[...children].forEach((child) => {\n\t\t\t\tchild.setAttribute(params.attribute, \"true\");\n\t\t\t\tchild.sidePanelActiveAttribute = params.attribute; // store the attribute name used to turn it on\n\t\t\t});\n\t\t}\n\t\tthis.setAttribute(\"cq-active\", \"true\");\n\t\tthis.emitCustomEvent({\n\t\t\teffect: \"open\",\n\t\t\taction: null\n\t\t});\n\t\tsetTimeout(() => this.resizeMyself(), 0);\n\t}\n\n\t/**\n\t * Sets any callback to be executed when the side panel resizes.\n\t *\n\t * @param {function} fc Callback function.\n\t *\n\t * @tsmember WebComponents.SidePanel\n\t */\n\tregisterCallback(fc) {\n\t\tthis.callbacks.push(fc);\n\t}\n\n\t/**\n\t * Resizes this component.\n\t * Any registered callbacks will execute after the width adjustment.\n\t *\n\t * @tsmember WebComponents.SidePanel\n\t */\n\tresizeMyself() {\n\t\tconst width = this.nonAnimatedWidth();\n\t\tthis.style.width = width + \"px\"; // expand the side panel\n\t\tthis.callbacks.forEach((cb) => cb.call(this, width));\n\n\t\t// channel notification\n\t\tconst { config, stx } = this.context || {};\n\t\tif (!config) return;\n\t\tconst channel =\n\t\t\t(config.channels || {}).sidepanelSize || \"channel.sidepanelSize\";\n\t\tthis.channelWrite(channel, width, stx);\n\t}\n}\n\n/**\n * A side panel contains children that should be enabled by calling open({selector:selector}).\n */\nCIQ.UI.addComponentDefinition(\"cq-side-panel\", SidePanel);\n\n};\n\n\nlet __js_webcomponents_studies_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-studies>

        \n *\n * This component builds a list of studies. Clicking on a study in the list will activate it on the chart.\n * The list can be configured to not display certain studies, open the study dialog first, or allow editing as soon as the study is added.\n * Additionally, the component allows users to set favorite studies. Favorites are displayed at the top of the list.\n * The study list is alphabetized based on the language in which it is displayed.\n * Usually this component is nested within a menu or dropdown component, in order to manage the scrolling of the list.\n *\n * The results of this component can be filtered. See {@link WebComponents.Heading} for details.\n *\n * _**Attributes**_\n *\n * This component observes the following attributes and will change behavior if these attributes are modified:\n * | attribute | description |\n * | :-------- | :---------- |\n * | favorites | If present, favorited studies will be promoted to the top of the list. |\n *\n * Note: The favorites feature requires importing the Study Browser plugin.\n *\n * _**Emitters**_\n *\n * A custom event will be emitted by the component when a study is selected.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"select\" |\n * | action | \"click\" |\n * | value | _study name_ |\n *\n * A custom `toggle` event will be emitted from the component when a study is favorited/unfavorited.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"toggle\" |\n * | action | \"click\" |\n * | favorite | _true/false_ |\n * | value | _study name_ |\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * @alias WebComponents.Studies\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n * @since\n * - 5.2.0\n * - 8.8.0 Added `cq-favorites` flag.\n * - 9.1.0 Observes attributes. Added emitter.. Changed `cq-favorites` flag to `favorites`.\n *\n */\nclass Studies extends CIQ.UI.ContextTag {\n\tstatic get observedAttributes() {\n\t\treturn [\"favorites\"];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tCIQ.UI.makeShadow(this);\n\t}\n\n\tconnectedCallback() {\n\t\tif (!this.isConnected || this.attached) return;\n\t\tsuper.connectedCallback();\n\n\t\tthis.setupShadow();\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, Studies);\n\t\tthis.constructor = Studies;\n\t}\n\n\tdisconnectedCallback() {\n\t\tif (this.doNotDisconnect) return;\n\t\tif (this.context) {\n\t\t\tCIQ.UI.unobserveProperty(\n\t\t\t\t\"studyLibraryHash\",\n\t\t\t\tthis.context.stx.chart,\n\t\t\t\tthis.listener\n\t\t\t);\n\t\t\tthis.context.stx.removeEventListener(\"preferences\", this.listener);\n\t\t}\n\t\tsuper.disconnectedCallback();\n\t}\n\n\t/**\n\t * Processes attribute changes. This is called whenever an observed attribute has changed.\n\t *\n\t * @param {string} name Attribute name\n\t * @param {string} oldValue Original attribute value\n\t * @param {string} newValue new Attribute value\n\t *\n\t * @tsmember WebComponents.Studies\n\t */\n\thandlePropertyChange(name, oldValue, newValue) {\n\t\tif (oldValue === newValue) return;\n\t\tthis[name] = newValue;\n\t\tthis.updateOrder();\n\t}\n\n\t/**\n\t * Initializes and displays the list of available studies.\n\t *\n\t * @param {object} [params] Parameters to control initialization of the studies list.\n\t * @param {object} [params.excludedStudies] A map of study names that should be excluded from\n\t * \t\tthe studies list, for example: { \"macd\": true }.\n\t * @param {object|boolean} [params.alwaysDisplayDialog=false] If set to boolean true (not\n\t * \t\ttruthy), the study edit dialog box is automatically opened for any of the available\n\t * \t\tstudies after the study has been added to the chart. If set to boolean false, the\n\t * \t\tstudy edit dialog box is not opened for any of the available studies after the study\n\t * \t\thas been added to the chart.\n\t * \t\t

        If set to an object containing a map of study names and boolean values (for example,\n\t * \t\t{ \"ma\": true, \"AVWAP\": true }), the study edit\n\t * \t\tdialog box is opened after the study has been added to the chart for studies in the\n\t * \t\tmap that have a boolean value of true but not for those that have a value of false or\n\t * \t\tfor any studies not included in the map.\n\t * @param {object|boolean} [params.dialogBeforeAddingStudy=false] If set to boolean true (not\n\t * \t\ttruthy), the study edit dialog box is automatically opened for any of the available\n\t * \t\tstudies before the study is added to the chart. If set to boolean false, the study\n\t * \t\tedit dialog box is not opened for any of the available studies before the study is\n\t * \t\tadded to the chart.\n\t * \t\t

        If set to an object containing a map of study names and boolean values (for example,\n\t * \t\t{ \"macd\": true }), the study edit dialog box is opened\n\t * \t\tbefore the study is added to the chart for studies in the map that have a boolean value\n\t * \t\tof true but not for those that have a value of false or for any studies not included\n\t * \t\tin the map.\n\t *\n\t * @since 5.2.0 The `CIQ.UI.StudyMenu` helper has been deprecated. Please call\n\t * \t\t`document.querySelector(\"cq-studies\").initialize()` now.\n\t *\n\t * @example\n\t * let params = {\n\t * excludedStudies: { \"macd\": true }, // Exclude studies from the list of available studies.\n\t * alwaysDisplayDialog: { \"ma\": true }, // Show the study preferences dialog after adding studies.\n\t * dialogBeforeAddingStudy: { \"rsi\": true } // Show the study preferences dialog before adding studies.\n\t * };\n\t * document.querySelectorAll(\"cq-studies\").forEach(function(i) {\n\t * i.initialize(params);\n\t * });\n\t *\n\t * @tsmember WebComponents.Studies\n\t */\n\tinitialize(params) {\n\t\tthis.params = params || {};\n\t\tthis.alwaysDisplayDialog = this.params.alwaysDisplayDialog || false;\n\t\tthis.excludedStudies = this.params.excludedStudies || [];\n\t\tthis.renderMenu(this.context.stx);\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.Studies\n\t */\n\tsetContext(context) {\n\t\tconst { config, stx } = context;\n\t\tthis.addDefaultMarkup();\n\t\tif (config) {\n\t\t\tthis.initialize(Object.assign({}, config.menuStudiesConfig));\n\t\t}\n\t\tconst listener = () => this.renderMenu(stx);\n\t\tCIQ.UI.observeProperty(\"studyLibraryHash\", this.context.chart, listener);\n\t\tstx.addEventListener(\"preferences\", listener);\n\t}\n\n\t/**\n\t * Creates a Study menu.\n\t *\n\t * You have the option of creating a hardcoded HTML menu and just using {@link CIQ.Studies}\n\t * for processing `stxtap` attributes, or you can call this method to automatically generate\n\t * the menu.\n\t *\n\t * @param {CIQ.ChartEngine} stx The chart object\n\t *\n\t * @tsmember WebComponents.Studies\n\t *\n\t * @since 8.8.0 Added `stx` parameter.\n\t */\n\trenderMenu(stx) {\n\t\tif (!CIQ.Studies) return;\n\t\tlet alphabetized = [];\n\t\tlet sd;\n\n\t\tfor (let field in CIQ.Studies.studyLibrary) {\n\t\t\tsd = CIQ.Studies.studyLibrary[field];\n\t\t\tif (\n\t\t\t\t!sd ||\n\t\t\t\tthis.excludedStudies[field] ||\n\t\t\t\tthis.excludedStudies[sd.name] ||\n\t\t\t\tsd.siqList !== undefined\n\t\t\t)\n\t\t\t\tcontinue; // siqList = ScriptIQ entry\n\t\t\tif (!sd.name) sd.name = field; // Make sure there's always a name\n\t\t\talphabetized.push([field, stx.translateIf(sd.name)]);\n\t\t}\n\t\talphabetized.sort(function (lhs, rhs) {\n\t\t\treturn lhs[1].localeCompare(rhs[1], stx.locale || \"en\", {\n\t\t\t\tsensitivity: \"base\",\n\t\t\t\tcaseFirst: \"upper\"\n\t\t\t});\n\t\t});\n\t\tconst tapFn = (studyName) => {\n\t\t\treturn (e) => {\n\t\t\t\tconst doc = this.document || document;\n\t\t\t\tif (e.ciqStamp && e.ciqStamp <= doc.lastTap) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst isInfoButton = e.target.classList.contains(\"ciq-info-btn\");\n\n\t\t\t\tif (isInfoButton) {\n\t\t\t\t\tif (this.showStudyInfo) {\n\t\t\t\t\t\tthis.showStudyInfo(studyName);\n\t\t\t\t\t}\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tpickStudy(e, studyName);\n\t\t\t\tthis.dispatchEvent(new Event(\"resize\", { composed: true }));\n\t\t\t};\n\t\t};\n\n\t\tconst { root } = this;\n\t\tlet item;\n\t\twhile ((item = root.querySelector(\".item, cq-item\"))) {\n\t\t\titem.remove();\n\t\t}\n\n\t\tconst addFavorites =\n\t\t\tCIQ.Studies.Favorites && this.hasAttribute(\"favorites\");\n\n\t\talphabetized.forEach((study) => {\n\t\t\tconst menuItem = CIQ.UI.makeFromTemplate(\n\t\t\t\troot.querySelector(\"template\")\n\t\t\t)[0];\n\t\t\tsd = CIQ.Studies.studyLibrary[study[0]];\n\n\t\t\tconst spanEl = menuItem.querySelector(\"span\");\n\t\t\tspanEl.id = spanEl.id + sd.name.replace(/ /g, \"\");\n\t\t\tCIQ.makeTranslatableElement(spanEl || menuItem, stx, sd.name);\n\t\t\tmenuItem.type = study[0];\n\t\t\tconst favElement = menuItem.querySelector(\".fav-marker\");\n\t\t\tif (favElement) {\n\t\t\t\tif (addFavorites) {\n\t\t\t\t\tthis.makeTap(favElement, getFavoriteHandler.call(this, sd, stx));\n\t\t\t\t\tmenuItem.setAttribute(\"aria-labelledby\", spanEl.id);\n\t\t\t\t} else {\n\t\t\t\t\tfavElement.remove();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.makeTap(menuItem, tapFn(study[0]));\n\t\t\tconst infoBtn = menuItem.querySelector(\".ciq-info-btn\");\n\t\t\tif (infoBtn && (!CIQ.Studies.Info || !CIQ.Studies.Info[sd.name])) {\n\t\t\t\tinfoBtn.style.display = \"none\";\n\t\t\t}\n\n\t\t\troot.appendChild(menuItem);\n\t\t});\n\t\tif (addFavorites) {\n\t\t\tthis.updateOrder();\n\t\t}\n\n\t\tconst studyDialog = (params, addWhenDone) => {\n\t\t\tconst { context } = this;\n\n\t\t\tif (context.config) {\n\t\t\t\tthis.channelWrite(\n\t\t\t\t\tcontext.config.channels.dialog,\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"study\",\n\t\t\t\t\t\tparams: Object.assign({}, params, { context, addWhenDone })\n\t\t\t\t\t},\n\t\t\t\t\tcontext.stx\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// legacy use when config is not available\n\t\t\t\tparams.context = this.context;\n\t\t\t\tconst dialog = this.ownerDocument.querySelector(\"cq-study-dialog\");\n\t\t\t\tdialog.addWhenDone = addWhenDone;\n\t\t\t\tdialog.open(params);\n\t\t\t}\n\t\t};\n\n\t\tconst pickStudy = (e, studyName) => {\n\t\t\tconst {\n\t\t\t\talwaysDisplayDialog = {},\n\t\t\t\tcontext: { stx }\n\t\t\t} = this;\n\n\t\t\tfunction handleSpecialCase(flag, params, addWhenDone) {\n\t\t\t\tif (flag === true) {\n\t\t\t\t\tstudyDialog(params, addWhenDone);\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (typeof flag === \"object\") {\n\t\t\t\t\tfor (let i in flag) {\n\t\t\t\t\t\tif (i == studyName && flag[i]) {\n\t\t\t\t\t\t\tstudyDialog(params, addWhenDone);\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.emitCustomEvent({\n\t\t\t\teffect: \"select\",\n\t\t\t\tdetail: { value: studyName }\n\t\t\t});\n\n\t\t\tif (\n\t\t\t\thandleSpecialCase(\n\t\t\t\t\tthis.params.dialogBeforeAddingStudy,\n\t\t\t\t\t{ stx, name: studyName },\n\t\t\t\t\ttrue\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst studyParams = alwaysDisplayDialog[studyName]\n\t\t\t\t? { interactiveAdd: false } // interactiveAdd and dialog are not compatible\n\t\t\t\t: null;\n\t\t\tconst sd = CIQ.Studies.addStudy(stx, studyName, null, null, studyParams);\n\n\t\t\tif (\n\t\t\t\t!e.target.classList.contains(\"ciq-favorite\") &&\n\t\t\t\t!e.target.parentElement.classList.contains(\"ciq-favorite\")\n\t\t\t)\n\t\t\t\tthis.uiManager.closeMenu();\n\t\t\tif (\n\t\t\t\t!sd.parameters.interactiveAdd &&\n\t\t\t\t!handleSpecialCase(alwaysDisplayDialog, { sd, stx })\n\t\t\t)\n\t\t\t\te.stopPropagation();\n\t\t};\n\n\t\tfunction getFavoriteHandler(sd, stx) {\n\t\t\treturn (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t\tconst item = e.target.parentElement;\n\t\t\t\tconst isFavorite = item.classList.contains(\"ciq-favorite\");\n\n\t\t\t\titem.classList.add(isFavorite ? \"ciq-move-down\" : \"ciq-move-up\");\n\n\t\t\t\tthis.emitCustomEvent({\n\t\t\t\t\teffect: \"toggle\",\n\t\t\t\t\tdetail: { favorite: isFavorite, value: sd.name }\n\t\t\t\t});\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\titem.classList[isFavorite ? \"remove\" : \"add\"](\"ciq-favorite\");\n\t\t\t\t\tif (CIQ.Studies.Favorites)\n\t\t\t\t\t\tCIQ.Studies.Favorites[isFavorite ? \"remove\" : \"add\"](sd.name);\n\t\t\t\t\tthis.updateOrder();\n\t\t\t\t}, 200);\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\t * Reorders the study menu. Order is alphabetical. The menu is reordered when the language is changed.\n\t * If there are favorites, and the Study Browser is imported, the favorited studies are sorted alphabetically\n\t * on the top of the list.\n\t *\n\t * @tsmember WebComponents.Studies\n\t */\n\tupdateOrder() {\n\t\tif (!this.context) return;\n\t\tconst { stx } = this.context;\n\t\tif (!CIQ.Studies.Favorites) return;\n\t\tCIQ.Studies.Favorites.retrieveList(stx, (favoriteList) => {\n\t\t\tconst addFavorites = this.hasAttribute(\"favorites\");\n\t\t\tconst list = Array.from(this.root.querySelectorAll(\".item, cq-item\"));\n\t\t\tconst favorites = favoriteList\n\t\t\t\t.filter(({ isCustomized }) => !isCustomized)\n\t\t\t\t.reduce((acc, { type }) => ({ ...acc, [type]: true }), {});\n\n\t\t\tconst sortFunction = (\n\t\t\t\t{ textContent: textA, type: typeA },\n\t\t\t\t{ textContent: textB, type: typeB }\n\t\t\t) => {\n\t\t\t\tif (addFavorites) {\n\t\t\t\t\tif (favorites[typeA] && !favorites[typeB]) return -1;\n\t\t\t\t\tif (!favorites[typeA] && favorites[typeB]) return 1;\n\t\t\t\t}\n\t\t\t\treturn textA.localeCompare(textB, stx.locale || \"en\", {\n\t\t\t\t\tsensitivity: \"base\",\n\t\t\t\t\tcaseFirst: \"upper\"\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tlist.sort(sortFunction).forEach((item) => {\n\t\t\t\titem.classList[favorites[item.type] ? \"add\" : \"remove\"](\"ciq-favorite\");\n\t\t\t\titem.classList.remove(\"ciq-move-up\");\n\t\t\t\titem.classList.remove(\"ciq-move-down\");\n\t\t\t\tthis.root.append(item);\n\t\t\t});\n\t\t});\n\t}\n}\n\n/**\n * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.Studies\n */\nStudies.markup = `\n\t\t\n\t`;\nCIQ.UI.addComponentDefinition(\"cq-studies\", Studies);\n\n};\n\n\nlet __js_webcomponents_studyContext_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-study-context>

        \n *\n * This component appears when a study is right-clicked. A menu of actions are displayed relevant to that study.\n *\n * _**Emitters**_\n *\n * A custom event will be emitted by the component when an action is clicked from the displayed menu.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"edit\", \"remove\", \"favorite\", or other custom action |\n * | action | \"click\" |\n * | item | _object on which the action occurs, usually a study descriptor_ |\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * @alias WebComponents.StudyContext\n * @extends CIQ.UI.DialogContentTag\n * @class\n * @protected\n * @since\n * - 4.1.0 cq-study-context is now required (cq-dialog[cq-study-context] no longer works).\n * - 9.1.0 Added emitter.\n */\nclass StudyContext extends CIQ.UI.DialogContentTag {\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, StudyContext);\n\t\tthis.constructor = StudyContext;\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.StudyContext\n\t */\n\tsetContext(context) {\n\t\tlet { markup } = this.constructor;\n\t\tconst hasFavorites = !!context.topNode.querySelector(\".ciq-sb-container\");\n\n\t\tif (!hasFavorites) {\n\t\t\tmarkup = markup\n\t\t\t\t.split(/\\n/g)\n\t\t\t\t.filter((line) => !/StudyEdit\\.addToFavorites/i.test(line))\n\t\t\t\t.join(\"\\n\");\n\t\t}\n\n\t\tthis.addDefaultMarkup(this, markup);\n\t\tthis.classList.add(\"ciq-context-menu\");\n\t\tsuper.setContext(context);\n\t}\n\n\t/**\n\t * Called after an stxtap event is fired.\n\t * Emits the event for the action performed.\n\t *\n\t * @param {string} effect What action was performed as a result of the stxtap event.\n\t * @param {Object} item Object being effected by the action.\n\t *\n\t * @tsmember WebComponents.StudyContext\n\t */\n\tpostProcess(effect, item) {\n\t\tthis.emitCustomEvent({\n\t\t\teffect,\n\t\t\tdetail: { item }\n\t\t});\n\t}\n}\n\n/**\n * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.StudyContext\n */\nStudyContext.markup = `\n\t\t
        Edit Settings...
        \n\t\t
        Add to Favorites
        \n\t\t
        Delete Study
        \n\t`;\nCIQ.UI.addComponentDefinition(\"cq-study-context\", StudyContext);\n\n};\n\n\nlet __js_webcomponents_studyDialog_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\n\n\n\n\n\n\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\nif (!CIQ.Studies) {\n\tconsole.error(\n\t\t\"studyDialog component requires first activating studies feature.\"\n\t);\n} else {\n\t/**\n\t * @classdesc\n\t *\n\t * This is a custom HtmlElement (Web Component). The tag name is the following:\n\t *\n\t *

        <cq-study-dialog>

        \n\t *\n\t * Creates and manages study dialogs based on the corresponding study library entry (title,\n\t * inputs, outputs, parameters, etc.).\n\t *\n\t * Requires {@link CIQ.UI.StudyEdit}.\n\t *\n\t * _**Attributes**_\n\t *\n\t * The following attributes are supported (but not observed for changes):\n\t * | attribute | description |\n\t * | :------------- | :---------- |\n\t * | cq-study-axis | Displays UI for selecting the y-axis position (left, right, etc.), color and for inverting the y-axis *if not shared with the primary-axis*. |\n\t * | cq-study-panel | Displays UI for selecting the panel for the study (own, shared, etc.) and whether it is rendered as an underlay (under the primary chart) or an overlay (over the primary chart). Set this attribute to \"alias\" to have the panel names listed as \"\", \"\", etc.\n\t *\n\t * _**Emitters**_\n\t *\n\t * A custom event will be emitted from the component when it updates a study.\n\t * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n\t * The details of the event contain the following:\n\t * | property | value |\n\t * | :------- | :---- |\n\t * | emitter | this component |\n\t * | cause | \"useraction\" |\n\t * | effect | \"update\" |\n\t * | action | \"change\" |\n\t * | updates | _updated settings_ |\n\t *\n\t * `cause` and `action` are set only when the dialog is updated as a direct result of changing a form field.\n\t *\n\t * @example\n\t * Here is an example of how to create a study dialog. We add the\n\t * cq-study-axis and cq-study-panel attributes to enable form fields\n\t * used to control axis position, color, study panel, and underlay/overlay.\n\t * \n\t * \n\t * \n\t * \n\t *\n\t * @alias WebComponents.StudyDialog\n\t * @extends CIQ.UI.DialogContentTag\n\t * @class\n\t * @protected\n\t * @since\n\t * - 5.2.0 Optional Attributes `cq-study-axis` and `cq-study-panel` are now available.\n\t * - 6.3.0 `cq-study-axis` now also provides a check box allowing users to invert study y-axis\n\t * \t\tif not shared with the primary-axis.\n\t * - 9.1.0 Added emitter.\n\t */\n\tclass StudyDialog extends CIQ.UI.DialogContentTag {\n\t\tconnectedCallback() {\n\t\t\tif (!this.isConnected || this.attached) return;\n\t\t\tsuper.connectedCallback();\n\t\t\tthis.queuedUpdates = {};\n\t\t}\n\n\t\tadoptedCallback() {\n\t\t\tsuper.adoptedCallback();\n\t\t\tCIQ.UI.flattenInheritance(this, StudyDialog);\n\t\t\tthis.constructor = StudyDialog;\n\t\t}\n\n\t\tdisconnectedCallback() {\n\t\t\tif (this.doNotDisconnect) return;\n\t\t\tCIQ.UI.unobserveProperty(\"signal\", this.helper);\n\t\t\tsuper.disconnectedCallback();\n\t\t}\n\n\t\t/**\n\t\t * Closes the study dialog. This will also update the study with any changes made in the dialog.\n\t\t *\n\t\t * @tsmember WebComponents.StudyDialog\n\t\t */\n\t\tclose() {\n\t\t\tif (this.addWhenDone) {\n\t\t\t\tconst helper = this.helper;\n\t\t\t\tconst sd = CIQ.Studies.addStudy(helper.stx, helper.name);\n\t\t\t\tif (!CIQ.isEmpty(this.queuedUpdates)) {\n\t\t\t\t\thelper.sd = sd;\n\t\t\t\t\thelper.updateStudy(this.queuedUpdates);\n\t\t\t\t\tthis.queuedUpdates = {};\n\t\t\t\t}\n\t\t\t\tdelete this.addWhenDone;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Closes the menu that may be open on the study dialog.\n\t\t *\n\t\t * @param {HTMLElement} node The open menu node.\n\t\t *\n\t\t * @tsmember WebComponents.StudyDialog\n\t\t */\n\t\tcloseActiveMenu(node) {\n\t\t\tconst hub = this.ownerDocument.body.keystrokeHub;\n\t\t\tconst activeMenu = this.querySelector(\"*.stxMenuActive\");\n\t\t\tconst uiManager = CIQ.UI.getUIManager(this);\n\t\t\tif (\n\t\t\t\t!activeMenu ||\n\t\t\t\t!hub ||\n\t\t\t\t!hub.tabActiveElement ||\n\t\t\t\thub.tabActiveElement.element !== node\n\t\t\t)\n\t\t\t\treturn;\n\t\t\thub.tabActiveElement = null;\n\t\t\thub.highlightHide();\n\t\t\tuiManager.closeMenu(activeMenu);\n\t\t}\n\n\t\t/**\n\t\t * Forces a date string into yyyy-mm-dd format.\n\t\t *\n\t\t * @param {string} date Date in an \"almost\" yyyy-mm-dd format. Meaning, it may have dashes or slashes, or no separators, but the date components must be in the proper order.\n\t\t * @return {String} Date in yyyy-mm-dd format.\n\t\t *\n\t\t * @tsmember WebComponents.StudyDialog\n\t\t */\n\t\tformatDateInput(date) {\n\t\t\tdate = date.replace(/-/g, \"\");\n\t\t\tif (!date.search(/^\\d{8}$/))\n\t\t\t\tdate =\n\t\t\t\t\tdate.substring(0, 4) +\n\t\t\t\t\t\"-\" +\n\t\t\t\t\tdate.substring(4, 6) +\n\t\t\t\t\t\"-\" +\n\t\t\t\t\tdate.substring(6, 8);\n\t\t\treturn date;\n\t\t}\n\n\t\t/**\n\t\t * Forces a time string into HH:nn or HH:nn:ss format. Seconds appear in the return value only if they were present in the input parameter.\n\t\t *\n\t\t * @param {string} time Time in an \"almost\" correct format. Meaning, it may have colons or not, but the time components must be in the proper order.\n\t\t * @return {String} Time in HH:nn or HH:nn:ss format.\n\t\t *\n\t\t * @tsmember WebComponents.StudyDialog\n\t\t */\n\t\tformatTimeInput(time) {\n\t\t\ttime = time.replace(/:/g, \"\");\n\t\t\tif (!time.search(/^\\d{4,6}$/))\n\t\t\t\ttime =\n\t\t\t\t\ttime.substring(0, 2) +\n\t\t\t\t\t\":\" +\n\t\t\t\t\ttime.substring(2, 4) +\n\t\t\t\t\t(time.length == 4 ? \"\" : \":\" + time.substring(4, 6));\n\t\t\treturn time;\n\t\t}\n\n\t\t/**\n\t\t * Hides the dialog. This performs UI cleanup of the lifted menus.\n\t\t *\n\t\t * @tsmember WebComponents.StudyDialog\n\t\t */\n\t\thide() {\n\t\t\tif (!CIQ.isEmpty(this.queuedUpdates)) {\n\t\t\t\tthis.helper.updateStudy(this.queuedUpdates);\n\t\t\t\tthis.queuedUpdates = {};\n\t\t\t}\n\t\t\t[...this.querySelectorAll(\"cq-menu\")].forEach((el) => {\n\t\t\t\tif (el.unlift) el.unlift();\n\t\t\t});\n\t\t\t[...this.querySelectorAll(\"cq-swatch\")].forEach((el) => {\n\t\t\t\tif (el.colorPicker) el.colorPicker.close();\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Creates and returns a form menu (droopdown select box) using the inputs provided.\n\t\t *\n\t\t * @param {string} name Menu name, ultimately used as a key for updates.\n\t\t * @param {string} currentValue The current selection value. This is what is displayed even when menu is closed.\n\t\t * @param {Object} fields Options for the menu. These are key-value pairs representing the selection value as the key and the text as the value.\n\t\t * @param {string} section Where the menu will be placed. Possible values are \"inputs\" and \"parameters\".\n\t\t * @return {WebComponents.Menu} a menu webcomponent.\n\t\t *\n\t\t * @tsmember WebComponents.StudyDialog\n\t\t */\n\t\tmakeMenu(name, currentValue, fields, section) {\n\t\t\tconst menu = document.createElement(\"cq-menu\");\n\t\t\tmenu.className = \"ciq-select\";\n\t\t\tmenu.setAttribute(\n\t\t\t\t\"id\",\n\t\t\t\t\"cq-study-dialog-\" + section + \"-\" + name.replace(/ /g, \"_\")\n\t\t\t);\n\t\t\tconst menuContent = [];\n\t\t\tfor (const field in fields) {\n\t\t\t\tconst item = {};\n\t\t\t\titem.type = \"item\";\n\t\t\t\titem.label = fields[field];\n\t\t\t\titem.tap = \"StudyDialog.setSelectOption\"; // must call StudyDialog because the item is \"lifted\" and so doesn't know its parent\n\t\t\t\titem.value = [section, name, field];\n\t\t\t\tmenuContent.push(item);\n\t\t\t}\n\t\t\tconst translatedValue =\n\t\t\t\tfields[currentValue] || this.helper.stx.translateIf(currentValue);\n\t\t\tif (menu && menu.setContent) menu.setContent(menuContent, true);\n\t\t\tmenu.setAttribute(\"text\", translatedValue);\n\t\t\tmenu.setAttribute(\"reader\", translatedValue);\n\n\t\t\treturn menu;\n\t\t}\n\n\t\t/**\n\t\t * Opens the study dialog, showing the proper fields based on the parameters provided.\n\t\t *\n\t\t * @param {Object} params\n\t\t * @param {string} [params.axisSelect] If this key is present, axis selection options appear in the Parameters section of the dialog.\n\t\t * @param {string} [params.panelSelect] If this key is present, panel selection options appear in the Parameters section of the dialog.\n\t\t * @param {string} [params.addWhenDone] If set, and adding a new study, then study will only be added if \"Done\" key is pressed.\n\t\t * @param {HTMLElement} [params.caller] The HTML element that triggered this dialog to open\n\t\t * @param {CIQ.UI.Context} [params.context] A context to set. See\n\t\t * \t\t[setContext]{@link CIQ.UI.DialogContentTag#setContext}.\n\t\t *\n\t\t * @tsmember WebComponents.StudyDialog\n\t\t */\n\t\topen(params) {\n\t\t\tthis.addDefaultMarkup();\n\t\t\tthis.selectTemplates();\n\n\t\t\tif (!(\"axisSelect\" in params)) {\n\t\t\t\tparams.axisSelect = this.getAttribute(\"cq-study-axis\");\n\t\t\t\tif (params.axisSelect === \"\") params.axisSelect = true;\n\t\t\t}\n\t\t\tif (!(\"panelSelect\" in params)) {\n\t\t\t\tparams.panelSelect = this.getAttribute(\"cq-study-panel\");\n\t\t\t\tif (params.panelSelect === \"\") params.panelSelect = true;\n\t\t\t}\n\n\t\t\tif (typeof params.addWhenDone !== \"undefined\")\n\t\t\t\tthis.addWhenDone = params.addWhenDone;\n\n\t\t\t// Generate a \"helper\" which tells us how to create a dialog\n\t\t\tCIQ.UI.unobserveProperty(\"signal\", this.helper);\n\t\t\tthis.helper = new CIQ.Studies.DialogHelper(params);\n\n\t\t\tconst dialog = this.closest(\"cq-dialog\");\n\t\t\tdialog.setTitle(this.helper.title);\n\n\t\t\tsuper.open(params);\n\n\t\t\tCIQ.UI.observeProperty(\"signal\", this.helper, (obj) => {\n\t\t\t\tthis.refreshInputs();\n\t\t\t\tthis.refreshOutputs();\n\t\t\t\tthis.refreshParameters(params);\n\t\t\t});\n\n\t\t\t// Create form elements for all of the inputs\n\t\t\tthis.refreshInputs(true);\n\n\t\t\t// Create form elements for all of the outputs\n\t\t\tthis.refreshOutputs(true);\n\n\t\t\t// Create form elements for all of the parameters\n\t\t\tthis.refreshParameters(params, true);\n\t\t}\n\n\t\t/**\n\t\t * Creates/recreates the fields in the \"inputs\" section of the dialog.\n\t\t *\n\t\t * @param {boolean} [empty] If true, clears all inputs fields first.\n\t\t *\n\t\t * @tsmember WebComponents.StudyDialog\n\t\t */\n\t\trefreshInputs(empty) {\n\t\t\tconst inputs = this.querySelector(\"cq-study-inputs\");\n\t\t\tif (empty) [...inputs.children].forEach((child) => child.remove());\n\t\t\tfor (let i = 0; i < this.helper.inputs.length; i++) {\n\t\t\t\tconst input = this.helper.inputs[i];\n\t\t\t\tconst inputContainer = document.createElement(\"div\");\n\t\t\t\tCIQ.UI.makeFromTemplate(this.inputTemplate, inputContainer);\n\t\t\t\tconst newInput = inputContainer.querySelector(\"cq-study-input\");\n\t\t\t\tthis.menuTemplate = newInput.querySelector(\"template[cq-menu]\");\n\t\t\t\tconst id = \"cq-study-dialog-inputs-\" + input.name.replace(/ /g, \"_\");\n\t\t\t\tconst heading = newInput.querySelector(\".ciq-heading\");\n\t\t\t\tif (heading) {\n\t\t\t\t\theading.innerText = input.heading;\n\t\t\t\t\tconst label = newInput.querySelector(\"label\");\n\t\t\t\t\tif (label) label.setAttribute(\"for\", id);\n\t\t\t\t}\n\t\t\t\tnewInput.setAttribute(\"fieldname\", input.name);\n\t\t\t\tlet formField = null;\n\n\t\t\t\tlet iAttr;\n\t\t\t\tconst attributes = this.helper.attributes[input.name];\n\t\t\t\tif (input.type == \"number\") {\n\t\t\t\t\tformField = document.createElement(\"input\");\n\t\t\t\t\tformField.setAttribute(\"type\", \"number\");\n\t\t\t\t\tformField.setAttribute(\"id\", id);\n\t\t\t\t\tformField.value = input.value;\n\t\t\t\t\tthis.setChangeEvent(formField, \"inputs\", input.name);\n\t\t\t\t\tfor (iAttr in attributes) {\n\t\t\t\t\t\tlet iAttrVal = attributes[iAttr];\n\t\t\t\t\t\t// poor IE/Edge can't perform decimal step validation properly, so we need to change step to any and give up the neat step effect\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t(CIQ.isIE || CIQ.isEdge) &&\n\t\t\t\t\t\t\tiAttr == \"step\" &&\n\t\t\t\t\t\t\tMath.floor(iAttrVal) != iAttrVal\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\tiAttrVal = \"any\";\n\t\t\t\t\t\tif (iAttr !== \"hidden\") formField.setAttribute(iAttr, iAttrVal);\n\t\t\t\t\t}\n\t\t\t\t} else if (\n\t\t\t\t\tinput.type == \"text\" ||\n\t\t\t\t\tinput.type == \"date\" ||\n\t\t\t\t\tinput.type == \"time\"\n\t\t\t\t) {\n\t\t\t\t\tformField = document.createElement(\"input\");\n\t\t\t\t\tformField.setAttribute(\"type\", CIQ.UI.supportedInputType(input.type));\n\t\t\t\t\tformField.setAttribute(\"id\", id);\n\t\t\t\t\tif (input.type == \"date\")\n\t\t\t\t\t\tformField.value = this.formatDateInput(input.value);\n\t\t\t\t\telse if (input.type == \"time\")\n\t\t\t\t\t\tformField.value = this.formatTimeInput(input.value);\n\t\t\t\t\telse formField.value = input.value;\n\t\t\t\t\tthis.setChangeEvent(formField, \"inputs\", input.name);\n\t\t\t\t\tfor (iAttr in attributes)\n\t\t\t\t\t\tif (iAttr !== \"hidden\")\n\t\t\t\t\t\t\tformField.setAttribute(iAttr, attributes[iAttr]);\n\t\t\t\t} else if (input.type == \"select\") {\n\t\t\t\t\tformField = this.makeMenu(\n\t\t\t\t\t\tinput.name,\n\t\t\t\t\t\tinput.value,\n\t\t\t\t\t\tinput.options,\n\t\t\t\t\t\t\"inputs\"\n\t\t\t\t\t);\n\t\t\t\t\tif (attributes && attributes.readonly)\n\t\t\t\t\t\tformField.setAttribute(\"readonly\", attributes.readonly);\n\t\t\t\t} else if (input.type == \"checkbox\") {\n\t\t\t\t\tformField = document.createElement(\"input\");\n\t\t\t\t\tformField.setAttribute(\"type\", \"checkbox\");\n\t\t\t\t\tformField.setAttribute(\"id\", id);\n\t\t\t\t\tif (input.value) formField.checked = true;\n\t\t\t\t\tthis.setChangeEvent(formField, \"inputs\", input.name);\n\t\t\t\t\tfor (iAttr in attributes)\n\t\t\t\t\t\tif (iAttr !== \"hidden\")\n\t\t\t\t\t\t\tformField.setAttribute(iAttr, attributes[iAttr]);\n\t\t\t\t}\n\t\t\t\tif (attributes && attributes.hidden)\n\t\t\t\t\t[...inputContainer.children].forEach((el) => (el.hidden = true));\n\t\t\t\tif (formField) newInput.querySelector(\".stx-data\").append(formField);\n\n\t\t\t\tnewInput.originalOuterHTML = newInput.outerHTML;\n\t\t\t\tconst oldInput = inputs.querySelector(\n\t\t\t\t\t\"[fieldname='\" + input.name + \"']\"\n\t\t\t\t);\n\t\t\t\tif (!oldInput) {\n\t\t\t\t\tinputs.append(...inputContainer.children);\n\t\t\t\t} else if (oldInput.originalOuterHTML !== newInput.originalOuterHTML) {\n\t\t\t\t\toldInput.replaceWith(newInput);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Creates/recreates the fields in the \"outputs\" section of the dialog.\n\t\t *\n\t\t * @param {boolean} [empty] If true, clears all outputs fields first.\n\t\t *\n\t\t * @tsmember WebComponents.StudyDialog\n\t\t */\n\t\trefreshOutputs(empty) {\n\t\t\tconst outputs = this.querySelector(\"cq-study-outputs\");\n\t\t\tif (empty) [...outputs.children].forEach((child) => child.remove());\n\t\t\tfor (let i = 0; i < this.helper.outputs.length; i++) {\n\t\t\t\tconst output = this.helper.outputs[i];\n\t\t\t\tconst outputContainer = document.createElement(\"div\");\n\t\t\t\tCIQ.UI.makeFromTemplate(this.outputTemplate, outputContainer);\n\t\t\t\tconst newOutput = outputContainer.querySelector(\"cq-study-output\");\n\t\t\t\tnewOutput.initialize({\n\t\t\t\t\tstudyDialog: this,\n\t\t\t\t\toutput: output.name\n\t\t\t\t});\n\t\t\t\tconst id = \"cq-study-dialog-outputs-\" + output.name.replace(/ /g, \"_\");\n\t\t\t\tconst heading = newOutput.querySelector(\".ciq-heading\");\n\t\t\t\tif (heading) {\n\t\t\t\t\theading.innerText = output.heading;\n\t\t\t\t\tconst label = newOutput.querySelector(\"label\");\n\t\t\t\t\tif (label) label.setAttribute(\"for\", id);\n\t\t\t\t}\n\t\t\t\tnewOutput.setAttribute(\"fieldname\", output.name);\n\n\t\t\t\tnewOutput.originalOuterHTML = newOutput.outerHTML;\n\t\t\t\tconst oldOutput = outputs.querySelector(\n\t\t\t\t\t\"[fieldname='\" + output.name + \"']\"\n\t\t\t\t);\n\t\t\t\tif (!oldOutput) {\n\t\t\t\t\toutputs.append(...outputContainer.children);\n\t\t\t\t} else if (\n\t\t\t\t\toldOutput.originalOuterHTML !== newOutput.originalOuterHTML\n\t\t\t\t) {\n\t\t\t\t\toldOutput.replaceWith(newOutput);\n\t\t\t\t}\n\t\t\t\tconst swatch = newOutput.querySelector(\"cq-swatch\");\n\t\t\t\tif (swatch) {\n\t\t\t\t\tswatch.setAttribute(\"id\", id);\n\t\t\t\t\tlet color = output.color;\n\t\t\t\t\tif (typeof color === \"object\") {\n\t\t\t\t\t\tcolor = color.color;\n\t\t\t\t\t}\n\t\t\t\t\tswatch.setColor(color, false, output.isAuto); // don't percolate\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Creates/recreates the fields in the \"parameters\" section of the dialog.\n\t\t *\n\t\t * @param {Object} params\n\t\t * @param {string} [params.axisSelect] If this key is present, axis selection options appear in the Parameters section of the dialog.\n\t\t * @param {string} [params.panelSelect] If this key is present, panel selection options appear in the Parameters section of the dialog.\n\t\t * @param {string} [params.addWhenDone] If set, and adding a new study, then study will only be added if \"Done\" key is pressed.\n\t\t * @param {boolean} [empty] If true, clears all parameters fields first.\n\t\t *\n\t\t * @tsmember WebComponents.StudyDialog\n\t\t */\n\t\trefreshParameters(params, empty) {\n\t\t\tconst parameters = this.querySelector(\"cq-study-parameters\");\n\t\t\tif (empty) [...parameters.children].forEach((child) => child.remove());\n\t\t\tfor (let i = 0; i < this.helper.parameters.length; i++) {\n\t\t\t\tconst parameter = this.helper.parameters[i];\n\t\t\t\tconst paramContainer = document.createElement(\"div\");\n\t\t\t\tCIQ.UI.makeFromTemplate(this.parameterTemplate, paramContainer);\n\t\t\t\tconst newParam = paramContainer.querySelector(\"cq-study-parameter\");\n\t\t\t\tthis.menuTemplate = newParam.querySelector(\"template[cq-menu]\");\n\t\t\t\tif (!this.menuTemplate && parameter.options) continue;\n\n\t\t\t\tconst id =\n\t\t\t\t\t\"cq-study-dialog-parameters-\" + parameter.name.replace(/ /g, \"_\");\n\t\t\t\tconst heading = newParam.querySelector(\".ciq-heading\");\n\t\t\t\tif (heading) {\n\t\t\t\t\theading.innerText = parameter.heading;\n\t\t\t\t\tconst label = newParam.querySelector(\"label\");\n\t\t\t\t\tif (label) label.setAttribute(\"for\", id);\n\t\t\t\t}\n\t\t\t\tnewParam.setAttribute(\"fieldname\", parameter.name);\n\t\t\t\tconst swatch = newParam.querySelector(\"cq-swatch\");\n\t\t\t\tlet paramInput = document.createElement(\"input\");\n\t\t\t\tlet pAttr;\n\t\t\t\tlet setSwatch = false;\n\t\t\t\tlet attributes = {};\n\t\t\t\tif (parameter.defaultValue.constructor == Boolean) {\n\t\t\t\t\tparamInput.setAttribute(\"type\", \"checkbox\");\n\t\t\t\t\tparamInput.setAttribute(\"id\", id);\n\t\t\t\t\tif (parameter.value) paramInput.checked = true;\n\t\t\t\t\tthis.setChangeEvent(\n\t\t\t\t\t\tparamInput,\n\t\t\t\t\t\t\"parameters\",\n\t\t\t\t\t\tparameter.name + \"Enabled\"\n\t\t\t\t\t);\n\t\t\t\t\tif (swatch) swatch.remove();\n\n\t\t\t\t\tattributes = this.helper.attributes[parameter.name + \"Enabled\"];\n\t\t\t\t\tfor (pAttr in attributes)\n\t\t\t\t\t\tif (pAttr !== \"hidden\")\n\t\t\t\t\t\t\tparamInput.setAttribute(pAttr, attributes[pAttr]);\n\t\t\t\t} else if (parameter.defaultValue.constructor == String) {\n\t\t\t\t\tlet paramName = parameter.name;\n\t\t\t\t\tparamInput.setAttribute(\"id\", id);\n\t\t\t\t\tif (parameter.defaultColor) {\n\t\t\t\t\t\tnewParam.initialize({\n\t\t\t\t\t\t\tstudyDialog: this,\n\t\t\t\t\t\t\tparameter: parameter.name + \"Color\",\n\t\t\t\t\t\t\tparams\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetSwatch = true;\n\t\t\t\t\t\tparamName = paramName + \"Value\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (swatch) swatch.remove();\n\t\t\t\t\t}\n\t\t\t\t\tif (parameter.options) {\n\t\t\t\t\t\tparamInput = this.makeMenu(\n\t\t\t\t\t\t\tparamName,\n\t\t\t\t\t\t\tparameter.value,\n\t\t\t\t\t\t\tparameter.options,\n\t\t\t\t\t\t\t\"parameters\"\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tparamInput.value = parameter.value;\n\t\t\t\t\t}\n\t\t\t\t\tattributes = this.helper.attributes[paramName];\n\t\t\t\t\tfor (pAttr in attributes)\n\t\t\t\t\t\tif (pAttr !== \"hidden\")\n\t\t\t\t\t\t\tparamInput.setAttribute(pAttr, attributes[pAttr]);\n\t\t\t\t} else if (parameter.defaultValue.constructor == Number) {\n\t\t\t\t\tparamInput.setAttribute(\"type\", \"number\");\n\t\t\t\t\tparamInput.setAttribute(\"id\", id);\n\t\t\t\t\tparamInput.value = parameter.value;\n\t\t\t\t\tthis.setChangeEvent(\n\t\t\t\t\t\tparamInput,\n\t\t\t\t\t\t\"parameters\",\n\t\t\t\t\t\tparameter.name + \"Value\"\n\t\t\t\t\t);\n\t\t\t\t\tnewParam.initialize({\n\t\t\t\t\t\tstudyDialog: this,\n\t\t\t\t\t\tparameter: parameter.name + \"Color\",\n\t\t\t\t\t\tparams\n\t\t\t\t\t});\n\t\t\t\t\tsetSwatch = true;\n\n\t\t\t\t\tattributes = this.helper.attributes[parameter.name + \"Value\"];\n\t\t\t\t\tfor (pAttr in attributes) {\n\t\t\t\t\t\tlet pAttrVal = attributes[pAttr];\n\t\t\t\t\t\t// poor IE/Edge can't perform decimal step validation properly, so we need to change step to any and give up the neat step effect\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t(CIQ.isIE || CIQ.isEdge) &&\n\t\t\t\t\t\t\tpAttr == \"step\" &&\n\t\t\t\t\t\t\tMath.floor(pAttrVal) != pAttrVal\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\tpAttrVal = \"any\";\n\t\t\t\t\t\tif (pAttr !== \"hidden\") paramInput.setAttribute(pAttr, pAttrVal);\n\t\t\t\t\t}\n\t\t\t\t} else continue;\n\n\t\t\t\tif (attributes && attributes.hidden)\n\t\t\t\t\t[...paramContainer.children].forEach((el) => (el.hidden = true));\n\t\t\t\tif (paramInput) newParam.querySelector(\".stx-data\").append(paramInput);\n\n\t\t\t\tnewParam.originalOuterHTML = newParam.outerHTML;\n\t\t\t\tconst oldParam = parameters.querySelector(\n\t\t\t\t\t\"[fieldname='\" + parameter.name + \"']\"\n\t\t\t\t);\n\t\t\t\tif (!oldParam) {\n\t\t\t\t\tparameters.append(...paramContainer.children);\n\t\t\t\t} else if (oldParam.originalOuterHTML !== newParam.originalOuterHTML) {\n\t\t\t\t\toldParam.replaceWith(newParam);\n\t\t\t\t}\n\t\t\t\tif (setSwatch)\n\t\t\t\t\tswatch.setColor(parameter.color, false, parameter.isAuto); // don't percolate\n\t\t\t}\n\t\t}\n\t\t/**\n\t\t * Sets up a handler to process changes to input fields\n\t\t *\n\t\t * @param {HTMLElement} node The input field\n\t\t * @param {string} section The section that is being updated, \"inputs\",\"outputs\",\"parameters\"\n\t\t * @param {string} name The name of the field being updated\n\t\t * @private\n\t\t *\n\t\t * @tsmember WebComponents.StudyDialog\n\t\t */\n\t\tsetChangeEvent(node, section, name) {\n\t\t\tconst changeCallback = (e) => {\n\t\t\t\tconst { target } = e;\n\t\t\t\tconst updates = {\n\t\t\t\t\t[section]: {\n\t\t\t\t\t\t[name]: [\"checkbox\", \"radio\"].includes(target.type)\n\t\t\t\t\t\t\t? target.checked\n\t\t\t\t\t\t\t: target.value\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tthis.updateStudy(updates, true);\n\t\t\t};\n\t\t\tnode.addEventListener(\"change\", changeCallback.bind(this));\n\t\t}\n\n\t\t/**\n\t\t * Called for a registered component when the context is constructed.\n\t\t * Sets the context property of the component.\n\t\t *\n\t\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t\t *\n\t\t * @tsmember WebComponents.StudyDialog\n\t\t */\n\t\tsetContext(context) {\n\t\t\tthis.context = context;\n\t\t\tcontext.advertiseAs(this, \"StudyDialog\");\n\t\t}\n\n\t\t/**\n\t\t * Accepts new menu (select box) selections.\n\t\t *\n\t\t * @param {object} activator The object representing the dropdown selection\n\t\t * @param {HTMLElement} activator.node The node of the dropdown\n\t\t * @param {string} section Section within the dialog (\"inputs\", \"outputs\", \"parameters\")\n\t\t * @param {string} name Text of selection\n\t\t * @param {string} value Value of selection\n\t\t *\n\t\t * @tsmember WebComponents.StudyDialog\n\t\t *\n\t\t * @since 5.2.0 Added `section` parameter.\n\t\t * @since 9.1.0 Added `name` and `value` parameters.\n\t\t */\n\t\tsetSelectOption(activator, section, name, value) {\n\t\t\tconst { node } = activator;\n\t\t\tname = name || node.getAttribute(\"name\");\n\t\t\tvalue = value || node.getAttribute(\"value\");\n\t\t\tconst updates = {\n\t\t\t\t[section]: {\n\t\t\t\t\t[name]: value\n\t\t\t\t}\n\t\t\t};\n\t\t\t// Close the option menu here when selected via keyboard because keyboard navigation\n\t\t\t// doesn't provide the necessary mouse event to close it automatically.\n\t\t\tthis.closeActiveMenu(node);\n\t\t\tthis.updateStudy(updates, true);\n\t\t}\n\n\t\t/**\n\t\t * Performs the updates on the study itself.\n\t\t *\n\t\t * @param {Object} updates Changes made in the dialog form elements from the defaults, that will be saved in the study.\n\t\t * @param {Object} [updates.inputs] Changes made in the inputs section.\n\t\t * @param {Object} [updates.outputs] Changes made in the outputs section.\n\t\t * @param {Object} [updates.parameters] Changes made in the parameters section.\n\t\t * @param {boolean} [wasChange=false] True if updating due to change in a field, False if performing a batch update.\n\t\t *\n\t\t * @tsmember WebComponents.StudyDialog\n\t\t */\n\t\tupdateStudy(updates, wasChange = false) {\n\t\t\tif (this.querySelector(\":invalid\")) return;\n\t\t\tif (this.addWhenDone) {\n\t\t\t\tCIQ.extend(this.queuedUpdates, updates);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.helper.libraryEntry.deferUpdate) {\n\t\t\t\tCIQ.extend(this.queuedUpdates, { inputs: updates.inputs });\n\t\t\t\tthis.helper.updateStudy({\n\t\t\t\t\toutputs: updates.outputs,\n\t\t\t\t\tparameters: updates.parameters\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.helper.updateStudy(updates);\n\t\t\t}\n\t\t\tthis.emitCustomEvent({\n\t\t\t\taction: wasChange ? \"change\" : null,\n\t\t\t\teffect: \"update\",\n\t\t\t\tdetail: { updates }\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Selects template elements and attaches them as class properties only once\n\t\t *\n\t\t * @tsmember WebComponents.StudyDialog\n\t\t */\n\t\tselectTemplates() {\n\t\t\tif (this.inputTemplate) return;\n\t\t\tthis.inputTemplate = this.querySelector(\"template[cq-study-input]\");\n\t\t\tthis.outputTemplate = this.querySelector(\"template[cq-study-output]\");\n\t\t\tthis.parameterTemplate = this.querySelector(\n\t\t\t\t\"template[cq-study-parameters]\"\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n\t *\n\t * @static\n\t * @type {String}\n\t *\n\t * @tsmember WebComponents.StudyDialog\n\t */\n\tStudyDialog.markup = `\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t
        \n\t\t\t
        Done
        \n\t\t
        \n\t`;\n\tCIQ.UI.addComponentDefinition(\"cq-study-dialog\", StudyDialog);\n}\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-study-output>

        \n *\n * Set the color of study outputs in the {@link WebComponents.StudyDialog}.\n *\n * @alias WebComponents.StudyOutput\n * @extends CIQ.UI.BaseComponent\n * @class\n * @protected\n */\nclass StudyOutput extends CIQ.UI.BaseComponent {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.type = this.tagName.split(\"-\").pop().toLowerCase();\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, StudyOutput);\n\t}\n\n\tinitialize(params) {\n\t\tthis.params = params;\n\t}\n\n\t/**\n\t * Sets the color swatch to the selected color.\n\t * The `color` argument must be only string-type for StudyParameter component.\n\t *\n\t * @param {object|string} color Color value or object containing color key and value.\n\t *\n\t * @tsmember WebComponents.StudyOutput\n\t */\n\tsetColor(color) {\n\t\tif (!this.params) return;\n\t\tconst key = `${this.type}s`;\n\t\tconst updates = { [key]: {} };\n\t\tupdates[key][this.params[this.type]] =\n\t\t\tthis.type === \"output\" ? { color } : color;\n\t\tthis.params.studyDialog.updateStudy(updates, true);\n\t}\n}\nCIQ.UI.addComponentDefinition(\"cq-study-output\", StudyOutput);\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-study-parameter>

        \n *\n * Set the color of study parameters in the {@link WebComponents.StudyDialog}.\n *\n * @alias WebComponents.StudyParameter\n * @extends WebComponents.StudyOutput\n * @class\n * @protected\n */\nclass StudyParameter extends StudyOutput {\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, StudyParameter);\n\t}\n}\nCIQ.UI.addComponentDefinition(\"cq-study-parameter\", StudyParameter);\n\n};\n\n\nlet __js_webcomponents_studyLegend_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\nif (!CIQ.Studies) {\n\tconsole.error(\n\t\t\"studyLegend component requires first activating studies feature.\"\n\t);\n} else {\n\t/**\n\t * @classdesc\n\t *\n\t * This is a custom HtmlElement (Web Component). The tag name is the following:\n\t *\n\t *

        <cq-study-legend>

        \n\t *\n\t * This component displays a menu of studies displayed on the chart. It has several modes of operation:\n\t * - It can be embedded in a menu dropdown to display active studies\n\t * - It can be placed as a marker to display all plots (including comparisons) on a panel\n\t * - Permutations of the above\n\t *\n\t * The legend may facilitate the following operations on the plot, depending on the attribute configuration:\n\t * - Remove the plot\n\t * - Disable the plot\n\t * - Change the color of the plot\n\t * - Edit study parameters\n\t * - View comparison prices\n\t *\n\t * _**Keyboard control**_\n\t *\n\t * When selected with tab key navigation and activated with Return/Enter, this component has\n\t * the following internal controls:\n\t * - Up/Down arrow — Move selection between legend entries\n\t * - Left/Right arrow — Select a control within a selected entry, such as\n\t * the Remove button. Child elements must have the attribute `keyboard-selectable-child` set to\n\t * be selectable with these keys.\n\t *\n\t * _**Attributes**_\n\t *\n\t * This component observes the following attributes and will change behavior if these attributes are modified:\n\t * | attribute | description |\n\t * | :--------------- | :---------- |\n\t * | button-clear-all | Set to a handler to show the Clear All button. Handler will be called when button is pressed. |\n\t * | button-edit | Set to enable the edit icon, otherwise, clicking on the plot name will open edit. |\n\t * | button-remove | Set to enable the remove icon. |\n\t * | clone-to-panel | Set to place this legend on every panel. |\n\t * | content-keys | Optional selector for which nodes have content, to indicate if legend is populated. Default is `\"[label],[description]\"`. |\n\t * | filter | Comma delimited list of types of plots to display. Valid values, which may be combined, are: `panel`, `overlay`, `signal`, `custom-removal` |\n\t * | heading | Set to a value to display when legend is embedded in a dropdown menu. |\n\t * | marker-label | Set to the name to display on the legend which appears on the chart, e.g. \"Plots\". |\n\t * | series | Set to `true` to include comparisons in the legend. |\n\t *\n\t * The filter values are further defined as follows:\n\t * - `custom-removal`: show studies needing custom removal.\n\t * - `overlay`: only show overlays.\n\t * - `panel`: only show studies in this panel.\n\t * - `signal`: only show signalling studies.\n\t *\n\t * In addition, the following attributes are also supported:\n\t * | attribute | description |\n\t * | :----------- | :---------- |\n\t * | chart-legend | READ ONLY, set internally by component - indicates that legend is on a chart panel, as opposed to embedded in a menu. |\n\t * | cq-marker | Set to true to allow legend to be properly positioned on a chart panel. |\n\t *\n\t * _**Emitters**_\n\t *\n\t * A custom event will be emitted by the component when a legend item is toggled, removed, or edited.\n\t * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n\t * The details of the event contain the following:\n\t * | property | value |\n\t * | :------- | :---- |\n\t * | emitter | this component |\n\t * | cause | \"useraction\" |\n\t * | effect | \"toggle\", remove\", \"edit\" |\n\t * | action | \"click\" |\n\t * | name | _plot name_ |\n\t * | value | _enabledstate -or- study inputs, outputs, and parameters_ |\n\t *\n\t * Note:\n\t * - `detail.value` not available on remove effect\n\t *\n\t * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n\t * The default markup provided has accessibility features.\n\t *\n\t * @example Legend on the chart, placed on each panel:\n\t * \n\t * @example Legend for signals:\n\t * \n\t *\n\t * @alias WebComponents.StudyLegend\n\t * @extends CIQ.UI.ModalTag\n\t * @class\n\t * @protected\n\t * @since\n\t * - 8.3.0 Enabled internal keyboard navigation and selection.\n\t * - 8.6.0 added `cq-signal-studies-only` flag.\n\t * - 9.1.0 Observes attributes. Added emitter.\n\t */\n\tclass StudyLegend extends CIQ.UI.ModalTag {\n\t\tstatic get observedAttributes() {\n\t\t\treturn [\n\t\t\t\t\"button-clear-all\",\n\t\t\t\t\"button-edit\",\n\t\t\t\t\"button-remove\",\n\t\t\t\t\"clone-to-panel\",\n\t\t\t\t\"content-keys\",\n\t\t\t\t\"filter\", // \"panel, overlay, signal, custom-removal\"\n\t\t\t\t\"heading\",\n\t\t\t\t\"marker-label\",\n\t\t\t\t\"series\"\n\t\t\t];\n\t\t}\n\n\t\tconstructor() {\n\t\t\tsuper();\n\t\t\tCIQ.UI.makeShadow(this);\n\t\t}\n\n\t\tconnectedCallback() {\n\t\t\tif (!this.isConnected || this.attached) return;\n\t\t\tsuper.connectedCallback();\n\n\t\t\tthis.addClaim(this);\n\n\t\t\t// Update the keyboard navigation. New study legend components can be added at runtime.\n\t\t\tif (this.context && this.context.config && this.context.config.channels) {\n\t\t\t\tthis.channelWrite(\n\t\t\t\t\tthis.context.config.channels.keyboardNavigation ||\n\t\t\t\t\t\t\"channel.keyboardNavigation\",\n\t\t\t\t\t{ action: \"registerElements\" }\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (this.isShadowComponent && this.children.length) {\n\t\t\t\twhile (this.children.length) {\n\t\t\t\t\tthis.root.appendChild(this.firstChild);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.markup = this.trimInnerHTMLWhitespace();\n\t\t\tthis.usingMarkup = !!this.markup.match(/\\{\\{(.{1,20}?)\\}\\}/g);\n\t\t\tthis.setMarkup();\n\t\t\tthis.setupShadow();\n\t\t}\n\n\t\tadoptedCallback() {\n\t\t\tsuper.adoptedCallback();\n\t\t\tCIQ.UI.flattenInheritance(this, StudyLegend);\n\t\t\tthis.constructor = StudyLegend;\n\t\t}\n\n\t\tdisconnectedCallback() {\n\t\t\tif (this.doNotDisconnect) return;\n\t\t\tif (this.context) {\n\t\t\t\t// Update the keyboard navigation. Need to remove this element from the index now that it's detached\n\t\t\t\tif (this.context.config && this.context.config.channels) {\n\t\t\t\t\tthis.channelWrite(\n\t\t\t\t\t\tthis.context.config.channels.keyboardNavigation ||\n\t\t\t\t\t\t\t\"channel.keyboardNavigation\",\n\t\t\t\t\t\t{ action: \"registerElements\" }\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\twindow.removeEventListener(\"resize\", this.resizeListener);\n\t\t\tthis.setActiveState(false);\n\t\t\tthis.removeClaim(this);\n\t\t\tsuper.disconnectedCallback();\n\t\t}\n\n\t\t/**\n\t\t * Processes attribute changes. This is called whenever an observed attribute has changed.\n\t\t *\n\t\t * @param {string} name Attribute name\n\t\t * @param {string} oldValue Original attribute value\n\t\t * @param {string} newValue new Attribute value\n\t\t *\n\t\t * @tsmember WebComponents.StudyLegend\n\t\t */\n\t\thandlePropertyChange(name, oldValue, newValue) {\n\t\t\tif (oldValue === newValue) return;\n\t\t\tthis[name] = newValue;\n\t\t\tif ([\"content-keys\", \"heading\", \"button-clear-all\"].includes(name)) {\n\t\t\t\tif (this.usingMarkup) {\n\t\t\t\t\tthis.setMarkup();\n\t\t\t\t} else {\n\t\t\t\t\t// do nothing when using predefined content\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.renderLegend();\n\t\t}\n\n\t\t/**\n\t\t * Called when component is initialized, from {@link WebComponents.StudyLegend#setContext}.\n\t\t *\n\t\t * @tsmember WebComponents.StudyLegend\n\t\t */\n\t\tbegin() {\n\t\t\tif (this.init) return;\n\n\t\t\tif (this.hasAttribute(\"cq-marker\")) {\n\t\t\t\tthis.setAttribute(\"chart-legend\", \"\");\n\t\t\t\tCIQ.UI.stxtap(this, function (e) {\n\t\t\t\t\tif (e.target.isConnected && !e.target.closest(\"[section-dynamic]\"))\n\t\t\t\t\t\tthis.setActiveState();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.init = true;\n\t\t}\n\n\t\t/**\n\t\t * Sets the `ciq-active` class on the component, and modalizes the legend for keyboard navigation.\n\t\t *\n\t\t * @param {boolean} newState `true` to show the legend, `false` to hide.\n\t\t *\n\t\t * @tsmember WebComponents.StudyLegend\n\t\t */\n\t\tsetActiveState(newState) {\n\t\t\tconst isActive = this.classList.contains(\"ciq-active\");\n\t\t\t// If newState is undefined, toggle the active state\n\t\t\tnewState = typeof newState === \"undefined\" ? !isActive : newState;\n\t\t\tconst keystrokeHub = this.ownerDocument.body.keystrokeHub;\n\t\t\tif (newState) {\n\t\t\t\tthis.classList.add(\"ciq-active\");\n\t\t\t\t// Treat the legend like a modal so keyboard navigation is returned after using colorPicker\n\t\t\t\tif (keystrokeHub && this.keyboardNavigation)\n\t\t\t\t\tkeystrokeHub.addActiveModal(this);\n\t\t\t} else {\n\t\t\t\tthis.classList.remove(\"ciq-active\");\n\t\t\t\tif (keystrokeHub) keystrokeHub.removeActiveModal(this);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Handler for keyboard interaction.\n\t\t *\n\t\t * @param {CIQ.UI.KeystrokeHub} hub The hub that processed the key\n\t\t * @param {string} key Key that was stroked\n\t\t * @param {Event} e The event object\n\t\t * @return {boolean} true if keystroke was processed\n\t\t *\n\t\t * @tsmember WebComponents.StudyLegend\n\t\t */\n\t\tkeyStroke(hub, key, e) {\n\t\t\tif (!this.keyboardNavigation) return false;\n\t\t\tconst items = this.qsa(\n\t\t\t\t\"[keyboard-selectable]:not(.item-hidden), cq-comparison-item\",\n\t\t\t\tthis,\n\t\t\t\ttrue\n\t\t\t);\n\n\t\t\tif (key == \" \" || key == \"Spacebar\" || key == \"Enter\") {\n\t\t\t\tconst focused = this.findFocused(items);\n\t\t\t\tif (!focused || !focused.length) return;\n\t\t\t\tconst childItemsSelected = focused[0].querySelector(\n\t\t\t\t\t\"[keyboard-selectable-child][cq-focused]\"\n\t\t\t\t);\n\t\t\t\tif (childItemsSelected) {\n\t\t\t\t\tthis.storeFocused(focused, childItemsSelected);\n\t\t\t\t\tthis.clickItem(childItemsSelected, e);\n\t\t\t\t} else {\n\t\t\t\t\t// If no child item is seleted, but there is a swatch, go ahead and click it.\n\t\t\t\t\tconst selectabelSwatch = focused[0].querySelector(\"cq-swatch\");\n\t\t\t\t\tif (selectabelSwatch) this.clickItem(selectabelSwatch, e);\n\t\t\t\t\telse this.clickItem(focused[0], e);\n\t\t\t\t}\n\t\t\t} else if (key == \"ArrowDown\" || key == \"Down\") {\n\t\t\t\tthis.focusNextItem(items);\n\t\t\t} else if (key == \"ArrowUp\" || key == \"Up\") {\n\t\t\t\tthis.focusNextItem(items, true);\n\t\t\t} else if (key == \"ArrowRight\" || key == \"Right\") {\n\t\t\t\tconst focused = this.findFocused(items);\n\t\t\t\tif (!focused || !focused.length) return;\n\t\t\t\tconst childItems = focused[0].querySelectorAll(\n\t\t\t\t\t\"[keyboard-selectable-child]\"\n\t\t\t\t);\n\t\t\t\tif (childItems.length) this.focusNextItem(childItems);\n\t\t\t} else if (key == \"ArrowLeft\" || key == \"Left\") {\n\t\t\t\tconst focused = this.findFocused(items)[0];\n\t\t\t\tif (!focused) return;\n\t\t\t\tconst childItems = focused.querySelectorAll(\n\t\t\t\t\t\"[keyboard-selectable-child]\"\n\t\t\t\t);\n\t\t\t\t// If the end of the child items has been reached select the parent item instead\n\t\t\t\tif (childItems.length && !this.focusNextItem(childItems, true)) {\n\t\t\t\t\tthis.removeFocused(childItems);\n\t\t\t\t\tthis.focusItem(focused);\n\t\t\t\t}\n\t\t\t} else if (key === \"Tab\" || key === \"Esc\" || key === \"Escape\") {\n\t\t\t\tthis.removeFocused(items);\n\t\t\t\tthis.setActiveState(false);\n\t\t\t\tconst keystrokeHub = this.ownerDocument.body.keystrokeHub;\n\t\t\t\tif (keystrokeHub) {\n\t\t\t\t\tkeystrokeHub.highlightPosition({\n\t\t\t\t\t\telement: this,\n\t\t\t\t\t\tposition: this.getBoundingClientRect()\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else return false;\n\n\t\t\treturn true;\n\t\t}\n\n\t\t/**\n\t\t * Records last focused element.\n\t\t *\n\t\t * @param {HTMLElement} focused Element that had keyboard focus\n\t\t * @param {HTMLElement} childItemsSelected Child element that was selected\n\t\t * @private\n\t\t *\n\t\t * @tsmember WebComponents.StudyLegend\n\t\t */\n\t\tstoreFocused(focused, childItemsSelected) {\n\t\t\tlet el = focused[0].querySelector(\"cq-label\") || focused[0];\n\t\t\tconst isSwitch = childItemsSelected.classList.contains(\"ciq-switch\");\n\t\t\tif (!isSwitch) {\n\t\t\t\tel =\n\t\t\t\t\t(focused[0].previousElementSibling.matches(\"template\") &&\n\t\t\t\t\t\tfocused[0].previousElementSibling) ||\n\t\t\t\t\tfocused[0].nextElementSibling;\n\t\t\t\tif (el && el.querySelector(\"cq-label\"))\n\t\t\t\t\tel = el.querySelector(\"cq-label\");\n\t\t\t}\n\t\t\tif (el) {\n\t\t\t\tthis.clickedItem = {\n\t\t\t\t\tname: el.textContent.trim(),\n\t\t\t\t\tisSwitch,\n\t\t\t\t\tms: +new Date()\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * If a color-picker is opened within this component, this will make sure the component stays active.\n\t\t *\n\t\t * @tsmember WebComponents.StudyLegend\n\t\t */\n\t\tlaunchColorPicker() {\n\t\t\tthis.setActiveState(true);\n\t\t}\n\n\t\t/**\n\t\t * Renders the legend based on the current studies in the CIQ.ChartEngine object, taking attribute settings into account.\n\t\t * If the `series` attribute is set to `true`, comparisons will also be included in the legend.\n\t\t *\n\t\t * @tsmember WebComponents.StudyLegend\n\t\t */\n\t\trenderLegend() {\n\t\t\tif (this.currentlyDisabling) return;\n\n\t\t\tlet { filter } = this;\n\t\t\tif (!filter) filter = \"\";\n\t\t\tfilter = filter.split(\",\");\n\n\t\t\tif (!this.context) return;\n\t\t\tconst { stx } = this.context;\n\n\t\t\tconst template = this.root.querySelector(\"template[cq-study-legend]\");\n\t\t\twhile (template.nextSibling) template.nextSibling.remove();\n\n\t\t\tif (this.series === \"true\" && !this.root.querySelector(\"cq-comparison\")) {\n\t\t\t\tconst comparison = document.createElement(\"cq-comparison\");\n\t\t\t\tcomparison.setAttribute(\"chart-legend\", \"\");\n\t\t\t\ttemplate.insertAdjacentElement(\"beforebegin\", comparison);\n\t\t\t} else if (this.series !== \"true\") {\n\t\t\t\tconst comparison = this.root.querySelector(\"cq-comparison\");\n\t\t\t\tif (comparison) comparison.remove();\n\t\t\t}\n\n\t\t\tconst getSwatch = (sd) => {\n\t\t\t\tconst colors = Object.values(sd.outputs);\n\t\t\t\tif (!stx.defaultColor) stx.getDefaultColor();\n\t\t\t\tconst els = colors\n\t\t\t\t\t.slice(0, 3)\n\t\t\t\t\t.map((item) => {\n\t\t\t\t\t\tconst color = item.color || item;\n\t\t\t\t\t\tconst bgColor = CIQ.getBackgroundColor(this.parentNode);\n\t\t\t\t\t\tconst border = CIQ.chooseForegroundColor(bgColor);\n\t\t\t\t\t\tconst hslb = CIQ.hsl(bgColor);\n\t\t\t\t\t\tconst isAuto = color === \"auto\";\n\t\t\t\t\t\tlet fillColor = isAuto ? stx.defaultColor : color;\n\t\t\t\t\t\tconst hslf = CIQ.hsl(fillColor);\n\t\t\t\t\t\tconst brdr =\n\t\t\t\t\t\t\t(isAuto && colors.length === 1) ||\n\t\t\t\t\t\t\tMath.abs(hslb[2] - hslf[2]) < 0.2\n\t\t\t\t\t\t\t\t? `solid ${border} 1px`\n\t\t\t\t\t\t\t\t: \"\";\n\t\t\t\t\t\tconst bg =\n\t\t\t\t\t\t\tisAuto && colors.length === 1\n\t\t\t\t\t\t\t\t? `linear-gradient(to right bottom, ${fillColor}, ${fillColor} 49%, ${bgColor} 50%, ${bgColor})`\n\t\t\t\t\t\t\t\t: isAuto\n\t\t\t\t\t\t\t\t? fillColor\n\t\t\t\t\t\t\t\t: color;\n\t\t\t\t\t\treturn ``;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\"\");\n\n\t\t\t\treturn els;\n\t\t\t};\n\n\t\t\tconst removeStudy = (sd) => {\n\t\t\t\treturn (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tthis.emitCustomEvent({\n\t\t\t\t\t\teffect: \"remove\",\n\t\t\t\t\t\tdetail: { name: (sd.signalData || sd).name }\n\t\t\t\t\t});\n\t\t\t\t\t// Need to run this in the nextTick because the study legend can be removed by this click\n\t\t\t\t\t// causing the underlying chart to receive the mousedown (on IE win7)\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (!sd.permanent) CIQ.Studies.removeStudy(stx, sd);\n\t\t\t\t\t\tif (this.hasAttribute(\"cq-marker\")) stx.modalEnd();\n\t\t\t\t\t\tthis.renderLegend();\n\t\t\t\t\t}, 0);\n\t\t\t\t};\n\t\t\t};\n\t\t\tconst editStudy = (sd) => {\n\t\t\t\treturn (e) => {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tinputs,\n\t\t\t\t\t\toutputs,\n\t\t\t\t\t\tparameters,\n\t\t\t\t\t\tpermanent,\n\t\t\t\t\t\teditFunction,\n\t\t\t\t\t\tsignalData\n\t\t\t\t\t} = sd;\n\t\t\t\t\tthis.emitCustomEvent({\n\t\t\t\t\t\teffect: \"edit\",\n\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\tname: (signalData || sd).name,\n\t\t\t\t\t\t\tvalue: { inputs, outputs, parameters }\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif (permanent || !editFunction) {\n\t\t\t\t\t\tstx.dispatch(\"notification\", \"studynoteditable\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tsetTimeout(() =>\n\t\t\t\t\t\tthis.context\n\t\t\t\t\t\t\t.getAdvertised(\"StudyEdit\")\n\t\t\t\t\t\t\t.editPanel({ stx, sd, inputs, outputs, parameters })\n\t\t\t\t\t);\n\t\t\t\t};\n\t\t\t};\n\t\t\tconst handleToggle = (sd, stx) => {\n\t\t\t\treturn (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tthis.currentlyDisabling = true;\n\t\t\t\t\tsd.toggleDisabledState(stx);\n\t\t\t\t\tlet { target, currentTarget } = e;\n\t\t\t\t\ttarget.ariaPressed = !sd.disabled;\n\n\t\t\t\t\t// element inside the legend has been clicked: switch, label, span, etc.\n\t\t\t\t\tif (\n\t\t\t\t\t\ttarget !== currentTarget ||\n\t\t\t\t\t\ttarget.classList.contains(\"ciq-switch\")\n\t\t\t\t\t)\n\t\t\t\t\t\ttarget = target.parentElement;\n\t\t\t\t\ttarget.classList[sd.disabled ? \"remove\" : \"add\"](\"ciq-active\");\n\n\t\t\t\t\tthis.emitCustomEvent({\n\t\t\t\t\t\teffect: \"toggle\",\n\t\t\t\t\t\tdetail: { name: sd.name, value: !sd.disabled }\n\t\t\t\t\t});\n\t\t\t\t\tthis.currentlyDisabling = false;\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tconst panel = filter.includes(\"panel\");\n\t\t\tconst overlay = filter.includes(\"overlay\");\n\t\t\tconst customRemoval = filter.includes(\"custom-removal\");\n\t\t\tconst signal = filter.includes(\"signal\");\n\t\t\tconst markerLabel = this[\"marker-label\"];\n\t\t\tconst holder = this.closest(\".stx-holder\");\n\t\t\tconst panelName = holder ? holder.panel.name : null;\n\t\t\tlet isNativeMobile = false;\n\n\t\t\tconst context = CIQ.UI.closestContextContainer(this);\n\t\t\tif (context && context.hasAttribute(\"ciq-native-mobile\"))\n\t\t\t\tisNativeMobile = true;\n\n\t\t\tif (CIQ.Studies) {\n\t\t\t\tfor (let id in stx.layout.studies) {\n\t\t\t\t\tconst sd = stx.layout.studies[id];\n\t\t\t\t\tif (sd.customLegend) continue;\n\t\t\t\t\tif (customRemoval && !sd.study.customRemoval) continue;\n\t\t\t\t\tif (panel && sd.panel != panelName) continue;\n\t\t\t\t\tif (overlay && !sd.overlay && !sd.underlay) continue;\n\t\t\t\t\tif (\n\t\t\t\t\t\t(!holder || panelName === \"chart\") &&\n\t\t\t\t\t\tCIQ.xor(signal, sd.signalData)\n\t\t\t\t\t)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tconst template = this.root.querySelector(\"template[cq-study-legend]\");\n\t\t\t\t\tconst newChild = CIQ.UI.makeFromTemplate(template)[0];\n\t\t\t\t\ttemplate.parentNode.appendChild(newChild);\n\t\t\t\t\tconst label = newChild.querySelector(\"[label]\");\n\t\t\t\t\tCIQ.makeTranslatableElement(label, stx, sd.inputs.display);\n\t\t\t\t\tif (!markerLabel) label.setAttribute(\"role\", \"menuitem\");\n\t\t\t\t\tnewChild.setAttribute(\"title\", label.innerText);\n\n\t\t\t\t\tif (holder) newChild.appendChild(label);\n\n\t\t\t\t\tconst { disabled, signalData } = sd;\n\t\t\t\t\tconst swatch = newChild.querySelector(\".swatch\");\n\t\t\t\t\tif (swatch) {\n\t\t\t\t\t\tif (!holder || signalData) swatch.classList.add(\"hidden\");\n\t\t\t\t\t\telse swatch.innerHTML = getSwatch(sd);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst toggle = newChild.querySelector(\".ciq-switch\");\n\t\t\t\t\tconst labelid = CIQ.uniqueID() + \"_toggle_label\";\n\t\t\t\t\ttoggle.setAttribute(\"aria-labelledBy\", labelid);\n\t\t\t\t\ttoggle.ariaPressed = !disabled;\n\t\t\t\t\tif (!disabled) newChild.classList.add(\"ciq-active\");\n\n\t\t\t\t\tCIQ.UI.stxtap(toggle, handleToggle(sd, stx));\n\t\t\t\t\tconst labelForToggle = newChild.querySelector(\"[id][hidden]\");\n\t\t\t\t\tif (labelForToggle) labelForToggle.id = labelid;\n\t\t\t\t\ttoggle.classList.remove(\"hidden\");\n\n\t\t\t\t\t// restore focus\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.clickedItem &&\n\t\t\t\t\t\t+new Date() - this.clickedItem.ms < 100 &&\n\t\t\t\t\t\tthis.clickedItem.name.replace(/\\u200C/g, \"\") ===\n\t\t\t\t\t\t\tsd.inputs.display.replace(/\\u200C/g, \"\")\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.focusItem(newChild);\n\t\t\t\t\t\tif (this.clickedItem.isSwitch) {\n\t\t\t\t\t\t\tthis.focusItem(toggle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst close = newChild.querySelector(\".close\");\n\t\t\t\t\tif (close) {\n\t\t\t\t\t\tif (!this[\"button-remove\"] || this[\"button-remove\"] === \"false\") {\n\t\t\t\t\t\t\tclose.classList.add(\"hidden\");\n\t\t\t\t\t\t} else if (sd.permanent) {\n\t\t\t\t\t\t\tclose.style.visibility = \"hidden\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tCIQ.UI.stxtap(close, removeStudy(sd));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlet edit = newChild.querySelector(\".options\");\n\t\t\t\t\tif (\n\t\t\t\t\t\tsd.permanent ||\n\t\t\t\t\t\t!sd.editFunction ||\n\t\t\t\t\t\tthis[\"button-edit\"] !== \"true\"\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (edit) edit.classList.add(\"hidden\");\n\t\t\t\t\t\tedit = newChild;\n\t\t\t\t\t\tlabel.setAttribute(\"role\", \"button\");\n\t\t\t\t\t}\n\t\t\t\t\t// If there isn't an edit button, put the edit function on the parent so it responds to a keyboard navigation click\n\t\t\t\t\tCIQ.UI.stxtap(\n\t\t\t\t\t\tedit || newChild,\n\t\t\t\t\t\tisNativeMobile ? handleToggle(sd, stx) : editStudy(sd)\n\t\t\t\t\t);\n\n\t\t\t\t\t// Fixes an issue on mobile where the close study option has an unpredictable target area\n\t\t\t\t\t// if we don't assign a tap event to the surrounding elements\n\t\t\t\t\tif (CIQ.isMobile) {\n\t\t\t\t\t\tCIQ.UI.stxtap(newChild.querySelector(\".swatch\"), () => {});\n\t\t\t\t\t\tCIQ.UI.stxtap(newChild.querySelector(\"[label]\"), () => {});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.setPanelLegendWidth();\n\t\t\t}\n\t\t\t//Only want to display the marker label if at least one study has been\n\t\t\t//rendered in the legend. If no studies are rendered, only the template tag\n\t\t\t//will be in there.\n\t\t\tif (typeof markerLabel != \"undefined\") {\n\t\t\t\tif (!this.root.querySelector(\".marker-label\")) {\n\t\t\t\t\tconst label = document.createElement(\"span\");\n\t\t\t\t\tlabel.className = \"marker-label\";\n\t\t\t\t\tCIQ.makeTranslatableElement(label, stx, markerLabel);\n\n\t\t\t\t\tconst styles = this.root.querySelectorAll(\"link, style\");\n\t\t\t\t\tthis.root.insertBefore(\n\t\t\t\t\t\tlabel,\n\t\t\t\t\t\tstyles.length\n\t\t\t\t\t\t\t? styles[styles.length - 1].nextSibling\n\t\t\t\t\t\t\t: this.root.firstChild\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tstx.translateUI(this);\n\t\t\tthis.displayLegendTitle();\n\t\t}\n\n\t\t/**\n\t\t * Legend title specified in the `marker-label` attribute will be displayed only if there are plots within the legend.\n\t\t * It will also be translated into the selected language here.\n\t\t *\n\t\t * @tsmember WebComponents.StudyLegend\n\t\t */\n\t\tdisplayLegendTitle() {\n\t\t\tconst notInTemplate = (el) => {\n\t\t\t\twhile (el) {\n\t\t\t\t\tif (el.nodeName.toLowerCase() === \"template\") return false;\n\t\t\t\t\tel = el.parentElement;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t};\n\t\t\tconst hasKeys = () => {\n\t\t\t\t// checks if key is not template as in frameworks such as React or Angular\n\t\t\t\t// templates may be rendered as regular node allowing to inner content queries\n\t\t\t\treturn [\n\t\t\t\t\t...this.qsa(\n\t\t\t\t\t\tthis[\"content-keys\"] || \"[label], [description]\",\n\t\t\t\t\t\tthis,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t)\n\t\t\t\t].some(notInTemplate);\n\t\t\t};\n\t\t\tif (hasKeys()) {\n\t\t\t\tthis.style.display = \"\";\n\t\t\t\tthis.style.width = \"\";\n\t\t\t} else {\n\t\t\t\tthis.style.display = \"none\";\n\t\t\t\tthis.style.width = \"0px\";\n\t\t\t}\n\n\t\t\tif (this.context.stx.translateUI)\n\t\t\t\tthis.context.stx.translateUI(this.node[0]);\n\t\t}\n\n\t\t/**\n\t\t * Called for a registered component when the context is constructed.\n\t\t * Sets the context property of the component.\n\t\t *\n\t\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t\t *\n\t\t * @tsmember WebComponents.StudyLegend\n\t\t */\n\t\tsetContext(context) {\n\t\t\tif (!this.parentElement) return;\n\t\t\tconst cloneToPanels = this[\"clone-to-panel\"] !== undefined;\n\t\t\tif (cloneToPanels) {\n\t\t\t\tCIQ.UI.closestContextContainer(this).classList.add(\"stx-panel-legend\");\n\t\t\t\tthis.spawnPanelLegend();\n\t\t\t\tconst cb = () => {\n\t\t\t\t\tif (this[\"clone-to-panel\"] === undefined)\n\t\t\t\t\t\tcontext.stx.unappend(\"stackPanel\", cb);\n\t\t\t\t\telse this.spawnPanelLegend();\n\t\t\t\t};\n\t\t\t\tcontext.stx.append(\"stackPanel\", cb);\n\t\t\t}\n\t\t\tthis.begin();\n\t\t\tthis.changeContext(context);\n\t\t}\n\n\t\t/**\n\t\t * Called for a registered component when the context is changed in a multichart environment.\n\t\t *\n\t\t * @param {CIQ.UI.Context} newContext The chart user interface context.\n\t\t *\n\t\t * @tsmember WebComponents.StudyLegend\n\t\t */\n\t\tchangeContext(newContext) {\n\t\t\tif (!this.init) {\n\t\t\t\t// context change in multichart is executed prior setContext\n\t\t\t\tthis.context = newContext;\n\t\t\t\tthis.setContext(newContext);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.eventListeners.forEach((listener) => {\n\t\t\t\tthis.context.stx.removeEventListener(listener);\n\t\t\t});\n\t\t\tthis.eventListeners = [\n\t\t\t\tnewContext.stx.addEventListener(\"layout\", this.renderLegend.bind(this)),\n\t\t\t\tnewContext.stx.addEventListener(\"theme\", this.renderLegend.bind(this))\n\t\t\t];\n\t\t\tthis.resizeListener = this.setPanelLegendWidth.bind(this);\n\t\t\twindow.addEventListener(\"resize\", this.resizeListener);\n\n\t\t\tthis.context = newContext;\n\t\t\tthis.renderLegend();\n\t\t}\n\n\t\t/**\n\t\t * Sets the legend width to synchronize with the placement of the panel controls.\n\t\t *\n\t\t * @tsmember WebComponents.StudyLegend\n\t\t */\n\t\tsetPanelLegendWidth() {\n\t\t\tif (!this.parentElement) return; // can happen if resizing whilst disconnected\n\t\t\tif (!this.parentElement.matches(\".fixed-wrapper\")) return;\n\t\t\tif (!CIQ.trulyVisible(this)) return;\n\n\t\t\tconst panelControl = CIQ.climbUpDomTree(\n\t\t\t\t\tthis,\n\t\t\t\t\t\"div.stx-panel-control\",\n\t\t\t\t\ttrue\n\t\t\t\t)[0],\n\t\t\t\tallButtons = panelControl.querySelectorAll(\".stx-btn-panel\");\n\n\t\t\tfor (let button of allButtons) {\n\t\t\t\tbutton.style.marginLeft = \"\";\n\t\t\t}\n\n\t\t\tconst firstBtn =\n\t\t\t\t\tpanelControl.querySelector(\".stx-btn-panel.stx-show\") || null,\n\t\t\t\tfirstBtnOffset = firstBtn ? firstBtn.offsetLeft : null,\n\t\t\t\tlastBtn = panelControl.lastChild || null,\n\t\t\t\tlastBtnOffset = lastBtn\n\t\t\t\t\t? lastBtn.offsetLeft + lastBtn.offsetWidth\n\t\t\t\t\t: null;\n\n\t\t\tconst breakpointValue = this.channelRead(\"channel.breakpoint\");\n\t\t\tif (breakpointValue === \"break-sm\") {\n\t\t\t\tfirstBtn.style.marginLeft = \"\";\n\t\t\t} else {\n\t\t\t\tfirstBtn.style.marginLeft =\n\t\t\t\t\t\"-\" + (lastBtnOffset - firstBtnOffset + 20) + \"px\";\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Creates a copy of this component on all panels, if the `clone-to-panels` attribute is set.\n\t\t *\n\t\t * @tsmember WebComponents.StudyLegend\n\t\t */\n\t\tspawnPanelLegend() {\n\t\t\tconst { stx } = this.context;\n\t\t\tfunction tap(legend) {\n\t\t\t\treturn function (e) {\n\t\t\t\t\tconst clickedOn = e.currentTarget;\n\t\t\t\t\tif (clickedOn === this || clickedOn.matches(\"[label]\"))\n\t\t\t\t\t\tlegend.setActiveState();\n\t\t\t\t};\n\t\t\t}\n\t\t\tfor (let p in stx.panels) {\n\t\t\t\tif (p == stx.chart.panel.name) continue;\n\t\t\t\tconst legendHolder =\n\t\t\t\t\tstx.panels[p].subholder.querySelector(\".stx-panel-legend\");\n\t\t\t\tif (legendHolder) {\n\t\t\t\t\tlet panelLegend = legendHolder.querySelector(this.nodeName);\n\t\t\t\t\tif (!panelLegend) {\n\t\t\t\t\t\tif (this.ownerDocument !== document) {\n\t\t\t\t\t\t\tconst templ = document.createElement(\"template\");\n\t\t\t\t\t\t\ttempl.innerHTML = this.outerHTML;\n\t\t\t\t\t\t\tdocument.body.append(templ);\n\t\t\t\t\t\t\tpanelLegend = CIQ.UI.makeFromTemplate(templ)[0];\n\t\t\t\t\t\t\ttempl.remove();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpanelLegend = this.cloneNode(true);\n\t\t\t\t\t\t\tpanelLegend.innerHTML = this.root.innerHTML;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpanelLegend.removeAttribute(\"clone-to-panel\");\n\t\t\t\t\t\tpanelLegend.removeAttribute(\"cq-marker\");\n\t\t\t\t\t\tpanelLegend.setAttribute(\"chart-legend\", \"\");\n\t\t\t\t\t\tthis.makeTap(panelLegend, tap(panelLegend));\n\t\t\t\t\t\tconst mLabel = panelLegend.querySelector(\".marker-label\");\n\t\t\t\t\t\tif (mLabel) mLabel.remove();\n\t\t\t\t\t\tconst fixedWrapper = document.createElement(\"div\");\n\t\t\t\t\t\tfixedWrapper.className = \"fixed-wrapper\";\n\t\t\t\t\t\tfixedWrapper.appendChild(panelLegend);\n\t\t\t\t\t\tlegendHolder.appendChild(fixedWrapper);\n\t\t\t\t\t\tpanelLegend.begin();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Initializes the inner HTML of the component when the component is attached to the DOM without any existing inner HTML.\n\t\t *\n\t\t * @tsmember WebComponents.StudyLegend\n\t\t */\n\t\tsetMarkup() {\n\t\t\tconst { children } = this.root;\n\t\t\tif (!children.length || this.usingMarkup) {\n\t\t\t\tthis.usingMarkup = true;\n\t\t\t\tif (children.length) {\n\t\t\t\t\t[...children].forEach((child) => {\n\t\t\t\t\t\tif (![\"LINK\", \"STYLE\"].includes(child.tagName)) child.remove();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet markup = this.markup || this.constructor.markup;\n\t\t\t\tconst { filter } = this;\n\t\t\t\tconst rMode = new RegExp(\"{{mode}}\", \"g\");\n\t\t\t\tmarkup = markup\n\t\t\t\t\t.replace(\"{{heading}}\", this.heading || \"\")\n\t\t\t\t\t.replace(\"{{heading_class}}\", this.heading ? \"\" : \"hidden\")\n\t\t\t\t\t.replace(\"{{heading_style}}\", this.heading ? \"\" : \"margin: 0;\")\n\t\t\t\t\t.replace(\"{{button_action}}\", this[\"button-clear-all\"] || \"\")\n\t\t\t\t\t.replace(\"{{button_class}}\", this[\"button-clear-all\"] ? \"\" : \"hidden\")\n\t\t\t\t\t.replace(\n\t\t\t\t\t\trMode,\n\t\t\t\t\t\t(filter || \"\").split(\",\").includes(\"signal\") ? \"signal\" : \"study\"\n\t\t\t\t\t);\n\t\t\t\tthis.addDefaultMarkup(null, markup);\n\t\t\t\tconst heading = this.root.querySelector(\"cq-heading\");\n\t\t\t\tif (heading && this.matches(\".template-item *\"))\n\t\t\t\t\theading.classList.add(\"dropdown\");\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n\t *\n\t * This markup contains placeholder values which the component replaces with values from its attributes.\n\t * Variables are represented in double curly-braces, for example: `{{text}}`.\n\t * The following variables are defined:\n\t * | variable | source |\n\t * | :------------ | :----- |\n\t * | mode | \"signal\" or \"study\", based on `filter` attribute |\n\t * | heading | from attribute value |\n\t * | heading_class | \"hidden\" if `heading` attribute not specified |\n\t * | heading_style | \"margin: 0;\" if `heading` attribute not specified |\n\t * | button_class | \"hidden\" if `button-clear-all` attribute not specified |\n\t * | button_action | from `button-clear-all` attribute value |\n\t *\n\t * @static\n\t * @type {String}\n\t *\n\t * @tsmember WebComponents.StudyLegend\n\t */\n\tStudyLegend.markup = `\n\t\t
        \n\t\t\t

        \n\t\t\t\t\n\t\t\t

        \n\t\t\t
        \n\t\t\t\t\n\t\t\t
        \n\t\t\t\n\t\t\t\tClear All\n\t\t\t\n\t\t
        \n\t`;\n\n\tCIQ.UI.addComponentDefinition(\"cq-study-legend\", StudyLegend);\n}\n\n};\n\n\nlet __js_webcomponents_swatch_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-swatch>

        \n *\n * An interactive color swatch. Relies on the existence of a {@link CIQ.UI.ColorPicker} component.\n * Interactivity can be disabled by adding cq-static attribute.\n *\n * When a color is selected, setColor(color) will get called for any parent component with that\n * method.\n * The swatch will display special states such as \"auto\" or \"none\" with distinct images.\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * _**Attributes**_\n *\n * This component observes the following attributes and will change behavior if these attributes are modified:\n * | attribute | description |\n * | :-------- | :---------- |\n * | color | Active swatch color |\n * | overrides | A comma-delimited list of \"colors\" which should be supported by the color picker when the swatch is clicked. |\n * | static | Set to \"true\" to disable interactivity. |\n *\n * _**Emitters**_\n *\n * A custom event will be emitted from the component when it is clicked, and the color picker opened.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"open\" |\n * | action | \"click\" |\n *\n * A custom event will be emitted from the component when the color is changed.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"setColor\", undefined |\n * | effect | \"change\" |\n * | action | null |\n * | value | _color value_ |\n *\n * @example\n * \n *\n * @alias WebComponents.Swatch\n * @extends CIQ.UI.BaseComponent\n * @class\n * @protected\n * @since\n * - 9.1.0 Observes attributes. Added emitter.\n */\nclass Swatch extends CIQ.UI.BaseComponent {\n\tstatic get observedAttributes() {\n\t\treturn [\"color\", \"overrides\", \"static\"];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\t/**\n\t\t * Optionally set the default color for the swatch.\n\t\t * @type {string}\n\t\t *\n\t\t * @tsmember WebComponents.Swatch\n\t\t */\n\t\tthis.defaultColor = null;\n\t\tthis.preventPercolate = null;\n\t}\n\n\tconnectedCallback() {\n\t\tif (!this.isConnected || this.attached) return;\n\t\tthis.attached = true;\n\n\t\tthis.tapListener = (e) => {\n\t\t\tthis.launchColorPicker();\n\t\t\te.stopPropagation();\n\t\t};\n\t\tthis._setInteractive(this.getAttribute(\"static\"));\n\t\tthis.setAttribute(\"role\", \"button\");\n\n\t\tif (!this.children.length) this.addDefaultMarkup();\n\n\t\tif (this.color) this._updateSwatchColor(this.color, true);\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, Swatch);\n\t\tthis.constructor = Swatch;\n\t}\n\n\t/**\n\t * Processes attribute changes. This is called whenever an observed attribute has changed.\n\t *\n\t * @param {string} name Attribute name\n\t * @param {string} oldValue Original attribute value\n\t * @param {string} newValue new Attribute value\n\t *\n\t * @tsmember WebComponents.Swatch\n\t */\n\thandlePropertyChange(name, oldValue, newValue) {\n\t\tif (newValue === oldValue) return;\n\t\tthis[name] = newValue;\n\t\tswitch (name) {\n\t\t\tcase \"color\":\n\t\t\t\tthis._updateSwatchColor(newValue);\n\t\t\t\treturn;\n\t\t\tcase \"overrides\":\n\t\t\t\tconst { activeMenuStack } = CIQ.UI.getUIManager();\n\t\t\t\tif (\n\t\t\t\t\tactiveMenuStack &&\n\t\t\t\t\tactiveMenuStack.length &&\n\t\t\t\t\tactiveMenuStack[activeMenuStack.length - 1].callingNode === this\n\t\t\t\t)\n\t\t\t\t\tthis.launchColorPicker();\n\t\t\t\treturn;\n\t\t\tcase \"static\":\n\t\t\t\tthis._setInteractive(newValue);\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\t/**\n\t * Enable/diable interactivity\n\t * @param {string} staticAttr Value of the \"static\" attribute (\"true\" or \"false\").\n\t * @private\n\t *\n\t * @tsmember WebComponents.Swatch\n\t */\n\t_setInteractive(staticAttr) {\n\t\tif (typeof staticAttr === \"string\" && staticAttr !== \"false\") {\n\t\t\tthis.style.cursor = \"default\";\n\t\t\tthis.removeEventListener(\"stxtap\", this.tapListener);\n\t\t} else {\n\t\t\tthis.style.cursor = \"pointer\";\n\t\t\tthis.addEventListener(\"stxtap\", this.tapListener);\n\t\t}\n\t}\n\n\t/**\n\t * Update color based on \"color\" attribute value.\n\t * @param {string} color Color value acceptable for CSS.\n\t * @param {boolean} [onConnectedCallback] True if called from `connectedCallback()`.\n\t * @private\n\t *\n\t * @tsmember WebComponents.Swatch\n\t */\n\t_updateSwatchColor(color, onConnectedCallback) {\n\t\tif (!color) color = \"transparent\";\n\n\t\tlet bgColor = this.parentNode\n\t\t\t? CIQ.getBackgroundColor(this.parentNode)\n\t\t\t: \"\";\n\t\tconst border = CIQ.chooseForegroundColor(bgColor);\n\t\tconst hslb = CIQ.hsl(bgColor);\n\t\tconst isAuto = color === \"auto\";\n\t\tlet fillColor = isAuto ? this.getDefaultColor() : color;\n\t\tif (fillColor.indexOf(\"rgba(\") === 0) {\n\t\t\t// strip out the alpha component\n\t\t\tfillColor = (fillColor.split(\",\").slice(0, 3).join(\",\") + \")\").replace(\n\t\t\t\t/rgba/,\n\t\t\t\t\"rgb\"\n\t\t\t);\n\t\t}\n\t\tconst hslf = CIQ.hsl(fillColor);\n\t\tconst isTransparent = CIQ.isTransparent(color);\n\n\t\tthis.style.background = this.value = fillColor;\n\t\tif (isAuto || Math.abs(hslb[2] - hslf[2]) < 0.2 || isTransparent) {\n\t\t\tthis.style.border = \"solid \" + border + \" 1px\";\n\t\t\tif (isTransparent)\n\t\t\t\tthis.style.background =\n\t\t\t\t\t\"linear-gradient(to bottom right, transparent, transparent 49%, \" +\n\t\t\t\t\tborder +\n\t\t\t\t\t\" 50%, transparent 51%, transparent)\";\n\t\t} else {\n\t\t\tthis.style.border = \"\";\n\t\t}\n\n\t\tif (isAuto) {\n\t\t\tbgColor = CIQ.chooseForegroundColor(fillColor);\n\t\t\tthis.style.background =\n\t\t\t\t\"linear-gradient(to bottom right, \" +\n\t\t\t\tfillColor +\n\t\t\t\t\", \" +\n\t\t\t\tfillColor +\n\t\t\t\t\" 49%, \" +\n\t\t\t\tbgColor +\n\t\t\t\t\" 50%, \" +\n\t\t\t\tbgColor +\n\t\t\t\t\")\";\n\t\t}\n\n\t\tif (onConnectedCallback) return;\n\n\t\tthis.emitCustomEvent({\n\t\t\taction: null,\n\t\t\tcause: this.cause,\n\t\t\teffect: \"change\",\n\t\t\tdetail: {\n\t\t\t\tvalue: color\n\t\t\t}\n\t\t});\n\n\t\tif (this.preventPercolate === true) this.preventPercolate = null;\n\t\telse CIQ.UI.containerExecute(this, \"setColor\", color, this);\n\t}\n\n\t/**\n\t * Attempts to identify the default color for the associated chart. It does so by traversing\n\t * up the parent stack and looking for any component that has a context. Or you can set\n\t * the default color manually by setting member variable defaultColor.\n\t *\n\t * @return {string} color value\n\t *\n\t * @tsmember WebComponents.Swatch\n\t */\n\tgetDefaultColor() {\n\t\tif (this.defaultColor) return this.defaultColor;\n\t\tconst context = CIQ.UI.getMyContext(this);\n\t\tif (context) return context.stx.defaultColor; // some parent with a context\n\t\treturn \"transparent\";\n\t}\n\n\t/**\n\t * Sets the swatch to a color provided.\n\t *\n\t * @param {string} color Color value acceptable for CSS.\n\t * @param {boolean} percolate If true, will \"percolate\" up, calling `setColor` on the closest parent wiith that function.\n\t * @param {boolean} isAuto True if \"auto\" color selected.\n\t *\n\t * @since 6.2.0 Colors strip out the opacity so they are the rgb representation\n\t *\n\t * @tsmember WebComponents.Swatch\n\t */\n\tsetColor(color, percolate, isAuto) {\n\t\tif (!this.parentNode) return;\n\t\tif (percolate === false) this.preventPercolate = true;\n\t\tthis.cause = \"setColor\";\n\t\tconst resolvedColor = isAuto ? \"auto\" : color;\n\t\tthis.setAttribute(\"color\", resolvedColor);\n\t\tdelete this.cause;\n\t\tconst label = this.querySelector(\"[label]\");\n\t\tif (label) label.innerText = resolvedColor;\n\t}\n\n\t/**\n\t * Opens the color picker dialog. This component calls this function when the swatch is tapped.\n\t *\n\t * @tsmember WebComponents.Swatch\n\t */\n\tlaunchColorPicker() {\n\t\tif (!this.attached) return;\n\t\tCIQ.UI.containerExecute(this, \"launchColorPicker\");\n\t\tconst colorPicker = CIQ.UI.getUIManager().getColorPicker(this);\n\t\tif (colorPicker) {\n\t\t\tcolorPicker.callback = (color) =>\n\t\t\t\tthis.setColor(color, null, color === \"auto\");\n\t\t\tlet overrides = this.overrides;\n\t\t\tif (overrides) overrides = overrides.split(\",\");\n\n\t\t\tsetTimeout(\n\t\t\t\t() => {\n\t\t\t\t\tcolorPicker.display({\n\t\t\t\t\t\tnode: this,\n\t\t\t\t\t\tcontext: CIQ.UI.getMyContext(this),\n\t\t\t\t\t\toverrides\n\t\t\t\t\t});\n\t\t\t\t\tthis.colorPicker = colorPicker;\n\t\t\t\t\tthis.emitCustomEvent({ effect: \"open\" });\n\t\t\t\t},\n\t\t\t\t// give time for virtual keyboard to close\n\t\t\t\tCIQ.isMobile ? 250 : 0\n\t\t\t);\n\t\t}\n\t}\n}\n\n/**\n * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.Swatch\n */\nSwatch.markup = `\n\tColor Swatch\n\t\n`;\nCIQ.UI.addComponentDefinition(\"cq-swatch\", Swatch);\n\n};\n\n\nlet __js_webcomponents_themeDialog_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\n\n\n\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\nif (!CIQ.ThemeHelper) {\n\tconsole.error(\n\t\t\"themeDialog component requires first activating theme feature.\"\n\t);\n} else {\n\t/**\n\t * @classdesc\n\t *\n\t * This is a custom HtmlElement (Web Component). The tag name is the following:\n\t *\n\t *

        <cq-theme-dialog>

        \n\t *\n\t * Enables creation of custom chart themes.\n\t *\n\t * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n\t * The default markup provided has accessibility features.\n\t *\n\t * See {@link WebComponents.Themes} for more details on menu management for this component.\n\t *\n\t * _**Emitters**_\n\t *\n\t * A custom event will be emitted from the component when it saves a theme.\n\t * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n\t * The details of the event contain the following:\n\t * | property | value |\n\t * | :------- | :---- |\n\t * | emitter | this component |\n\t * | cause | \"useraction\" |\n\t * | effect | \"save\" |\n\t * | action | \"click\" |\n\t * | name | _theme name_ |\n\t * | theme | _theme data_ |\n\t *\n\t * @alias WebComponents.ThemeDialog\n\t * @extends CIQ.UI.DialogContentTag\n\t * @class\n\t * @protected\n\t * @since\n\t * - 9.1.0 Added emitter.\n\t */\n\tclass ThemeDialog extends CIQ.UI.DialogContentTag {\n\t\tadoptedCallback() {\n\t\t\tsuper.adoptedCallback();\n\t\t\tCIQ.UI.flattenInheritance(this, ThemeDialog);\n\t\t\tthis.constructor = ThemeDialog;\n\t\t}\n\n\t\t/**\n\t\t * Applies changes to all charts on the screen.\n\t\t *\n\t\t * @tsmember WebComponents.ThemeDialog\n\t\t */\n\t\tapplyChanges() {\n\t\t\tconst isMultiChart = this.context.topNode.getCharts;\n\t\t\tconst charts = isMultiChart\n\t\t\t\t? this.context.topNode.getCharts()\n\t\t\t\t: [this.context.stx];\n\n\t\t\tcharts.forEach((stx) => {\n\t\t\t\tif (!stx) return;\n\t\t\t\tthis.helper.update(stx);\n\t\t\t\tstx.changeOccurred(\"theme\");\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Closes the theme dialog box.\n\t\t *\n\t\t * @tsmember WebComponents.ThemeDialog\n\t\t */\n\t\tclose() {\n\t\t\tthis.helper.settings = this.revert;\n\t\t\tthis.applyChanges();\n\t\t\tsuper.close();\n\t\t}\n\n\t\t/**\n\t\t * Opens the theme dialog box.\n\t\t *\n\t\t * @param {object} params Dialog box parameters.\n\t\t * @param {CIQ.UI.Context} params.context The chart user interface context.\n\t\t * @param {object} [params.initiatingMenu] The menu that contains the user interface\n\t\t * \t\tcontrol that opened the theme dialog box.\n\t\t * @param {string} [params.themeName] Hint text for the name of the custom theme. Used in\n\t\t * \t\tthe theme name input field of the theme dialog box.\n\t\t *\n\t\t * @since 6.2.0 `basecolor` of mountain chart can be configured with \"mb\" piece.\n\t\t *\n\t\t * @tsmember WebComponents.ThemeDialog\n\t\t */\n\t\topen(params) {\n\t\t\tthis.addDefaultMarkup();\n\t\t\tlet { themeName, initiatingMenu } = params;\n\n\t\t\tthis.initiatingMenu = initiatingMenu;\n\t\t\tthis.context = params.context;\n\t\t\tthis.helper = new CIQ.ThemeHelper({ stx: this.context.stx });\n\t\t\tthis.revert = CIQ.clone(this.helper.settings);\n\n\t\t\tconst configurePiece = (name, obj, field, type) => {\n\t\t\t\tconst piece = this.querySelector(`cq-theme-piece[cq-piece=\"${name}\"]`);\n\t\t\t\tif (!piece) return;\n\t\t\t\tpiece.piece = { obj, field };\n\t\t\t\tif (type == \"color\") {\n\t\t\t\t\tpiece.querySelector(\"cq-swatch\").setColor(obj[field], false);\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst { settings } = this.helper;\n\t\t\tconst candleBarSettings = settings.chartTypes[\"Candle/Bar\"];\n\t\t\tconfigurePiece(\"cu\", candleBarSettings.up, \"color\", \"color\");\n\t\t\tconfigurePiece(\"cd\", candleBarSettings.down, \"color\", \"color\");\n\t\t\tconfigurePiece(\"wu\", candleBarSettings.up, \"wick\", \"color\");\n\t\t\tconfigurePiece(\"wd\", candleBarSettings.down, \"wick\", \"color\");\n\t\t\tconfigurePiece(\"bu\", candleBarSettings.up, \"border\", \"color\");\n\t\t\tconfigurePiece(\"bd\", candleBarSettings.down, \"border\", \"color\");\n\t\t\tconfigurePiece(\"lc\", settings.chartTypes.Line, \"color\", \"color\");\n\t\t\tconfigurePiece(\"mb\", settings.chartTypes.Mountain, \"basecolor\", \"color\");\n\t\t\tconfigurePiece(\"mc\", settings.chartTypes.Mountain, \"color\", \"color\");\n\t\t\tconfigurePiece(\"bg\", settings.chart.Background, \"color\", \"color\");\n\t\t\tconfigurePiece(\"gl\", settings.chart[\"Grid Lines\"], \"color\", \"color\");\n\t\t\tconfigurePiece(\"dd\", settings.chart[\"Grid Dividers\"], \"color\", \"color\");\n\t\t\tconfigurePiece(\"at\", settings.chart[\"Axis Text\"], \"color\", \"color\");\n\n\t\t\tif (!themeName) themeName = \"My Theme\";\n\t\t\tconst input = this.querySelector(\"cq-action input\");\n\t\t\tif (input) input.value = themeName;\n\t\t\tsuper.open(params);\n\t\t}\n\n\t\t/**\n\t\t * Saves the custom theme and closes the theme dialog box.\n\t\t *\n\t\t * @tsmember WebComponents.ThemeDialog\n\t\t */\n\t\tsave() {\n\t\t\tconst input = this.querySelector(\"cq-action input\");\n\t\t\tconst theme = {\n\t\t\t\tsettings: CIQ.clone(this.helper.settings),\n\t\t\t\tname: input && input.value,\n\t\t\t\tbuiltIn: null\n\t\t\t};\n\t\t\tCIQ.UI.contextsForEach(function () {\n\t\t\t\tthis.stx.updateListeners(\"theme\");\n\t\t\t}, this);\n\t\t\tthis.context.topNode.CIQ.UI.Components.filter(\n\t\t\t\t(n) => n.matches(\"cq-themes\") && n.ownerDocument === this.ownerDocument\n\t\t\t).forEach((t) => {\n\t\t\t\ttheme.builtIn = t.currentLoadedBuiltIn;\n\t\t\t\tt.addCustom(theme, this.initiatingMenu);\n\t\t\t});\n\t\t\tif (theme.name) {\n\t\t\t\tthis.emitCustomEvent({\n\t\t\t\t\teffect: \"save\",\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\tname: theme.name,\n\t\t\t\t\t\ttheme: theme.settings\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tsuper.close();\n\t\t}\n\n\t\t/**\n\t\t * Sets a theme property, such as candle color, and applies the new property to all charts\n\t\t * on the screen.\n\t\t *\n\t\t * @param {object} obj Contains the properties of a theme element.\n\t\t * @param {string} field The property for which the new value is set.\n\t\t * @param {string} value The new value for the theme property.\n\t\t *\n\t\t * @tsmember WebComponents.ThemeDialog\n\t\t */\n\t\tsetValue(obj, field, value) {\n\t\t\tobj[field] = value;\n\t\t\tthis.applyChanges();\n\t\t}\n\t}\n\n\t/**\n\t * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n\t *\n\t * @static\n\t * @type {String}\n\t *\n\t * @tsmember WebComponents.ThemeDialog\n\t */\n\tThemeDialog.markup = `\n\t\t\n\t\t\t\n\t\t\t\tCandle Color\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\tCandle Wick\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\tCandle Border\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tLine/Bar Chart\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tMountain Base\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\tMountain Peak\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\tBackground\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\tGrid Lines\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\tDate Dividers\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\tAxis Text\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
        \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
        \n\t\t\t
        \n\t\t
        \n\t`;\n\tCIQ.UI.addComponentDefinition(\"cq-theme-dialog\", ThemeDialog);\n}\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-theme-piece>

        \n *\n * Manages an item in the theme. The item can be a color or a flag.\n *\n * _**Emitters**_\n *\n * A custom event will be emitted from the component when a theme piece is chosen.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"change\" |\n * | action | \"click\" |\n * | name | _theme piece name_ |\n * | value | _theme piece value_ |\n *\n * @alias WebComponents.ThemePiece\n * @extends CIQ.UI.BaseComponent\n * @class\n * @protected\n * @since\n * - 9.1.0 Added emitter.\n */\nclass ThemePiece extends CIQ.UI.BaseComponent {\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, ThemePiece);\n\t}\n\n\t/**\n\t * Sets a flag in the theme for this piece.\n\t * @param {boolean} result Value of flag\n\t *\n\t * @tsmember WebComponents.ThemePiece\n\t */\n\tsetBoolean(result) {\n\t\tCIQ.UI.containerExecute(\n\t\t\tthis,\n\t\t\t\"setValue\",\n\t\t\tthis.piece.obj,\n\t\t\tthis.piece.field,\n\t\t\tresult\n\t\t);\n\t\tthis.emitCustomEvent({\n\t\t\teffect: \"change\",\n\t\t\tdetail: { name: this.getAttribute(\"cq-piece\"), value: result }\n\t\t});\n\t}\n\n\t/**\n\t * Sets the color in the theme for this piece.\n\t * @param {string} color CSS color, or \"Hollow\" or \"No Border\".\n\t *\n\t * @tsmember WebComponents.ThemePiece\n\t */\n\tsetColor(color) {\n\t\tif (color == \"Hollow\" || color == \"No Border\") {\n\t\t\tcolor = \"transparent\";\n\t\t\tthis.querySelector(\"cq-swatch\").setColor(\"transparent\", false);\n\t\t}\n\t\tCIQ.UI.containerExecute(\n\t\t\tthis,\n\t\t\t\"setValue\",\n\t\t\tthis.piece.obj,\n\t\t\tthis.piece.field,\n\t\t\tcolor\n\t\t);\n\t\tthis.emitCustomEvent({\n\t\t\teffect: \"change\",\n\t\t\tdetail: { name: this.getAttribute(\"cq-piece\"), value: color }\n\t\t});\n\t}\n}\n\nCIQ.UI.addComponentDefinition(\"cq-theme-piece\", ThemePiece);\n\n};\n\n\nlet __js_webcomponents_themes_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-themes>

        \n *\n * This web component displays available themes in a menu. It also allows for custom themes to be removed.\n * The menu updates automatically with new themes that are created from the theme dialog.\n *\n * Built in themes are merely the names of classes that will be added to the top element of the UIContext when\n * selected.\n *\n * _**Attributes**_\n *\n * This component observes the following attributes and will change behavior if these attributes are modified:\n * | attribute | description |\n * | :-------- | :---------- |\n * | theme | Name of last theme selected. Note the current theme's attributes may be changed after setting the theme. |\n *\n * _**Emitters**_\n *\n * A custom event will be emitted by the component when a theme is selected or removed.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"select\", \"remove\" |\n * | action | \"click\" |\n * | value | _theme name_ |\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * @alias WebComponents.Themes\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n * @since\n * - 9.1.0 Added emitter.\n */\nclass Themes extends CIQ.UI.ContextTag {\n\tstatic get observedAttributes() {\n\t\treturn [\"theme\"];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tCIQ.UI.makeShadow(this);\n\t}\n\n\tconnectedCallback() {\n\t\tif (!this.isConnected || this.attached) return;\n\t\tsuper.connectedCallback();\n\n\t\tthis.setupShadow();\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, Themes);\n\t\tthis.constructor = Themes;\n\t}\n\n\t/**\n\t * Processes attribute changes. This is called whenever an observed attribute has changed.\n\t *\n\t * @param {string} name Attribute name\n\t * @param {string} oldValue Original attribute value\n\t * @param {string} newValue new Attribute value\n\t *\n\t * @tsmember WebComponents.Themes\n\t */\n\thandlePropertyChange(name, oldValue, newValue) {\n\t\tif (oldValue === newValue) return;\n\t\tthis[name] = newValue;\n\t\tif (name === \"theme\") {\n\t\t\tthis.load(newValue);\n\t\t}\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.Themes\n\t */\n\tsetContext(context) {\n\t\tconst { config } = context;\n\t\tif (!config) return; // grid does not provide config\n\t\tconst {\n\t\t\tchartId: id,\n\t\t\tthemes: { builtInThemes, defaultTheme }\n\t\t} = config;\n\t\tconst nameValueStore =\n\t\t\tconfig.themes.nameValueStore || config.nameValueStore;\n\t\tthis.initialize({ builtInThemes, defaultTheme, nameValueStore, id });\n\t}\n\n\t/**\n\t * Adds a custom theme\n\t *\n\t * @param {object} theme The theme descriptor\n\t * @param {WebComponents.Themes} initiatingMenu The component which initially called ThemeDialog. This is used in order to save the new theme as the current theme.\n\t *\n\t * @tsmember WebComponents.Themes\n\t */\n\taddCustom(theme, initiatingMenu) {\n\t\tthis.params.customThemes[theme.name] = theme;\n\t\tthis.currentThemeSettings = (theme && theme.settings) || theme;\n\t\tif (initiatingMenu === CIQ.climbUpDomTree(this, \"cq-menu\", true)[0])\n\t\t\tthis.currentTheme = theme.name;\n\t\tthis.configureMenu();\n\t\tthis.persist();\n\t}\n\n\t/**\n\t * Create the inner markup of the component. The UI for the component will resmble a menu of choices,\n\t * beginning with the default themes and additionally any custom themes, with the ability to remove any custom theme.\n\t *\n\t * @tsmember WebComponents.Themes\n\t */\n\tconfigureMenu() {\n\t\tconst load = (className) => {\n\t\t\treturn (e) => {\n\t\t\t\tthis.clicked = true;\n\t\t\t\tthis.setAttribute(\"theme\", className);\n\t\t\t\tdelete this.clicked;\n\t\t\t};\n\t\t};\n\t\t[...this.builtInMenu.children].forEach(\n\t\t\t(child) => !child.matches(\"template\") && child.remove()\n\t\t);\n\t\t[...this.customMenu.children].forEach(\n\t\t\t(child) => !child.matches(\"template\") && child.remove()\n\t\t);\n\t\tlet newMenuItem;\n\t\tconst { builtInThemes, customThemes } = this.params;\n\t\tfor (let className in builtInThemes) {\n\t\t\tnewMenuItem = CIQ.UI.makeFromTemplate(this.builtInTemplate)[0];\n\t\t\tnewMenuItem.innerText = builtInThemes[className];\n\t\t\tthis.makeTap(newMenuItem, load(className));\n\t\t\tthis.builtInMenu.appendChild(newMenuItem);\n\t\t}\n\t\tif (this.context.stx.translateUI)\n\t\t\tthis.context.stx.translateUI(this.builtInMenu);\n\n\t\tif (this.customMenu && this.customTemplate) {\n\t\t\tconst removeFn = (themeName) => {\n\t\t\t\treturn (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tthis.emitCustomEvent({\n\t\t\t\t\t\teffect: \"remove\",\n\t\t\t\t\t\tdetail: { value: themeName }\n\t\t\t\t\t});\n\t\t\t\t\tthis.removeTheme(themeName);\n\t\t\t\t};\n\t\t\t};\n\t\t\tfor (let themeName in customThemes) {\n\t\t\t\tnewMenuItem = CIQ.UI.makeFromTemplate(this.customTemplate)[0];\n\t\t\t\tnewMenuItem.querySelector(\"[label]\").innerText = themeName;\n\t\t\t\tthis.makeTap(newMenuItem, load(themeName));\n\t\t\t\tconst close = newMenuItem.querySelector(\".close\");\n\t\t\t\tif (close) {\n\t\t\t\t\tclose.setAttribute(\"keyboard-selectable-child\", \"\");\n\t\t\t\t\tCIQ.UI.stxtap(close, removeFn(themeName));\n\t\t\t\t}\n\t\t\t\tthis.customMenu.appendChild(newMenuItem);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Initialize the web component\n\t * @param {Object} params Parameters\n\t * @param {Object} [params.builtInThemes] Object map of built-in theme names, display names\n\t * @param {Object} [params.defaultTheme] The default built-in theme to use\n\t * @param {Object} [params.nameValueStore] A {@link CIQ.NameValueStore} object for fetching and saving theme state\n\t * @param {string} [params.id] id which can be used to disambiguate when multiple charts are on the screen\n\t *\n\t * @tsmember WebComponents.Themes\n\t */\n\tinitialize(params) {\n\t\tif (this.initialized) return;\n\t\tthis.initialized = true;\n\n\t\tthis.addDefaultMarkup();\n\t\tthis.selectTemplates(this);\n\n\t\tthis.params = {};\n\t\tif (params) this.params = params;\n\t\tconst isConstructor = (check) => typeof check === \"function\";\n\t\tCIQ.ensureDefaults(this.params, {\n\t\t\tcustomThemes: {},\n\t\t\tbuiltInThemes: {},\n\t\t\tnameValueStore: CIQ.NameValueStore && new CIQ.NameValueStore()\n\t\t});\n\t\tif (this.params.id) this.id = \"themes_\" + this.params.id;\n\n\t\tlet { nameValueStore } = this.params;\n\t\tif (nameValueStore) {\n\t\t\tif (isConstructor(nameValueStore))\n\t\t\t\tnameValueStore = this.params.nameValueStore = new nameValueStore();\n\t\t\t// Retrieve any custom themes the user has created\n\t\t\tnameValueStore.get(\"CIQ.Themes.prototype.custom\", (err, result) => {\n\t\t\t\tif (!err && result) {\n\t\t\t\t\tthis.params.customThemes = result;\n\t\t\t\t}\n\t\t\t\t// Set the current theme to the last one selected by user\n\t\t\t\tnameValueStore.get(\n\t\t\t\t\tthis.id + \"CIQ.Themes.prototype.current\",\n\t\t\t\t\t(err, result) => {\n\t\t\t\t\t\tif (!err && result && result.theme) {\n\t\t\t\t\t\t\tthis.setAttribute(\"theme\", result.theme);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.setAttribute(\"theme\", this.params.defaultTheme);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.configureMenu();\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t\t} else {\n\t\t\tthis.loadTheme(this.theme || this.params.defaultTheme);\n\t\t}\n\t}\n\n\t/**\n\t * Loads a theme.\n\t *\n\t * @param {string} className Name of theme, for example, \"ciq-night\".\n\t *\n\t * @private\n\t *\n\t * @tsmember WebComponents.Themes\n\t */\n\tload(className) {\n\t\tif (!this.context) return;\n\t\tthis.loadTheme(className);\n\t\tthis.emitCustomEvent({\n\t\t\teffect: \"select\",\n\t\t\taction: this.clicked ? \"click\" : null,\n\t\t\tdetail: { value: className }\n\t\t});\n\t\tif (this.params.callback) {\n\t\t\tthis.params.callback({ theme: this.currentTheme });\n\t\t}\n\t\tthis.persist(\"current\");\n\t}\n\n\t/**\n\t * Loads a built-in theme.\n\t *\n\t * @param {string} className Name of built-in theme, for example, \"ciq-night\". Built-in themes are just classes added to the component.\n\t *\n\t * @tsmember WebComponents.Themes\n\t */\n\tloadBuiltIn(className) {\n\t\tif (this.currentLoadedBuiltIn) {\n\t\t\tthis.removeThemeClass(this.currentLoadedBuiltIn);\n\t\t}\n\t\tthis.addThemeClass(className);\n\t\tthis.currentLoadedBuiltIn = this.currentTheme = className;\n\t\tthis.reinitializeChart();\n\t}\n\n\t/**\n\t * Loads a custom theme.\n\t *\n\t * @param {string} themeName Name of custom theme, which user used to save the theme when it was first created.\n\t *\n\t * @tsmember WebComponents.Themes\n\t */\n\tloadCustom(themeName) {\n\t\tif (this.currentLoadedBuiltIn) {\n\t\t\tthis.removeThemeClass(this.currentLoadedBuiltIn);\n\t\t}\n\t\tconst theme = this.params.customThemes[themeName];\n\t\tif (theme.builtIn) this.addThemeClass(theme.builtIn);\n\t\tthis.currentLoadedBuiltIn = theme.builtIn;\n\t\tthis.currentTheme = theme.name;\n\t\tthis.reinitializeChart(theme);\n\t}\n\n\t/**\n\t * Loads a theme.\n\t *\n\t * @param {string} themeName Name of theme to load.\n\t *\n\t * @tsmember WebComponents.Themes\n\t */\n\tloadTheme(themeName) {\n\t\tif (this.params.customThemes[themeName]) this.loadCustom(themeName);\n\t\telse if (this.params.builtInThemes[themeName]) this.loadBuiltIn(themeName);\n\t\telse this.loadBuiltIn(this.params.defaultTheme);\n\t}\n\n\t/**\n\t * READ ONLY. All context containers on the multichart.\n\t *\n\t * @type {HTMLElement[]}\n\t *\n\t * @tsmember WebComponents.Themes\n\t * @tsdeclaration\n\t * const contextContainers : HTMLElement[]\n\t */\n\tget contextContainers() {\n\t\tconst topEl = this.context.topNode;\n\t\treturn [topEl].concat([...topEl.querySelectorAll(\"cq-context\")]);\n\t}\n\n\t/**\n\t * Adds a theme class to the elements in the DOM which need it.\n\t *\n\t * @param {string} name Name of theme to add.\n\t *\n\t * @tsmember WebComponents.Themes\n\t */\n\taddThemeClass(name) {\n\t\tconst addClass = (container) => {\n\t\t\tcontainer.currentTheme = name;\n\t\t\tcontainer.classList.add(name);\n\t\t\tconst { context } = container.CIQ.UI;\n\t\t\tconst channel =\n\t\t\t\t(context.config.channels || {}).componentClass ||\n\t\t\t\t\"channel.componentClass\";\n\t\t\tthis.channelWrite(channel, { [name]: \"add\" }, context.stx);\n\t\t\t//TODO see if we still need this\n\t\t\t//this.context.topNode.setCurrentThemeClass = (container, stx) => {\n\t\t\t//\tstx.setThemeSettings(this.currentThemeSettings);\n\t\t\t//}\n\t\t};\n\t\tthis.contextContainers.forEach(addClass);\n\t\tthis.context.topNode.setCurrentThemeClass = addClass;\n\t}\n\n\t/**\n\t * Removes a theme class from the elements in the DOM.\n\t *\n\t * @param {string} name Name of theme to remove.\n\t *\n\t * @tsmember WebComponents.Themes\n\t */\n\tremoveThemeClass(name) {\n\t\tconst removeClass = (container) => {\n\t\t\tcontainer.classList.remove(name);\n\t\t\tconst { context } = container.CIQ.UI;\n\t\t\tconst channel =\n\t\t\t\t(context.config.channels || {}).componentClass ||\n\t\t\t\t\"channel.componentClass\";\n\t\t\tthis.channelWrite(channel, { [name]: \"remove\" }, context.stx);\n\t\t};\n\t\tthis.contextContainers.forEach(removeClass);\n\t\tthis.context.topNode.setCurrentThemeClass = null;\n\t\tthis.context.topNode.currentTheme = null;\n\t}\n\n\t/**\n\t * Adds a new custom theme to the component.\n\t *\n\t * @deprecated As of 9.1.0. Adding a new theme to this component is now achieved via {@link WebComponents.Themes#addCustom}.\n\t *\n\t * @tsmember WebComponents.Themes\n\t */\n\tnewTheme() {\n\t\tconst { context } = this;\n\t\tif (context.config) {\n\t\t\tthis.channelWrite(\n\t\t\t\tcontext.config.channels.dialog,\n\t\t\t\t{ type: \"theme\", params: { context, initiatingMenu: this } },\n\t\t\t\tcontext.stx\n\t\t\t);\n\t\t} else {\n\t\t\tthis.ownerDocument\n\t\t\t\t.querySelector(\"cq-theme-dialog\")\n\t\t\t\t.open({ context: this.context, initiatingMenu: this });\n\t\t}\n\t}\n\n\t/**\n\t * Sets storage for the themes.\n\t *\n\t * @param {string} [which] Type of theme to store. Valid values are `current` or `custom`. If left blank. both types will store.\n\t *\n\t * @tsmember WebComponents.Themes\n\t */\n\tpersist(which) {\n\t\tif (!this.params.nameValueStore) return;\n\t\tif (!which || which == \"current\")\n\t\t\tthis.params.nameValueStore.set(this.id + \"CIQ.Themes.prototype.current\", {\n\t\t\t\ttheme: this.currentTheme\n\t\t\t});\n\t\tif (!which || which == \"custom\")\n\t\t\tthis.params.nameValueStore.set(\n\t\t\t\t\"CIQ.Themes.prototype.custom\",\n\t\t\t\tthis.params.customThemes\n\t\t\t);\n\t}\n\n\t/**\n\t * Removes a custom theme from the component.\n\t *\n\t * @param {string} themeName Name of theme to remove.\n\t *\n\t * @tsmember WebComponents.Themes\n\t */\n\tremoveTheme(themeName) {\n\t\tlet saved = false;\n\t\tthis.context.topNode.CIQ.UI.Components.filter(\n\t\t\t(n) => n.matches(\"cq-themes\") && n.ownerDocument === this.ownerDocument\n\t\t).forEach((t) => {\n\t\t\tdelete t.params.customThemes[themeName];\n\t\t\tt.configureMenu();\n\t\t\tif (!saved) {\n\t\t\t\tt.persist();\n\t\t\t\tsaved = true;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Copies the component's sub-elements into its properties.\n\t *\n\t * @private\n\t *\n\t * @tsmember WebComponents.Themes\n\t */\n\tselectTemplates() {\n\t\tif (this.builtInMenu) return;\n\t\tthis.builtInMenu = this.root.querySelector(\"div[themes-builtin]\");\n\t\tthis.builtInTemplate = this.builtInMenu.querySelector(\"template\");\n\t\tthis.customMenu = this.root.querySelector(\"div[themes-custom]\");\n\t\tthis.customTemplate = this.customMenu.querySelector(\"template\");\n\t}\n\n\t/**\n\t * Resets the chart's themes when a new theme is chosen.\n\t *\n\t * @private\n\t * @param {object} theme\n\t *\n\t * @tsmember WebComponents.Themes\n\t */\n\treinitializeChart(theme) {\n\t\tconst isMultiChart = this.context.topNode.getCharts;\n\t\tconst { styles } = this.context.topNode;\n\n\t\tif (styles) {\n\t\t\tObject.values(styles).forEach((style) => {\n\t\t\t\tfor (let key in style) {\n\t\t\t\t\tdelete style[key];\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tthis.context.topNode.styles = {};\n\t\t}\n\n\t\tconst charts = isMultiChart\n\t\t\t? this.context.topNode.getCharts()\n\t\t\t: [this.context.stx];\n\n\t\tthis.currentThemeSettings = (theme && theme.settings) || theme;\n\n\t\tcharts.forEach((stx) => {\n\t\t\tif (stx && stx.setThemeSettings) {\n\t\t\t\tstx.setThemeSettings(theme ? theme.settings : null);\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.Themes\n */\nThemes.markup = `\n\t\t
        \n\t\t\t
        \n\t\t\t\t\n\t\t\t
        \n\t\t\t
        \n\t\t\t\t\n\t\t\t
        \n\t\t
        \n\t`;\nCIQ.UI.addComponentDefinition(\"cq-themes\", Themes);\n\n};\n\n\nlet __js_webcomponents_timezoneDialog_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\n\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n// this check is a heuristic for determining whether standard.js has been loaded\nif (!CIQ.timeZoneMap) {\n\tconsole.error(\n\t\t\"timezoneDialog component requires first activating timezone feature.\"\n\t);\n} else {\n\t/**\n\t * @classdesc\n\t *\n\t * This is a custom HtmlElement (Web Component). The tag name is the following:\n\t *\n\t *

        <cq-timezone-dialog>

        \n\t *\n\t * Provides content for timezone settings dialog.\n\t *\n\t * _**Emitters**_\n\t *\n\t * A custom event will be emitted from the component when it changes the timezone, or removes the current setting.\n\t * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n\t * The details of the event contain the following:\n\t * | property | value |\n\t * | :------- | :---- |\n\t * | emitter | this component |\n\t * | cause | \"useraction\" |\n\t * | effect | \"change\", \"remove\" |\n\t * | action | \"click\" |\n\t * | zone | _timezone_ |\n\t *\n\t * @alias WebComponents.TimezoneDialog\n\t * @extends CIQ.UI.DialogContentTag\n\t * @class\n\t * @protected\n\t * @since\n\t * - 9.1.0 Added emitter.\n\t */\n\tclass TimezoneDialog extends CIQ.UI.DialogContentTag {\n\t\tadoptedCallback() {\n\t\t\tsuper.adoptedCallback();\n\t\t\tCIQ.UI.flattenInheritance(this, TimezoneDialog);\n\t\t\tthis.constructor = TimezoneDialog;\n\t\t}\n\n\t\t/**\n\t\t * Opens the dialog and sets the timezone provided by the user.\n\t\t *\n\t\t * @param {Object} [params] Contains the chart context.\n\t\t * @param {CIQ.UI.Context} [params.context] A context to set for the dialog. See\n\t\t * \t\t{@link CIQ.UI.DialogContentTag#setContext}.\n\t\t *\n\t\t * @tsmember WebComponents.TimezoneDialog\n\t\t */\n\t\topen(params) {\n\t\t\tthis.addDefaultMarkup();\n\t\t\tsuper.open(params);\n\t\t\tthis.context = params.context;\n\t\t\tconst { stx } = this.context;\n\n\t\t\tconst displayZone = () => {\n\t\t\t\tconst currentUserTimeZone = this.querySelector(\".currentUserTimeZone\");\n\t\t\t\tif (stx.displayZone) {\n\t\t\t\t\tlet fullZone = stx.displayZone;\n\t\t\t\t\tfor (let tz in CIQ.timeZoneMap) {\n\t\t\t\t\t\tif (CIQ.timeZoneMap[tz] === stx.displayZone) fullZone = tz;\n\t\t\t\t\t}\n\t\t\t\t\tcurrentUserTimeZone.innerText =\n\t\t\t\t\t\tstx.translateIf(\"Current Timezone is\") +\n\t\t\t\t\t\t\" \" +\n\t\t\t\t\t\tstx.translateIf(fullZone);\n\t\t\t\t\tbutton.style.display = \"\";\n\t\t\t\t} else {\n\t\t\t\t\tcurrentUserTimeZone.innerText = stx.translateIf(\n\t\t\t\t\t\t\"Your timezone is your current location\"\n\t\t\t\t\t);\n\t\t\t\t\tbutton.style.display = \"none\";\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst setTimezone = (zone) => {\n\t\t\t\treturn (e) => {\n\t\t\t\t\tconst translatedZone = CIQ.timeZoneMap[zone];\n\t\t\t\t\tCIQ.ChartEngine.defaultDisplayTimeZone = translatedZone;\n\t\t\t\t\tstx.setTimeZone(stx.dataZone, translatedZone);\n\t\t\t\t\tif (stx.chart.symbol) stx.draw();\n\t\t\t\t\tdisplayZone();\n\t\t\t\t\tthis.emitCustomEvent({\n\t\t\t\t\t\teffect: \"change\",\n\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\tzone: translatedZone\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tconst ul = this.querySelector(\"ul, .ciq-ul\");\n\t\t\tconst button = this.querySelector(\".ciq-btn\");\n\t\t\tif (!this.template) {\n\t\t\t\tthis.template = ul.querySelector(\"li.timezoneTemplate\").cloneNode(true);\n\t\t\t}\n\n\t\t\tul.innerHTML = \"\";\n\t\t\tfor (let key in CIQ.timeZoneMap) {\n\t\t\t\tconst li = this.template.cloneNode(true);\n\t\t\t\tli.innerHTML = stx.translateIf(key);\n\t\t\t\tCIQ.safeClickTouch(li, setTimezone(key).bind(this));\n\t\t\t\tul.append(li);\n\t\t\t}\n\n\t\t\tdisplayZone();\n\t\t}\n\n\t\t/**\n\t\t * Removes any user-selected time zone settings, and sets the time zone to the user's\n\t\t * current location.\n\t\t *\n\t\t * @tsmember WebComponents.TimezoneDialog\n\t\t */\n\t\tremoveTimezone() {\n\t\t\tCIQ.ChartEngine.defaultDisplayTimeZone = null;\n\t\t\tconst { stx } = this.context;\n\t\t\tstx.displayZone = null;\n\t\t\tstx.setTimeZone();\n\n\t\t\tif (stx.displayInitialized) stx.draw();\n\n\t\t\tthis.emitCustomEvent({\n\t\t\t\teffect: \"remove\"\n\t\t\t});\n\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\t/**\n\t * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n\t *\n\t * @static\n\t * @type {String}\n\t *\n\t * @tsmember WebComponents.TimezoneDialog\n\t */\n\tTimezoneDialog.markup = `\n\t\t

        \n\t\t
        \n\t\t\t
        Use My Current Location
        \n\t\t
        \n\t\t
        \n\t\t\t\n\t\t\t\t
      • \n\t\t\t
        \n\t\t
        \n\t\t
        (Scroll for more options)
        \n\t`;\n\tCIQ.UI.addComponentDefinition(\"cq-timezone-dialog\", TimezoneDialog);\n}\n\n};\n\n\nlet __js_webcomponents_toggle_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-toggle>

        \n *\n * When tapped/clicked, this component will toggle through different states. Each state represents a value of an object's member;\n * for example, the object could be the chart's layout or preferences, while the member could be a property of these objects.\n * If the `member` attribute of the toggle is set, the toggle state is bound to that member, meaning, if the underlying member value\n * is changed, the toggle will change state to reflect that.\n *\n * Use [registerCallback]{@link WebComponents.Toggle#registerCallback} to receive a callback\n * every time the toggle changes. When a callback is registered, any automatic class changes are\n * bypassed.\n *\n * To bind the component's configuration, set its `config` attribute to an object in the {@link CIQ.UI.Context}.config.toggles object.\n * Using a configuration allows easy customization of callback functions. See example below.\n *\n * _**Attributes**_\n *\n * This component observes the following attributes and will change behavior if these attributes are modified:\n * | attribute | description |\n * | :------------- | :---------- |\n * | action | If set to \"class\" (the default), will set/unset the \"active\" class on the component when executing callbacks. |\n * | config | Key pointing to a configuration file entry which specifies the callback functions. |\n * | help-id | A key to the correct help text in CIQ.Help.Content. |\n * | icon | Class name for image to use for the toggle. |\n * | member | Object member to observe. If not provided, then callbacks are used exclusively. |\n * | multichart-distribute | Option for multichart context. Distributes object member change to all charts. |\n * | reader | Accessibility text when focused by a screen reader. |\n * | stxtap | Custom click handling which overrides the default toggling functionality. |\n * | toggles | A comma-separated list of values which are toggled through with each click. The list can include \"null\". Stringified booleans and \"null\" are converted to their primitive values. All other values are passed to the Number constructor. If the result is a number (not NaN), the number is used. Otherwise the value is left as a string. |\n * | toggle-classes | A comma-separated list of classes associated with the toggle setting. If a setting requires multiple classes, they need to be separated with spaces. |\n * | tooltip | Text for the tooltip which appears when hovering over the component. |\n * | value | The current state of the toggle. |\n *\n * In addition, the following attributes are also supported:\n * | attribute | description |\n * | :------------ | :---------- |\n * | active-class | A class name to add to a binary state toggle if it is in an active state. |\n *\n * _**Emitters**_\n *\n * A custom event will be emitted by the component when it is clicked.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"toggle\" |\n * | action | \"click\" |\n * | value | _value_ |\n *\n * `cause` and `action` are set only when the value is changed as a direct result of clicking on the component.\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * @example Toggle bound to layout.crosshair:\n * \n * @example Registering a callback function directly:\n * document.querySelector(\"cq-toggle\").registerCallback(function(value){\n * console.log(\"current value is \" + value);\n * if(value != false) this.classList.add(\"active\");\n * });\n * @example Registering a callback function via the config:\n * // set the toggle component's config attribute to \"example\"\n * stxx.uiContext.config.toggles.example.callbacks = [function (value) {\n * console.log(\"current value is \" + value);\n * if(value != false) this.classList.add(\"active\");\n * }];\n *\n * @alias WebComponents.Toggle\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n * @since\n * - 2015\n * - 9.1.0 Observes attributes. Added emitter.\n */\nclass Toggle extends CIQ.UI.ContextTag {\n\tstatic get observedAttributes() {\n\t\treturn [\n\t\t\t\"action\",\n\t\t\t\"config\",\n\t\t\t\"help-id\",\n\t\t\t\"icon\",\n\t\t\t\"member\",\n\t\t\t\"multichart-distribute\",\n\t\t\t\"reader\",\n\t\t\t\"stxtap\",\n\t\t\t\"toggles\",\n\t\t\t\"toggle-classes\",\n\t\t\t\"tooltip\",\n\t\t\t\"value\"\n\t\t];\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tCIQ.UI.makeShadow(this);\n\t\tthis.defaultParams = {\n\t\t\taction: \"class\",\n\t\t\tactiveClass: \"active\",\n\t\t\tmember: null,\n\t\t\ttoggles: \"\",\n\t\t\tclasses: {},\n\t\t\tcallbacks: []\n\t\t};\n\t\tObject.assign(this, this.defaultParams);\n\t}\n\n\tconnectedCallback() {\n\t\tif (!this.isConnected || this.attached) return;\n\t\tsuper.connectedCallback();\n\t\tif (this.isShadowComponent && this.children.length) {\n\t\t\twhile (this.children.length) {\n\t\t\t\tthis.root.appendChild(this.firstChild);\n\t\t\t}\n\t\t}\n\t\tthis.markup = this.trimInnerHTMLWhitespace();\n\t\tthis.usingMarkup = !!this.markup.match(/\\{\\{(.{1,20}?)\\}\\}/g);\n\n\t\tconst activeClass = this.getAttribute(\"active-class\");\n\t\tif (activeClass) this.activeClass = activeClass;\n\n\t\tthis.reset();\n\t\tthis.setupShadow();\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, Toggle);\n\t\tthis.constructor = Toggle;\n\t}\n\n\tdisconnectedCallback() {\n\t\tif (this.doNotDisconnect) return;\n\t\tthis.disconnectObservable();\n\t\tsuper.disconnectedCallback();\n\t}\n\n\t/**\n\t * Processes attribute changes. This is called whenever an observed attribute has changed.\n\t *\n\t * @param {string} name Attribute name\n\t * @param {string} oldValue Original attribute value\n\t * @param {string} newValue new Attribute value\n\t *\n\t * @tsmember WebComponents.Toggle\n\t */\n\thandlePropertyChange(name, oldValue, newValue) {\n\t\tif (oldValue === newValue) return;\n\t\tthis[name] = newValue;\n\t\tif (name === \"value\") {\n\t\t\tthis.set(this.splitAndNormalize(newValue)[0]);\n\t\t\tthis.postProcess();\n\t\t\treturn;\n\t\t}\n\t\tif (name === \"stxtap\") CIQ.UI.BaseComponent.buildReverseBindings(this.root);\n\t\telse if (this.usingMarkup) {\n\t\t\tthis.reset();\n\t\t} else {\n\t\t\t// do nothing when using predefined content\n\t\t}\n\t}\n\n\t/**\n\t * Sets up an observable if there is a `member` supplied in the attributes. Will remove any existing observable.\n\t * The observable information is stored in the component instance's `observeInfo` property.\n\t * If there is no member supplied in the attributes, you can still have the component observe\n\t * an object's member manually by using the {@link CIQ.UI.observeProperty} function, but you should also\n\t * set the `observeInfo` property so a proper cleanup can be performed when the component is disconnected.\n\t *\n\t * @example\n\t * CIQ.UI.observeProperty(\"headsUp\", stxx.layout, listenerFunction);\n\t * this.observeInfo = { member: \"headsUp\", obj: stxx.layout, listener: listenerFunction };\n\t *\n\t * @tsmember WebComponents.Toggle\n\t */\n\tconnectObservable() {\n\t\tconst { member, obj, listener } = this;\n\t\tif (member) {\n\t\t\tthis.disconnectObservable();\n\t\t\tthis.listener = () => {\n\t\t\t\tthis.updateFromBinding();\n\t\t\t};\n\t\t\tCIQ.UI.observeProperty(member, obj, listener);\n\t\t\tthis.observeInfo = { member, obj, listener };\n\t\t}\n\t}\n\n\t/**\n\t * Removes any observable set up by {@link WebComponents.Toggle#connectObservable}.\n\t *\n\t * @tsmember WebComponents.Toggle\n\t */\n\tdisconnectObservable() {\n\t\tif (!this.observeInfo) return;\n\t\tconst { member, obj, listener } = this.observeInfo;\n\t\tCIQ.UI.unobserveProperty(member, obj, listener);\n\t}\n\n\t/**\n\t * Initializes the handler when the toggle is clicked. Called once when the context becomes available.\n\t *\n\t * @tsmember WebComponents.Toggle\n\t */\n\tbegin() {\n\t\tthis.connectObservable();\n\t\tif (this.tapInitialized) return;\n\t\tthis.lastTap = {};\n\t\tthis.tapInitialized = true;\n\t\t// Use only the stxtap attribute action if assigned as running the stxtap function will remove attributed binding\n\t\tif (this.getAttribute(\"stxtap\")) return;\n\t\tCIQ.UI.stxtap(this, (e) => {\n\t\t\te.stopPropagation();\n\t\t\tconst tapTime = Date.now();\n\t\t\tif (\n\t\t\t\tthis.lastTap.target !== e.target &&\n\t\t\t\ttapTime - this.lastTap.tapTime < 200\n\t\t\t)\n\t\t\t\treturn; // prevent \"double click\" caused by pressing Enter\n\t\t\tthis.lastTap = { tapTime, target: e.target };\n\t\t\tthis.clicked = true;\n\t\t\tconst isInDialog = CIQ.climbUpDomTree(e.target, \"cq-dialog\", true)[0];\n\t\t\tconst isInMenu = CIQ.climbUpDomTree(e.target, \"cq-menu\", true)[0];\n\t\t\tthis.uiManager.closeMenu(\n\t\t\t\tnull,\n\t\t\t\t\"cq-color-picker\" +\n\t\t\t\t\t(isInDialog ? \"\" : \",cq-dialog\") +\n\t\t\t\t\t(isInMenu ? \"\" : \",cq-menu\")\n\t\t\t); // close all menus, dialogs or color pickers, unless we're the child of one (cascading)\n\t\t\tlet toggles = this.toggles || this.defaultParams.toggles;\n\t\t\tif (toggles) {\n\t\t\t\ttoggles = this.splitAndNormalize(toggles);\n\t\t\t\t// Cycle through each field in the array with each tap\n\t\t\t\tlet i;\n\t\t\t\tfor (i = 0; i < toggles.length; i++) {\n\t\t\t\t\tconst toggle = toggles[i];\n\t\t\t\t\tif (this.value == toggle) {\n\t\t\t\t\t\tif (i < toggles.length - 1) this.set(toggles[i + 1]);\n\t\t\t\t\t\telse this.set(toggles[0]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (i == toggles.length) {\n\t\t\t\t\t// default to first item in toggle\n\t\t\t\t\tthis.set(toggles[0]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.set(!this.value);\n\t\t\t}\n\t\t\tdelete this.clicked;\n\t\t});\n\t}\n\n\t/**\n\t * sets the layout or preferences in storage when the toggle is toggled.\n\t * @private\n\t *\n\t * @tsmember WebComponents.Toggle\n\t */\n\tpostProcess() {\n\t\tif (!this.context) return;\n\n\t\tthis.emitCustomEvent({\n\t\t\taction: this.clicked ? \"click\" : null,\n\t\t\teffect: \"toggle\",\n\t\t\tdetail: { value: this.value }\n\t\t});\n\n\t\tconst { stx } = this.context;\n\t\tstx.draw();\n\t\tconst { obj } = this;\n\t\tif (obj === stx.layout) stx.changeOccurred(\"layout\");\n\t\tif (obj === stx.preferences) stx.changeOccurred(\"preferences\");\n\t}\n\n\t/**\n\t * Formats the default markup, replacing any variables with the actual values provided by the attributes.\n\t *\n\t * @return {string} The prepared markup\n\t *\n\t * @tsmember WebComponents.Toggle\n\t */\n\tgetMarkup() {\n\t\tlet markup = this.markup || this.constructor.markup;\n\t\tconst names = markup.match(/\\{\\{(.{1,20}?)\\}\\}/g);\n\t\tif (names)\n\t\t\tnames.forEach((name) => {\n\t\t\t\tconst key = name.substring(2, name.length - 2);\n\t\t\t\tif ([\"help_class\", \"tooltip_class\"].includes(key)) return;\n\t\t\t\tconst attr = this[key];\n\t\t\t\tif (attr == null) {\n\t\t\t\t\tif (key === \"help-id\")\n\t\t\t\t\t\tmarkup = markup.replace(/\\{\\{help_class\\}\\}/g, \"hidden\");\n\t\t\t\t\telse if (key === \"icon\") markup = markup.replace(name, \"hidden\");\n\t\t\t\t\telse if (key === \"tooltip\")\n\t\t\t\t\t\tmarkup = markup.replace(\"{{tooltip_class}}\", \"hidden\");\n\t\t\t\t\telse markup = markup.replace(name, \"\");\n\t\t\t\t} else {\n\t\t\t\t\tmarkup = markup.replace(name, attr || \"\");\n\t\t\t\t\tif (key === \"tooltip\")\n\t\t\t\t\t\tmarkup = markup.replace(\"{{tooltip_class}}\", \"\");\n\t\t\t\t\telse if (key === \"help-id\")\n\t\t\t\t\t\tmarkup = markup.replace(/\\{\\{help_class\\}\\}/g, \"\");\n\t\t\t\t}\n\t\t\t});\n\t\treturn markup;\n\t}\n\n\t/**\n\t * Adds a callback function to the toggle.\n\t *\n\t * @param {function} fc The callback function to add to the toggle. The function accepts the\n\t * \t\tcurrent value of the toggle as a parameter. The value of `this` within the callback\n\t * \t\tfunction is the toggle component.\n\t * @param {boolean} immediate A flag that indicates whether to immediately call the callback\n\t * \t\tfunction after it has been registered with the toggle.\n\t *\n\t * @since 2015\n\t *\n\t * @tsmember WebComponents.Toggle\n\t */\n\tregisterCallback(fc, immediate) {\n\t\tif (immediate !== false) immediate = true;\n\t\tthis.callbacks.push(fc);\n\t\tif (immediate) fc.call(this, this.value);\n\t}\n\n\t/**\n\t * Formats the attribute values.\n\t * By default, anything in the toggle attribute will be a string, which can cause issues when observing a member because \"true\"!==true.\n\t * This function will set \"true\", \"false\", and \"null\" to be their native alternatives instead of strings.\n\t * It also checks to see if it can cast the number and if it is not NaN it changes it to be a number.\n\t * Be aware this will change an empty string to 0 but you shouldn't be setting an empty string!\n\t *\n\t * @param {any} input Input string, possibly comma-delimited\n\t * @return {any[]} Formatted results, in an array and in their assumed type\n\t *\n\t * @tsmember WebComponents.Toggle\n\t */\n\tsplitAndNormalize(input) {\n\t\tif (typeof input === \"string\") {\n\t\t\tinput = input.split(\",\");\n\t\t\tinput.forEach((piece, i) => {\n\t\t\t\tif (piece === \"null\") piece = null;\n\t\t\t\telse if (piece === \"true\" || piece === \"false\")\n\t\t\t\t\tpiece = piece === \"true\";\n\t\t\t\telse if (!isNaN(Number(piece))) piece = Number(piece);\n\t\t\t\tinput[i] = piece;\n\t\t\t});\n\t\t} else {\n\t\t\tinput = [input];\n\t\t}\n\t\treturn input;\n\t}\n\n\t/**\n\t * Called when an attribute changes, will regenerate the toggle component,\n\t * updating whatever needs to be updated as a result of the attribute change.\n\t *\n\t * @tsmember WebComponents.Toggle\n\t */\n\treset() {\n\t\tconst { children } = this.root;\n\t\tif (!children.length || this.usingMarkup) {\n\t\t\tthis.usingMarkup = true;\n\t\t\tif (children.length) {\n\t\t\t\t[...children].forEach((child) => {\n\t\t\t\t\tif (![\"LINK\", \"STYLE\"].includes(child.tagName)) child.remove();\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst div = document.createElement(\"div\");\n\t\t\tthis.addDefaultMarkup(div, this.getMarkup());\n\t\t}\n\t\tif (!this.value && this.value !== 0) this.value = false; // if it were set to true before, leave it\n\t\tconst cfgAttr = this.config;\n\t\tif (cfgAttr) {\n\t\t\tconst helper = CIQ.UI.BaseComponent.getHelper(this, \"ToggleConfig\");\n\t\t\tif (helper && helper[cfgAttr] && helper[cfgAttr].callbacks) {\n\t\t\t\tthis.callbacks = [];\n\t\t\t\thelper[cfgAttr].callbacks.forEach(function (cb) {\n\t\t\t\t\tif (typeof cb === \"object\") {\n\t\t\t\t\t\tthis.registerCallback(cb.fn, cb.immediate);\n\t\t\t\t\t} else this.registerCallback(cb);\n\t\t\t\t}, this);\n\t\t\t}\n\t\t}\n\t\tif (this.context) {\n\t\t\tthis.obj = this.context.stx.layout;\n\t\t\tconst { contextConfig } = this;\n\t\t\tlet member = this.originalMember || this.member;\n\t\t\tif (\n\t\t\t\tcontextConfig &&\n\t\t\t\tcontextConfig.channels &&\n\t\t\t\tcontextConfig.channels[member]\n\t\t\t) {\n\t\t\t\tmember = contextConfig.channels[member];\n\t\t\t}\n\t\t\tif (member && member.indexOf(\".\") !== -1) {\n\t\t\t\tconst m = member.split(\".\");\n\t\t\t\tthis.obj = this.context.stx[m[0]];\n\t\t\t\tif (typeof this.obj === \"undefined\") {\n\t\t\t\t\tthis.context.stx[m[0]] = this.obj = {};\n\t\t\t\t\tthis.originalMember = member;\n\t\t\t\t}\n\t\t\t\tmember = m[1];\n\t\t\t}\n\t\t\tif (member) this.objectsMember = member;\n\t\t\tlet toggles = this.toggles || this.defaultParams.toggles;\n\t\t\tif (toggles) {\n\t\t\t\ttoggles = this.splitAndNormalize(toggles);\n\t\t\t}\n\t\t\t// associate class with toggle setting\n\t\t\tconst toggleClasses = this[\"toggle-classes\"] || \"\";\n\n\t\t\t// extract an array of class settings from comma or comma-space separated class list\n\t\t\tconst toggleClassArr = toggleClasses.split(/, |,/);\n\n\t\t\t// find classes to be cleared when new setting is applied,\n\t\t\t// taking in account that a setting can have more than one space separated class assigned\n\t\t\tthis.removeClasses = toggleClasses.split(/, | |,/).filter((el) => el);\n\n\t\t\t// associate each setting with applicable class(es)\n\t\t\tthis.classes = (toggles || []).reduce(function (\n\t\t\t\tclassLookup,\n\t\t\t\tsetting,\n\t\t\t\tindex\n\t\t\t) {\n\t\t\t\tclassLookup[setting] = toggleClassArr[index].split(/ /);\n\t\t\t\treturn classLookup;\n\t\t\t}, {});\n\n\t\t\t// set default value if object[member] is undefined\n\t\t\tif (member && this.obj[member] === undefined) {\n\t\t\t\tconst defaultValue =\n\t\t\t\t\ttoggles && toggles.length ? toggles[toggles.length - 1] : false;\n\t\t\t\tthis.obj[member] = defaultValue;\n\t\t\t}\n\t\t}\n\t\tthis.connectObservable();\n\t\tthis.setAriaPressed();\n\t}\n\n\t/**\n\t * Called when the toggle is activated through a click or change of the `value` attribute,\n\t * will update whatever needs to be updated in the component as a result of the activation. This comprises\n\t * the class and aria settings.\n\t *\n\t * @param {any} value New value of toggle\n\t *\n\t * @tsmember WebComponents.Toggle\n\t */\n\tset(value) {\n\t\tif (this.setting) return;\n\t\tthis.setting = true;\n\t\tif (this.member) {\n\t\t\tconst { context, objectsMember: member, obj } = this,\n\t\t\t\t{ stx, topNode } = context || {};\n\t\t\tif (\n\t\t\t\tcontext &&\n\t\t\t\ttopNode.getCharts &&\n\t\t\t\tthis.hasAttribute(\"multichart-distribute\")\n\t\t\t) {\n\t\t\t\tlet charts = topNode.getCharts();\n\t\t\t\tlet objType = null;\n\t\t\t\tif (obj === stx.layout) objType = \"layout\";\n\t\t\t\tif (obj === stx.preferences) objType = \"preferences\";\n\t\t\t\tif (objType) {\n\t\t\t\t\tcharts.forEach((chart) => {\n\t\t\t\t\t\tchart[objType][member] = value;\n\t\t\t\t\t\tif (chart !== stx) chart.changeOccurred(objType);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (obj) obj[member] = value;\n\t\t\tthis.value = value;\n\t\t} else {\n\t\t\tif (this.callbacks) this.callbacks.forEach((cb) => cb.call(this, value));\n\t\t\tthis.value = value;\n\t\t}\n\t\tthis.updateClass();\n\t\tthis.setAriaPressed();\n\t\tdelete this.setting;\n\t}\n\n\t/**\n\t * Sets the aria-pressed attribute based on the component's class.\n\t * A class value of either active, on or off will set the aria value.\n\t * A truthy value for the component's current value will also set the aria value.\n\t *\n\t * @tsmember WebComponents.Toggle\n\t */\n\tsetAriaPressed() {\n\t\tconst ariaElem = this.root.querySelector(\"[aria-pressed]\");\n\t\tif (ariaElem) {\n\t\t\tariaElem.ariaPressed = this.toggles\n\t\t\t\t? !!this.matches(\".active, .on, .true\")\n\t\t\t\t: !!this.value;\n\t\t}\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.Toggle\n\t */\n\tsetContext(context) {\n\t\tconst { config } = context;\n\t\tthis.contextConfig = config;\n\t\tthis.reset(config);\n\n\t\tthis.begin();\n\t}\n\n\t/**\n\t * Called for a registered component when the context is changed in a multichart environment.\n\t *\n\t * @param {CIQ.UI.Context} newContext The chart user interface context.\n\t *\n\t * @tsmember WebComponents.Toggle\n\t */\n\tchangeContext(newContext) {\n\t\tthis.context = newContext;\n\t\tthis.setContext(newContext);\n\t}\n\n\t/**\n\t * Updates the toggle's class based on the current toggle value.\n\t * Used when toggle has more than binary values.\n\t *\n\t * @tsmember WebComponents.Toggle\n\t */\n\tupdateClass() {\n\t\tconst { removeClasses, classes } = this;\n\t\tif (!removeClasses || this.value === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.classList.remove(...removeClasses);\n\t\tlet currentClasses = classes[this.value];\n\t\tif (currentClasses && currentClasses[0])\n\t\t\tthis.classList.add(...currentClasses);\n\t}\n\n\t/**\n\t * Updates the toggle's appearance when the member to which it is bound has changed value. For example, if the toggle\n\t * controls the crosshair, if the crosshair value in the layout changes, this function will be called to keep in sync\n\t * with the layout value.\n\t *\n\t * @tsmember WebComponents.Toggle\n\t */\n\tupdateFromBinding() {\n\t\tthis.value = this.obj[this.objectsMember];\n\n\t\tif (!this.callbacks.length) {\n\t\t\tif (this.action == \"class\") {\n\t\t\t\tif (this.value) {\n\t\t\t\t\tthis.classList.add(this.activeClass);\n\t\t\t\t} else {\n\t\t\t\t\tthis.classList.remove(this.activeClass);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthis.callbacks.forEach((cb) => cb.call(this, this.value));\n\t\t}\n\t\tthis.updateClass();\n\t\tthis.setAriaPressed();\n\n\t\tif (this.member == \"crosshair\" && this.value === false)\n\t\t\tthis.context.stx.doDisplayCrosshairs();\n\t}\n}\n\n/**\n * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * This markup contains placeholder values which the component replaces with values from its attributes.\n * Variables are represented in double curly-braces, for example: `{{text}}`.\n * The following variables are defined:\n * | variable | source |\n * | :------------ | :----- |\n * | reader | from attribute value |\n * | icon | from attribute value |\n * | help-id | from attribute value |\n * | tooltip | from attribute value |\n * | tooltip_class | \"hidden\" if `tooltip` attribute not specified |\n * | help_class | \"hidden\" if `help-id` attribute not specified |\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.Toggle\n */\nToggle.markup = `\n\t\t\n\t\t\n\t\t\t
        {{tooltip}}
        \n\t\t
        \n\t\t\n\t\t\t\n\t\t\t(Help available, press question mark key)\n\t\t\n\t`;\n\nCIQ.UI.addComponentDefinition(\"cq-toggle\", Toggle);\n\n};\n\n\nlet __js_webcomponents_typedefs_ = (_exports) => {\n/**\n * The following is a set of web components used in our sample templates to illustrate how the API can be leveraged to build a full featured UI to control the chart.\n *\n * Feel free to use them as provided or modify the web components to meet your needs. You can find all of the source code for these components in `js/components.js`\n * and `js/componentUI.js`.\n *\n * This implementation assumes the chart is attached to a quote feed for interactive data loading. If you will not be using a quote feed, you will need to adjust\n * these components accordingly.\n *\n * >Two special tags are required to run the framework:\n * >\n * >`cq-ui-manager` is a component that manages all menus and dialogs on the page. It does so by attaching itself to the HTML body element, monitoring touch and mouse events,\n * and then instantiating menus and dialogs. For instance, when a user taps on the screen, they expect that any open menus will be closed. This is one of the responsibilities\n * that `cq-ui-manager` assumes.\n * >
        **One cq-ui-manager tag is allowed for the entire page, even when multiple charts are instantiated.**\n * >\n * > `cq-context` is a special tag that groups a set of components to a particular chart. Any component that is nested within a `cq-context` will look to that context\n * in order to find its chart. For instance, menu items within a `cq-context` will interact with the chart engine that is attached to the context.\n *\n * **Performance considerations:** These web components include dynamically updating modules that will react to every data change and redraw certain elements.\n * Although visually pleasing, they can sometimes cause performance issues on slow devices or when multiple charts are displayed.\n * See {@link CIQ.UI.animatePrice} for setting options.\n *\n * See {@link CIQ.UI.ContextTag}, which provides a model and base functionality for many components\n *\n * See the following tutorial for further details on how to work with and customize the included web components: {@tutorial Web Component Interface}.\n *\n * @namespace\n * @name WebComponents\n */\n\n};\n\n\nlet __js_webcomponents_undo_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-undo>

        \n *\n * This component will undo a drawing. There is a complementary component [cq-redo]{@link WebComponents.Redo} which reverts the undo operation.\n *\n * @example\n * \n * Undo\n * Redo\n * \n\n * @alias WebComponents.Undo\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n */\nclass Undo extends CIQ.UI.ContextTag {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.redoButton = null;\n\t\tthis.undostack = [];\n\t\tthis.redostack = [];\n\t\tthis.contexts = [];\n\t}\n\n\tconnectedCallback() {\n\t\tif (!this.isConnected || this.attached) return;\n\t\tsuper.connectedCallback();\n\t\tCIQ.UI.stxtap(this, () => this.undo());\n\t\tthis.setButtonStyle();\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, Undo);\n\t}\n\n\tdisconnectedCallback() {\n\t\tif (this.doNotDisconnect) return;\n\t\tthis.removeClaim(this);\n\t\tsuper.disconnectedCallback();\n\t}\n\n\t/**\n\t * Clears the stack of all redo or undo operations for the context\n\t *\n\t * @param {CIQ.UI.Context} context The context to clear\n\t *\n\t * @tsmember WebComponents.Undo\n\t */\n\tclear(context) {\n\t\tthis.setButtonStyle();\n\t}\n\n\t/**\n\t * Handles the \"undoStamp\" event.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t * @param {string} type Must be \"undoStamp\"\n\t * @param {object} data\n\t * @param {CIQ.Drawing[]} data.before Array of drawing objects which should exist after the undo operation.\n\t *\n\t * @tsmember WebComponents.Undo\n\t */\n\thandleEvent(context, type, data) {\n\t\tthis.undostack.push({ context: context, drawings: data.before });\n\t\tthis.redostack = [];\n\t\tthis.setButtonStyle();\n\t}\n\n\t/**\n\t * Handler for keyboard interaction.\n\t * \"Ctrl-z\" undoes, \"Ctrl-y\" redoes.\n\t *\n\t * @param {CIQ.UI.KeystrokeHub} hub The hub that processed the key\n\t * @param {string} key Key that was stroked\n\t * @param {Event} e The event object\n\t * @param {CIQ.UI.Keystroke} keystroke Contains status of function keys\n\t * @return {boolean} true if keystroke was processed\n\t *\n\t * @tsmember WebComponents.Undo\n\t */\n\tkeyStroke(hub, key, e, keystroke) {\n\t\tif (key == \"z\" && (keystroke.ctrl || keystroke.cmd)) {\n\t\t\t// ctrl-z\n\t\t\tif (keystroke.shift) {\n\t\t\t\tthis.redo();\n\t\t\t} else {\n\t\t\t\tthis.undo();\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tif (key == \"y\" && (keystroke.ctrl || keystroke.cmd)) {\n\t\t\t// ctrl-y\n\t\t\tthis.redo();\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t/**\n\t * Sets up the undo stack for each context of a multichart setup.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t * @private\n\t *\n\t * @tsmember WebComponents.Undo\n\t */\n\tmanageContext(context) {\n\t\tthis.addClaim(this);\n\t\tthis.eventListeners.push(\n\t\t\tcontext.stx.addEventListener(\"undoStamp\", (data) =>\n\t\t\t\tthis.handleEvent(context, \"undoStamp\", data)\n\t\t\t)\n\t\t);\n\t\tthis.contexts.push(context);\n\t}\n\n\t/**\n\t * Reverts latest undone drawing.\n\t *\n\t * @tsmember WebComponents.Undo\n\t */\n\tredo() {\n\t\tconst state = this.redostack.pop();\n\t\tif (state) {\n\t\t\tconst { context, drawings } = state;\n\t\t\tthis.undostack.push({\n\t\t\t\tcontext,\n\t\t\t\tdrawings: context.stx.exportDrawings()\n\t\t\t});\n\t\t\tcontext.stx.abortDrawings(true);\n\t\t\tcontext.stx.importDrawings(drawings);\n\t\t\tcontext.stx.changeOccurred(\"vector\");\n\t\t\tcontext.stx.draw();\n\t\t}\n\t\tthis.setButtonStyle();\n\t}\n\n\t/**\n\t * Enables or disables button style\n\t *\n\t * @private\n\t *\n\t * @tsmember WebComponents.Undo\n\t */\n\tsetButtonStyle() {\n\t\tif (this.undostack.length) {\n\t\t\tthis.setAttribute(\"cq-active\", \"true\");\n\t\t\tthis.removeAttribute(\"aria-disabled\");\n\t\t} else {\n\t\t\tthis.removeAttribute(\"cq-active\");\n\t\t\tthis.setAttribute(\"aria-disabled\", \"true\");\n\t\t}\n\t\tif (this.redoButton) {\n\t\t\tif (this.redostack.length) {\n\t\t\t\tthis.redoButton.setAttribute(\"cq-active\", \"true\");\n\t\t\t\tthis.redoButton.removeAttribute(\"aria-disabled\");\n\t\t\t} else {\n\t\t\t\tthis.redoButton.removeAttribute(\"cq-active\");\n\t\t\t\tthis.redoButton.setAttribute(\"aria-disabled\", \"true\");\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.Undo\n\t */\n\tsetContext(context) {\n\t\tlet contextArr = [this.context];\n\t\tif (this.context.topNode.getCharts) {\n\t\t\tconst stxArr = this.context.topNode.getCharts();\n\t\t\tcontextArr = stxArr.map((stx) => stx.uiContext);\n\t\t}\n\t\tcontextArr.forEach((targetContext) => {\n\t\t\tthis.manageContext(targetContext);\n\t\t});\n\n\t\tthis.addInjection(\"append\", \"initializeChart\", () => {\n\t\t\tthis.undostack = [];\n\t\t\tthis.redostack = [];\n\t\t\tthis.clear();\n\t\t});\n\t}\n\n\t/**\n\t * Reverts last drawing made.\n\t *\n\t * @tsmember WebComponents.Undo\n\t */\n\tundo() {\n\t\t// If a drawing tool is in action, then pressing undo will kill the current tool\n\t\tlet foundOne = false;\n\t\tfor (let i = 0; i < this.contexts.length; i++) {\n\t\t\tif (this.contexts[i].stx.activeDrawing) {\n\t\t\t\tthis.contexts[i].stx.undo();\n\t\t\t\tfoundOne = true;\n\t\t\t}\n\t\t}\n\t\tif (foundOne) return;\n\n\t\t// otherwise proceed to popping off the stack\n\t\tconst state = this.undostack.pop();\n\t\tif (state) {\n\t\t\tconst { context, drawings } = state;\n\t\t\tthis.redostack.push({\n\t\t\t\tcontext,\n\t\t\t\tdrawings: context.stx.exportDrawings()\n\t\t\t});\n\t\t\tcontext.stx.abortDrawings(true);\n\t\t\tcontext.stx.importDrawings(drawings);\n\t\t\tcontext.stx.changeOccurred(\"vector\");\n\t\t\tcontext.stx.draw();\n\t\t}\n\t\tthis.setButtonStyle();\n\t}\n}\n\nCIQ.UI.addComponentDefinition(\"cq-undo\", Undo);\n\n};\n\n\nlet __js_webcomponents_viewDialog_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-view-dialog>

        \n *\n * Provides content for view save dialog.\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * See {@link WebComponents.Views} for more details on menu management for this component.\n *\n * _**Emitters**_\n *\n * A custom event will be emitted from the component when it saves a view.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"save\" |\n * | action | \"click\" |\n * | name | _view name_ |\n * | view | _view data_ |\n *\n * @alias WebComponents.ViewDialog\n * @extends CIQ.UI.DialogContentTag\n * @class\n * @protected\n * @since\n * - 9.1.0 Added emitter.\n */\nclass ViewDialog extends CIQ.UI.DialogContentTag {\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, ViewDialog);\n\t\tthis.constructor = ViewDialog;\n\t}\n\n\t/**\n\t * Opens the aggregation dialog.\n\t *\n\t * @param {object} params\n\t * @param {CIQ.UI.Context} [params.context] A context to set. See\n\t * \t\t[setContext]{@link CIQ.UI.DialogContentTag#setContext}.\n\t *\n\t * @tsmember WebComponents.ViewDialog\n\t */\n\topen(params) {\n\t\tthis.addDefaultMarkup();\n\t\tthis.querySelector(\"input\").value = \"\";\n\t\tsuper.open(params);\n\t}\n\n\t/**\n\t * Saves the new view. This updates all cq-view menus on the screen and persists the view in the nameValueStore.\n\t *\n\t * @tsmember WebComponents.ViewDialog\n\t */\n\tsave() {\n\t\tconst viewName = this.querySelector(\"input\").value;\n\t\tif (!viewName) return;\n\n\t\tlet madeChange = false;\n\t\tlet newView;\n\t\tthis.updateContext();\n\t\tconst layout = this.context.stx.exportLayout();\n\t\tthis.context.topNode.CIQ.UI.Components.filter(\n\t\t\t(n) => n.matches(\"cq-views\") && n.ownerDocument === this.ownerDocument\n\t\t).forEach((v) => {\n\t\t\tconst obj = v.params.viewObj;\n\t\t\tlet view;\n\t\t\tlet i = 0;\n\t\t\tfor (; i < obj.views.length; i++) {\n\t\t\t\tview = obj.views[i];\n\t\t\t\tif (viewName == CIQ.first(view)) break;\n\t\t\t}\n\t\t\tif (i == obj.views.length) {\n\t\t\t\tview = {};\n\t\t\t\tview[viewName] = {};\n\t\t\t\tobj.views.push(view);\n\t\t\t}\n\t\t\tview[viewName] = layout;\n\t\t\tdelete view[viewName].candleWidth;\n\t\t\tv.renderMenu();\n\t\t\t//this.context.stx.updateListeners(\"layout\");\n\t\t\tif (!madeChange) {\n\t\t\t\t// We might have a cq-view menu on multiple charts on the screen. Only persist once.\n\t\t\t\tmadeChange = true;\n\t\t\t\tif (v.params.nameValueStore)\n\t\t\t\t\tv.params.nameValueStore.set(\"stx-views\", obj.views);\n\t\t\t}\n\t\t\tnewView = view[viewName];\n\t\t});\n\t\tif (newView) {\n\t\t\tthis.emitCustomEvent({\n\t\t\t\teffect: \"save\",\n\t\t\t\tdetail: {\n\t\t\t\t\tname: viewName,\n\t\t\t\t\tview: newView\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tthis.close();\n\t}\n\n\t/**\n\t * Updates chart context to that of the active chart.\n\t *\n\t * @tsmember WebComponents.ViewDialog\n\t */\n\tupdateContext() {\n\t\tconst { topNode } = this.context;\n\t\tlet activeChart = topNode.querySelector(\n\t\t\t\"cq-context-wrapper.active cq-context\"\n\t\t);\n\n\t\tif (!activeChart) {\n\t\t\tif (topNode.multiChartContainer) {\n\t\t\t\tactiveChart = topNode.multiChartContainer.querySelector(\n\t\t\t\t\t\"cq-context-wrapper.active cq-context\"\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (activeChart) {\n\t\t\tthis.context = activeChart.CIQ.UI.context;\n\t\t}\n\t}\n}\n\n/**\n * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.ViewDialog\n */\nViewDialog.markup = `\n\t\t
        \n\t\t\t\n\t\t\t\n\t\t
        \n\t`;\nCIQ.UI.addComponentDefinition(\"cq-view-dialog\", ViewDialog);\n\n};\n\n\nlet __js_webcomponents_views_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-views>

        \n *\n * This web component displays available views in a menu. It also allows for custom views to be removed.\n * The menu updates automatically with new views that are created from the views dialog.\n *\n * _**Emitters**_\n *\n * A custom event will be emitted by the component when a view is selected or removed.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"select\", \"remove\" |\n * | action | \"click\" |\n * | value | _layout_ |\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * @alias WebComponents.Views\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n * @since\n * - 9.1.0 Added emitter.\n */\nclass Views extends CIQ.UI.ContextTag {\n\tconstructor() {\n\t\tsuper();\n\t\tCIQ.UI.makeShadow(this);\n\t}\n\n\tconnectedCallback() {\n\t\tif (!this.isConnected || this.attached) return;\n\t\tsuper.connectedCallback();\n\n\t\tthis.setupShadow();\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, Views);\n\t\tthis.constructor = Views;\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.Views\n\t */\n\tsetContext(context) {\n\t\tthis.addDefaultMarkup();\n\t\tthis.config = context.config;\n\t\tthis.initialize();\n\t}\n\n\t/**\n\t * Initializes the views menu.\n\t *\n\t * @param {object} [config] Parameters used to initialize the menu.\n\t * @param {object} [config.viewObj = { views: [] }] Contains the menu items; that is, an array\n\t * \t\tof objects that contain the specifications for saved views of the chart.\n\t * @param {object} [config.nameValueStore] The class or constructor function that saves and\n\t * \t\tretrieves the chart views by means of a name/value store. See the custom storage\n\t * \t\tclass example below. Defaults to the `nameValueStore` property of the chart\n\t * \t\tconfiguration if available (see the {@tutorial Chart Configuration} tutorial);\n\t * \t\totherwise, defaults to {@link CIQ.NameValueStore}.\n\t * @param {object} [config.renderCB = null] A callback function executed on the menu after the\n\t * \t\tmenu has been rendered. Takes the menu as an argument.\n\t * @param {object} [config.cb] A callback function called when the saved views have been\n\t * \t\tretrieved from the name/value store. No arguments are passed to the callback function.\n\t *\n\t * @since\n\t * - 3.0.7 Added the `params.cb` parameter.\n\t * - 4.1.0 The `ViewMenu` helper has been deprecated. Call\n\t * \t\t`document.querySelector(\"cq-views\").initialize()` instead.\n\t *\n\t * @example Create a custom name/value store for the cq-views web component.\n\t * // Set the custom name/value store as the storage location for the web component.\n\t * document.querySelector(\"cq-views\").initialize({ nameValueStore: MyNameValueStore });\n\t *\n\t * // Create the custom name/value store.\n\t * const MyNameValueStore = function() { };\n\t *\n\t * // Create custom storage functions using the same signatures and callback requirements as those in CIQ.NameValueStore.\n\t * // For the cq-views web component, the data that is saved and retrieved is the array represented by params.viewObj.views.\n\t *\n\t * MyNameValueStore.prototype.set = function(name, value, cb) {\n\t * // Add code here to send the view object (value) to your repository and store it under the provided key (name).\n\t * if (cb) cb(error);\n\t * };\n\t *\n\t * MyNameValueStore.prototype.get = function(name, cb) {\n\t * // Add code here to get the view object for the provided key (name) from your repository and pass it to the callback.\n\t * cb(error, viewObj);\n\t * };\n\t *\n\t * MyNameValueStore.prototype.remove = function(name, cb) {\n\t * // Add code here to remove the view object associated with the provided key (name) from your repository.\n\t * if (cb) cb(error);\n\t * };\n\t *\n\t * @example Reload the drop-down menu with the latest stored data.
        \n\t * (Useful if you are sharing the data with other applications that may also be modifying the\n\t * data in real time.)\n\t * let self = CIQ.UI.BaseComponent.prototype.qsa(\"cq-views\", null, true)[0];\n\t * self.params.nameValueStore.get(\"stx-views\", function(err, obj) {\n\t * if (!err && obj) self.params.viewObj.views = obj;\n\t * else self.params.viewObj = { views: [] };\n\t * if (self.params.cb) self.params.cb.call(self);\n\t * self.renderMenu();\n\t * // alternatively, if existing storage configuration is sufficient, to perform the same function:\n\t * self.initialize();\n\t * });\n\t *\n\t * @tsmember WebComponents.Views\n\t */\n\tinitialize(config) {\n\t\tif (!config) config = this.config;\n\t\tconst { nameValueStore, menuViewConfig } = config;\n\t\tthis.params = Object.assign({}, menuViewConfig);\n\n\t\tCIQ.ensureDefaults(this.params, {\n\t\t\tviewObj: { views: [] },\n\t\t\tnameValueStore:\n\t\t\t\t(nameValueStore && new nameValueStore()) ||\n\t\t\t\t(CIQ.NameValueStore && new CIQ.NameValueStore())\n\t\t});\n\t\tconst { params } = this;\n\t\tif (params.nameValueStore)\n\t\t\tparams.nameValueStore.get(\"stx-views\", (err, obj) => {\n\t\t\t\tif (!err && obj) params.viewObj.views = obj;\n\t\t\t\tif (params.cb) params.cb.call(this);\n\t\t\t\tthis.renderMenu();\n\t\t\t});\n\t}\n\n\t/**\n\t * Creates the menu.\n\t *\n\t * @tsmember WebComponents.Views\n\t */\n\trenderMenu() {\n\t\tconst remove = (i, layout) => {\n\t\t\treturn (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t\tthis.emitCustomEvent({\n\t\t\t\t\teffect: \"remove\",\n\t\t\t\t\tdetail: { value: layout }\n\t\t\t\t});\n\t\t\t\tconst { views } = this.params.viewObj;\n\t\t\t\tviews.splice(i, 1);\n\t\t\t\tif (this.params.nameValueStore)\n\t\t\t\t\tthis.params.nameValueStore.set(\"stx-views\", views);\n\t\t\t\tconst viewMenus =\n\t\t\t\t\tthis.root !== this\n\t\t\t\t\t\t? CIQ.UI.shadowComponents\n\t\t\t\t\t\t: new Map(\n\t\t\t\t\t\t\t\tthis.context.topNode.CIQ.UI.Components.map((el) => [\n\t\t\t\t\t\t\t\t\tel,\n\t\t\t\t\t\t\t\t\tthis.context.topNode\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t );\n\n\t\t\t\tviewMenus.forEach((ctx, el) => {\n\t\t\t\t\tif (el.tagName === this.tagName && ctx === this.context.topNode) {\n\t\t\t\t\t\tel.params.viewObj.views = views.slice(0);\n\t\t\t\t\t\tel.renderMenu();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t};\n\n\t\tconst enable = (i, layout) => {\n\t\t\treturn (e) => {\n\t\t\t\tthis.emitCustomEvent({\n\t\t\t\t\teffect: \"select\",\n\t\t\t\t\tdetail: { value: layout }\n\t\t\t\t});\n\t\t\t\tconst { loader } = this.context;\n\t\t\t\tif (loader) loader.show();\n\t\t\t\tconst importLayout = () => {\n\t\t\t\t\tconst { stx } = this.context;\n\t\t\t\t\tconst finishImportLayout = () => {\n\t\t\t\t\t\tstx.changeOccurred(\"layout\");\n\t\t\t\t\t\tif (loader) loader.hide();\n\t\t\t\t\t};\n\t\t\t\t\tstx.importLayout(this.params.viewObj.views[i][layout], {\n\t\t\t\t\t\tmanagePeriodicity: true,\n\t\t\t\t\t\tpreserveTicksAndCandleWidth: true,\n\t\t\t\t\t\tcb: finishImportLayout\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\tsetTimeout(importLayout, 10);\n\t\t\t};\n\t\t};\n\n\t\tthis.root.querySelectorAll(\".list .item\").forEach((el) => el.remove());\n\t\tconst div = this.root.querySelector(\".list\");\n\t\tthis.params.viewObj.views.forEach((view, i) => {\n\t\t\tconst key = CIQ.first(view);\n\t\t\tif (key == \"recent\") return;\n\t\t\tconst item = CIQ.UI.makeFromTemplate(div.querySelector(\"template\"))[0];\n\t\t\tconst label = item.querySelector(\"[label]\");\n\t\t\tif (label) {\n\t\t\t\tlabel.innerText = key; //using innerText here to prevent script injection\n\t\t\t\tconst trimmedKey = key.trim().replace(/\\s+/g, \"-\"); // replace inner whitespace with dashes\n\t\t\t\tlabel.classList.add(\"view-name-\" + trimmedKey);\n\t\t\t}\n\t\t\tconst removeView = item.querySelector(\".close\");\n\t\t\tif (removeView) {\n\t\t\t\tremoveView.setAttribute(\"keyboard-selectable-child\", \"\");\n\t\t\t\tCIQ.UI.stxtap(removeView, remove(i, key));\n\t\t\t}\n\t\t\tthis.makeTap(item, enable(i, key));\n\t\t\tdiv.appendChild(item);\n\t\t});\n\t\tif (this.params.renderCB) this.params.renderCB(this);\n\t}\n}\n\n/**\n * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.Views\n */\nViews.markup = `\n\t\t
        \n\t\t\t\n\t\t
        \n\t`;\nCIQ.UI.addComponentDefinition(\"cq-views\", Views);\n\n};\n\n\nlet __js_webcomponents_volumeProfileSettingsDialog_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-volumeprofile-settings-dialog>

        \n *\n * Additional dialog for setting volume profile settings, specifically what is to appear in the callout for the volume profile drawing tool.\n *\n * A custom event will be emitted from the component when any of its fields are changed.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"select\" |\n * | action | \"click\" |\n * | field | _name of field toggled_ |\n * | value | _true or false_ |\n *\n * @alias WebComponents.VolumeprofileSettingsDialog\n * @extends CIQ.UI.DialogContentTag\n * @class\n * @protected\n * @since\n * - 8.4.0\n * - 9.1.0 Added emitter.\n */\nclass VolumeprofileSettingsDialog extends CIQ.UI.DialogContentTag {\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, VolumeprofileSettingsDialog);\n\t\tthis.constructor = VolumeprofileSettingsDialog;\n\t}\n\n\t/**\n\t * Ensures that when the dialog is opened the input field is populated with the correct value.\n\t * Also installs a listener to report changes to the value so the drawing can get updated.\n\t *\n\t * @param {Object} params parameters\n\t * @param {HTMLElement} params.caller The HTML element that triggered this dialog to open\n\t * @since 8.4.0\n\t *\n\t * @tsmember WebComponents.VolumeprofileSettingsDialog\n\t */\n\topen(params) {\n\t\tthis.addDefaultMarkup();\n\t\tsuper.open(params);\n\n\t\tif (params) this.opener = params.caller;\n\t\tconst { currentVectorParameters: vectorParams } = this.context.stx;\n\t\tif (!vectorParams.volumeprofile) vectorParams.volumeprofile = {};\n\t\tconst settings = vectorParams.volumeProfile;\n\t\tconst inputField = this.querySelector(\n\t\t\t'div[fieldname=\"Price Buckets\"] input'\n\t\t);\n\t\tinputField.value = settings.priceBuckets;\n\t\tif (inputField.changeHandler)\n\t\t\tinputField.removeEventListener(\"change\", inputField.changeHandler);\n\n\t\tinputField.changeHandler = ({ target }) => {\n\t\t\tconst intVal = parseInt(target.value);\n\t\t\tif (isNaN(intVal)) return;\n\n\t\t\tsettings.priceBuckets = intVal;\n\t\t\tconst event = new Event(\"change\", {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: true\n\t\t\t});\n\t\t\tthis.opener.dispatchEvent(event);\n\t\t\tthis.emitCustomEvent({\n\t\t\t\teffect: \"change\",\n\t\t\t\tdetail: {\n\t\t\t\t\tfield: \"priceBuckets\",\n\t\t\t\t\tvalue: intVal\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tinputField.addEventListener(\"change\", inputField.changeHandler);\n\t}\n}\n\n/**\n * Default markup for the comparison legend's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.VolumeprofileSettingsDialog\n */\nVolumeprofileSettingsDialog.markup = `\n\t\n\t\t
        \n\t\t\t
        Price Buckets
        \n\t\t\t
        \n\t\t\t\t\n\t\t\t
        \n\t\t\n\t
        \n\t\t
        Done
        \n\t
        \n`;\nCIQ.UI.addComponentDefinition(\n\t\"cq-volumeprofile-settings-dialog\",\n\tVolumeprofileSettingsDialog\n);\n\n};\n\n\nlet __js_webcomponents_waveParameters_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-wave-parameters>

        \n *\n * The wave parameters web component is used to supplement the [cq-drawing-settings]{@link WebComponents.DrawingSettings} component.\n * It displays additional settings options specific to the Elliott Wave drawing tool.\n *\n * _**Attributes**_\n *\n * This component observes the following attributes and will change behavior if these attributes are modified:\n * | attribute | description |\n * | :--------- | :---------- |\n * | corrective | Sequence of labels representing the corrective wave. |\n * | decoration | Vertex labeling style. |\n * | impulse | Sequence of labels representing the impulse wave. |\n * | show-lines | Whether the lines are drawn between vertices. |\n * | template | Wave pattern. Changing this may change other attributes automatically. |\n *\n * _**Emitters**_\n *\n * A custom event will be emitted by the component when it is clicked.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"select\" |\n * | action | \"click\" |\n * | name | _property_ |\n * | value | _value_ |\n *\n * `cause` and `action` are set only when the value is changed as a direct result of clicking on the component.\n *\n * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n * The default markup provided has accessibility features.\n *\n * @example Markup for Wave Parameters\n *\t\t\n *\n * @alias WebComponents.WaveParameters\n * @extends CIQ.UI.ContextTag\n * @class\n * @protected\n * @since\n * - 9.1.0 Observes attributes. Added emitter.\n */\nclass WaveParameters extends CIQ.UI.ContextTag {\n\tstatic get observedAttributes() {\n\t\treturn [\"corrective\", \"decoration\", \"impulse\", \"show-lines\", \"template\"];\n\t}\n\n\tstatic templates() {\n\t\treturn {\n\t\t\t\"Grand Supercycle\": {\n\t\t\t\timpulse: [\"I\", \"II\", \"III\", \"IV\", \"V\"],\n\t\t\t\tcorrective: [\"a\", \"b\", \"c\"],\n\t\t\t\tdecoration: \"enclosed\"\n\t\t\t},\n\t\t\tSupercycle: {\n\t\t\t\timpulse: [\"I\", \"II\", \"III\", \"IV\", \"V\"],\n\t\t\t\tcorrective: [\"a\", \"b\", \"c\"],\n\t\t\t\tdecoration: \"parentheses\"\n\t\t\t},\n\t\t\tCycle: {\n\t\t\t\timpulse: [\"I\", \"II\", \"III\", \"IV\", \"V\"],\n\t\t\t\tcorrective: [\"a\", \"b\", \"c\"],\n\t\t\t\tdecoration: \"none\"\n\t\t\t},\n\t\t\tPrimary: {\n\t\t\t\timpulse: [\"1\", \"2\", \"3\", \"4\", \"5\"],\n\t\t\t\tcorrective: [\"A\", \"B\", \"C\"],\n\t\t\t\tdecoration: \"enclosed\"\n\t\t\t},\n\t\t\tIntermediate: {\n\t\t\t\timpulse: [\"1\", \"2\", \"3\", \"4\", \"5\"],\n\t\t\t\tcorrective: [\"A\", \"B\", \"C\"],\n\t\t\t\tdecoration: \"parentheses\"\n\t\t\t},\n\t\t\tMinor: {\n\t\t\t\timpulse: [\"1\", \"2\", \"3\", \"4\", \"5\"],\n\t\t\t\tcorrective: [\"A\", \"B\", \"C\"],\n\t\t\t\tdecoration: \"none\"\n\t\t\t},\n\t\t\tMinute: {\n\t\t\t\timpulse: [\"i\", \"ii\", \"iii\", \"iv\", \"v\"],\n\t\t\t\tcorrective: [\"a\", \"b\", \"c\"],\n\t\t\t\tdecoration: \"enclosed\"\n\t\t\t},\n\t\t\tMinuette: {\n\t\t\t\timpulse: [\"i\", \"ii\", \"iii\", \"iv\", \"v\"],\n\t\t\t\tcorrective: [\"a\", \"b\", \"c\"],\n\t\t\t\tdecoration: \"parentheses\"\n\t\t\t},\n\t\t\t\"Sub-Minuette\": {\n\t\t\t\timpulse: [\"i\", \"ii\", \"iii\", \"iv\", \"v\"],\n\t\t\t\tcorrective: [\"a\", \"b\", \"c\"],\n\t\t\t\tdecoration: \"none\"\n\t\t\t}\n\t\t};\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.templates = WaveParameters.templates();\n\t}\n\n\tconnectedCallback() {\n\t\tif (!this.isConnected || this.attached) return;\n\t\tthis.template = \"Grand Supercycle\";\n\t\tif (this.children.length === 0) this.addDefaultMarkup();\n\t\tthis.templateHeader = this.qsa(\".ciq-active-template\", this, true)[0];\n\t\tthis.impulseHeader = this.qsa(\".ciq-active-impulse\", this, true)[0];\n\t\tthis.correctiveHeader = this.qsa(\".ciq-active-corrective\", this, true)[0];\n\t\tthis.decorators = {\n\t\t\tnone: this.qsa(\".ciq-btn:nth-of-type(1n)\", this, true)[0],\n\t\t\tparentheses: this.qsa(\".ciq-btn:nth-of-type(2n)\", this, true)[0],\n\t\t\tenclosed: this.qsa(\".ciq-btn:nth-of-type(3n)\", this, true)[0]\n\t\t};\n\t\tthis.lineToggleCheckbox = this.qsa(\"span.ciq-checkbox\", this, true)[0];\n\t\tsuper.connectedCallback();\n\t}\n\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, WaveParameters);\n\t\tthis.constructor = WaveParameters;\n\t}\n\n\t/**\n\t * Processes attribute changes. This is called whenever an observed attribute has changed.\n\t *\n\t * @param {string} name Attribute name\n\t * @param {string} oldValue Original attribute value\n\t * @param {string} newValue new Attribute value\n\t *\n\t * @tsmember WebComponents.WaveParameters\n\t */\n\thandlePropertyChange(name, oldValue, newValue) {\n\t\tif (oldValue === newValue) return;\n\t\tthis[name] = newValue;\n\t\tconst action = this.activator ? \"click\" : null;\n\t\tdelete this.activator;\n\n\t\tthis[name] = newValue;\n\t\tif (!this.stx) return;\n\t\tlet vector = this.stx.currentVectorParameters;\n\t\tlet waveParameters = vector.waveParameters || {};\n\t\tlet parameters;\n\t\tswitch (name) {\n\t\t\tcase \"template\":\n\t\t\t\tlet newTemplate = this.templates[newValue];\n\t\t\t\tif (newTemplate) {\n\t\t\t\t\tparameters = {\n\t\t\t\t\t\tdecoration: newTemplate.decoration\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tthis.update(null, \"template\", newValue);\n\t\t\t\tbreak;\n\t\t\tcase \"impulse\":\n\t\t\tcase \"corrective\":\n\t\t\t\tparameters = { [name]: newValue && newValue.split(\",\") };\n\t\t\t\tthis.update(null, name, newValue);\n\t\t\t\tbreak;\n\t\t\tcase \"decoration\":\n\t\t\t\tparameters = { decoration: newValue };\n\t\t\t\tthis.update(null, \"decoration\", newValue);\n\t\t\t\tbreak;\n\t\t\tcase \"show-lines\":\n\t\t\t\tparameters = { showLines: newValue };\n\t\t\t\tthis.update(null, \"showLines\", newValue);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tvector.waveParameters = Object.assign(waveParameters, parameters);\n\n\t\tif (!this.context || (name === \"template\" && this.customizingTemplate))\n\t\t\treturn;\n\n\t\tthis.emitCustomEvent({\n\t\t\taction,\n\t\t\teffect: \"select\",\n\t\t\tdetail: { name, value: newValue === undefined ? null : newValue }\n\t\t});\n\t}\n\n\t/**\n\t * Initializes the parameters. Called from {@link Webcomponents.DrawingSettings#sync}.\n\t *\n\t * @tsmember WebComponents.WaveParameters\n\t */\n\tactivate() {\n\t\tconst { stx } = this;\n\t\tif (!stx) return;\n\t\tthis.cvp = stx.currentVectorParameters;\n\t\tif (!this.cvp.waveParameters) this.template = \"Grand Supercycle\";\n\t\tthis.update(null, \"template\", this.template);\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.WaveParameters\n\t */\n\tsetContext(context) {\n\t\tthis.stx = context.stx;\n\t}\n\n\t/**\n\t * Toggle whether to show lines on wave drawing, or just vertices.\n\t *\n\t * @param {Object} [activator] Pass `null` when calling programmatically.\n\t * @param {HTMLElement} [activator.node] Element that triggered this function.\n\t *\n\t * @tsmember WebComponents.WaveParameters\n\t */\n\ttoggleLines(activator) {\n\t\tthis.activator = activator;\n\t\tlet checkbox = this.lineToggleCheckbox;\n\t\tlet active = this[\"show-lines\"];\n\t\tthis[\"show-lines\"] = !active;\n\t\tif (active) checkbox.classList.remove(\"ciq-active\");\n\t\telse checkbox.classList.add(\"ciq-active\");\n\t\tcheckbox.setAttribute(\"aria-checked\", (!active).toString());\n\t}\n\n\t/**\n\t * Updates the wave parameters settings.\n\t *\n\t * @param {Object} [activator] Pass `null` when calling programmatically.\n\t * @param {HTMLElement} [activator.node] Element that triggered this function.\n\t * @param {string} field The field to update\n\t * @param {number} value Value of the field to update.\n\t *\n\t * @tsmember WebComponents.WaveParameters\n\t */\n\tupdate(activator, field, value) {\n\t\tlet isTemplate = field === \"template\";\n\t\tif (!isTemplate) {\n\t\t\tthis.activator = activator;\n\t\t\tif (field === \"decoration\") {\n\t\t\t\tfor (let d in this.decorators) {\n\t\t\t\t\tthis.decorators[d].classList[d === value ? \"add\" : \"remove\"](\n\t\t\t\t\t\t\"ciq-active\"\n\t\t\t\t\t);\n\t\t\t\t\tthis.decorators[d].setAttribute(\n\t\t\t\t\t\t\"aria-checked\",\n\t\t\t\t\t\t(d === value).toString()\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthis.decoration = value;\n\t\t\t} else if (field === \"impulse\" || field === \"corrective\") {\n\t\t\t\tlet u = value ? value.split(\",\") : value;\n\t\t\t\tthis[field] = value;\n\t\t\t\tthis[field + \"Header\"].setAttribute(\"text\", u ? u.join(\" \") : \"- - -\");\n\t\t\t}\n\t\t\tif (field === \"showLines\") {\n\t\t\t\tthis[\"show-lines\"] = value;\n\t\t\t\tthis.lineToggleCheckbox.classList[value === \"true\" ? \"add\" : \"remove\"](\n\t\t\t\t\t\"ciq-active\"\n\t\t\t\t);\n\t\t\t\tthis.lineToggleCheckbox.setAttribute(\"aria-checked\", value);\n\t\t\t} else if (!this.customizingTemplate) {\n\t\t\t\tthis.template = \"Custom\";\n\t\t\t\tthis.templateHeader.setAttribute(\"text\", this.template);\n\t\t\t}\n\t\t} else {\n\t\t\tlet newTemplate = this.templates[value];\n\t\t\tif (newTemplate) {\n\t\t\t\tthis.customizingTemplate = true;\n\t\t\t\tthis.impulse = newTemplate.impulse.join(\",\");\n\t\t\t\tthis.impulseHeader.setAttribute(\"text\", newTemplate.impulse.join(\" \"));\n\n\t\t\t\tthis.corrective = newTemplate.corrective.join(\",\");\n\t\t\t\tthis.correctiveHeader.setAttribute(\n\t\t\t\t\t\"text\",\n\t\t\t\t\tnewTemplate.corrective.join(\" \")\n\t\t\t\t);\n\n\t\t\t\tfor (let d in this.decorators) {\n\t\t\t\t\tthis.decorators[d].classList.remove(\"ciq-active\");\n\t\t\t\t\tthis.decorators[d].setAttribute(\"aria-checked\", \"false\");\n\t\t\t\t}\n\t\t\t\tlet decorator = newTemplate.decoration || \"none\";\n\t\t\t\tthis.decorators[decorator].classList.add(\"ciq-active\");\n\t\t\t\tthis.decorators[decorator].setAttribute(\"aria-checked\", \"true\");\n\t\t\t\tthis.decoration = decorator;\n\n\t\t\t\tthis[\"show-lines\"] = true;\n\t\t\t\tthis.lineToggleCheckbox.classList.add(\"ciq-active\");\n\t\t\t\tthis.lineToggleCheckbox.setAttribute(\"aria-checked\", \"true\");\n\n\t\t\t\tthis.cvp.waveParameters = CIQ.clone(newTemplate);\n\t\t\t\tthis.cvp.waveParameters.showLines = true;\n\n\t\t\t\tthis.activator = activator;\n\t\t\t\tthis.customizingTemplate = false;\n\t\t\t\tthis.template = value;\n\t\t\t\tthis.templateHeader.setAttribute(\"text\", value);\n\t\t\t} else {\n\t\t\t\tthis.cvp.waveParameters = {\n\t\t\t\t\tcorrective: this.corrective && this.corrective.split(\",\"),\n\t\t\t\t\timpulse: this.impulse && this.impulse.split(\",\"),\n\t\t\t\t\tdecoration: this.decoration,\n\t\t\t\t\tshowLines: this[\"show-lines\"]\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n}\n/**\n * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n *\n * @static\n * @type {String}\n *\n * @tsmember WebComponents.WaveParameters\n */\nWaveParameters.markup = `\n\t\t
        \n\t\t\t
        WAVE TEMPLATE
        \n\t\t\t\n\t\t
        \n\t\t
        \n\t\t\t
        IMPULSE
        \n\t\t\t\n\t\t
        \n\t\t
        \n\t\t\t
        CORRECTIVE
        \n\t\t\t\n\t\t
        \n\t\t
        \n\t\t\t\n\t\t\t\tNone\n\t\t\t\n\t\t\t\n\t\t\t\tParentheses\n\t\t\t\n\t\t\t\n\t\t\t\tEnclosed\n\t\t\t\n\t\t
        \n\t\t
        \n\t\t\t\n\t\t\t\t
        Show Lines:
        \n\t\t\t\t\n\t\t\t
        \n\t\t
        \n\t`;\n\nCIQ.UI.addComponentDefinition(\"cq-wave-parameters\", WaveParameters);\n\n};\n\n\nlet __js_webcomponents_yAxisContext_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\n/**\n * @classdesc\n *\n * This is a custom HtmlElement (Web Component). The tag name is the following:\n *\n *

        <cq-yaxis-context>

        \n *\n * This component appears when a yaxis is right-clicked. A menu of actions are displayed relevant to that yaxis.\n *\n * _**Emitters**_\n *\n * A custom event will be emitted by the component when an action is clicked from the displayed menu.\n * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n * The details of the event contain the following:\n * | property | value |\n * | :------- | :---- |\n * | emitter | this component |\n * | cause | \"useraction\" |\n * | effect | \"edit\", \"remove\", \"favorite\", or other custom action |\n * | action | \"click\" |\n * | item | _object on which the action occurs, usually a yaxis descriptor_ |\n *\n * This component comes with a default markup that is utilized when the component tag is added to the DOM without any other markup.\n * The default markup provided includes accessibility features.\n *\n * @alias WebComponents.YAxisContext\n * @extends CIQ.UI.DialogContentTag\n * @since 9.3.0\n */\nclass YAxisContext extends CIQ.UI.DialogContentTag {\n\tadoptedCallback() {\n\t\tsuper.adoptedCallback();\n\t\tCIQ.UI.flattenInheritance(this, YAxisContext);\n\t\tthis.constructor = YAxisContext;\n\t}\n\n\t/**\n\t * Called for a registered component when the context is constructed.\n\t * Sets the context property of the component.\n\t *\n\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t *\n\t * @tsmember WebComponents.YAxisContext\n\t */\n\tsetContext(context) {\n\t\tconst { stx } = context,\n\t\t\t{ currentYAxis } = stx,\n\t\t\tpanel = findPanelByYAxis(stx, currentYAxis),\n\t\t\tisRHS = panel.right === currentYAxis.left,\n\t\t\tisLHS = panel.left === currentYAxis.left + currentYAxis.width,\n\t\t\thasAdjacentLeftAxis = getAdjacentYAxis(currentYAxis, panel, \"left\"),\n\t\t\thasAdjacentRightAxis = getAdjacentYAxis(currentYAxis, panel, \"right\"),\n\t\t\thasMerged =\n\t\t\t\tcurrentYAxis.renderers.length + currentYAxis.studies.length >= 2;\n\n\t\tlet menuItems = \"\";\n\t\tmenuItems += hasAdjacentLeftAxis || isRHS ? this.menuItems.moveLeft : ``;\n\t\tmenuItems += hasAdjacentRightAxis || isLHS ? this.menuItems.moveRight : ``;\n\t\tmenuItems += hasAdjacentLeftAxis ? this.menuItems.mergeLeft : ``;\n\t\tmenuItems += hasAdjacentRightAxis ? this.menuItems.mergeRight : ``;\n\t\tmenuItems += hasMerged ? this.menuItems.unmerge : ``;\n\n\t\tthis.innerHTML = menuItems;\n\t\tCIQ.UI.BaseComponent.buildReverseBindings(this);\n\n\t\tthis.classList.add(\"ciq-context-menu\");\n\n\t\tsuper.setContext(context);\n\t}\n\n\t/**\n\t * Called after an stxtap event is fired.\n\t * Emits the event for the action performed.\n\t *\n\t * @param {string} effect What action was performed as a result of the stxtap event.\n\t * @param {Object} item Object being effected by the action.\n\t *\n\t * @tsmember WebComponents.YAxisContext\n\t */\n\tpostProcess(effect, item) {\n\t\tthis.emitCustomEvent({\n\t\t\teffect,\n\t\t\tdetail: { item }\n\t\t});\n\t}\n\n\tupdateYAxis(menuEvent, type, direction) {\n\t\tif (type === \"unmerge\") {\n\t\t\tunmergeYAxis(this.context.stx);\n\t\t} else {\n\t\t\tmoveYAxis(this.context.stx, type, direction);\n\t\t}\n\n\t\tthis.close();\n\t}\n}\n\nYAxisContext.prototype.menuItems = {\n\tmoveLeft: `
        Move Left
        `,\n\tmoveRight: `
        Move Right
        `,\n\tmergeLeft: `
        Merge Left
        `,\n\tmergeRight: `
        Merge Right
        `,\n\tunmerge: `
        Unmerge
        `\n};\n\nfunction getAxisTargetPosition(type, direction, panel, targetYAxis) {\n\tif (!targetYAxis) {\n\t\tif (direction === \"right\") {\n\t\t\treturn panel.right;\n\t\t}\n\n\t\treturn panel.left;\n\t}\n\n\tif (type === \"merge\") {\n\t\treturn targetYAxis.left + targetYAxis.width / 2;\n\t}\n\n\tif (direction === \"right\") {\n\t\treturn targetYAxis.left + targetYAxis.width;\n\t}\n\n\treturn targetYAxis.left;\n}\nfunction unmergeYAxis(stx, type, direction) {\n\tconst { currentYAxis } = stx,\n\t\tpanel = findPanelByYAxis(stx, currentYAxis),\n\t\tdragTarget = (draggable) => {\n\t\t\tpanel.subholder.classList.add(\"dropzone\");\n\t\t\tpanel.subholder.classList.add(\n\t\t\t\tcurrentYAxis.left > panel.left ? \"right\" : \"left\"\n\t\t\t);\n\n\t\t\tstx.grabbingScreen = false;\n\t\t\tstx.highlightedDraggable = draggable;\n\t\t\tstx.grabStartPanel = panel;\n\n\t\t\tstx.dragPlotOrAxis(\n\t\t\t\tcurrentYAxis.left - 1,\n\t\t\t\tpanel.bottom - panel.height / 2\n\t\t\t);\n\t\t};\n\n\tcurrentYAxis.renderers.forEach((seriesName) => {\n\t\tif (seriesName !== stx.mainSeriesRenderer.params.name) {\n\t\t\tdragTarget(stx.chart.seriesRenderers[seriesName]);\n\t\t}\n\t});\n\n\tcurrentYAxis.studies.forEach((studyName) => {\n\t\tdragTarget(stx.layout.studies[studyName]);\n\t});\n}\n\nfunction moveYAxis(stx, type, direction) {\n\tconst { currentYAxis } = stx,\n\t\tpanel = findPanelByYAxis(stx, currentYAxis),\n\t\ttargetYAxis = getAdjacentYAxis(currentYAxis, panel, direction),\n\t\tyPosition = panel.top + (panel.bottom - panel.top) / 2,\n\t\ttargetAxisPosition = getAxisTargetPosition(\n\t\t\ttype,\n\t\t\tdirection,\n\t\t\tpanel,\n\t\t\ttargetYAxis\n\t\t);\n\n\tcurrentYAxis.showMenuToggle(false);\n\n\tstx.mousemoveinner(stx.left + currentYAxis.left, stx.top + yPosition);\n\n\tstx.grabbingScreen = true;\n\tstx.highlightedDraggable = currentYAxis;\n\tstx.grabStartPanel = panel;\n\n\tstx.mousemoveinner(stx.left + targetAxisPosition, stx.top + yPosition);\n\tstx.mouseup({\n\t\tclientX: stx.left + targetAxisPosition,\n\t\tclientY: stx.top + yPosition\n\t});\n}\n\nfunction findPanelByYAxis(stx, sourceYAxis) {\n\treturn Object.values(stx.panels).find((panel) =>\n\t\tpanel.yaxisLHS\n\t\t\t.concat(panel.yaxisRHS)\n\t\t\t.some((targetYAxis) => stx.yaxisMatches(sourceYAxis, targetYAxis))\n\t);\n}\n\nfunction getAdjacentYAxis(sourceAxis, panel, direction) {\n\tconst sourceAxisLeft = sourceAxis.left,\n\t\tsourceAxisRight = sourceAxis.left + sourceAxis.width,\n\t\tsourceAxisTop = sourceAxis.top;\n\n\treturn panel.yaxisLHS\n\t\t.concat(panel.yaxisRHS)\n\t\t.filter((targetAxis) => targetAxis !== sourceAxis)\n\t\t.find((targetAxis) => {\n\t\t\tconst targetAxisLeft = targetAxis.left,\n\t\t\t\ttargetAxisRight = targetAxisLeft + targetAxis.width;\n\n\t\t\tif (sourceAxisTop !== targetAxis.top) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (direction === \"left\") {\n\t\t\t\treturn sourceAxisLeft === targetAxisRight;\n\t\t\t}\n\n\t\t\treturn sourceAxisRight === targetAxisLeft;\n\t\t});\n}\n\nCIQ.UI.addComponentDefinition(\"cq-yaxis-context\", YAxisContext);\n\n};\n\n\nlet __js_webcomponents_dialog_colorPicker_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\nconst Dialog = CIQ.UI._webcomponents.list[\"cq-dialog\"];\nif (!Dialog) {\n\tconsole.error(\n\t\t\"colorPicker component requires first activating dialog component.\"\n\t);\n} else {\n\t/**\n\t * @classdesc\n\t *\n\t * This is a custom HtmlElement (Web Component). The tag name is the following:\n\t *\n\t *

        <cq-color-pickerg>

        \n\t *\n\t * The color picker is a dialog which allows the user to choose a color to apply to the item which presented the color picker.\n\t * The item is usually a \"swatch\" {@link WebComponents.Swatch} which is embedded in elsewhere, like in a study dialog or drawing palette.\n\t * In addition to colors, there can be configured \"overrides\", which are buttons under the color picker allowing the user to choose soomething\n\t * other than a specific color, for example, \"None\" or \"Auto\".\n\t *\n\t * _**Attributes**_\n\t *\n\t * This component observes the following attributes and will change behavior if these attributes are modified:\n\t * | attribute | description |\n\t * | :----------- | :---------- |\n\t * | cq-active | Set if the element is visible |\n\t * | cq-colors | Contains a comma-separated list of CSS colors to use |\n\t *\n\t * In addition, there are two ways to set the colors. These are given in the examples below.\n\t *\n\t * _**Emitters**_\n\t *\n\t * A custom event will be emitted from the component when a color is selected.\n\t * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n\t * The details of the event contain the following:\n\t * | property | value |\n\t * | :------- | :---- |\n\t * | emitter | this component |\n\t * | cause | \"useraction\" |\n\t * | effect | \"select\" |\n\t * | action | \"click\" |\n\t * | value | _color value_ |\n\t *\n\t * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n\t * The default markup provided has accessibility features.\n\t * This component is automatically created if it doesn't exist in the DOM already.\n\t *\n\t * @example Set colors for instance: `setColors()` can be passed a two dimensional array of colors\n\t * const myColorPicker = document.querySelector(\"cq-color-picker\");\n\t * myColorPicker.setColors([[\"#ffffff\", \"#e1e1e1\", \"#cccccc\", \"#b7b7b7\", \"#a0a0a5\", \"#898989\", \"#707070\", \"#626262\", \"#555555\", \"#464646\", \"#363636\", \"#262626\", \"#1d1d1d\", \"#000000\"]]);\n\t *\n\t * @example Set colors for Component class: `ColorPicker.defaultColors` can be set to a two dimensional array of colors\n\t * // Note: do this before creating the ChartEngine\n\t * const pickerClassDef = CIQ.UI.components(\"cq-color-picker\")[0].classDefinition;\n\t * pickerClassDef.defaultColors=[[\"#ffffff\", \"#e1e1e1\", \"#cccccc\", \"#b7b7b7\", \"#a0a0a5\", \"#898989\", \"#707070\", \"#626262\", \"#555555\", \"#464646\", \"#363636\", \"#262626\", \"#1d1d1d\", \"#000000\"]];\n\t *\n\t * @alias WebComponents.ColorPicker\n\t * @extends WebComponents.Dialog\n\t * @class\n\t * @protected\n\t * @since\n\t * - 9.1.0 Added emitter.\n\t */\n\tclass ColorPicker extends Dialog.classDefinition {\n\t\tstatic get observedAttributes() {\n\t\t\treturn [\"cq-active\", \"cq-colors\"];\n\t\t}\n\n\t\tconstructor() {\n\t\t\tsuper();\n\t\t\tthis.params = {\n\t\t\t\tcolorMap: []\n\t\t\t};\n\t\t\tthis.items = [];\n\t\t}\n\n\t\tconnectedCallback() {\n\t\t\tif (!this.isConnected || this.attached) return;\n\t\t\tthis.setAttribute(\"cq-close-button\", \"false\");\n\t\t\tsuper.connectedCallback();\n\t\t\tthis.build();\n\t\t}\n\n\t\tadoptedCallback() {\n\t\t\tsuper.adoptedCallback();\n\t\t\tCIQ.UI.flattenInheritance(this, ColorPicker);\n\t\t\tthis.constructor = ColorPicker;\n\t\t}\n\n\t\t/**\n\t\t * Processes attribute changes. This is called whenever an observed attribute has changed.\n\t\t *\n\t\t * @param {string} name Attribute name\n\t\t * @param {string} oldValue Original attribute value\n\t\t * @param {string} newValue new Attribute value\n\t\t *\n\t\t * @tsmember WebComponents.ColorPicker\n\t\t */\n\t\thandlePropertyChange(name, oldValue, newValue) {\n\t\t\tif (newValue === oldValue) return;\n\t\t\tthis[name] = newValue;\n\t\t\tswitch (name) {\n\t\t\t\tcase \"cq-active\":\n\t\t\t\t\tthis.reposition();\n\t\t\t\t\treturn;\n\t\t\t\tcase \"cq-colors\":\n\t\t\t\t\tthis.build();\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Sets the class members up with the proper colors and overrides.\n\t\t *\n\t\t * @tsmember WebComponents.ColorPicker\n\t\t */\n\t\tbuild() {\n\t\t\tthis.addDefaultMarkup();\n\t\t\tlet colors = this.getAttribute(\"cq-colors\");\n\t\t\tif (colors) {\n\t\t\t\t// Convert a csv list of colors to a two dimensional array\n\t\t\t\tcolors = colors.split(\",\");\n\t\t\t\tconst cols = Math.ceil(Math.sqrt(colors.length));\n\t\t\t\tthis.params.colorMap = [];\n\t\t\t\tlet col = 0,\n\t\t\t\t\trow = [];\n\t\t\t\tcolors.forEach((i) => {\n\t\t\t\t\tif (col >= cols) {\n\t\t\t\t\t\tcol = 0;\n\t\t\t\t\t\tthis.params.colorMap.push(row);\n\t\t\t\t\t\trow = [];\n\t\t\t\t\t}\n\t\t\t\t\trow.push(i);\n\t\t\t\t\tcol++;\n\t\t\t\t});\n\t\t\t\tthis.params.colorMap.push(row);\n\t\t\t} else {\n\t\t\t\tthis.params.colorMap = this.constructor.defaultColors;\n\t\t\t}\n\n\t\t\tthis.cqOverrides = this.querySelector(\"[cq-overrides]\");\n\t\t\tif (this.cqOverrides)\n\t\t\t\tthis.template = this.cqOverrides.querySelector(\"template\");\n\t\t\tthis.initialize();\n\t\t}\n\n\t\t/**\n\t\t * Displays the color picker in proximity to the node passed in\n\t\t * @param {object} activator The object representing what caused picker to display\n\t\t * @param {HTMLElement} [activator.node] The node near where to display the color picker\n\t\t * @param {string[]} [activator.overrides] Array of overrides. For each of these, a button will be created that if pressed\n\t\t * will pass that override back instead of the color\n\t\t *\n\t\t * @tsmember WebComponents.ColorPicker\n\t\t */\n\t\tdisplay(activator) {\n\t\t\t// Algorithm to place the color picker to the right of whichever node was just pressed\n\t\t\tconst { node } = activator;\n\t\t\tthis.callingNode = node;\n\t\t\tconst positionOfNode = node.getBoundingClientRect();\n\t\t\tthis.style.top = this.style.left = \"0px\";\n\t\t\tconst positionOfColorPicker = this.parentNode.getBoundingClientRect();\n\t\t\tconst oneSwatchDims = CIQ.elementDimensions(node, { border: true });\n\t\t\tlet x =\n\t\t\t\tpositionOfNode.left -\n\t\t\t\tpositionOfColorPicker.left +\n\t\t\t\toneSwatchDims.width +\n\t\t\t\t10;\n\t\t\tlet y = positionOfNode.top - positionOfColorPicker.top + 15;\n\n\t\t\tif (this.cqOverrides) {\n\t\t\t\t[...this.cqOverrides.children].forEach((child) => {\n\t\t\t\t\tif (!child.matches(\"template\")) child.remove();\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst context =\n\t\t\t\tactivator.context || this.context || CIQ.UI.getMyContext(this);\n\t\t\tthis.uiManager = context.uiManager || CIQ.UI.getUIManager(this);\n\n\t\t\tif (activator.overrides && this.template) {\n\t\t\t\tlet n;\n\t\t\t\tactivator.overrides.forEach((override) => {\n\t\t\t\t\tn = CIQ.UI.makeFromTemplate(this.template, true)[0];\n\t\t\t\t\tn.innerText = context.stx\n\t\t\t\t\t\t? context.stx.translateIf(override)\n\t\t\t\t\t\t: override;\n\t\t\t\t\tCIQ.UI.stxtap(n, () =>\n\t\t\t\t\t\tthis.pickColor(override == \"none\" ? \"transparent\" : override)\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// ensure color picker doesn't go off right edge of screen\n\t\t\tconst dims = CIQ.elementDimensions(this, { border: true });\n\t\t\tconst doc = this.ownerDocument || document;\n\t\t\tconst docWidth = CIQ.guaranteedSize(doc).width;\n\t\t\tconst w = dims.width;\n\t\t\tif (x + w > docWidth) x = docWidth - w - 20; // 20 for a little whitespace and padding\n\n\t\t\t// or bottom of screen\n\t\t\tconst docHeight = CIQ.guaranteedSize(doc).height;\n\t\t\tconst h = dims.height;\n\t\t\tif (y + h > docHeight) y = docHeight - h - 30; // 30 for a little whitespace and padding\n\n\t\t\tthis.style.left = x + \"px\";\n\t\t\tthis.style.top = y + \"px\";\n\n\t\t\tif (!this.hasAttribute(\"aria-label\"))\n\t\t\t\tthis.setAttribute(\"aria-label\", \"Color Picker\");\n\n\t\t\tif (!this.classList.contains(\"stxMenuActive\")) {\n\t\t\t\tthis.open({ context, caller: node }); // Manually activate the color picker\n\t\t\t} else {\n\t\t\t\tif (context.e) context.e.stopPropagation(); // Otherwise the color picker is closed when you swap back and forth between fill and line swatches on the toolbar\n\t\t\t}\n\n\t\t\tthis.items = this.querySelectorAll(\"[cq-colorgrid] span, .ciq-btn\");\n\n\t\t\t// Set keyboard focus on the color selector\n\t\t\tsetTimeout(() => this.colors.focus());\n\t\t}\n\n\t\t/**\n\t\t * Repositions the color picker so it fits on the screen.\n\t\t *\n\t\t * @tsmember WebComponents.ColorPicker\n\t\t */\n\t\treposition() {\n\t\t\t// ensure color picker doesn't go off right edge of screen\n\t\t\tconst dims = CIQ.elementDimensions(this, { border: true });\n\t\t\tconst doc = this.ownerDocument || document;\n\t\t\tconst docWidth = CIQ.guaranteedSize(doc).width;\n\t\t\tconst w = dims.width;\n\t\t\tif (CIQ.stripPX(this.style.left) + w > docWidth)\n\t\t\t\tthis.style.left = docWidth - w - 20 + \"px\"; // 20 for a little whitespace and padding\n\n\t\t\t// or bottom of screen\n\t\t\tconst docHeight = CIQ.guaranteedSize(doc).height;\n\t\t\tconst h = dims.height;\n\t\t\tif (CIQ.stripPX(this.style.top) + h > docHeight)\n\t\t\t\tthis.style.top = docHeight - h - 30 + \"px\"; // 30 for a little whitespace and padding\n\t\t}\n\n\t\t/**\n\t\t * Generates the HTML for the component.\n\t\t *\n\t\t * @tsmember WebComponents.ColorPicker\n\t\t */\n\t\tinitialize() {\n\t\t\tthis.colors = this.querySelector(\"[cq-colorgrid]\");\n\t\t\tif (!this.colors) this.colors = this;\n\t\t\t[...this.colors.children].forEach((i) => i.remove()); // allow re-initialize, with new colors for instance\n\n\t\t\tthis.params.colorMap.forEach((lineOfColors) => {\n\t\t\t\tconst ul = document.createElement(\"ul\");\n\t\t\t\tthis.colors.appendChild(ul);\n\t\t\t\tlineOfColors.forEach((color) => {\n\t\t\t\t\tconst li = document.createElement(\"li\");\n\t\t\t\t\tul.appendChild(li);\n\t\t\t\t\tconst span = document.createElement(\"span\");\n\t\t\t\t\tli.appendChild(span);\n\t\t\t\t\tspan.style.backgroundColor = color;\n\t\t\t\t\tCIQ.UI.stxtap(span, () => this.pickColor(color));\n\t\t\t\t\tspan.setAttribute(\"role\", \"option\");\n\t\t\t\t\tspan.setAttribute(\"tabindex\", \"0\");\n\t\t\t\t\tspan.setAttribute(\"aria-label\", color);\n\t\t\t\t});\n\t\t\t});\n\t\t\tthis.rowLength = this.params.colorMap[0].length || 0;\n\t\t}\n\n\t\t/**\n\t\t * Handler for keyboard interaction.\n\t\t * Arrow keys move around the picker, while `Enter` will select.\n\t\t *\n\t\t * @param {CIQ.UI.KeystrokeHub} hub The hub that processed the key\n\t\t * @param {string} key Key that was stroked\n\t\t * @param {Event} e The event object\n\t\t * @return {boolean} true if keystroke was processed\n\t\t *\n\t\t * @tsmember WebComponents.ColorPicker\n\t\t */\n\t\tkeyStroke(hub, key, e) {\n\t\t\tif (hub && hub.tabActiveModals[0] !== this) return;\n\n\t\t\tconst { items } = this;\n\t\t\tswitch (key) {\n\t\t\t\tcase \"Tab\":\n\t\t\t\t\tthis.focusNextItem(items, !!e.shiftKey);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ArrowRight\":\n\t\t\t\t\tthis.focusNextItem(items);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ArrowLeft\":\n\t\t\t\t\tthis.focusNextItem(items, true);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ArrowDown\":\n\t\t\t\t\tthis.focusNextRow(items);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ArrowUp\":\n\t\t\t\t\tthis.focusNextRow(items, { reverse: true });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Enter\":\n\t\t\t\t\tconst focused = this.findFocused(items);\n\t\t\t\t\tthis.clickItem(focused[0], e);\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Switches the focus to the next row of colors.\n\t\t *\n\t\t * @param {NodeList} items List of items in the picker (rows and overrides)\n\t\t * @param {object} [options]\n\t\t * @param {boolean} [options.reverse] If true, reverses order for focus\n\t\t * @return {boolean} true if next item is focusable\n\t\t *\n\t\t * @tsmember WebComponents.ColorPicker\n\t\t */\n\t\tfocusNextRow(items, options) {\n\t\t\tconst { reverse } = options || {};\n\t\t\tconst focused = this.findFocused(items);\n\t\t\tlet i = -1;\n\t\t\tif (focused.length) {\n\t\t\t\t// find our location in the list of items\n\t\t\t\tfor (i = 0; i < items.length; i++) if (items[i] === focused[0]) break;\n\t\t\t}\n\n\t\t\tif (reverse) {\n\t\t\t\t// Find the previous available item\n\t\t\t\tdo {\n\t\t\t\t\ti -= this.rowLength;\n\t\t\t\t\tif (i < 0) break;\n\t\t\t\t} while (!CIQ.trulyVisible(items[i]));\n\t\t\t} else {\n\t\t\t\t// Find the next available item\n\t\t\t\tdo {\n\t\t\t\t\ti += this.rowLength;\n\t\t\t\t\tif (i >= items.length) {\n\t\t\t\t\t\ti = items.length - 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} while (!CIQ.trulyVisible(items[i]));\n\t\t\t}\n\n\t\t\tif (i > -1 && i < items.length && items[i] !== focused[0]) {\n\t\t\t\tthis.removeFocused(items);\n\t\t\t\tthis.focusItem(items[i]);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\t/**\n\t\t * After color is chosen from the picker, this function will pass it back to the element which caused the picker to display.\n\t\t *\n\t\t * @param {string} color Color to pass back.\n\t\t *\n\t\t * @tsmember WebComponents.ColorPicker\n\t\t */\n\t\tpickColor(color) {\n\t\t\tif (this.callback) this.callback(color);\n\t\t\tthis.emitCustomEvent({\n\t\t\t\teffect: \"select\",\n\t\t\t\tdetail: {\n\t\t\t\t\tvalue: color\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.close();\n\t\t\tconst controller = CIQ.getFromNS(\n\t\t\t\tdocument,\n\t\t\t\t\"body.keystrokeHub.keyControlElement\"\n\t\t\t);\n\t\t\tif (controller) controller.focusItem(this.caller);\n\t\t\telse this.caller.focus();\n\t\t}\n\n\t\tresize() {\n\t\t\t// do nothing for resize, overrides Dialog default which centers\n\t\t}\n\n\t\t/**\n\t\t * Sets the colors to a newly provided two dimensional array of colors.\n\t\t *\n\t\t * @param {object} colorMap Object that holds an array of various color arrays.\n\t\t *\n\t\t * @tsmember WebComponents.ColorPicker\n\t\t */\n\t\tsetColors(colorMap) {\n\t\t\tthis.params.colorMap = colorMap;\n\t\t\tthis.initialize();\n\t\t}\n\t}\n\n\t/**\n\t * Default array of colors for the component.\n\t *\n\t * @static\n\t * @type {String[][]}\n\t *\n\t * @example\n\t * ColorPicker.defaultColors = [\n\t *\t[\"#ffffff\", \"#e1e1e1\", \"#cccccc\", \"#b7b7b7\"],\n\t *\t[\"#f4977c\", \"#f7ac84\", \"#fbc58d\", \"#fff69e\"]\n\t * ];\n\t *\n\t * @tsmember WebComponents.ColorPicker\n\t */\n\tColorPicker.defaultColors = [\n\t\t[\"#ffffff\", \"#e1e1e1\", \"#cccccc\", \"#b7b7b7\", \"#a0a0a5\", \"#898989\", \"#707070\", \"#626262\", \"#555555\", \"#464646\", \"#363636\", \"#262626\", \"#1d1d1d\", \"#000000\"],\n\t\t[\"#f4977c\", \"#f7ac84\", \"#fbc58d\", \"#fff69e\", \"#c4de9e\", \"#85c99e\", \"#7fcdc7\", \"#75d0f4\", \"#81a8d7\", \"#8594c8\", \"#8983bc\", \"#a187bd\", \"#bb8dbe\", \"#f29bc1\"],\n\t\t[\"#ef6c53\", \"#f38d5b\", \"#f8ae63\", \"#fff371\", \"#acd277\", \"#43b77a\", \"#2ebbb3\", \"#00bff0\", \"#4a8dc8\", \"#5875b7\", \"#625da6\", \"#8561a7\", \"#a665a7\", \"#ee6fa9\"],\n\t\t[\"#ea1d2c\", \"#ee652e\", \"#f4932f\", \"#fff126\", \"#8ec648\", \"#00a553\", \"#00a99c\", \"#00afed\", \"#0073ba\", \"#0056a4\", \"#323390\", \"#66308f\", \"#912a8e\", \"#e9088c\"],\n\t\t[\"#9b0b16\", \"#9e4117\", \"#a16118\", \"#c6b920\", \"#5a852d\", \"#007238\", \"#00746a\", \"#0077a1\", \"#004c7f\", \"#003570\", \"#1d1762\", \"#441261\", \"#62095f\", \"#9c005d\"],\n\t\t[\"#770001\", \"#792e03\", \"#7b4906\", \"#817a0b\", \"#41661e\", \"#005827\", \"#005951\", \"#003b5c\", \"#001d40\", \"#000e35\", \"#04002c\", \"#19002b\", \"#2c002a\", \"#580028\"],\n\t]; // prettier-ignore\n\n\t/**\n\t * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n\t *\n\t * @static\n\t * @type {String}\n\t *\n\t * @tsmember WebComponents.ColorPicker\n\t */\n\tColorPicker.markup = `\n\t\t
        \n\t\t
        \n\t\t\t\n\t\t
        \n\t`;\n\tCIQ.UI.addComponentDefinition(\"cq-color-picker\", ColorPicker);\n}\n\n};\n\n\nlet __js_webcomponents_palette_drawingPalette_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\n\n\n\n\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\nconst Palette = CIQ.UI._webcomponents.list[\"cq-palette\"];\nif (!Palette) {\n\tconsole.error(\n\t\t\"drawingPalette component requires first activating palette component.\"\n\t);\n} else if (!CIQ.Drawing) {\n\tconsole.error(\n\t\t\"drawingPalette component requires first activating drawing feature.\"\n\t);\n} else {\n\t/**\n\t * @classdesc\n\t *\n\t * This is a custom HtmlElement (Web Component). The tag name is the following:\n\t *\n\t *

        <cq-drawing-palette>

        \n\t *\n\t * This component is used to facilitate drawing and annotating on the chart. It displays a palette\n\t * for control and management of drawing tools.\n\t *\n\t * Inherits from ``. Palette components must be placed within a `` component.\n\t *\n\t * This works in conjunction with the [cq-drawing-settings]{@link WebComponents.DrawingSettings} component\n\t * and replaces the cq-toolbar component, providing additional functionality\n\t * and an improved user experience.\n\t *\n\t * Drawing tools support keystroke combinations by setting a `cq-tool-shortcut` attribute in the tool\n\t * `cq-item` element. Combinations take the form Alt+key (upper- or lowercase); for example, Alt+a or\n\t * Alt+A — in either case, the key combination works whether the key is shifted or not. Users can also\n\t * add the modifier Ctrl to the keystroke combination. For example, both Alt+R and Ctrl+Alt+R activate the\n\t * Rectangle tool. The added Ctrl modifier helps provide a unique keystroke combination in the event the Alt+key\n\t * combination is assigned to a function in the web browser or to an application on the user's system.\n\t *\n\t * _**Attributes**_\n\t *\n\t * This component observes the following attributes and will change behavior if these attributes are modified:\n\t * | attribute | description |\n\t * | :---------- | :---------- |\n\t * | view | Palette display style: \"grid\" or \"list\". |\n\t * | active-tool | Current active drawing tool. |\n\t * | docked | The docked state of the palette. Set to \"false\" to float palette over the chart. |\n\t *\n\t * In addition, the following attributes are also supported:\n\t * | attribute | description |\n\t * | :------------------- | :---------- |\n\t * | cq-keystroke-claim | Enables processing of keyboard input. |\n\t *\n\t * If no markup is specified in the menu component, a default markup will be provided. It is **strongly suggested** to allow the default markup\n\t * to be used.\n\t * The default markup utilizes the drawing tools and grouping options set in the default configuration, which is customizable through the component's `context.config` property.\n\t *\n\t * _**Emitters**_\n\t *\n\t * A custom event will be emitted from the component when its view mode is changed.\n\t * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n\t * The details of the event contain the following:\n\t * | property | value |\n\t * | :------- | :---- |\n\t * | effect | \"toggle\" |\n\t * | view | _mode_ |\n\t *\n\t * A custom event will be emitted from the component when the active tool is changed.\n\t * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n\t * The details of the event contain the following:\n\t * | property | value |\n\t * | :------- | :---- |\n\t * | effect | \"select\" |\n\t * | toolName | _tool name_ |\n\t * | activator | _button element pressed_ |\n\t *\n\t * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n\t * The default markup provided has accessibility features.\n\t *\n\t * @example\n\t *\t\n\t *\n\t * @alias WebComponents.DrawingPalette\n\t * @extends WebComponents.Palette\n\t * @class\n\t * @protected\n\t * @since\n\t * - 7.1.0\n\t * - 7.2.0 The drawing settings section has been moved into its own component, [cq-drawing-settings]{@link WebComponents.DrawingSettings}.\n\t * - 7.4.0 Drawing tools now support keystroke combinations by setting a `cq-tool-shortcut` attribute in the tool button.\n\t * - 9.1.0 Observes attributes. Added emitter.\n\t */\n\tclass DrawingPalette extends Palette.classDefinition {\n\t\tstatic get observedAttributes() {\n\t\t\treturn [\"docked\", \"orientation\", \"view\", \"active-tool\"];\n\t\t}\n\n\t\tconstructor() {\n\t\t\tsuper();\n\t\t\tthis.mode = \"\";\n\t\t\tthis.callbacks = [];\n\t\t\tthis.toolSettings = {\n\t\t\t\tfavList: [], // A list of tool names to mark as favorite.\n\t\t\t\ttoolGroup: \"\"\n\t\t\t};\n\t\t\tthis.toolGroups = [];\n\t\t\tthis.groupedTools = {};\n\n\t\t\t// Stores a list of keyboard shortcuts.\n\t\t\tthis.toolShortcuts = {};\n\t\t}\n\n\t\tadoptedCallback() {\n\t\t\tsuper.adoptedCallback();\n\t\t\tCIQ.UI.flattenInheritance(this, DrawingPalette);\n\t\t\tthis.constructor = DrawingPalette;\n\t\t}\n\n\t\tdisconnectedCallback() {\n\t\t\tif (this.doNotDisconnect) return;\n\t\t\tthis.removeClaim(this);\n\t\t\tCIQ.UI.unobserveProperty(\n\t\t\t\t\"toolGroup\",\n\t\t\t\tthis.toolSettings,\n\t\t\t\tthis.toolSettingsListener\n\t\t\t);\n\t\t\tsuper.disconnectedCallback();\n\t\t}\n\n\t\t/**\n\t\t * Processes attribute changes. This is called whenever an observed attribute has changed.\n\t\t *\n\t\t * @param {string} name Attribute name\n\t\t * @param {string} oldValue Original attribute value\n\t\t * @param {string} newValue new Attribute value\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\thandlePropertyChange(name, oldValue, newValue) {\n\t\t\tif (newValue === oldValue) return;\n\t\t\tswitch (name) {\n\t\t\t\tcase \"view\":\n\t\t\t\t\tthis.changeView(null, newValue);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"active-tool\":\n\t\t\t\t\tthis.tool(null, newValue);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tsuper.handlePropertyChange(name, oldValue, newValue);\n\t\t}\n\n\t\t/**\n\t\t * Enable keyboard shortcuts for tools that have a shortcut defined in the chart config.\n\t\t * Add keyboard shortcut text to tooltip.\n\t\t *\n\t\t * @param {object} context Chart context\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tsetupKeyboardActivation(context) {\n\t\t\tif (this.hasAttribute(\"cq-keystroke-claim\")) {\n\t\t\t\t// Define keystrokes\n\t\t\t\tlet toolsWithShortcuts = this.context.topNode.querySelectorAll(\n\t\t\t\t\t\"*[cq-tool][cq-tool-shortcut]\"\n\t\t\t\t);\n\t\t\t\tfor (let idx = 0; idx < toolsWithShortcuts.length; idx++) {\n\t\t\t\t\tlet letter = toolsWithShortcuts[idx].getAttribute(\"cq-tool-shortcut\");\n\t\t\t\t\t// Test for a single alphanumeric character\n\t\t\t\t\tif (/^[A-Za-z0-9]{1}$/g.test(letter)) {\n\t\t\t\t\t\t// Store ref to node and toolname for tool selection\n\t\t\t\t\t\tthis.toolShortcuts[letter.toUpperCase()] = {\n\t\t\t\t\t\t\ttoolName: toolsWithShortcuts[idx].getAttribute(\"cq-tool\"),\n\t\t\t\t\t\t\tnode: toolsWithShortcuts[idx]\n\t\t\t\t\t\t};\n\t\t\t\t\t\t// Add keyboard shortcut to button tool tip\n\t\t\t\t\t\tlet buttonLabel = toolsWithShortcuts[idx].querySelector(\"[label]\");\n\t\t\t\t\t\tlet shortcutLabel = document.createElement(\"span\");\n\t\t\t\t\t\tshortcutLabel.classList.add(\"shortcut\");\n\t\t\t\t\t\tshortcutLabel.innerHTML = \" (Alt+\" + letter.toUpperCase() + \")\";\n\n\t\t\t\t\t\tbuttonLabel.appendChild(shortcutLabel);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\"cq-tool-shortcut attribute must be a single letter: \" +\n\t\t\t\t\t\t\t\tletter +\n\t\t\t\t\t\t\t\t\" ignored.\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// add keyboard claim for entire body\n\t\t\t\tthis.addClaim(this);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Handler for keyboard interaction.\n\t\t *\n\t\t * Key combinations defined in the context config will activate select tools.\n\t\t *\n\t\t * @param {CIQ.UI.KeystrokeHub} hub The hub that processed the key\n\t\t * @param {string} key Key that was stroked\n\t\t * @param {object} e The event object\n\t\t * @return {boolean} true if keystroke was processed\n\t\t *\n\t\t * @example Configuration of a shortcut in context (Alt-w will activate Annotation tool):\n\t\t * stxx.uiContext.config.drawingTools = [\n\t\t *\t{ type: \"dt\", tool: \"annotation\", group: \"text\", label: \"Annotation\", shortcut: \"w\" },\n\t\t * ...\n\t\t * ];\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tkeyStroke(hub, key, e) {\n\t\t\tif (e.altKey && !e.ctrlKey && !e.shiftKey) {\n\t\t\t\tkey = e.code.replace(/^(Key|Digit|Numpad)/, \"\");\n\t\t\t\tlet toolSelection = this.toolShortcuts[key.toUpperCase()];\n\n\t\t\t\tif (toolSelection) {\n\t\t\t\t\t// Activate the drawing palette if it isn't already\n\t\t\t\t\t// this.context.stx.layout.drawing=true;\n\t\t\t\t\tconst drawingChannel = this.channels\n\t\t\t\t\t\t? this.channels.drawing\n\t\t\t\t\t\t: \"channel.drawing\";\n\t\t\t\t\tthis.channelWrite(drawingChannel, true);\n\n\t\t\t\t\t// Activate the tool. Pass a reference to the palette button so its activated state is changed.\n\t\t\t\t\tthis.tool({ node: toolSelection.node }, toolSelection.toolName);\n\t\t\t\t}\n\t\t\t} else if (e.key === \"Escape\") {\n\t\t\t\tlet notoolTool = this.context.topNode.querySelector(\n\t\t\t\t\t'*[cq-tool=\"notool\"]'\n\t\t\t\t);\n\t\t\t\tif (notoolTool) this.noTool({ node: notoolTool });\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Handler for responding to messaging sent from other palettes `sendMessage` function.\n\t\t *\n\t\t * @param {string} id Identifier for the message\n\t\t * @param {object | string} message Optional data accompanying the message\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\thandleMessage(id, message) {\n\t\t\tswitch (id) {\n\t\t\t\tcase \"changeToolSettings\":\n\t\t\t\t\tthis.activateTool(message.activator, message.toolName);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"toggleDrawingPalette\":\n\t\t\t\t\tthis.togglePalette();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"hideDrawingPalette\":\n\t\t\t\t\tthis.hidePalette();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"dockWillResize\":\n\t\t\t\t\tthis.hidePalette();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"dockDidResize\":\n\t\t\t\t\tthis.resetScroller();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"context\":\n\t\t\t\t\tif (message === \"stop\") this.toolContextMenu.style.display = \"none\";\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Retrieve list of tools from local storage.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tloadToolSettings() {\n\t\t\tif (this.store) {\n\t\t\t\tlet self = this;\n\t\t\t\tthis.store.get(\n\t\t\t\t\t\"CIQ.DrawingToolSettings\",\n\t\t\t\t\tfunction (error, lsDrawingTools) {\n\t\t\t\t\t\tif (!error && lsDrawingTools && lsDrawingTools.favList) {\n\t\t\t\t\t\t\tself.toolSettings = Object.assign(\n\t\t\t\t\t\t\t\tself.toolSettings,\n\t\t\t\t\t\t\t\tlsDrawingTools\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Save tool settings to local storage\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tstoreToolSettings() {\n\t\t\tif (this.store)\n\t\t\t\tthis.store.set(\n\t\t\t\t\t\"CIQ.DrawingToolSettings\",\n\t\t\t\t\tJSON.stringify(this.toolSettings)\n\t\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * Called for a registered component when the context is constructed.\n\t\t * Sets the context property of the component.\n\t\t *\n\t\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tsetContext(context) {\n\t\t\tconst { config, stx } = context;\n\n\t\t\tif (config) {\n\t\t\t\tconst {\n\t\t\t\t\tchannels = {},\n\t\t\t\t\tdrawingToolGrouping = [],\n\t\t\t\t\tnameValueStore\n\t\t\t\t} = config;\n\n\t\t\t\tconst { groupedTools } = this;\n\t\t\t\tif (config.drawingTools) {\n\t\t\t\t\t(config.drawingTools = config.drawingTools.filter(\n\t\t\t\t\t\t({ tool }) => CIQ.Drawing[tool]\n\t\t\t\t\t)).forEach((toolElem) => {\n\t\t\t\t\t\tlet toolGroup = toolElem.group;\n\t\t\t\t\t\tgroupedTools[toolGroup] = groupedTools[toolGroup]\n\t\t\t\t\t\t\t? [...groupedTools[toolGroup], toolElem]\n\t\t\t\t\t\t\t: [toolElem];\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis.toolGroups = drawingToolGrouping || [];\n\t\t\t\tthis.store =\n\t\t\t\t\t(nameValueStore && new nameValueStore()) ||\n\t\t\t\t\t(CIQ.NameValueStore && new CIQ.NameValueStore());\n\t\t\t\tthis.addDefaultMarkup(this, this.getMarkup(config));\n\n\t\t\t\tconst toolGrouping = config.drawingToolGrouping\n\t\t\t\t\t.filter((groupListItem) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t[\"All\", \"Favorites\"].includes(groupListItem) ||\n\t\t\t\t\t\t\tconfig.drawingTools.some(\n\t\t\t\t\t\t\t\t({ group }) => group === groupListItem.toLowerCase()\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t})\n\t\t\t\t\t.map((group) => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: \"item\",\n\t\t\t\t\t\t\tlabel: group,\n\t\t\t\t\t\t\ttap: \"setToolGroup\",\n\t\t\t\t\t\t\tvalue: group.toLowerCase()\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\n\t\t\t\tcontext.config.menus.toolgrouping.content = toolGrouping;\n\t\t\t\tconst toolGroupMenu = this.querySelector(\".ciq-tool-group-selection\");\n\t\t\t\tif (toolGroupMenu) {\n\t\t\t\t\ttoolGroupMenu.setAttribute(\"config\", \"\");\n\t\t\t\t\ttoolGroupMenu.setAttribute(\"config\", \"toolgrouping\");\n\t\t\t\t}\n\t\t\t\tthis.channels = { drawing: channels.drawing || \"channel.drawing\" };\n\t\t\t}\n\t\t\tthis.init();\n\t\t\tthis.loadToolSettings();\n\t\t\tthis.params = {\n\t\t\t\ttoolGroupSelection: this.node.find(\"*[cq-tool-group-selection]\")\n\t\t\t};\n\t\t\tthis.setFavorites();\n\t\t\tthis.setMode(\"grid\");\n\t\t\tthis.setEvenOdd();\n\n\t\t\t// Inject the right click menu\n\t\t\tthis.toolContextMenu = this.createContextMenu();\n\n\t\t\tthis.addEventListener(\n\t\t\t\t\"contextmenu\",\n\t\t\t\tfunction (event) {\n\t\t\t\t\tconst targetElem = event.target.hasAttribute(\"cq-tool-group\")\n\t\t\t\t\t\t? event.target\n\t\t\t\t\t\t: CIQ.climbUpDomTree(event.target, \"[cq-tool-group]\")[0];\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tif (targetElem) {\n\t\t\t\t\t\t// Only concerned with elements that have a cq-tool-group property\n\t\t\t\t\t\tlet targetRect = targetElem.getBoundingClientRect();\n\t\t\t\t\t\t// Need to position the context menu relative to the parent because the palette can change position\n\t\t\t\t\t\tlet parentRect = this.getBoundingClientRect();\n\t\t\t\t\t\tthis.showToolContextMenu(\n\t\t\t\t\t\t\ttargetElem.getAttribute(\"cq-tool\"),\n\t\t\t\t\t\t\tevent.clientY + targetRect.height - parentRect.top,\n\t\t\t\t\t\t\tevent.clientX - parentRect.left\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}.bind(this)\n\t\t\t);\n\n\t\t\tthis.setupKeyboardActivation();\n\t\t\tthis.pairUndoRedo();\n\n\t\t\t// Set the tool group if it has been saved in local storage\n\t\t\tif (this.toolSettings.toolGroup) {\n\t\t\t\t// Allow the menu to render before attempting to select a group\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t// TODO: Once shadow dom is lifted, this can skip selecting groupMenu and instead use this.querySelector to get the menu item.\n\t\t\t\t\tconst groupMenu = this.querySelector(\n\t\t\t\t\t\t\"cq-menu.ciq-tool-group-selection\"\n\t\t\t\t\t);\n\t\t\t\t\tif (groupMenu) {\n\t\t\t\t\t\tlet groupMenuItem = groupMenu.qsa(\n\t\t\t\t\t\t\t'li.item[feature=\"' + this.toolSettings.toolGroup + '\"]',\n\t\t\t\t\t\t\tgroupMenu,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t\twindow.testBtn = groupMenuItem;\n\t\t\t\t\t\tif (groupMenuItem[0]) groupMenuItem[0].click();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.channels) {\n\t\t\t\tthis.channelSubscribe(\n\t\t\t\t\tthis.channels.drawing || \"channel.drawing\",\n\t\t\t\t\t(value) => {\n\t\t\t\t\t\tconst currentVectorType = stx.currentVectorParameters.vectorType;\n\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\tthis.resetScroller();\n\t\t\t\t\t\t\tif (!currentVectorType) {\n\t\t\t\t\t\t\t\t// setting value to \"\" signals that crosshairs should be disabled\n\t\t\t\t\t\t\t\tstx.changeVectorType(this.priorVectorType || \"\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.setActiveTool(currentVectorType || \"notool\");\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tthis.tabIndex = -1;\n\t\t\t\t\t\t\t\tthis.focus();\n\t\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst { multiChartContainer } = this.container.topNode;\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tmultiChartContainer &&\n\t\t\t\t\t\t\t\tCIQ.getFromNS(this, \"context.config.soloActive.onDraw\")\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tArray.from(\n\t\t\t\t\t\t\t\t\tmultiChartContainer.querySelectorAll(\"cq-drawing-palette\")\n\t\t\t\t\t\t\t\t).forEach((palette) => {\n\t\t\t\t\t\t\t\t\tpalette.priorVectorType = currentVectorType;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.priorVectorType = currentVectorType;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// setting value to null signals that normal crosshair behavior should return\n\t\t\t\t\t\t\tstx.changeVectorType(null);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tthis.channelSubscribe(\n\t\t\t\t\tthis.channels.breakpoint || \"channel.breakpoint\",\n\t\t\t\t\t(value) => {\n\t\t\t\t\t\tif (value === \"break-sm\") this.setMode(\"list\");\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Pair undo and redo buttons\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tpairUndoRedo() {\n\t\t\tconst redo = this.qs(\"cq-redo\", this);\n\t\t\tconst undo = this.qs(\"cq-undo\", this);\n\t\t\tredo.pairUp(undo);\n\t\t}\n\n\t\t/**\n\t\t * Change palette view mode\n\t\t *\n\t\t * @param {Object} [activator] Pass `null` when calling programmatically.\n\t\t * @param {HTMLElement} [activator.node] Element that triggered this function.\n\t\t * @param {string} modeName Palette view mode. Either \"list\" or \"grid\".\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tchangeView(activator, modeName) {\n\t\t\tif (!this.context) return;\n\t\t\tthis.setMode(modeName);\n\t\t\tfor (\n\t\t\t\tlet i = 0;\n\t\t\t\ti < this.callbacks.length;\n\t\t\t\ti++ // let any callbacks know that the palette mode has changed\n\t\t\t)\n\t\t\t\tthis.callbacks[i].call(this, this.mode);\n\t\t}\n\n\t\t/**\n\t\t * Create palette context menu for adding/removing favorite tool assignment in grid view.\n\t\t *\n\t\t * @return {HTMLElement} The context menu element.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tcreateContextMenu() {\n\t\t\t// Add/Remove Favorites menu item\n\t\t\tlet addToFavorites = document.createElement(\"div\");\n\t\t\taddToFavorites.className = \"menu-item\";\n\t\t\taddToFavorites.innerHTML = \"Add/Remove Favorite\";\n\t\t\taddToFavorites.addEventListener(\n\t\t\t\t\"mousedown\",\n\t\t\t\tfunction (event) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tif (event.button < 2) {\n\t\t\t\t\t\t// Right click fires this event too so check for a left mouse button event\n\t\t\t\t\t\tthis.toggleFavorite(\n\t\t\t\t\t\t\tevent.currentTarget.parentElement.getAttribute(\"context-tool\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.paletteDock.stopContext(this);\n\t\t\t\t\t}\n\t\t\t\t}.bind(this)\n\t\t\t);\n\n\t\t\t// Stop propagation on pointerdown to prevent enabling any drawing tools as a result of clicking the menu\n\t\t\taddToFavorites.addEventListener(\"pointerdown\", (event) =>\n\t\t\t\tevent.stopPropagation()\n\t\t\t);\n\n\t\t\tlet contextMenu = document.createElement(\"div\");\n\t\t\tcontextMenu.appendChild(addToFavorites);\n\t\t\tcontextMenu.className = \"tool-context-menu\";\n\t\t\tthis.node.append(contextMenu);\n\t\t\treturn contextMenu;\n\t\t}\n\n\t\t/**\n\t\t * Register callback function\n\t\t *\n\t\t * @param {function} fc Callback function\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tregisterCallback(fc) {\n\t\t\tthis.callbacks.push(fc);\n\t\t}\n\n\t\t/**\n\t\t * Resets the tool scrollbar. Use if the container size or contents have changes.\n\t\t *\n\t\t * @return {boolean} Returns false when scroller element is not found.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tresetScroller() {\n\t\t\tconst scroller = this.querySelector(\".tool-group cq-scroll\");\n\t\t\tif (!scroller) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.setEvenOdd();\n\t\t\tscroller.refresh();\n\t\t\treturn true;\n\t\t}\n\n\t\t/**\n\t\t * Set the active tool.\n\t\t *\n\t\t * @param {string} toolName Name of drawing tool to activate.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tsetActiveTool(toolName) {\n\t\t\tconst toolButton = this.querySelector(`cq-item[cq-tool=${toolName}]`);\n\t\t\tif (toolButton) this.tool({ node: toolButton });\n\t\t}\n\n\t\t/**\n\t\t * Set tool button as active.\n\t\t *\n\t\t * @param {HTMLElement} activeNode Tool button element.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tsetActiveButton(activeNode) {\n\t\t\tconst previousActive = this.node.find(\".ciq-tool.active\");\n\t\t\tif (previousActive) {\n\t\t\t\tpreviousActive.removeClass(\"active\");\n\t\t\t\tpreviousActive.removeAttr(\"aria-checked\");\n\t\t\t\tpreviousActive.removeAttr(\"aria-current\");\n\t\t\t}\n\t\t\tif (activeNode) {\n\t\t\t\tactiveNode.classList.add(\"active\");\n\t\t\t\tconst aria =\n\t\t\t\t\tactiveNode.getAttribute(\"role\") === \"radio\"\n\t\t\t\t\t\t? \"aria-checked\"\n\t\t\t\t\t\t: \"aria-current\";\n\t\t\t\tactiveNode.setAttribute(aria, \"true\");\n\t\t\t\tactiveNode.setAttribute(\"aria-checked\", \"true\");\n\t\t\t\tactiveNode.setAttribute(\"aria-current\", \"true\");\n\t\t\t}\n\t\t\t// Don't want to automatically show the palette when using the mobile menu\n\t\t\tif (\n\t\t\t\t!CIQ.trulyVisible(\n\t\t\t\t\tthis.ownerDocument.querySelector(\".ciq-mobile-palette-toggle\")\n\t\t\t\t)\n\t\t\t)\n\t\t\t\tthis.togglePalette();\n\t\t}\n\n\t\t/**\n\t\t * Set palette view mode\n\t\t *\n\t\t * @param {string} mode Palette view mode. Either \"list\" or \"grid\".\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tsetMode(mode) {\n\t\t\t// Default to grid mode unless list is specified\n\t\t\tmode = mode === \"list\" ? mode : \"grid\";\n\t\t\tthis.mode = mode;\n\t\t\tthis.classList.remove(\"list\", \"grid\");\n\t\t\tthis.classList.add(this.mode);\n\t\t\tthis.setAttribute(\"view\", this.mode);\n\n\t\t\tthis.querySelectorAll(\"[cq-view]\").forEach((el) =>\n\t\t\t\tel.setAttribute(\"aria-checked\", \"false\")\n\t\t\t);\n\t\t\tthis.querySelector(`[cq-view=${mode}]`).setAttribute(\n\t\t\t\t\"aria-checked\",\n\t\t\t\t\"true\"\n\t\t\t);\n\t\t\t// set up tools as groups in list mode, since there will be option to add/remove favorite\n\t\t\tthis.querySelectorAll(\".fav-marker\").forEach((el) => {\n\t\t\t\tconst labelledby = el.parentElement.querySelector(\"[id]\");\n\t\t\t\tel.setAttribute(\"role\", mode === \"list\" ? \"button\" : \"none\");\n\t\t\t\tel.parentElement.setAttribute(\n\t\t\t\t\t\"role\",\n\t\t\t\t\tmode === \"list\" ? \"group\" : \"radio\"\n\t\t\t\t);\n\t\t\t\tif (labelledby) {\n\t\t\t\t\tlabelledby.setAttribute(\"role\", mode === \"list\" ? \"radio\" : \"none\");\n\t\t\t\t\tel.parentElement.setAttribute(\n\t\t\t\t\t\t\"aria-labelledby\",\n\t\t\t\t\t\tmode === \"list\" ? labelledby.id : \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.sortToolButtons();\n\n\t\t\tthis.resetScroller();\n\t\t\tif (this.paletteDock.handleResize)\n\t\t\t\tthis.paletteDock.handleResize({ resizeChart: true });\n\n\t\t\tthis.emitCustomEvent({\n\t\t\t\teffect: \"view\",\n\t\t\t\tdetail: {\n\t\t\t\t\tview: mode\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Set palette palette tool button even/odd class for styling in grid view mode.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tsetEvenOdd() {\n\t\t\t// Gives an 'odd' class to odd number buttons in each group div in 'grid' mode in order to place their tooltips correctly.\n\t\t\tconst groupNodes = this.querySelectorAll(\n\t\t\t\t\".tool-group cq-scroll .drawing-tools-group\"\n\t\t\t);\n\t\t\tif (!groupNodes.length) return;\n\t\t\tgroupNodes.forEach((node) => {\n\t\t\t\tconst groupToolNodes = node.querySelectorAll(\"cq-item\");\n\t\t\t\tlet odd = false;\n\t\t\t\tfor (let n = 0; n < groupToolNodes.length; n++) {\n\t\t\t\t\tif (!CIQ.trulyVisible(groupToolNodes[n])) continue;\n\t\t\t\t\tgroupToolNodes[n].classList[odd ? \"add\" : \"remove\"](\"odd\");\n\t\t\t\t\todd = !odd;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Add the favorite badge to relevant tools. Add a favorite toggle star to each tool for use in list view and mobile layout.\n\t\t *\n\t\t * @param {boolean} propagateSettings Effect the settings on all charts in a multichart environment. Defaults to `true`.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tsetFavorites(propagateSettings = true) {\n\t\t\tconst toolButtons = this.querySelectorAll(\".tool-group [cq-tool]\");\n\t\t\tfor (\n\t\t\t\tlet toolButtonIdx = 0;\n\t\t\t\ttoolButtonIdx < toolButtons.length;\n\t\t\t\ttoolButtonIdx++\n\t\t\t) {\n\t\t\t\tconst toolButton = toolButtons[toolButtonIdx];\n\t\t\t\tlet favMarker = toolButton.querySelector(\".fav-marker\");\n\t\t\t\tif (favMarker === null) {\n\t\t\t\t\tfavMarker = document.createElement(\"div\");\n\t\t\t\t\t// All buttons get the div.fav-marker element to click on in list view.\n\t\t\t\t\tfavMarker.className = \"fav-marker\";\n\t\t\t\t\tfavMarker.setAttribute(\"aria-label\", \"Favorite\");\n\t\t\t\t\tfavMarker.addEventListener(\n\t\t\t\t\t\t\"click\",\n\t\t\t\t\t\tthis.handleFavoriteClick.bind(this)\n\t\t\t\t\t);\n\t\t\t\t\tfavMarker.addEventListener(\n\t\t\t\t\t\t\"touchstart\",\n\t\t\t\t\t\tthis.handleFavoriteClick.bind(this),\n\t\t\t\t\t\t{ capture: true, passive: false }\n\t\t\t\t\t);\n\t\t\t\t\tfavMarker.addEventListener(\"pointerdown\", (event) =>\n\t\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\t);\n\t\t\t\t\ttoolButton.appendChild(favMarker);\n\t\t\t\t}\n\t\t\t\tif (toolButton.getAttribute(\"cq-tool-group\").indexOf(\"favorite\") >= 0) {\n\t\t\t\t\t// Remove favorite group value if it's there.\n\t\t\t\t\ttoolButton.setAttribute(\n\t\t\t\t\t\t\"cq-tool-group\",\n\t\t\t\t\t\ttoolButton.getAttribute(\"cq-tool-group\").replace(\"favorite\", \"\")\n\t\t\t\t\t);\n\t\t\t\t\tfavMarker.removeAttribute(\"aria-pressed\");\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tthis.toolSettings.favList.indexOf(\n\t\t\t\t\t\ttoolButton.getAttribute(\"cq-tool\")\n\t\t\t\t\t) >= 0\n\t\t\t\t) {\n\t\t\t\t\t// Apply the favorite tool group to tools in the favorites list.\n\t\t\t\t\ttoolButton.setAttribute(\n\t\t\t\t\t\t\"cq-tool-group\",\n\t\t\t\t\t\ttoolButton.getAttribute(\"cq-tool-group\") + \" favorite\"\n\t\t\t\t\t);\n\t\t\t\t\tfavMarker.setAttribute(\"aria-pressed\", \"true\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.sortToolButtons();\n\t\t\tconst { multiChartContainer } = this.context.topNode;\n\t\t\tif (propagateSettings && multiChartContainer) {\n\t\t\t\t// synchronize favourites in other open palettes.\n\t\t\t\tmultiChartContainer.getCharts().forEach((chart) => {\n\t\t\t\t\tconst contextContainer = chart.uiContext.topNode;\n\t\t\t\t\tconst wrapper = contextContainer.closest(\"cq-context-wrapper\");\n\t\t\t\t\tif (!wrapper || contextContainer === this.context.topNode) return;\n\t\t\t\t\tconst drawingPalette =\n\t\t\t\t\t\tcontextContainer.querySelector(\"cq-drawing-palette\");\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tdrawingPalette.loadToolSettings();\n\t\t\t\t\t\tdrawingPalette.setFavorites(false);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Sort buttons in order defined by the config, grouping those marked favorite first.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tsortToolButtons() {\n\t\t\tconst toolContainer = this.querySelector(\".tool-group cq-scroll\"),\n\t\t\t\tscrollbar =\n\t\t\t\t\ttoolContainer &&\n\t\t\t\t\ttoolContainer.querySelector(\".ps__rail-x, .ps__rail-y\"),\n\t\t\t\t{ groupedTools, toolGroups, toolSettings } = this,\n\t\t\t\t{ favList } = toolSettings,\n\t\t\t\tmode = this.classList.contains(\"grid\") ? \"grid\" : \"list\",\n\t\t\t\taddToContainer = (elem) => {\n\t\t\t\t\t// insertBefore automatically detaches the element from its current position and reattaches it at the bottom above the scrollbar\n\t\t\t\t\tif (scrollbar) toolContainer.insertBefore(elem, scrollbar);\n\t\t\t\t\telse toolContainer.appendChild(elem);\n\t\t\t\t},\n\t\t\t\tmakeToolGroupDiv = (group, groupName) => {\n\t\t\t\t\tconst groupDiv = document.createElement(\"div\");\n\t\t\t\t\tgroupDiv.setAttribute(\"class\", `drawing-tools-group ${groupName}`);\n\t\t\t\t\tgroupDiv.setAttribute(\"role\", \"group\");\n\t\t\t\t\tgroupDiv.setAttribute(\n\t\t\t\t\t\t\"aria-labelledby\",\n\t\t\t\t\t\t`drawing_tools_group_${groupName}`\n\t\t\t\t\t);\n\t\t\t\t\tgroup.forEach((tool) => {\n\t\t\t\t\t\tconst name = tool.tool || tool;\n\t\t\t\t\t\tif (groupName !== \"favorites\" && favList.includes(name)) return;\n\t\t\t\t\t\tconst toolElem = this.querySelector(\n\t\t\t\t\t\t\t\".tool-group [cq-tool=\" + name + \"]\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (toolElem) groupDiv.appendChild(toolElem);\n\t\t\t\t\t});\n\n\t\t\t\t\tgroupDiv.insertAdjacentHTML(\n\t\t\t\t\t\t\"beforeend\",\n\t\t\t\t\t\t``\n\t\t\t\t\t);\n\n\t\t\t\t\treturn groupDiv;\n\t\t\t\t},\n\t\t\t\tmoveToolToBottom = (tool, isFavGroup) => {\n\t\t\t\t\tconst toolElem = this.querySelector(\n\t\t\t\t\t\t\t\".tool-group [cq-tool=\" + tool.tool + \"]\"\n\t\t\t\t\t\t),\n\t\t\t\t\t\tisFavTool = toolElem\n\t\t\t\t\t\t\t.getAttribute(\"cq-tool-group\")\n\t\t\t\t\t\t\t.includes(\"favorite\"),\n\t\t\t\t\t\tisFavMatch = isFavGroup ? isFavTool : !isFavTool;\n\t\t\t\t\tif (toolElem && isFavMatch) addToContainer(toolElem);\n\t\t\t\t},\n\t\t\t\tremoveToolGroupDivs = () => {\n\t\t\t\t\ttoolContainer\n\t\t\t\t\t\t.querySelectorAll(\"div.drawing-tools-group\")\n\t\t\t\t\t\t.forEach((elem) => {\n\t\t\t\t\t\t\tif (elem.children.length <= 1) elem.remove();\n\t\t\t\t\t\t});\n\t\t\t\t};\n\t\t\tif (mode === \"grid\") {\n\t\t\t\tif (favList.length)\n\t\t\t\t\taddToContainer(makeToolGroupDiv(favList, \"favorites\"));\n\t\t\t\ttoolGroups.forEach((groupName) => {\n\t\t\t\t\tconst groupname = groupName.toLowerCase();\n\t\t\t\t\tconst groupTools = groupedTools[groupname];\n\t\t\t\t\tif (groupTools) {\n\t\t\t\t\t\tconst toolGroupDiv = makeToolGroupDiv(groupTools, groupname);\n\t\t\t\t\t\taddToContainer(toolGroupDiv);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tfor (const groupname in groupedTools) {\n\t\t\t\t\tif (!toolGroups.includes(CIQ.capitalize(groupname))) {\n\t\t\t\t\t\tconst toolGroupDiv = makeToolGroupDiv(\n\t\t\t\t\t\t\tgroupedTools[groupname],\n\t\t\t\t\t\t\tgroupname\n\t\t\t\t\t\t);\n\t\t\t\t\t\taddToContainer(toolGroupDiv);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (mode === \"list\") {\n\t\t\t\t// Sort buttons in order defined by the config, grouping those marked favorite first.\n\t\t\t\tfor (let tool of this.context.config.drawingTools) {\n\t\t\t\t\tmoveToolToBottom(tool, true);\n\t\t\t\t}\n\t\t\t\tfor (let tool of this.context.config.drawingTools) {\n\t\t\t\t\tmoveToolToBottom(tool, false);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Remove group divs if they have no tools in them.\n\t\t\tremoveToolGroupDivs();\n\t\t}\n\n\t\t/**\n\t\t * Handle tool favorite button click\n\t\t *\n\t\t * @param {Event} event Button click event.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\thandleFavoriteClick(event) {\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\t\t\tthis.toggleFavorite(event.target.parentElement.getAttribute(\"cq-tool\"));\n\t\t\t// The mobile palette is toggled after the tool selection so hide it now so the toggle will show it again\n\t\t\tthis.hidePalette();\n\t\t}\n\n\t\t/**\n\t\t * Add the tool to the list of favorites\n\t\t *\n\t\t * @param {string} toolName Name of drawing tool\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\taddFavorite(toolName) {\n\t\t\tif (this.toolSettings.favList.indexOf(toolName) < 0) {\n\t\t\t\tthis.toolSettings.favList.push(toolName);\n\t\t\t\tthis.storeToolSettings();\n\t\t\t\tthis.setFavorites();\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Display the tool context menu.\n\t\t *\n\t\t * @param {string} toolName Name of drawing tool.\n\t\t * @param {number} top Top coordinate of context menu position relative to chart context.\n\t\t * @param {number} left Left coordinate of context menu position relative to chart context.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tshowToolContextMenu(toolName, top, left) {\n\t\t\tthis.toolContextMenu.style.display = \"block\";\n\t\t\tthis.toolContextMenu.style.top = top + \"px\";\n\t\t\tthis.toolContextMenu.style.left = left + \"px\";\n\t\t\tthis.toolContextMenu.setAttribute(\"context-tool\", toolName);\n\t\t\tthis.paletteDock.startContext(this);\n\t\t}\n\n\t\t/**\n\t\t * Toggle favorite state of drawing tool.\n\t\t *\n\t\t * @param {string} toolName Name of drawing tool.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\ttoggleFavorite(toolName) {\n\t\t\tlet toggleIdx = this.toolSettings.favList.indexOf(toolName);\n\t\t\tif (toggleIdx >= 0) {\n\t\t\t\tthis.toolSettings.favList.splice(toggleIdx, 1);\n\t\t\t} else {\n\t\t\t\tthis.toolSettings.favList.push(toolName);\n\t\t\t}\n\t\t\tthis.storeToolSettings();\n\t\t\tthis.setFavorites();\n\t\t\tthis.setEvenOdd();\n\t\t}\n\n\t\t/**\n\t\t * Change displayed tool group.\n\t\t *\n\t\t * @param {Object} [activator] Pass `null` when calling programmatically.\n\t\t * @param {HTMLElement} [activator.node] Element that triggered this function.\n\t\t * @param {string} groupName Name of tool group to display.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tsetToolGroup(activator, groupName) {\n\t\t\t// Filter tools by their group.\n\t\t\tthis.toolSettings.toolGroup = groupName;\n\t\t\tthis.querySelector(\".tool-group\").setAttribute(\n\t\t\t\t\"tool-group-filter\",\n\t\t\t\tthis.toolSettings.toolGroup\n\t\t\t);\n\t\t\tthis.querySelector(\".tool-group cq-scroll\").top();\n\t\t\tthis.setEvenOdd();\n\t\t\tfor (\n\t\t\t\tlet i = 0;\n\t\t\t\ti < this.callbacks.length;\n\t\t\t\ti++ // let any callbacks know that the palette mode has changed\n\t\t\t)\n\t\t\t\tthis.callbacks[i].call(this, this.mode);\n\t\t\t// The mobile palette will be hidden if resize is called in the callbacks. Show it again afterward\n\t\t\tthis.showPalette();\n\t\t\tthis.storeToolSettings();\n\t\t}\n\n\t\t/**\n\t\t * Binding function for the Tool Groups filter.\n\t\t *\n\t\t * @param {HTMLElement} node Node that owns the binding; usually, the filter menu.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tbindToolGroups(node) {\n\t\t\tthis.toolSettingsListener = (obj) => {\n\t\t\t\tCIQ.makeTranslatableElement(\n\t\t\t\t\tnode,\n\t\t\t\t\tthis.context.stx,\n\t\t\t\t\tCIQ.capitalize(obj.value || \"all\")\n\t\t\t\t);\n\t\t\t};\n\t\t\tCIQ.UI.observeProperty(\n\t\t\t\t\"toolGroup\",\n\t\t\t\tthis.toolSettings,\n\t\t\t\tthis.toolSettingsListener\n\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * Used in break-sm context to show/hide the palette for mobile layout\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\ttogglePalette() {\n\t\t\tthis.classList.toggle(\"palette-hide\");\n\t\t}\n\n\t\t/**\n\t\t * Used in break-sm context to hide the palette for mobile layout\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\thidePalette() {\n\t\t\tthis.classList.add(\"palette-hide\");\n\t\t}\n\n\t\t/**\n\t\t * Used in break-sm context to show the palette for mobile layout\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tshowPalette() {\n\t\t\tthis.classList.remove(\"palette-hide\");\n\t\t}\n\n\t\t/**\n\t\t * Activate drawing tool. Called by `tool` function.\n\t\t *\n\t\t * @param {Object} [activator] Pass `null` when calling programmatically.\n\t\t * @param {HTMLElement} [activator.node] Element that triggered this function.\n\t\t * @param {string} toolName Name of drawing tool to activate.\n\t\t *\n\t\t * @return {HTMLElement} Returns palette tool button element for the specified tool.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tactivateTool(activator, toolName) {\n\t\t\tlet buttonRef = null;\n\t\t\tif ((!activator || !activator.node) && toolName) {\n\t\t\t\t// Find the tool button by its cq-tool attribute.\n\t\t\t\t// Necessary for cases then the button is not clicked, such as the drawing context menu \"Edit Settings\"\n\t\t\t\tbuttonRef = this.querySelector(\"[cq-tool=\" + toolName + \"]\");\n\t\t\t} else {\n\t\t\t\tbuttonRef = activator.node;\n\t\t\t}\n\t\t\tthis.setActiveButton(buttonRef);\n\t\t\tthis.setAttribute(\"active-tool\", toolName);\n\n\t\t\tif (this.lastToolChangeEvent !== toolName) {\n\t\t\t\tthis.lastToolChangeEvent = toolName;\n\t\t\t\tthis.emitCustomEvent({\n\t\t\t\t\teffect: \"select\",\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\ttoolName: toolName,\n\t\t\t\t\t\tactivator: buttonRef\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet stxArr = [this.context.stx];\n\t\t\tif (stxArr[0].uiContext.topNode.getCharts)\n\t\t\t\tstxArr = stxArr[0].uiContext.topNode.getCharts();\n\t\t\tstxArr.forEach((stx) => {\n\t\t\t\tstx.clearMeasure();\n\t\t\t\tstx.changeVectorType(toolName == \"notool\" ? \"\" : toolName);\n\t\t\t\tif (toolName === \"notool\") {\n\t\t\t\t\tstx.container.classList.remove(\"stx-crosshair-cursor-on\");\n\t\t\t\t} else {\n\t\t\t\t\tstx.container.classList.add(\"stx-crosshair-cursor-on\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn buttonRef;\n\t\t}\n\n\t\t/**\n\t\t * Activate No Tool. Disables any active drawing tools.\n\t\t *\n\t\t * @param {Object} [activator] Pass `null` when calling programmatically.\n\t\t * @param {HTMLElement} [activator.node] Element that triggered this function.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tnoTool(activator) {\n\t\t\tthis.tool(activator, \"notool\");\n\t\t}\n\n\t\t/**\n\t\t * Activate drawing tool. Sends `changeTool` message to other palettes.\n\t\t *\n\t\t * @param {Object} [activator] Pass `null` when calling programmatically.\n\t\t * @param {HTMLElement} [activator.node] Element that triggered this function.\n\t\t * @param {string} toolName Name of drawing tool to activate.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\ttool(activator, toolName) {\n\t\t\tif (!toolName && activator)\n\t\t\t\ttoolName = activator.node.getAttribute(\"cq-tool\");\n\t\t\tif (!toolName || !this.context) return;\n\t\t\tif (this.context.stx.currentVectorParameters.vectorType == toolName)\n\t\t\t\treturn;\n\t\t\tlet activatedToolButton = this.activateTool(activator, toolName);\n\t\t\tif (!activator) activator = { node: activatedToolButton };\n\t\t\tlet toolLabel = activator.node.querySelector(\"[label]\").innerHTML;\n\t\t\tif (this.sendMessage) {\n\t\t\t\tthis.sendMessage(\"changeTool\", {\n\t\t\t\t\tactivator: activator,\n\t\t\t\t\ttoolName: toolName,\n\t\t\t\t\ttoolLabel: toolLabel\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Sends `clearDrawings` message to other palettes.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tclearDrawings() {\n\t\t\tif (this.sendMessage) {\n\t\t\t\tthis.sendMessage(\"clearDrawings\");\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Restore drawing settings default configuration.\n\t\t *\n\t\t * @param {Object} [activator] Pass `null` when calling programmatically.\n\t\t * @param {HTMLElement} [activator.node] Element that triggered this function.\n\t\t * @param {boolean} all Set to `true` to restore default for all drawing objects. Otherwise only the active drawing object's defaults are restored.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\trestoreDefaultConfig(activator, all) {\n\t\t\tif (this.sendMessage) {\n\t\t\t\tthis.sendMessage(\"restoreDefaultConfig\", {\n\t\t\t\t\tactivator: activator,\n\t\t\t\t\tall: all\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Injects tool button markup, set in the chart config, into component markup.\n\t\t *\n\t\t * @param {object} config Chart configuration object\n\t\t * @returns {string} Modified markup.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingPalette\n\t\t */\n\t\tgetMarkup(config) {\n\t\t\tconst tools = config.getMenu(\"drawingTools\", true).join(\"\");\n\n\t\t\treturn this.constructor.markup.replace(\"{{tools}}\", tools);\n\t\t}\n\t}\n\n\t/**\n\t * Default markup for the innerHTML of a cq-item tag. Used by {@link DrawingPalette.markup}.\n\t *\n\t * @param {string} label text to be displayed or read.\n\t * @param {string} [icon] icon class.\n\t * @param {string} [helpId] value of the help-id attribute.\n\t * @return {string} HTML markup for the tag's interior.\n\t *\n\t * @static\n\t *\n\t * @tsmember WebComponents.DrawingPalette\n\t */\n\tDrawingPalette.itemInterior = (label, icon, helpId) => {\n\t\treturn `\n\t\t\t\n\t\t\t\t${label}\n\t\t\t\t${\n\t\t\t\t\thelpId\n\t\t\t\t\t\t? `(Help available, press question mark key)\n\t\t\t\t\t `\n\t\t\t\t\t\t: \"\"\n\t\t\t\t}\n\t\t\t\n\t\t`;\n\t};\n\n\t/**\n\t * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n\t *\n\t * This markup contains placeholder values which the component replaces with values from its attributes.\n\t * Variables are represented in double curly-braces, for example: `{{text}}`.\n\t * The following variables are defined:\n\t * | variable | source |\n\t * | :-------- | :----- |\n\t * | tools | from context configuration object |\n\t *\n\t * @static\n\t * @type {String}\n\t *\n\t * @tsmember WebComponents.DrawingPalette\n\t */\n\tDrawingPalette.markup = `\n\t
        \n\t\t
        \n\t\t\t
        \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t${DrawingPalette.itemInterior(\"List View\", null, \"drawing_palette_list_view\")}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t${DrawingPalette.itemInterior(\"Grid View\", null, \"drawing_palette_grid_view\")}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t${DrawingPalette.itemInterior(\"Detach Palette\", null, \"drawing_palette_detach\")}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t${DrawingPalette.itemInterior(\"Dock Palette\", null, \"drawing_palette_attach\")}\n\t\t\t\t\t\n\t\t\t
        \n\t\t\t\n\t\t\t
        \n\t\t\t\t\n\t\t\t\t\t${DrawingPalette.itemInterior(\"No Tool\", \"pointer\", \"drawing_palette_notool\")}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t${DrawingPalette.itemInterior(\"Measure\", \"measure\", \"drawing_palette_measure\")}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t${DrawingPalette.itemInterior(\"Undo\", \"undo\", \"drawing_palette_undo\")}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t${DrawingPalette.itemInterior(\"Redo\", \"redo\", \"drawing_palette_redo\")}\n\t\t\t\t\n\t\t\t\t\n\t\t\t
        \n\t\t\t\n\t\t\t
        \n\t\t\t\t\n\t\t\t\t\t{{tools}}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t
        \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tMagnet\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t${DrawingPalette.itemInterior(\n\t\t\t\t\t\t\t\"Clear All Drawings\",\n\t\t\t\t\t\t\t\"clear\",\n\t\t\t\t\t\t\t\"drawing_palette_clear\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t${DrawingPalette.itemInterior(\n\t\t\t\t\t\t\t\"Restore Default Parameters\",\n\t\t\t\t\t\t\t\"restore\",\n\t\t\t\t\t\t\t\"drawing_palette_restore\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t\n\t\t\t\t
        \n\t\t\t
        \n\t\t
        \n\t
        \n\t`;\n\tCIQ.UI.addComponentDefinition(\"cq-drawing-palette\", DrawingPalette);\n}\n\n};\n\n\nlet __js_webcomponents_palette_drawingSettings_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\n\n\n\n\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\nconst Palette = CIQ.UI._webcomponents.list[\"cq-palette\"];\nif (!Palette) {\n\tconsole.error(\n\t\t\"drawingSettings component requires first activating palette component.\"\n\t);\n} else if (!CIQ.Drawing) {\n\tconsole.error(\n\t\t\"drawingSettings component requires first activating drawing feature.\"\n\t);\n} else {\n\t/**\n\t * @classdesc\n\t *\n\t * This is a custom HtmlElement (Web Component). The tag name is the following:\n\t *\n\t *

        <cq-drawing-settings>

        \n\t *\n\t * Drawing Settings palette web component used to draw and annotate on the chart. Displays a palette\n\t * along the top of the chart for managing tool settings.\n\t *\n\t * Inherits from ``. Palette components must be placed within a `` component.\n\t *\n\t * This works in conjunction with the [cq-drawing-palette]{@link WebComponents.DrawingPalette} component\n\t * and replaces the cq-toolbar component, providing additional functionality\n\t * and an improved user experience.\n\t *\n\t * _**Attributes**_\n\t *\n\t * This component observes the following attributes and will change behavior if these attributes are modified:\n\t * | attribute | description |\n\t * | :----------- | :---------- |\n\t * | docked | The docked state of the palette. Set to \"false\" to float palette over the chart. |\n\t * | hide | The hidden state of the palette. Set to \"false\" to show palette. |\n\t * | active-tool | Current active drawing tool. |\n\t * | axis-label | \"true\" to enable axis label. |\n\t * | line-color | Current line color in hex format, or \"auto\" to select color from theme. |\n\t * | fill-color | Current fill color in hex format, or \"auto\" to select color from theme. |\n\t * | font-family | Current font name. Note: specified font must be available in the end-user's system. |\n\t * | font-size | Current font size in valid css units. |\n\t * | font-italic | \"true\" to enable font italics style. |\n\t * | font-bold | \"true\" to enable font bold style. |\n\t * | line-width | Line width in pixels. |\n\t * | line-pattern | Line pattern: \"solid\", \"dotted\" or \"dashed\". |\n\t * | show-callout | \"true\" to enable display of callout. |\n\t * | span-panels | \"true\" to enable span panels. |\n\t *\n\t * _**Emitters**_\n\t *\n\t * A custom event will be emitted by the component when it is clicked.\n\t * See {@link CIQ.UI.BaseComponent#emitCustomEvent} for details on how to listen for this event.\n\t * The details of the event contain the following:\n\t * | property | value |\n\t * | :------- | :---- |\n\t * | emitter | this component |\n\t * | cause | \"useraction\" |\n\t * | effect | \"select\" |\n\t * | action | \"click\" |\n\t * | name | _property_ |\n\t * | value | _value_ |\n\t *\n\t * `cause` and `action` are set only when the value is changed as a direct result of clicking on the component.\n\t *\n\t * This component comes with a default markup which is used when the component tag contains no other markup when it is added to the DOM.\n\t * The default markup provided has accessibility features.\n\t *\n\t * @example\n\t *\t\n\t *\n\t * @alias WebComponents.DrawingSettings\n\t * @extends WebComponents.Palette\n\t * @class\n\t * @protected\n\t * @since\n\t * - 7.2.0\n\t * - 9.1.0 Observes attributes. Added emitter.\n\t */\n\tclass DrawingSettings extends Palette.classDefinition {\n\t\tstatic get observedAttributes() {\n\t\t\treturn [\n\t\t\t\t\"docked\",\n\t\t\t\t\"hide\",\n\t\t\t\t\"active-tool\",\n\t\t\t\t\"axis-label\",\n\t\t\t\t\"fill-color\",\n\t\t\t\t\"font-bold\",\n\t\t\t\t\"font-family\",\n\t\t\t\t\"font-italic\",\n\t\t\t\t\"font-size\",\n\t\t\t\t\"line-color\",\n\t\t\t\t\"line-pattern\",\n\t\t\t\t\"line-width\",\n\t\t\t\t\"orientation\",\n\t\t\t\t\"show-callout\",\n\t\t\t\t\"span-panels\"\n\t\t\t];\n\t\t}\n\n\t\tconstructor() {\n\t\t\tsuper();\n\t\t}\n\n\t\tconnectedCallback() {\n\t\t\tif (!this.isConnected || this.attached) return;\n\t\t\tsuper.connectedCallback();\n\t\t\tthis.addEventListener(\"stxtap\", (e) => e.stopPropagation());\n\t\t}\n\n\t\tadoptedCallback() {\n\t\t\tsuper.adoptedCallback();\n\t\t\tCIQ.UI.flattenInheritance(this, DrawingSettings);\n\t\t\tthis.constructor = DrawingSettings;\n\t\t}\n\n\t\t/**\n\t\t * Called for a registered component when the context is constructed.\n\t\t * Sets the context property of the component.\n\t\t *\n\t\t * @param {CIQ.UI.Context} context The chart user interface context.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\tsetContext(context) {\n\t\t\tthis.addDefaultMarkup();\n\t\t\tthis.init();\n\t\t\tthis.params = {\n\t\t\t\tlineSelection: this.querySelector(\".ciq-line-style\"),\n\t\t\t\tfontSizeSelection: this.querySelector(\".ciq-font-size\"),\n\t\t\t\tfontFamilySelection: this.querySelector(\".ciq-font-family\"),\n\t\t\t\tfontStyleToggle: this.querySelector(\"cq-annotation-italic\"),\n\t\t\t\tfontWeightToggle: this.querySelector(\"cq-annotation-bold\"),\n\t\t\t\tfontOptions: this.querySelector(\"cq-annotation\"),\n\t\t\t\taxisLabelToggle: this.querySelector(\"cq-axis-label .ciq-checkbox\"),\n\t\t\t\tspanPanelsToggle: this.querySelector(\"cq-span-panels .ciq-checkbox\"),\n\t\t\t\tshowCalloutToggle: this.querySelector(\"cq-show-callout .ciq-checkbox\"),\n\t\t\t\tfillColor: this.querySelector(\"cq-fill-color:not(cq-cvp-controller)\"),\n\t\t\t\tlineColor: this.querySelector(\"cq-line-color:not(cq-cvp-controller)\"),\n\t\t\t\tcvpControllers: this.querySelectorAll(\"cq-cvp-controller\"),\n\t\t\t\twaveParameters: this.querySelector(\"cq-wave-parameters\")\n\t\t\t};\n\t\t\tthis.params.cvpControllers.forEach(\n\t\t\t\t(controller) => (controller.toolbar = this)\n\t\t\t);\n\n\t\t\t// Add a texture to the drag strip\n\t\t\t//this.querySelector('.drag-strip').style.backgroundImage = \"url('css/img/palette-drag-strip.svg')\";\n\t\t\tthis.sync();\n\t\t\tthis.dirty(false);\n\t\t\tconst self = this;\n\t\t\tCIQ.UI.contextsForEach(function () {\n\t\t\t\tif (this.stx.setDrawingContainer) this.stx.setDrawingContainer(self);\n\t\t\t});\n\t\t\tcontext.stx.addEventListener(\"theme\", () => {\n\t\t\t\tconst isDirty = this.querySelector(\"*[cq-toolbar-dirty].ciq-active\");\n\t\t\t\tthis.sync();\n\t\t\t\tif (!isDirty) this.dirty(false);\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Processes attribute changes. This is called whenever an observed attribute has changed.\n\t\t *\n\t\t * @param {string} name Attribute name\n\t\t * @param {string} oldValue Original attribute value\n\t\t * @param {string} newValue new Attribute value\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\thandlePropertyChange(name, oldValue, newValue) {\n\t\t\tif (newValue === oldValue) return;\n\t\t\tconst action = this.activator ? \"click\" : null;\n\t\t\tdelete this.activator;\n\n\t\t\tswitch (name) {\n\t\t\t\tcase \"active-tool\":\n\t\t\t\t\tthis.tool(null, newValue);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"line-color\":\n\t\t\t\t\tthis.setColor(newValue, \"line\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"fill-color\":\n\t\t\t\t\tthis.setColor(newValue, \"fill\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"font-family\":\n\t\t\t\t\tthis.setFontFamily(null, newValue);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"font-size\":\n\t\t\t\t\tthis.setFontSize(null, newValue);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"font-italic\":\n\t\t\t\t\tthis.setFontStyle(\"italic\", newValue === \"true\" ? true : false);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"font-bold\":\n\t\t\t\t\tthis.setFontStyle(\"bold\", newValue === \"true\" ? true : false);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"line-width\":\n\t\t\t\t\tthis.setLine(null, newValue, null);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"line-pattern\":\n\t\t\t\t\tthis.setLine(null, null, newValue);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"axis-label\":\n\t\t\t\tcase \"span-panels\":\n\t\t\t\tcase \"show-callout\":\n\t\t\t\t\tthis.toggleCheckbox(null, name, newValue === \"true\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tsuper.handlePropertyChange(name, oldValue, newValue);\n\n\t\t\tif (!this.context) return;\n\n\t\t\tif (!this.syncing) {\n\t\t\t\tthis.emitCustomEvent({\n\t\t\t\t\taction,\n\t\t\t\t\teffect: \"select\",\n\t\t\t\t\tdetail: { name, value: newValue }\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Overloaded from palette class.\n\t\t * Handler for responding to messaging sent from other palettes `sendMessage` function.\n\t\t *\n\t\t * @param {string} id Identifier for the message\n\t\t * @param {object | string} message Optional data accompanying the message\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\thandleMessage(id, message) {\n\t\t\tswitch (id) {\n\t\t\t\tcase \"changeTool\":\n\t\t\t\t\t// The Order is important as tool setting initiates chart repositioning\n\t\t\t\t\t// and should be last to make sure that updated height is available\n\t\t\t\t\t// A safer approach would be define static label size that may not be\n\t\t\t\t\t// as desirable from UI layout perspective\n\t\t\t\t\tthis.setActiveToolLabel(message.toolLabel);\n\t\t\t\t\tthis.toolSettings(message.activator, message.toolName);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"clearDrawings\":\n\t\t\t\t\tthis.clearDrawings();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"restoreDefaultConfig\":\n\t\t\t\t\tthis.restoreDefaultConfig(message.activator, message.all);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Remove all drawings from the chart.\n\t\t */\n\t\tclearDrawings() {\n\t\t\tconst wrappers =\n\t\t\t\tthis.context.topNode.querySelectorAll(\"cq-context-wrapper\");\n\t\t\tif (wrappers.length)\n\t\t\t\twrappers.forEach((wrapper) => {\n\t\t\t\t\tif (wrapper.classList.contains(\"active\")) {\n\t\t\t\t\t\tconst activeContextNode = wrapper.querySelector(\"cq-context\");\n\t\t\t\t\t\tactiveContextNode.context.stx.clearDrawings(null, false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\telse this.context.stx.clearDrawings(null, false);\n\t\t}\n\n\t\t/**\n\t\t * Enable crosshairs.\n\t\t *\n\t\t * @param {Object} activator\n\t\t * @param {HTMLElement} activator.node Element that triggered this function.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\tcrosshairs(activator) {\n\t\t\tconst { stx } = this.context;\n\t\t\tstx.changeVectorType(null);\n\t\t\tstx.layout.crosshair = true;\n\t\t\tstx.doDisplayCrosshairs();\n\t\t\tstx.findHighlights(false, true);\n\t\t\tstx.changeOccurred(\"layout\");\n\t\t\tstx.draw();\n\t\t\tstx.updateChartAccessories();\n\t\t\tthis.querySelectorAll(\"*[cq-section]\").forEach((el) =>\n\t\t\t\tel.classList.remove(\"ciq-active\")\n\t\t\t);\n\t\t\tthis.emit();\n\t\t}\n\n\t\t/**\n\t\t * Enable settings UI for specified drawing tool. Sends `changeToolSettings` message to other palettes.\n\t\t *\n\t\t * @param {Object} activator\n\t\t * @param {HTMLElement} activator.node Element that triggered this function.\n\t\t * @param {string} toolName Name of drawing tool.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\ttool(activator, toolName) {\n\t\t\tif (!this.context) return;\n\t\t\tthis.toolSettings(activator, toolName);\n\t\t\tthis.setActiveToolLabel(toolName);\n\t\t\tthis.sendMessage(\"changeToolSettings\", { activator, toolName });\n\t\t}\n\n\t\t/**\n\t\t * Enable settings UI for specified drawing tool. Called by `tool` function.\n\t\t *\n\t\t * @param {Object} activator\n\t\t * @param {HTMLElement} activator.node Element that triggered this function.\n\t\t * @param {string} toolName Name of drawing tool.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\ttoolSettings(activator, toolName) {\n\t\t\tif (!this.context) return;\n\t\t\tconst { stx } = this.context;\n\t\t\tthis.querySelectorAll(\"*[cq-section]\").forEach((section) =>\n\t\t\t\tsection.classList.remove(\"ciq-active\")\n\t\t\t);\n\t\t\tlet removeDirty = !this.querySelector(\"*[cq-toolbar-dirty].ciq-active\");\n\t\t\tconst drawingParameters = CIQ.Drawing.getDrawingParameters(stx, toolName);\n\t\t\tlet actionEl;\n\t\t\tif (drawingParameters) {\n\t\t\t\tactionEl = this.querySelector(\"*[cq-toolbar-action='save']\");\n\t\t\t\tif (actionEl) actionEl.classList.add(\"ciq-active\");\n\t\t\t\tconst drawingPrefs = stx.preferences.drawings;\n\t\t\t\tif (drawingPrefs && drawingPrefs[toolName]) {\n\t\t\t\t\tactionEl = this.querySelector(\"*[cq-toolbar-action='restore']\");\n\t\t\t\t\tif (actionEl) actionEl.classList.add(\"ciq-active\");\n\t\t\t\t\tremoveDirty = true;\n\t\t\t\t}\n\t\t\t\t// fibtimezone has no values to display in the settings dialog\n\t\t\t\tif (toolName === \"fibtimezone\") {\n\t\t\t\t\tdelete drawingParameters.parameters;\n\t\t\t\t}\n\n\t\t\t\tconst none = this.params.lineSelection.querySelector(\".fills-only\");\n\t\t\t\tif (none) none.setAttribute(\"hidden\", \"\");\n\t\t\t\tlet elements = this.defaultElements(drawingParameters, toolName);\n\t\t\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\t\t\tconst els = this.querySelectorAll(\n\t\t\t\t\t\t`${elements[i]}[cq-section], ${elements[i]} [cq-section]`\n\t\t\t\t\t);\n\t\t\t\t\tels.forEach((el) => el.classList.add(\"ciq-active\"));\n\t\t\t\t\tif (none && elements[i] == \"cq-fill-color\")\n\t\t\t\t\t\tnone.removeAttribute(\"hidden\");\n\t\t\t\t}\n\t\t\t\t// special sections which have their own webcomponents, do not activate children of these\n\t\t\t\telements = CIQ.Drawing[toolName].prototype.$controls;\n\t\t\t\tif (elements) {\n\t\t\t\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\t\t\t\tconst els = this.querySelectorAll(`${elements[i]}[cq-section]`);\n\t\t\t\t\t\tels.forEach((el) => el.classList.add(\"ciq-active\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\ttoolName === \"trendline\" &&\n\t\t\t\t\t!stx.currentVectorParameters.showCallout\n\t\t\t\t) {\n\t\t\t\t\t[\"fontOptions\", \"fillColor\"].forEach((name) =>\n\t\t\t\t\t\tthis.params[name].classList.remove(\"ciq-active\")\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (toolName === \"notool\") {\n\t\t\t\tstx.changeVectorType(\"\");\n\t\t\t\t// Don't disengage the magnet\n\t\t\t\t/*if (stx.preferences.magnet) {\n\t\t\t\t\tthis.toggleMagnet(this);\n\t\t\t\t}*/\n\t\t\t\tthis.hide = \"true\";\n\t\t\t} else {\n\t\t\t\tthis.hide = \"false\";\n\t\t\t\tif (this.restoreDocked) {\n\t\t\t\t\tthis.dock();\n\t\t\t\t\tdelete this.restoreDocked;\n\t\t\t\t}\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tconst node = this.querySelector(\".palette-container\");\n\t\t\t\t\tnode.tabIndex = -1;\n\t\t\t\t\tnode.focus();\n\t\t\t\t}, 10);\n\t\t\t}\n\t\t\t// Resizing the dock because the setting palette is hidden/shown based on the 'no tool' selection\n\t\t\tthis.paletteDock.handleResize();\n\t\t\tthis[\"active-tool\"] = toolName;\n\t\t\tthis.sync();\n\t\t\tif (removeDirty) this.dirty(false);\n\t\t}\n\n\t\t/**\n\t\t * Array of element selectors for drawing setting UI elements used by the specified tool.\n\t\t *\n\t\t * @param {object} drawingParameters Drawing parameters object.\n\t\t * @param {string} toolName Name of drawing tool.\n\t\t * @returns Array of drawing setting element selectors\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\tdefaultElements(drawingParameters, toolName) {\n\t\t\tconst arr = [];\n\t\t\tfor (let param in drawingParameters) {\n\t\t\t\tif (param == \"color\") arr.push(\"cq-line-color\");\n\t\t\t\telse if (param == \"fillColor\") arr.push(\"cq-fill-color\");\n\t\t\t\telse if (param == \"pattern\" || param == \"lineWidth\")\n\t\t\t\t\tarr.push(\"cq-line-style\");\n\t\t\t\telse if (param == \"axisLabel\") arr.push(\"cq-axis-label\");\n\t\t\t\telse if (param == \"spanPanels\") arr.push(\"cq-span-panels\");\n\t\t\t\telse if (param == \"showCallout\") arr.push(\"cq-show-callout\");\n\t\t\t\telse if (param == \"font\") arr.push(\"cq-annotation\");\n\t\t\t\telse if (param == \"parameters\") {\n\t\t\t\t\tswitch (toolName) {\n\t\t\t\t\t\tcase \"volumeprofile\":\n\t\t\t\t\t\t\tarr.push(\"cq-clickable[cq-volumeprofile-settings]\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"measurementline\":\n\t\t\t\t\t\t\tarr.push(\"cq-clickable[cq-measurementline-settings]\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tarr.push(\"cq-clickable[cq-fib-settings]\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn arr;\n\t\t}\n\n\t\t/**\n\t\t * Sets active state of drawing settings Save Config button\n\t\t *\n\t\t * @param {boolean} [on=true] Set to `true` to set active.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\tdirty(on = true) {\n\t\t\tthis.querySelector(\"*[cq-toolbar-dirty]\").classList.toggle(\n\t\t\t\t\"ciq-active\",\n\t\t\t\ton\n\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * Emits a change event.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\temit() {\n\t\t\tconst event = new Event(\"change\", {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: true\n\t\t\t});\n\t\t\tthis.dirty();\n\t\t\tthis.dispatchEvent(event);\n\t\t}\n\n\t\t/**\n\t\t * Gets the current drawing color and updates display in palette.\n\t\t *\n\t\t * @param {Object} activator\n\t\t * @param {HTMLElement} activator.node Element that triggered this function.\n\t\t * @param {string} mode Type of color: `fill` or `line`.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\tgetColor(activator, mode) {\n\t\t\tif (mode !== \"fill\" && mode !== \"line\") return;\n\t\t\tconst { node } = activator;\n\t\t\tconst specialColorStyles = [\"color-auto\", \"color-transparent\"];\n\t\t\tconst color =\n\t\t\t\tthis.context.stx.currentVectorParameters[\n\t\t\t\t\tmode === \"line\" ? \"currentColor\" : \"fillColor\"\n\t\t\t\t];\n\t\t\tthis[mode + \"-color\"] = color;\n\t\t\tspecialColorStyles.forEach((style) => node.classList.remove(style));\n\t\t\tif (specialColorStyles.includes(\"color-\" + color)) {\n\t\t\t\tnode.removeAttribute(\"style\");\n\t\t\t\tnode.classList.add(\"color-\" + color);\n\t\t\t} else {\n\t\t\t\tnode.style.background = color;\n\t\t\t\tconst bgColor = CIQ.getBackgroundColor(this.parentNode);\n\t\t\t\tif (!color || Math.abs(CIQ.hsl(bgColor)[2] - CIQ.hsl(color)[2]) < 0.2) {\n\t\t\t\t\tconst border = CIQ.chooseForegroundColor(bgColor);\n\t\t\t\t\tnode.style.border = \"solid \" + border + \" 1px\";\n\t\t\t\t} else {\n\t\t\t\t\tnode.style.border = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst label = node.querySelector(\"[label]\");\n\t\t\tif (label) label.innerText = color;\n\t\t}\n\n\t\t/**\n\t\t * Enables colorPicker and provides callback to `setColor`, depending on `mode` value.\n\t\t *\n\t\t * @param {Object} activator\n\t\t * @param {HTMLElement} activator.node Element that triggered this function.\n\t\t * @param {string} mode Type of color: `fill` or `line`.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\tpickColor(activator, mode) {\n\t\t\tif (mode !== \"fill\" && mode !== \"line\") return;\n\t\t\tconst { node } = activator;\n\t\t\tconst colorPicker = this.uiManager.getColorPicker(this);\n\t\t\tcolorPicker.callback = (color) => {\n\t\t\t\tthis.activator = activator;\n\t\t\t\tthis.setColor(color, mode);\n\t\t\t\tthis.emit();\n\t\t\t};\n\t\t\tlet overrides = node.getAttribute(\"cq-overrides\");\n\t\t\tif (overrides) overrides = overrides.split(\",\");\n\t\t\tcolorPicker.display({ node, overrides, context: this.context });\n\t\t}\n\n\t\t/**\n\t\t * Sets the default line or fill color, depending on `mode` value.\n\t\t *\n\t\t * @param {string} color A Valid css color value.\n\t\t * @param {string} mode Type of color: `fill` or `line`.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\tsetColor(color, mode) {\n\t\t\tif (mode !== \"fill\" && mode !== \"line\") return;\n\t\t\tif (!this.context) return;\n\t\t\tthis.context.stx.currentVectorParameters[\n\t\t\t\tmode === \"line\" ? \"currentColor\" : \"fillColor\"\n\t\t\t] = color;\n\t\t\tthis.getColor(\n\t\t\t\t{\n\t\t\t\t\tnode: this.ownerDocument.querySelector(\"cq-\" + mode + \"-color\")\n\t\t\t\t},\n\t\t\t\tmode\n\t\t\t);\n\t\t\tthis.emit();\n\t\t}\n\n\t\t/**\n\t\t * Restore drawing settings default configuration.\n\t\t *\n\t\t * @param {Object} activator\n\t\t * @param {HTMLElement} activator.node Element that triggered this function.\n\t\t * @param {boolean} all Set to `true` to restore default for all drawing objects. Otherwise only the active drawing object's defaults are restored.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\trestoreDefaultConfig(activator, all) {\n\t\t\tconst { stx } = this.context;\n\t\t\tCIQ.Drawing.restoreDefaultConfig(\n\t\t\t\tstx,\n\t\t\t\tstx.currentVectorParameters.vectorType,\n\t\t\t\tall\n\t\t\t);\n\t\t\tconst actionEl = this.querySelector(\"*[cq-toolbar-action='restore']\");\n\t\t\tif (actionEl) actionEl.classList.remove(\"ciq-active\");\n\t\t\tthis.sync();\n\t\t\tthis.dirty(false);\n\t\t}\n\n\t\t/**\n\t\t * Save current drawing settings as default configuration.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\tsaveConfig() {\n\t\t\tconst { stx } = this.context;\n\t\t\tCIQ.Drawing.saveConfig(stx, stx.currentVectorParameters.vectorType);\n\t\t\tconst actionEl = this.querySelector(\"*[cq-toolbar-action='restore']\");\n\t\t\tif (actionEl) actionEl.classList.add(\"ciq-active\");\n\t\t\tthis.sync();\n\t\t\tthis.dirty(false);\n\t\t}\n\n\t\t/**\n\t\t * Set drawing settings for fibonacci drawing tools.\n\t\t *\n\t\t * @param {number} width Line width\n\t\t * @param {string} pattern Line pattern\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\tsetFibs(width, pattern) {\n\t\t\tconst fib = this.context.stx.currentVectorParameters.fibonacci;\n\t\t\tif (fib) {\n\t\t\t\tfor (let i = 0; i < fib.fibs.length; i++) {\n\t\t\t\t\tfib.fibs[i].parameters.lineWidth = width;\n\t\t\t\t\tfib.fibs[i].parameters.pattern = pattern;\n\t\t\t\t}\n\t\t\t\tfib.timezone.parameters.lineWidth = width;\n\t\t\t\tfib.timezone.parameters.pattern = pattern;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Sets the default font family.\n\t\t *\n\t\t * @param {Object} activator\n\t\t * @param {HTMLElement} activator.node Element that triggered this function.\n\t\t * @param {string} fontFamily A Valid css font-family value.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\tsetFontFamily(activator, fontFamily) {\n\t\t\tif (!this.context) return;\n\t\t\tthis.activator = activator;\n\t\t\tconst { stx } = this.context;\n\n\t\t\tif (stx.currentVectorParameters.annotation) {\n\t\t\t\tif (fontFamily == \"Default\") {\n\t\t\t\t\tstx.currentVectorParameters.annotation.font.family = null;\n\t\t\t\t} else {\n\t\t\t\t\tstx.currentVectorParameters.annotation.font.family = fontFamily;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis[\"font-family\"] = fontFamily;\n\t\t\tthis.params.fontFamilySelection.setAttribute(\"text\", fontFamily);\n\t\t\tthis.emit();\n\t\t}\n\n\t\t/**\n\t\t * Sets the default font size.\n\t\t *\n\t\t * @param {Object} activator\n\t\t * @param {HTMLElement} activator.node Element that triggered this function.\n\t\t * @param {string} fontSize A Valid css font-size value.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\tsetFontSize(activator, fontSize) {\n\t\t\tif (!this.context) return;\n\t\t\tthis.activator = activator;\n\t\t\tconst { stx } = this.context;\n\n\t\t\tif (stx.currentVectorParameters.annotation)\n\t\t\t\tstx.currentVectorParameters.annotation.font.size = fontSize;\n\t\t\tthis[\"font-size\"] = fontSize;\n\t\t\tthis.params.fontSizeSelection.setAttribute(\"text\", fontSize);\n\t\t\tthis.emit();\n\t\t}\n\n\t\t/**\n\t\t * Set drawing line style.\n\t\t *\n\t\t * @param {Object} activator\n\t\t * @param {HTMLElement} activator.node Element that triggered this function.\n\t\t * @param {number} width Line width\n\t\t * @param {string} pattern Line pattern\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\tsetLine(activator, width, pattern) {\n\t\t\tif (!this.context) return;\n\t\t\tthis.activator = activator;\n\t\t\tconst { stx } = this.context;\n\n\t\t\twidth = width || stx.currentVectorParameters.lineWidth;\n\t\t\tpattern = pattern || stx.currentVectorParameters.pattern;\n\n\t\t\tstx.currentVectorParameters.lineWidth = width;\n\t\t\tstx.currentVectorParameters.pattern = pattern;\n\t\t\tthis.setFibs(width, pattern);\n\t\t\tthis.currentLineSelectedClass =\n\t\t\t\t\"ciq-\" + pattern + \"-\" + parseInt(width, 10);\n\t\t\tif (pattern == \"none\") {\n\t\t\t\tthis.currentLineSelectedClass = null;\n\t\t\t}\n\t\t\tthis.params.lineSelection.setAttribute(\n\t\t\t\t\"icon\",\n\t\t\t\tthis.currentLineSelectedClass\n\t\t\t);\n\t\t\tif (!this.querySelector(\"cq-fill-color.ciq-active\")) {\n\t\t\t\tconst none = this.params.lineSelection.querySelector(\".fills-only\");\n\t\t\t\tif (none) none.setAttribute(\"hidden\", \"\");\n\t\t\t}\n\t\t\tthis[\"line-width\"] = width;\n\t\t\tthis[\"line-pattern\"] = pattern;\n\t\t\tthis.emit();\n\t\t}\n\n\t\t/**\n\t\t * Set text of palette active tool label element.\n\t\t *\n\t\t * @param {string} activeToolLabel Name of drawing tool.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\tsetActiveToolLabel(activeToolLabel) {\n\t\t\t// Clean up tool labels\n\t\t\tif (activeToolLabel === \"No Tool\") {\n\t\t\t\tactiveToolLabel = \"\";\n\t\t\t} else if (activeToolLabel === \"freeform\") {\n\t\t\t\tactiveToolLabel = \"Doodle\";\n\t\t\t} else {\n\t\t\t\tactiveToolLabel = activeToolLabel + \":\";\n\t\t\t}\n\t\t\tthis.querySelector(\".ciq-active-tool-label\").innerHTML = activeToolLabel;\n\t\t\tthis.querySelector(\".ciq-mobile-palette-toggle span\").innerHTML =\n\t\t\t\tactiveToolLabel || \"Select Tool\";\n\t\t}\n\n\t\t/**\n\t\t * Synchronizes the drawing toolbar with stx.currentVectorParameters. Poor man's data binding.\n\t\t *\n\t\t * @param {object} [cvp=stx.currentVectorParameters] A new drawing object, otherwise defaults to the current one\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\tsync(cvp) {\n\t\t\tthis.syncing = true;\n\t\t\tconst { stx } = this.context;\n\n\t\t\tif (!cvp) cvp = stx.currentVectorParameters;\n\t\t\telse\n\t\t\t\tstx.currentVectorParameters = CIQ.extend(\n\t\t\t\t\tstx.currentVectorParameters || {},\n\t\t\t\t\tcvp\n\t\t\t\t);\n\n\t\t\tconst { params } = this;\n\t\t\tthis.setLine(null, cvp.lineWidth, cvp.pattern);\n\n\t\t\tconst style = stx.canvasStyle(\"stx_annotation\");\n\n\t\t\tconst font = cvp.annotation && cvp.annotation.font;\n\n\t\t\tconst initialSize = (font && font.size) || style.fontSize;\n\t\t\tthis.setFontSize(null, initialSize);\n\n\t\t\tconst initialFamily = (font && font.family) || style.fontFamily;\n\t\t\tthis.setFontFamily(null, initialFamily);\n\n\t\t\tconst initialFontStyle = (font && font.style) || style.fontStyle;\n\t\t\tconst initialWeight = (font && font.weight) || style.fontWeight;\n\t\t\tthis.setFontStyle(\"italic\", initialFontStyle === \"italic\");\n\t\t\tthis.setFontStyle(\n\t\t\t\t\"bold\",\n\t\t\t\tinitialWeight === \"bold\" || initialWeight >= 700\n\t\t\t);\n\n\t\t\tthis.toggleCheckbox(null, \"axis-label\", cvp.axisLabel);\n\t\t\tthis.toggleCheckbox(null, \"show-callout\", cvp.showCallout);\n\t\t\tthis.toggleCheckbox(null, \"span-panels\", cvp.spanPanels);\n\n\t\t\tthis.getColor({ node: params.fillColor }, \"fill\");\n\t\t\tthis.getColor({ node: params.lineColor }, \"line\");\n\n\t\t\tparams.cvpControllers.forEach((controller) => {\n\t\t\t\tcontroller.sync(cvp);\n\t\t\t});\n\n\t\t\tconst { waveParameters } = params;\n\t\t\tif (waveParameters) {\n\t\t\t\twaveParameters.activate();\n\t\t\t}\n\t\t\tthis.syncing = false;\n\t\t}\n\n\t\t/**\n\t\t * Toggle checked state of checkbox element and update associated drawing setting.\n\t\t *\n\t\t * @param {Object} activator\n\t\t * @param {HTMLElement} activator.node Element that triggered this function.\n\t\t * @param {string} id Drawing setting property name\n\t\t * @param {boolean} [forceValue=null] If set, will force the toggle to that value.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\ttoggleCheckbox(activator, id, forceValue = null) {\n\t\t\tif (!this.context) return;\n\t\t\tthis.activator = activator;\n\t\t\tconst cvp = this.context.stx.currentVectorParameters;\n\t\t\tid = id.replace(/-./g, (x) => x[1].toUpperCase());\n\t\t\tcvp[id] = forceValue === null ? !cvp[id] : forceValue;\n\t\t\tconst node = this.params[id + \"Toggle\"];\n\t\t\tif (node) node.classList[cvp[id] ? \"add\" : \"remove\"](\"ciq-active\");\n\t\t\tif (id === \"showCallout\" && cvp.vectorType === \"trendline\") {\n\t\t\t\t[\"fontOptions\", \"fillColor\"].forEach((name) =>\n\t\t\t\t\tthis.params[name].classList[cvp[id] ? \"add\" : \"remove\"](\"ciq-active\")\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst attrName = id.replace(/[A-Z]/g, (x) => `-${x.toLowerCase()}`);\n\t\t\tthis[attrName] = cvp[id].toString();\n\t\t\tthis.params[id + \"Toggle\"].setAttribute(\n\t\t\t\t\"aria-checked\",\n\t\t\t\tcvp[id].toString()\n\t\t\t);\n\t\t\tthis.emit();\n\t\t}\n\n\t\t/**\n\t\t * Toggle active state of font \"bold\" and \"italic\" styles and update drawing settings.\n\t\t *\n\t\t * @param {Object} activator\n\t\t * @param {HTMLElement} activator.node Element that triggered this function.\n\t\t * @param {string} fontStyle Style to toggle, \"bold\" or \"italic\".\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\ttoggleFontStyle(activator, fontStyle) {\n\t\t\tconst { stx } = this.context;\n\t\t\tlet currentState = false;\n\t\t\tthis.activator = activator;\n\n\t\t\tif (fontStyle == \"italic\") {\n\t\t\t\tcurrentState =\n\t\t\t\t\tstx.currentVectorParameters.annotation.font.style == \"italic\";\n\t\t\t} else if (fontStyle == \"bold\" || fontStyle >= 700) {\n\t\t\t\tcurrentState =\n\t\t\t\t\tstx.currentVectorParameters.annotation.font.weight == \"bold\";\n\t\t\t}\n\t\t\tthis.setFontStyle(fontStyle, !currentState);\n\t\t}\n\n\t\t/**\n\t\t * Set drawing tool font style\n\t\t *\n\t\t * @param {string} fontStyle Style to set, \"bold\" or \"italic\".\n\t\t * @param {boolean} state Active state, set to \"true\" to enable.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\tsetFontStyle(fontStyle, state) {\n\t\t\tif (!this.context) return;\n\t\t\tconst { stx } = this.context;\n\t\t\tconst node = this.querySelector(\"cq-annotation-\" + fontStyle);\n\n\t\t\tif (fontStyle == \"italic\") {\n\t\t\t\tstx.currentVectorParameters.annotation.font.style = state\n\t\t\t\t\t? \"italic\"\n\t\t\t\t\t: null;\n\t\t\t} else if (fontStyle == \"bold\") {\n\t\t\t\tstx.currentVectorParameters.annotation.font.weight = state\n\t\t\t\t\t? \"bold\"\n\t\t\t\t\t: null;\n\t\t\t} else return;\n\n\t\t\tthis[\"font-\" + fontStyle] = state ? \"true\" : \"false\";\n\t\t\tif (node) {\n\t\t\t\tnode.classList[state ? \"add\" : \"remove\"](\"ciq-active\");\n\t\t\t\tnode.setAttribute(\"aria-pressed\", state);\n\t\t\t}\n\t\t\tthis.emit();\n\t\t}\n\n\t\t/**\n\t\t * Toggle grabbing magnet state\n\t\t *\n\t\t * @param {Object} activator\n\t\t * @param {HTMLElement} activator.node Element that triggered this function.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\ttoggleMagnet(activator) {\n\t\t\tconst toggle = activator.node;\n\t\t\tconst { stx } = this.context;\n\t\t\tif (stx.preferences.magnet) {\n\t\t\t\ttoggle.classList.remove(\"active\");\n\t\t\t\tstx.preferences.magnet = false;\n\t\t\t} else {\n\t\t\t\ttoggle.classList.add(\"active\");\n\t\t\t\tstx.preferences.magnet = true;\n\t\t\t}\n\t\t\tCIQ.UI.contextsForEach(function () {\n\t\t\t\tthis.stx.preferences.magnet = stx.preferences.magnet;\n\t\t\t\tif (this.stx.chart.tempCanvas)\n\t\t\t\t\tCIQ.clearCanvas(this.stx.chart.tempCanvas, this.stx);\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Sends `toggleDrawingPalette` message to other palettes.\n\t\t *\n\t\t * @tsmember WebComponents.DrawingSettings\n\t\t */\n\t\ttogglePalette() {\n\t\t\tthis.sendMessage(\"toggleDrawingPalette\");\n\t\t}\n\t}\n\n\t/**\n\t * Default markup for the component's innerHTML, to be used when the component is added to the DOM without any innerHTML.\n\t *\n\t * @static\n\t * @type {String}\n\t *\n\t * @tsmember WebComponents.DrawingSettings\n\t */\n\tDrawingSettings.markup = `\n\t
        \t\n\t\t
        \n\t\t\t
        \n\t\t\t\t\t
        \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
        \n\t\t\t\tSelect Tool\n\t\t\t\t\n\t\t\t\t\t
        \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tFill Color\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
        \n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tLine Color\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
        \n\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
        Axis Label:
        \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
        \n\t\t\t\t\t
        \n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
        Span Panels:
        \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
        \n\t\t\t\t\t
        \n\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
        Show Callout:
        \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
        \n\t\t\t\t\t
        \n\t\n\t\t\t\t\t\n\t\t\t\t\t\tI\n\t\t\t\t\t\tB\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tSettings\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tSettings\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tSettings\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
        \n\t\t\t\t\t\t
        Done Editing
        \n\t\t\t\t\t
        \n\t\t\t\t\t
        \n\t\t\t\t\t\n\t\t\t\t\t
        \n\t\t\t\t\t\t
        Save Config
        \n\t\t\t\t\t\t
        Restore Config
        \n\t\t\t\t\t
        \n\t\t\t\t
        \n\t\t\t\t\n\t\t\t
        \n\t\t
        \n\t
        \n\t`;\n\tCIQ.UI.addComponentDefinition(\"cq-drawing-settings\", DrawingSettings);\n}\n\n};\n\n\nlet __js_webcomponents_scroll_menuDropdown_ = (_exports) => {\n\n/* global _CIQ, _timezoneJS, _SplinePlotter */\n\n\nconst CIQ = typeof _CIQ !== \"undefined\" ? _CIQ : _exports.CIQ;\n\nconst Scroll = CIQ.UI._webcomponents.list[\"cq-scroll\"];\nif (!Scroll) {\n\tconsole.error(\n\t\t\"menuDropdown component requires first activating scroll component.\"\n\t);\n} else {\n\t/**\n\t * @classdesc\n\t *\n\t * This is a custom HtmlElement (Web Component). The tag name is the following:\n\t *\n\t *

        <cq-menu_dropdown>

        \n\t *\n\t * Menu DropDown handles holding the items that go inside a custom menu component.\n\t *\n\t * Menu DropDown is a semantic element to be used in menus that has the same functionality as {@link WebComponents.Scroll} The main difference is that Menu DropDown sets noMaximize to true which means that the component will not automatically resize.\n\t *\n\t * The preferred way of creating menus is to use the []{@link WebComponents.Dropdown} component. This component is supported for legacy purposes only.\n\t *\n\t * @example\n\t *\t \n\t *\t\t Studies\n\t *\t\t \n\t *\t\t\t \n\t *\t\t\t\t \n\t *\t\t\t\t\t Current Studies\n\t *\t\t\t\t\t \n\t *\t\t\t\t\t\t \n\t *\t\t\t\t\t \n\t *\t\t\t\t\t \n\t *\t\t\t\t\t\t
        Clear All
        \n\t *\t\t\t\t\t
        \n\t *\t\t\t\t
        \n\t *\t\t\t
        \n\t *\t\t\t \n\t *\t\t\t\t \n\t *\t\t\t\t \t \n\t *\t\t\t\t\t\t\n\t *\t\t\t\t\t \n\t *\t\t\t\t \n\t *\t\t\t \n\t *\t\t
        \n\t *\t
        \n\t * @alias WebComponents.MenuDropDown\n\t * @extends WebComponents.Scroll\n\t * @class\n\t * @protected\n\t * @since 7.0.0 no longer dual inherits CIQ.UI.BaseComponent and CIQ.UI.Scroll. Now directly inherits Scroll which extends BaseComponent.\n\t */\n\tclass MenuDropDown extends Scroll.classDefinition {\n\t\tconstructor() {\n\t\t\tsuper();\n\t\t\tthis.noMaximize = true;\n\t\t}\n\n\t\tconnectedCallback() {\n\t\t\tsuper.connectedCallback();\n\t\t}\n\n\t\tadoptedCallback() {\n\t\t\tsuper.adoptedCallback();\n\t\t\tCIQ.UI.flattenInheritance(this, MenuDropDown);\n\t\t}\n\n\t\tdisablekeyboardNavigation() {\n\t\t\tif (this.keyboardNavigation) {\n\t\t\t\tthis.keyboardNavigation.setKeyControlElement();\n\t\t\t}\n\t\t}\n\t}\n\n\tCIQ.UI.addComponentDefinition(\"cq-menu-dropdown\", MenuDropDown);\n}\n\n};\n\n\nlet _exports = {CIQ:__CIQ_};\nexport {__js_webcomponents_abstractMarker_ as abstractMarker};\nexport {__js_webcomponents_advertisement_ as advertisement};\nexport {__js_webcomponents_aggregationDialog_ as aggregationDialog};\nexport {__js_webcomponents_attribution_ as attribution};\nexport {__js_webcomponents_chartInstructions_ as chartInstructions};\nexport {__js_webcomponents_chartTitle_ as chartTitle};\nexport {__js_webcomponents_clickable_ as clickable};\nexport {__js_webcomponents_close_ as close};\nexport {__js_webcomponents_comparison_ as comparison};\nexport {__js_webcomponents_cvpController_ as cvpController};\nexport {__js_webcomponents_dataDialog_ as dataDialog};\nexport {__js_webcomponents_dialog_ as dialog};\nexport {__js_webcomponents_doubleSlider_ as doubleSlider};\nexport {__js_webcomponents_drawingContext_ as drawingContext};\nexport {__js_webcomponents_dropdown_ as dropdown};\nexport {__js_webcomponents_fibSettingsDialog_ as fibSettingsDialog};\nexport {__js_webcomponents_floatingWindow_ as floatingWindow};\nexport {__js_webcomponents_gridSizePicker_ as gridSizePicker};\nexport {__js_webcomponents_heading_ as heading};\nexport {__js_webcomponents_headsupDynamic_ as headsupDynamic};\nexport {__js_webcomponents_headsupStatic_ as headsupStatic};\nexport {__js_webcomponents_help_ as help};\nexport {__js_webcomponents_instantChart_ as instantChart};\nexport {__js_webcomponents_languageDialog_ as languageDialog};\nexport {__js_webcomponents_loader_ as loader};\nexport {__js_webcomponents_lookup_ as lookup};\nexport {__js_webcomponents_lookupDialog_ as lookupDialog};\nexport {__js_webcomponents_marker_ as marker};\nexport {__js_webcomponents_measurementLineSettingsDialog_ as measurementLineSettingsDialog};\nexport {__js_webcomponents_menu_ as menu};\nexport {__js_webcomponents_messageToaster_ as messageToaster};\nexport {__js_webcomponents_palette_ as palette};\nexport {__js_webcomponents_paletteDock_ as paletteDock};\nexport {__js_webcomponents_redo_ as redo};\nexport {__js_webcomponents_scroll_ as scroll};\nexport {__js_webcomponents_shareButton_ as shareButton};\nexport {__js_webcomponents_shareDialog_ as shareDialog};\nexport {__js_webcomponents_showRange_ as showRange};\nexport {__js_webcomponents_sideNav_ as sideNav};\nexport {__js_webcomponents_sidePanel_ as sidePanel};\nexport {__js_webcomponents_studies_ as studies};\nexport {__js_webcomponents_studyContext_ as studyContext};\nexport {__js_webcomponents_studyDialog_ as studyDialog};\nexport {__js_webcomponents_studyLegend_ as studyLegend};\nexport {__js_webcomponents_swatch_ as swatch};\nexport {__js_webcomponents_themeDialog_ as themeDialog};\nexport {__js_webcomponents_themes_ as themes};\nexport {__js_webcomponents_timezoneDialog_ as timezoneDialog};\nexport {__js_webcomponents_toggle_ as toggle};\nexport {__js_webcomponents_typedefs_ as typedefs};\nexport {__js_webcomponents_undo_ as undo};\nexport {__js_webcomponents_viewDialog_ as viewDialog};\nexport {__js_webcomponents_views_ as views};\nexport {__js_webcomponents_volumeProfileSettingsDialog_ as volumeProfileSettingsDialog};\nexport {__js_webcomponents_waveParameters_ as waveParameters};\nexport {__js_webcomponents_yAxisContext_ as yAxisContext};\nexport {__js_webcomponents_dialog_colorPicker_ as colorPicker};\nexport {__js_webcomponents_palette_drawingPalette_ as drawingPalette};\nexport {__js_webcomponents_palette_drawingSettings_ as drawingSettings};\nexport {__js_webcomponents_scroll_menuDropdown_ as menuDropdown};\n\nexport {__CIQ_ as CIQ};\n\n/* global __TREE_SHAKE__ */\nif (typeof __TREE_SHAKE__ === \"undefined\" || !__TREE_SHAKE__) {\n\t_exports.CIQ.activateImports(\n\t\t__js_webcomponents_abstractMarker_,\n\t\t__js_webcomponents_advertisement_,\n\t\t__js_webcomponents_aggregationDialog_,\n\t\t__js_webcomponents_attribution_,\n\t\t__js_webcomponents_chartInstructions_,\n\t\t__js_webcomponents_chartTitle_,\n\t\t__js_webcomponents_clickable_,\n\t\t__js_webcomponents_close_,\n\t\t__js_webcomponents_comparison_,\n\t\t__js_webcomponents_cvpController_,\n\t\t__js_webcomponents_dataDialog_,\n\t\t__js_webcomponents_dialog_,\n\t\t__js_webcomponents_doubleSlider_,\n\t\t__js_webcomponents_drawingContext_,\n\t\t__js_webcomponents_dropdown_,\n\t\t__js_webcomponents_fibSettingsDialog_,\n\t\t__js_webcomponents_floatingWindow_,\n\t\t__js_webcomponents_gridSizePicker_,\n\t\t__js_webcomponents_heading_,\n\t\t__js_webcomponents_headsupDynamic_,\n\t\t__js_webcomponents_headsupStatic_,\n\t\t__js_webcomponents_help_,\n\t\t__js_webcomponents_instantChart_,\n\t\t__js_webcomponents_languageDialog_,\n\t\t__js_webcomponents_loader_,\n\t\t__js_webcomponents_lookup_,\n\t\t__js_webcomponents_lookupDialog_,\n\t\t__js_webcomponents_marker_,\n\t\t__js_webcomponents_measurementLineSettingsDialog_,\n\t\t__js_webcomponents_menu_,\n\t\t__js_webcomponents_messageToaster_,\n\t\t__js_webcomponents_palette_,\n\t\t__js_webcomponents_paletteDock_,\n\t\t__js_webcomponents_redo_,\n\t\t__js_webcomponents_scroll_,\n\t\t__js_webcomponents_shareButton_,\n\t\t__js_webcomponents_shareDialog_,\n\t\t__js_webcomponents_showRange_,\n\t\t__js_webcomponents_sideNav_,\n\t\t__js_webcomponents_sidePanel_,\n\t\t__js_webcomponents_studies_,\n\t\t__js_webcomponents_studyContext_,\n\t\t__js_webcomponents_studyDialog_,\n\t\t__js_webcomponents_studyLegend_,\n\t\t__js_webcomponents_swatch_,\n\t\t__js_webcomponents_themeDialog_,\n\t\t__js_webcomponents_themes_,\n\t\t__js_webcomponents_timezoneDialog_,\n\t\t__js_webcomponents_toggle_,\n\t\t__js_webcomponents_typedefs_,\n\t\t__js_webcomponents_undo_,\n\t\t__js_webcomponents_viewDialog_,\n\t\t__js_webcomponents_views_,\n\t\t__js_webcomponents_volumeProfileSettingsDialog_,\n\t\t__js_webcomponents_waveParameters_,\n\t\t__js_webcomponents_yAxisContext_,\n\t\t__js_webcomponents_dialog_colorPicker_,\n\t\t__js_webcomponents_palette_drawingPalette_,\n\t\t__js_webcomponents_palette_drawingSettings_,\n\t\t__js_webcomponents_scroll_menuDropdown_,\n\t\tnull\n\t);\n}","/**!\n *\t9.3.0\n *\tGeneration date: 2024-06-03T13:22:07.487Z\n *\tClient name: euroland as\n *\tPackage Type: Core alacarte\n *\tLicense type: annual\n *\tBuild descriptor: 13d0ed304\n */\n\n/***********************************************************!\n * Copyright © 2023 S&P Global All rights reserved\n*************************************************************/\n/*************************************! DO NOT MAKE CHANGES TO THIS LIBRARY FILE!! !*************************************\n* If you wish to overwrite default functionality, create a separate file with a copy of the methods you are overwriting *\n* and load that file right after the library has been loaded, but before the chart engine is instantiated. *\n* Directly modifying library files will prevent upgrades and the ability for ChartIQ to support your solution. *\n*************************************************************************************************************************/\n/* eslint-disable no-extra-parens */\n\n\nimport {CIQ} from \"../js/chartiq.js\";\nconst defaultConfig = (resources) => {\n\treturn {\n\t\t// Symbol can be string or\n\t\t// or an object containing property symbol of string type along with other properties\n\t\tinitialSymbol: {\n\t\t\tsymbol: \"AAPL\",\n\t\t\tname: \"Apple Inc\",\n\t\t\texchDisp: \"NASDAQ\"\n\t\t},\n\t\t// highest common ancestor node for this chart\n\t\troot: document,\n\t\t// initial data array, if any\n\t\tinitialData: undefined,\n\t\t// List of addons which are enabled and will be started when chart is created\n\t\t// Either override or supplement this list before creating chart to modify.\n\t\tenabledAddOns: {\n\t\t\tdataLoader: true,\n\t\t\textendedHours: true,\n\t\t\tfullScreen: true,\n\t\t\tinactivityTimer: true,\n\t\t\trangeSlider: true,\n\t\t\tshortcuts: true,\n\t\t\ttableView: true,\n\t\t\ttooltip: true\n\t\t},\n\t\tonNewSymbolLoad: {\n\t\t\t// if available called for each series in chart to test if it needs to be removed\n\t\t\t// when new primary symbol is loaded\n\t\t\tremoveSeries(series) {\n\t\t\t\treturn series.parameters.bucket !== \"study\" && !series.parameters.retoggle; // keeps only studies and series specifically set to remain\n\t\t\t},\n\t\t\t// handle symbol load error\n\t\t\tloadError(error, uiContext) {\n\t\t\t}\n\t\t},\n\t\t// configure save and restore layout, preferences and drawings.\n\t\t// type is boolean or object\n\t\t// setting `restore: { symbol: false }` will restore everything except symbol\n\t\trestore: true,\n\t\t// language: \"en-US\", // Optionally set a language for the UI, after it has been initialized, and translate.\n\t\tsetHtmlLang: true, // Optionally set the tag's lang attribute whenever language is set on chart.\n\t\t// default lookup driver is defined in examples/feeds/symbolLookupChartIQ.js, it needs to be loaded to be available\n\t\tlookupDriver: CIQ.ChartEngine.Driver.Lookup.ChartIQ,\n\t\thotkeyConfig: {\n\t\t\t// Specify hotkeys for default hotkey actions. Structure of the API works like this: each hotkey gets initialized with an\n\t\t\t// object that specifies the action to be performed and the command(s) to trigger it. Actions identified as strings are\n\t\t\t// default actions, which in some cases can be modified in the `hotkeyConfig.behavior` object. For custom actions, actions\n\t\t\t// can be set to functions, which will get called with an object with references to `stx` and `options` (an optional object\n\t\t\t// specified in the hotkey declaration).\n\t\t\t// Commands are specified as strings, with combo keys separated by `+`. For combos, all keys but the last key are expected\n\t\t\t// to be modifier keys (Shift, Alt, etc). The hotkey handler will check both `KeyboardEvent.key` and `KeyboardEvent.code`,\n\t\t\t// which can be useful when trying to ensure coverage across systems and layouts. If the keystroke originated on the numpad,\n\t\t\t// only `KeyboardEvent.code` will be checked, allowing different hotkeys to be assigned to the numpad.\n\t\t\t// Vertical movement options accept a percent option (expressed as a decimal), which specifies vertical movement as a\n\t\t\t// percentage of the chart height. Horizontal movement accepts a bars option, which specifies number of bars to move.\n\t\t\t// Note: if a `KeyboardEvent.key` value is equal to \"Unidentified\", the `String.fromCharCode` of the `KeyboardEvent.keyCode`\n\t\t\t// value will be used instead. This is to support legacy edge.\n\t\t\thotkeys: [\n\t\t\t\t// precise navigation\n\t\t\t\t{ label: \"Pan chart up\", action: \"up\", options: { percent: 0.02 }, commands: [\"ArrowUp\", \"Up\"] },\n\t\t\t\t{ label: \"Pan chart down\", action: \"down\", options: { percent: 0.02 }, commands: [\"ArrowDown\", \"Down\"] },\n\t\t\t\t{ label: \"Pan chart right\", action: \"right\", options: { bars: 1 }, commands: [\"ArrowRight\", \"Right\"] },\n\t\t\t\t{ label: \"Pan chart left\", action: \"left\", options: { bars: 1 }, commands: [\"ArrowLeft\", \"Left\"] },\n\t\t\t\t// fast navigation\n\t\t\t\t{ label: \"Pan chart up fast\", action: \"up\", options: { percent: 0.2 }, commands: [\"Shift+ArrowUp\", \"Shift+Up\"] },\n\t\t\t\t{ label: \"Pan chart down fast\", action: \"down\", options: { percent: 0.2 }, commands: [\"Shift+ArrowDown\", \"Shift+Down\"] },\n\t\t\t\t{ label: \"Pan chart right fast\", action: \"right\", options: { bars: 10 }, commands: [\"Shift+ArrowRight\", \"Shift+Right\"] },\n\t\t\t\t{ label: \"Pan chart left fast\", action: \"left\", options: { bars: 10 }, commands: [\"Shift+ArrowLeft\", \"Shift+Left\"] },\n\t\t\t\t// page\n\t\t\t\t{ label: \"Page chart right\", action: \"pageRight\", commands: [\"Alt+ArrowRight\", \"Alt+Right\", \"PageUp\"] },\n\t\t\t\t{ label: \"Page chart left\", action: \"pageLeft\", commands: [\"Alt+ArrowLeft\", \"Alt+Left\", \"PageDown\"] },\n\t\t\t\t// zoom\n\t\t\t\t{ label: \"Zoom in x-axis\", action: \"zoomInXAxis\", commands: [\"NumpadAdd\", \"=\"] },\n\t\t\t\t{ label: \"Zoom out x-axis\", action: \"zoomOutXAxis\", commands: [\"NumpadSubtract\", \"-\"] },\n\t\t\t\t{ label: \"Zoom in y-axis\", action: \"zoomInYAxis\", commands: [\"+\"] },\n\t\t\t\t{ label: \"Zoom out y-axis\", action: \"zoomOutYAxis\", commands: [\"_\"] },\n\t\t\t\t// toggle\n\t\t\t\t{ label: \"Toggle crosshair\", action: \"toggleCrosshairs\", commands: [\"Alt+Backslash\", \"Alt+\\\\\", \"Alt+Þ\"] }, // Alt+Þ for legacy edge support\n\t\t\t\t// UI navigation\n\t\t\t\t{ label: \"Tab to next\", action: \"keyboardNavigateNext\", commands: [\"Tab\"] },\n\t\t\t\t{ label: \"Tab to previous\", action: \"keyboardNavigatePrevious\", commands: [\"Shift+Tab\"] },\n\t\t\t\t// Tab navigation deselect is available. Comment out this line and assign an open key combination to enable.\n\t\t\t\t//{ label: \"Deactivate Tab Selection\", action: \"keyboardNavigateDeselect\", commands: [\"\"] },\n\t\t\t\t{ label: \"Select at tab\", action: \"keyboardNavigateClick\", commands: [\"Enter\"] },\n\t\t\t\t// misc\n\t\t\t\t{ label: \"Pan to home\", action: \"home\", commands: [\"Home\"] },\n\t\t\t\t{ label: \"Pan to start of loaded data\", action: \"end\", commands: [\"End\"] },\n\t\t\t\t{ label: \"Delete a highlighted item or the active drawing\", action: \"delete\", commands: [\"Backspace\", \"Delete\", \"Del\"] },\n\t\t\t\t{ label: \"Close an open menu / dialog box or undo the active drawing\", action: \"escape\", commands: [\"Escape\", \"Esc\"] },\n\t\t\t\t{ label: \"Symbol Lookup\", action: \"symbolLookup\", commands: [\"Shift+Alt+KeyL\"], ariaLabel: \"Opens main symbol lookup for chart\" },\n\t\t\t\t// AddOns and Plugins\n\t\t\t\t{ label: \"Table view\", action: \"tableView\", commands: [\"Alt+KeyK\"], extension: \"tableView\", ariaLabel: \"Opens chart data in table format\" }, // tableView is modal view, toggling off requires use of Escape\n\t\t\t\t{ label: \"Range Slider\", action: \"rangeSlider\", commands: [\"Shift+Alt+KeyR\"], extension: \"rangeSlider\" },\n\t\t\t\t{ label: \"Extended Hours\", action: \"extendedHours\", commands: [\"Shift+Alt+KeyX\"], extension: \"extendedHours\" },\n\t\t\t\t{ label: \"Keyboard Shortcuts\", action: \"shortcuts\", commands: [\"Shift+Alt+Slash\", \"Shift+Alt+?\"], extension: \"shortcuts\" },\n\t\t\t\t{ label: \"Market Depth\", action: \"marketDepth\", commands: [\"Shift+Alt+KeyD\"], extension: \"marketDepth\" },\n\t\t\t\t{ label: \"L2 Heat Map\", action: \"l2HeatMap\", commands: [\"Shift+Alt+KeyM\"], extension: \"marketDepth\" },\n\t\t\t\t{ label: \"Import Data\", action: \"dataLoader\", commands: [\"Alt+KeyI\"], extension: \"dataLoader\" },\n\t\t\t\t{ label: \"Trade From Chart\", action: \"tfc\", commands: [\"Shift+Alt+KeyP\"], extension: \"tfc\" }\n\t\t\t],\n\t\t\t// Keys events captured by the chart normally trigger on keyup. Specify which keys will trigger on keydown,\n\t\t\t// allowing a user to hold said key down (which keeps generating events) to repeat the associated hotkey action. It is\n\t\t\t// not recommended to associate \"toggle\" actions with these keys.\n\t\t\tkeysToRepeat: [\n\t\t\t\t\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\",\n\t\t\t\t\"Up\", \"Down\", \"Left\", \"Right\", \"-\", \"_\", \"=\", \"+\"\n\t\t\t],\n\t\t},\n\t\tsystemMessages: {\n\t\t\t// Predefined notification event objects to be called by key value. Example:\n\t\t\t// testinfo: {\n\t\t\t// \tmessage: \"This is an \\\"informational\\\" notification.\",\n\t\t\t// \tposition: \"top\",\n\t\t\t// \ttype:\"info\",\n\t\t\t// \ttransition:\"slide\",\n\t\t\t// \tdisplayTime: 5\n\t\t\t// }\n\t\t\tcopytoclipboard: {\n\t\t\t\tmessage: \"Copied to clipboard.\",\n\t\t\t\ttype: \"info\",\n\t\t\t\tdisplayTime: 5\n\t\t\t},\n\t\t\tlogdeactivated: {\n\t\t\t\tmessage: \"Log scale has been deactivated due to a zero or negative value in your visible dataset.\",\n\t\t\t\ttype:\"warning\"\n\t\t\t},\n\t\t\tstudynoteditable: {\n\t\t\t\tmessage: \"This study is not editable\",\n\t\t\t\tdisplayTime: 5\n\t\t\t},\n\t\t\teldercannotadd: {\n\t\t\t\tmessage: \"Elder Impulse study cannot be activated because a custom chart is already in use.\",\n\t\t\t\ttype: \"info\",\n\t\t\t\tdisplayTime: 3\n\t\t\t},\n\t\t\tgonogocannotadd: {\n\t\t\t\tmessage: \"GoNoGo study cannot be activated because a custom chart is already in use.\",\n\t\t\t\ttype: \"info\",\n\t\t\t\tdisplayTime: 3\n\t\t\t},\n\t\t\taddAVWAP: {\n\t\t\t\tmessage: \"Select AVWAP anchor time from the chart.\",\n\t\t\t\ttype: \"info\",\n\t\t\t\tdisplayTime: 0\n\t\t\t},\n\t\t\tremoveAVWAP: {\n\t\t\t\tmessage: \"Select AVWAP anchor time from the chart.\",\n\t\t\t\tremove: true\n\t\t\t},\n\t\t\tchangeperiodicity: {\n\t\t\t\tmessage: \"Changing Periodicity may lose loaded data.\",\n\t\t\t},\n\t\t\tduplicatesymbol: {\n\t\t\t\tmessage: \"The comparison symbol cannot be the same as the main series.\",\n\t\t\t\tdisplayTime: 4,\n\t\t\t\ttype: \"error\"\n\t\t\t}\n\t\t},\n\t\t// Optionally set a market factory to the chart to make it market hours aware. Otherwise it will operate in 24x7 mode.\n\t\t// This is required for the simulator, or if you intend to also enable Extended hours trading zones.\n\t\t// Please note that, this method is set to use the CIQ.Market.Symbology functions by default,\n\t\t// which must be reviewed and adjust to comply with your quote feed and symbology format before they can be used.\n\t\t// Sample default setting requires resources loaded from\n\t\t// chartiq/examples/markets/marketDefinitionsSample and\n\t\t// chartiq/examples/markets/marketSymbologySample\n\t\tmarketFactory: CIQ.Market.Symbology.factory,\n\t\t// All configuration parameters for chart engine except for container property\n\t\t// Only few are configured here. View available in https://documentation.chartiq.com/CIQ.ChartEngine.html\n\t\t// use in https://documentation.chartiq.com/CIQ.ChartEngine.html#.create\n\t\tchartEngineParams: {\n\t\t\tpreferences: {\n\t\t\t\tlabels: false,\n\t\t\t\tcurrentPriceLine: true,\n\t\t\t\twhitespace: 0,\n\t\t\t\tdisplayCrosshairsWithDrawingTool: false\n\t\t\t}\n\t\t},\n\t\t// Array of objects containing properties to attach automated quote feeds\n\t\t// to the chart to handle initial load, pagination, and updates at preset intervals.\n\t\t// Property detail - {@link CIQ.ChartEngine#attachQuoteFeed}\n\t\t// @since 8.8.4 added backgroundRefreshInterval update periodicity when in multi-chart solo background\n\t\tquoteFeeds: resources.quoteFeed ? [\n\t\t\t{\n\t\t\t\tquoteFeed: resources.quoteFeed,\n\t\t\t\tbehavior: { refreshInterval: 1, backgroundRefreshInterval: 5, bufferSize: 200 },\n\t\t\t\t// filter: () => {}\n\t\t\t}\n\t\t] : [],\n\t\tselector: {\n\t\t\tsideNav: \".ciq-sidenav\",\n\t\t\tsidePanel: \"cq-side-panel\",\n\t\t\tlookupComponent: \".ciq-search cq-lookup\",\n\t\t\tstudyLegend: \"cq-study-legend\",\n\t\t\ttimeSpanEvent: \".stx-markers cq-item.span-event, .ciq-markers .switch-item.item[stxtap*=TimeSpanEvent]\",\n\t\t\tmarkersMenuItem: \".stx-markers cq-item, .ciq-markers .switch-item.item\",\n\t\t\tthemesMenuItem: \"cq-themes\",\n\t\t\ttfcTradePanel: \".stx-trade-panel\",\n\t\t\ttfcToggle: \".stx-trade\",\n\t\t},\n\t\tthemes: {\n\t\t\tbuiltInThemes: { \"ciq-day\": \"Day\", \"ciq-night\": \"Night\" },\n\t\t\tdefaultTheme: \"ciq-night\",\n\t\t\t/**\n\t\t\t * Optional override storage location of current theme and any custom defined themes. Takes a function with get, set, and remove methods\n\t\t\t * If not defined, then the component will use CIQ.NameValueStore for storage.\n\t\t\t */\n\t\t\tnameValueStore: resources.nameValueStore\n\t\t},\n\t\t// menu items\n\t\tdisplayStyleIcons: true, // use style icons in the chart style menu\n\t\tmenuViewConfig: {\n\t\t\t// configure view menu options\n\t\t},\n\t\tmenuStudiesConfig: { \t// All studies available are by default included in the studies menu\n\t\t\texcludedStudies: {\n\t\t\t\t\"stochastics\": true, // Remove simple stochastics, replaced with Stochastics\n\t\t\t}, // list of studies to exclude\n\t\t\talwaysDisplayDialog: { ma: true },\n\t\t\t/*dialogBeforeAddingStudy: {\"rsi\": true} // here's how to always show a dialog before adding the study*/\n\t\t},\n\t\tdrawingTools: [\n\t\t\t{ type: \"dt\", tool: \"annotation\", group: \"text\", label: \"Annotation\", shortcut: \"w\" },\n\t\t\t{ type: \"dt\", tool: \"arrow\", group: \"markings\", label: \"Arrow\", shortcut: \"a\" },\n\t\t\t{ type: \"dt\", tool: \"line\", group: \"lines\", label: \"Line\", shortcut: \"l\" },\n\t\t\t{ type: \"dt\", tool: \"horizontal\", group: \"lines\", label: \"Horizontal\", shortcut: \"o\" },\n\t\t\t{ type: \"dt\", tool: \"vertical\", group: \"lines\", label: \"Vertical\", shortcut: \"p\" },\n\t\t\t{ type: \"dt\", tool: \"rectangle\", group: \"markings\", label: \"Rectangle\", shortcut: \"r\" },\n\t\t\t{ type: \"dt\", tool: \"trendline\", group: \"lines\", label: \"Trend Line\", shortcut: \"t\" },\n\t\t\t{ type: \"dt\", tool: \"measurementline\", group: \"statistics\", label: \"Measurement Line\", shortcut: \"\" },\n\t\t],\n\t\tdrawingToolGrouping: [\n\t\t\t\"All\",\n\t\t\t\"Favorites\",\n\t\t\t\"Lines\",\n\t\t\t\"Markings\",\n\t\t\t\"Text\"\n\t\t],\n\t\tmenuRendering: {\n\t\t\titem: ({ label, cmd, cls }) => `\n\t\t\t\t${label}`,\n\t\t\tcheckbox: ({ label, cmd, cls }) => `\n\t\t\t\t${label}\n\t\t\t\t`,\n\t\t\tdt: ({ tool, group, label, shortcut }) => `\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t${label}\n\t\t\t\t\t\t(Help available, press question mark key)\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t`\n\t\t},\n\t\tgetMenu(name, sort) {\n\t\t\tlet menu = this[name];\n\t\t\tif (!menu) return;\n\t\t\tif (sort === true) sort = (a, b) => (a.label > b.label ? 1 : -1);\n\t\t\tif (typeof sort === \"function\") menu.sort(sort);\n\t\t\treturn this[name].map((options) => this.menuRendering[options.type || \"item\"](options, this));\n\t\t},\n\t\taddOns: {\n\t\t\t// Floating tooltip on mousehover\n\t\t\ttooltip: {\n\t\t\t\tohl: null,\n\t\t\t\tvolume: null,\n\t\t\t\tseries: true,\n\t\t\t\tstudies: true\n\t\t\t},\n\t\t\t// Inactivity timer\n\t\t\tinactivityTimer: { minutes: 30 },\n\t\t\t\n\t\t\t// Range Slider\n\t\t\trangeSlider: {},\n\t\t\t// Enables Full Screen mode toggle button in chart controls\n\t\t\tfullScreen: {},\n\t\t\t// Extended hours trading zones\n\t\t\textendedHours: { filter: true },\n\t\t\t// Continuous Zoom will also enable the SmartZoom button in your chart zoom controls\n\t\t\t// which allows the end-user to toggle the feature on and off.\n\t\t\tcontinuousZoom: {\n\t\t\t\tperiodicities: [\n\t\t\t\t\t// daily interval data\n\t\t\t\t\t{period: 1, interval: \"month\"},\n\t\t\t\t\t{period: 1, interval: \"week\"},\n\t\t\t\t\t{period: 1, interval: \"day\"},\n\t\t\t\t\t// 30 minute interval data\n\t\t\t\t\t{period: 8, interval: 30},\n\t\t\t\t\t{period: 1, interval: 30},\n\t\t\t\t\t// 1 minute interval data\n\t\t\t\t\t{period: 5, interval: 1},\n\t\t\t\t\t{period: 1, interval: 1},\n\t\t\t\t\t// one second interval data\n\t\t\t\t\t{period: 10, interval: 1, timeUnit:\"second\"},\n\t\t\t\t\t{period: 1, interval: 1, timeUnit:\"second\"},\n\t\t\t\t],\n\t\t\t\tboundaries: {\n\t\t\t\t\tmaxCandleWidth: 15,\n\t\t\t\t\tminCandleWidth: 3\n\t\t\t\t}\n\t\t\t},\n\t\t\t// Forecasting\n\t\t\tforecasting: {\n\t\t\t\tmoduleName: \"PlotComplementer\",\n\t\t\t\tid: \"forecast\",\n\t\t\t\tdecorator: { symbol: \"_fcst\", display: \" Forecast\" },\n\t\t\t\trenderingParameters: { chartType: \"channel\", opacity: 0.5, pattern: \"dotted\" },\n\t\t\t\tquoteFeed: resources.forecastQuoteFeed,\n\t\t\t\tbehavior: { refreshInterval:60 }\n\t\t\t},\n\t\t\t// TableView\n\t\t\ttableView: {},\n\t\t\t// DataLoader\n\t\t\tdataLoader: {},\n\t\t\t// Shortcuts\n\t\t\tshortcuts: {}\n\t\t},\n\t\tplugins: {\n\t\t\tptv: {\n\t\t\t\tmoduleName: \"TimeSpanEventPanel\",\n\t\t\t\tmenuItemSelector: \".stx-markers cq-item.span-event, .ciq-markers .item.ciq-active[stxtap*=TimeSpanEvent]\",\n\t\t\t\tloadSample: true,\n\t\t\t\tshowTooltip: true,\n\t\t\t\t// Event info can be displayed in \"main\" chart or in TSE \"panel\"\n\t\t\t\tinfoPanel: {\n\t\t\t\t\tdurationEvent: 'main',\n\t\t\t\t\tspanEvent: 'main',\n\t\t\t\t\tsingleEvent: 'main'\n\t\t\t\t}\n\t\t\t},\n\t\t\t// Enable the Active Trader Market Depth panel\n\t\t\tmarketDepth: {\n\t\t\t\tvolume: true,\n\t\t\t\tmountain: true,\n\t\t\t\tstep: true,\n\t\t\t\trecord: true,\n\t\t\t\theight: \"50%\",\n\t\t\t\torderbook: true,\n\t\t\t\tinteraction: true\n\t\t\t},\n\t\t\t// Trade From Chart (TFC)\n\t\t\t// set account key to your custom account class, or leave as undefined to default to CIQ.Account.Demo constructor\n\t\t\t// import plugins/tfc/tfc-demo.js or set loadSample=true to make CIQ.Account.Demo available for sample account creation\n\t\t\ttfc: {\n\t\t\t\tmoduleName: \"TFC\",\n\t\t\t\tcontainer: \".ciq-menu-section .ciq-toggles\",\n\t\t\t\tloadSample: true,\n\t\t\t\t// account: undefined, // Account instance object or a constructor\n\t\t\t\t/**\n\t\t\t\t * By default if a constructor is provided in account the first created instance is shared with all TFC instances\n\t\t\t\t * set following to true to create unique instances\n\t\t\t\t */\n\t\t\t\t// allowUniqueAccountConstruction: true\n\t\t\t\tstartCompact: true, // opens plugin in compact mode\n\t\t\t\tchannel: \"channel.tfc\",\n\t\t\t\ttoggleMarkup: `\n\t\t\t\t\t\n\t\t\t\t`\n\t\t\t},\n\t\t\tcrossSection: {\n\t\t\t\tpointFreshnessTimeout: 1, // pointFreshnessTimeout 1 min for demo purposes\n\t\t\t\tenableTimeSeries: true, // toggles on time-series related options\n\t\t\t\txAxisType: \"regular\", // plots ticks across the xaxis in even intervals (if sortFunction not customized)\n\t\t\t\ttimelineDateSelector: {\n\t\t\t\t\theight: 95,\n\t\t\t\t\tuseNotifications: true\n\t\t\t\t},\n\t\t\t\tpostInstall({ uiContext, extension }) {\n\t\t\t\t\tconst { stx: { crossSection } } = uiContext;\n\t\t\t\t\tCIQ.getFn(\"UI.CurveEdit\")(null, uiContext, this);\n\t\t\t\t\tCIQ.getFn(\"CrossSection.HUD\")(null, uiContext);\n\t\t\t\t\tif (this.timelineDateSelector) {\n\t\t\t\t\t\tCIQ.getFn(\"CrossSection.TimelineDateSelector\")(\n\t\t\t\t\t\t\tObject.assign({ crossSection }, this.timelineDateSelector)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Connect datepicker change to crosssection callback\n\t\t\t\t\tconst datepicker = uiContext.topNode.querySelector(\"cq-datepicker\");\n\t\t\t\t\tif (datepicker) {\n\t\t\t\t\t\tdatepicker.registerCallback(date => extension.setCurveDate(date));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tvisualEarnings: {\n\t\t\t\tcontainer: \".ciq-menu-section .ciq-dropdowns\"\n\t\t\t},\n\t\t\tsignalIQ: {\n\t\t\t\tpanelHeight: 150,\n\t\t\t\tdisplayCondition: false,\n\t\t\t\temojiPicker: resources.emojiPicker && {\n\t\t\t\t\t// create a picker instance and open it\n\t\t\t\t\topen({ stx, targetElement, handler }) {\n\t\t\t\t\t\tif (!this.pickers) this.pickers = new Map();\n\t\t\t\t\t\tif (!this.pickers.has(targetElement)) {\n\t\t\t\t\t\t\tconst button = this.container = document.createElement(\"button\");\n\t\t\t\t\t\t\tbutton.type = \"button\";\n\t\t\t\t\t\t\tbutton.classList.add(\"marker-emoji-picker\");\n\t\t\t\t\t\t\ttargetElement.parentElement.insertBefore(button, targetElement.nextSibling);\n\t\t\t\t\t\t\tconst emojiList = [];\n\t\t\t\t\t\t\tthis.emojis.forEach((label) => {\n\t\t\t\t\t\t\t\temojiList.push({ value: stx.emojify(`:${label.replace(/\\|/g, \"::\")}:`), label });\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tthis.pickers.set(targetElement, new resources.emojiPicker({\n\t\t\t\t\t\t\t\tbutton,\n\t\t\t\t\t\t\t\ttargetElement,\n\t\t\t\t\t\t\t\tcontainer: this.container,\n\t\t\t\t\t\t\t\temojiList,\n\t\t\t\t\t\t\t\tdisplacements: { x:0 }\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst picker = this.pickers.get(targetElement);\n\t\t\t\t\t\tpicker.onSelect(handler);\n\t\t\t\t\t\tpicker.toggle(true);\n\t\t\t\t\t},\n\t\t\t\t\t// remove unused resources\n\t\t\t\t\tclean() {\n\t\t\t\t\t\tif (this.pickers) {\n\t\t\t\t\t\t\tthis.pickers.forEach((picker) => picker.toggle(false));\n\t\t\t\t\t\t\tthis.pickers = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t// Array of emojis. Use a pipe to designate a skin tone; e.g. \"point_up|skin-tone-4\"\n\t\t\t\t\temojis: [\n\t\t\t\t\t\t\"smile\", \"partying_face\", \"sob\", \"money_mouth_face\", \"arrow_upper_right\", \"arrow_lower_right\", \"ox\", \"bear\",\n\t\t\t\t\t\t\"gem\", \"rocket\", \"heart\", \"poop\", \"fire\", \"bomb\", \"pray\", \"moneybag\"\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t// Include more as we find those not conducive to alerting\n\t\t\t\tdisallowedStudies: [\n\t\t\t\t\t\"Darvas\", \"Elder Impulse\", \"GoNoGo Trend\", \"Pivot Points\",\n\t\t\t\t\t\"Sentiment By Strike\", \"val lines\", \"Volatility Cone\", \"vol profile\"\n\t\t\t\t]\n\t\t\t},\n\t\t\tstudyBrowser: {\n\t\t\t\tpromoteStudiesMenu: true,\n\t\t\t\tpostInstall({ uiContext, extension }) {\n\t\t\t\t\tif (this.promoteStudiesMenu) {\n\t\t\t\t\t\tconst contextNode = uiContext.topNode.parentNode.closest(\"cq-context\") || uiContext.topNode;\n\t\t\t\t\t\tconst menu = CIQ.UI.BaseComponent.prototype.qsa(\"cq-menu.ciq-studies[config]\", contextNode, true)[0];\n\t\t\t\t\t\tif (menu && !menu.sbActivated) {\n\t\t\t\t\t\t\tsetTimeout(() => { // multichart context is available only in the next event loop\n\t\t\t\t\t\t\t\tconst topLevelEngine = contextNode.CIQ.UI.context.stx;\n\t\t\t\t\t\t\t\tconst breakpointChannel = (uiContext.config.channels || {}).breakpoint || \"channel.breakpoint\";\n\t\t\t\t\t\t\t\tmenu.channelSubscribe(breakpointChannel, () => {\n\t\t\t\t\t\t\t\t\tif (!this.promoteStudiesMenu) return;\n\t\t\t\t\t\t\t\t\tconst value = menu.channelRead(breakpointChannel, topLevelEngine);\n\t\t\t\t\t\t\t\t\tmenu.setAttribute(\"config\", value === \"break-sm\" ? \"studies\" : \"studybrowser\");\n\t\t\t\t\t\t\t\t}, topLevelEngine);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tmenu.sbActivated = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tscriptIQ: {},\n\t\t\tanalystViews: {\n\t\t\t\tcontainer: \".ciq-menu-section .ciq-toggles\",\n\t\t\t\tmoduleName: \"TCAnalystViews\",\n\t\t\t\tpartner: 1000,\n\t\t\t\ttoken: \"eZOrIVNU3KR1f0cf6PTUYg==\",\n\t\t\t\tchannel: \"channel.analystviews\",\n\t\t\t\ttoggleMarkup: `\n\t\t\t\t\t\n\t\t\t\t\t`\n\t\t\t},\n\t\t\ttechnicalInsights: {\n\t\t\t\tcontainer: \".ciq-menu-section .ciq-toggles\",\n\t\t\t\tmoduleName: \"TCTechnicalInsights\",\n\t\t\t\tlang: \"en\",\n\t\t\t\tuid: \"\",\n\t\t\t\tchannel: \"channel.technicalinsights\",\n\t\t\t\ttoggleMarkup: `\n\t\t\t\t\t\n\t\t\t\t\t`\n\t\t\t}\n\t\t},\n\t\t// path of component communication channels\n\t\t// layout properties are persisted between reloads\n\t\tchannels: {\n\t\t\tlookup: \"channel.lookup\",\n\t\t\tcrosshair: \"layout.crosshair\",\n\t\t\theadsUp: \"layout.headsUp\",\n\t\t\tsidenav: \"layout.sidenav\",\n\t\t\ttableView: \"channel.tableView\",\n\t\t\tdrawing: \"channel.drawing\",\n\t\t\tdrawingPalettes: \"channel.drawingPalettes\",\n\t\t\tbreakpoint: \"channel.breakpoint\",\n\t\t\tcontainerSize: \"channel.containerSize\",\n\t\t\tsidenavSize: \"channel.sidenavSize\",\n\t\t\tsidepanelSize: \"channel.sidepanelSize\",\n\t\t\tpluginPanelHeight: \"channel.pluginPanelHeight\",\n\t\t\ttfc: \"channel.tfc\",\n\t\t\tanalystviews: \"channel.analystviews\",\n\t\t\ttechnicalinsights: \"channel.technicalinsights\",\n\t\t\tdataLoader: \"channel.dataLoader\",\n\t\t\tdialog: \"channel.dialog\",\n\t\t\tkeyboardNavigation: \"channel.keyboardNavigation\",\n\t\t\tclass: \"channel.componentClass\"\n\t\t},\n\t\t// dialogs\n\t\tdialogs: {\n\t\t\taggregation: {\n\t\t\t\ttag: \"cq-aggregation-dialog\",\n\t\t\t\tattributes: {\n\t\t\t\t\t\"cq-title\": \"Aggregation Dialog\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tdataLoader: {\n\t\t\t\ttag: \"cq-data-dialog\",\n\t\t\t\tattributes: {\n\t\t\t\t\t\"cq-title\": \"Import Data\",\n\t\t\t\t\t\"cq-close-button\": \"false\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tdrawingContext: {\n\t\t\t\ttag: \"cq-drawing-context\",\n\t\t\t\tattributes: {\n\t\t\t\t\t\"cq-close-button\": \"false\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tfibSettings: { \n\t\t\t\ttag: \"cq-fib-settings-dialog\",\n\t\t\t\tattributes: {\n\t\t\t\t\t\"cq-title\": \"Settings\",\n\t\t\t\t\t\"cq-close-button\": \"false\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tlanguage: {\n\t\t\t\ttag: \"cq-language-dialog\",\n\t\t\t\tattributes: {\n\t\t\t\t\t\"cq-title\": \"Choose language\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tlookup: {\n\t\t\t\ttag: \"cq-lookup-dialog\",\n\t\t\t\tattributes: {\n\t\t\t\t\t\"cq-title\": \"Symbol Lookup\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tmeasurementlineSettings: {\n\t\t\t\ttag: \"cq-measurementline-settings-dialog\",\n\t\t\t\tattributes: {\n\t\t\t\t\t\"cq-title\": \"Measurement Line Settings\",\n\t\t\t\t\t\"cq-close-button\": \"false\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tshare: {\n\t\t\t\ttag: \"cq-share-dialog\",\n\t\t\t\tattributes: {\n\t\t\t\t\t\"cq-title\": \"Share\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tsignaliq: {\n\t\t\t\ttag: \"cq-signaliq-dialog\",\n\t\t\t\tattributes: {\n\t\t\t\t\t\"cq-title\": \"New Signal\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tstudy: {\n\t\t\t\ttag: \"cq-study-dialog\",\n\t\t\t\tattributes: {\n\t\t\t\t\t\"cq-title\": \"Study\",\n\t\t\t\t\t\"cq-close-button\": \"false\",\n\t\t\t\t\t\"cq-study-axis\": true,\n\t\t\t\t\t\"cq-study-panel\": \"alias\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tstudyContext: {\n\t\t\t\ttag: \"cq-study-context\",\n\t\t\t\tattributes: {\n\t\t\t\t\t\"cq-close-button\": \"false\"\n\t\t\t\t}\n\t\t\t},\n\t\t\ttheme: {\n\t\t\t\ttag: \"cq-theme-dialog\",\n\t\t\t\tattributes: {\n\t\t\t\t\t\"cq-title\": \"Create Custom Theme\"\n\t\t\t\t}\n\t\t\t},\n\t\t\ttimezone: { \n\t\t\t\ttag: \"cq-timezone-dialog\",\n\t\t\t\tattributes: {\n\t\t\t\t\t\"cq-title\": \"Choose Timezone\",\n\t\t\t\t\t\"cq-description\": \"To set your timezone use the location button below, or scroll through the following list...\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tview: { \n\t\t\t\ttag: \"cq-view-dialog\",\n\t\t\t\tattributes: {\n\t\t\t\t\t\"cq-title\": \"Save View\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tvolumeprofileSettings: {\n\t\t\t\ttag: \"cq-volumeprofile-settings-dialog\",\n\t\t\t\tattributes: {\n\t\t\t\t\t\"cq-title\": \"Volume Profile Settings\",\n\t\t\t\t\t\"cq-close-button\": \"false\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tyaxisContext: {\n\t\t\t\ttag: \"cq-yaxis-context\",\n\t\t\t\tattributes: {\n\t\t\t\t\t\"cq-close-button\": \"false\"\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\t// Event Markers implementation\n\t\teventMarkersImplementation: resources.markerFeed,\n\t\t// Scrollbar styling implementation for cq-scroll component\n\t\tscrollbarStyling: {\n\t\t\trefresh(component, options = { suppressScrollX: true }) {\n\t\t\t\tif (typeof resources.scrollStyle !== \"function\") return;\n\t\t\t\tif (!component.__ps) {\n\t\t\t\t\tcomponent.__ps = new resources.scrollStyle(component, options);\n\t\t\t\t\tcomponent.__ps.scrollbarX.setAttribute('tabindex', -1);\n\t\t\t\t\tcomponent.__ps.scrollbarY.setAttribute('tabindex', -1);\n\t\t\t\t}\n\t\t\t\tcomponent.__ps.update(component);\n\t\t\t},\n\t\t\tdestroy(component) {\n\t\t\t\tif (component.__ps) component.__ps.destroy();\n\t\t\t}\n\t\t},\n\t\t// chart sharing\n\t\tchartSharing: resources.chartSharing,\n\t\t// Copy symbol from the reference chart when a new chart is added\n\t\t// true value copies active chart symbol, false use initialSymbol, null leaves chart without symbol\n\t\tmultiChartCopySymbol: null,\n\t\t// Message to display when chart is created without symbol\n\t\tmultiChartLoadMsg: \"Click to load a symbol\",\n\t\t// On multi chart grid expansion restores charts that have been temporarily placed off grid due to grid size reduction.\n\t\t// The sequence of charts, left to right, rather than specific grid positions is restored.\n\t\trestoreOffgridCharts: true, \n\t\t// Class to access and store data about the chart eg preferences, chart layout, and drawings for chart.\n\t\t// If you were using this property previously it stored information for themes which has now been moved to config.themes.nameValueStore\n\t\tnameValueStore: resources.nameValueStore,\n\t\t// Optional function to call when web components have initialized\n\t\tonWebComponentsReady: () => {},\n\t\t// Callback to execute prior layout import or instrument loading after addOns and plugins have been initialized.\n\t\t// To set instrument for initial load, use this configuration's initialSymbol property and set the restore property to false or restore.symbol to false\n\t\tonEngineReady: (stx) => {},\n\t\t// Callback to execute when chart is loaded for first time\n\t\tonChartReady: (stx) => {},\n\t\t// Callback to execute on multi chart events\n\t\t// type \"chartDestroy\" and \"chartReady\" have the CIQ.ChartEngine \"stx\" property in the details object\n\t\t// type \"contextSwitch\" has \"prev\" and \"context\" context objects in the details parameter\n\t\t// @since 8.9.0\n\t\tonMultiChartEvent: (type, details) => {},\n\t\t// In multichart setting expand active chart by hiding all others for following settings\n\t\tsoloActive: {\n\t\t\tonDraw: { // onDraw is no longer invoked\n\t\t\t\tshouldSolo(stx) { // should active chart solo when drawing is enabled for chart with stx parameter\n\t\t\t\t\t// Uncomment following if above medium breakpoint in chart solo on drawing is required\n\t\t\t\t\t// const { width, height } = stx.container.getBoundingClientRect();\n\t\t\t\t\t// return width < 584 || height < 350;\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\t// notification message\n\t\t\t\tnotify: {\n\t\t\t\t\tmessage: \"Click on the draw toggle again to close drawing tools and return to grid view\",\n\t\t\t\t}\n\t\t\t},\n\t\t\tonTFC: {\n\t\t\t\tshouldSolo(stx) {\n\t\t\t\t\tconst { width, height } = stx.container.getBoundingClientRect();\n\t\t\t\t\treturn width < 300 || height < 250;\n\t\t\t\t},\n\t\t\t\tnotify: {\n\t\t\t\t\tmessage: \"Chart has been maximized to make it easier to set trade prices.\",\n\t\t\t\t}\n\t\t\t},\n\t\t\tonTechnicalInsights: {\n\t\t\t\tnotify: {\n\t\t\t\t\tmessage: \"Chart has been soloed for plugin use. Disable plugin to restore chart grid.\",\n\t\t\t\t}\n\t\t\t},\n\t\t\tonAnalystViews: {\n\t\t\t\tnotify: {\n\t\t\t\t\tmessage: \"Chart has been soloed for plugin use. Disable plugin to restore chart grid.\",\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Setting to load initial symbol from a URL.\n\t\t//\n\t\t// If symbolParam defined query string parameter is provided in URL then this configs:\n\t\t// - `initialSymbol` property will be updated based on query string\n\t\t// - `restore` property will be updated to `restore.symbol = false`\n\t\t// Adjust or delete from config if this default behavior is not desired\n\t\tuseQueryString: {\n\t\t\tsymbolObject: {\n\t\t\t\tsymbol: \"symbol\",\n\t\t\t\tname: \"name\",\n\t\t\t\texchDisp: \"exchDisp\"\n\t\t\t},\n\t\t},\n\t\tupdateFromQueryString() {\n\t\t\tif (!this.useQueryString) return;\n\t\t\tconst queryObj = CIQ.qs();\n\t\t\tconst symbolObject = Object.entries(this.useQueryString.symbolObject)\n\t\t\t\t.reduce((acc, [key, val]) => {\n\t\t\t\t\tconst value = queryObj[val];\n\t\t\t\t\tif (value !== undefined) acc[key] = value;\n\t\t\t\t\treturn acc;\n\t\t\t\t}, {});\n\t\t\tif (symbolObject.symbol) {\n\t\t\t\tthis.initialSymbol = symbolObject;\n\t\t\t\tif (this.restore) { // do not restore symbol use one set in initialSymbol\n\t\t\t\t\tthis.restore = { ...this.restore, symbol: false };\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// The list of chart elements that should be exposed to the screen reader instead of hidden by default.\n\t\tariaActive: null,\n\t\t// Map study output names for tooltip\n\t\tstudyOutputAliasList: {\n\t\t\t// Study Name: {current study output: new output}\n\t\t\t\"Aroon Osc\": { \"Aroon Oscillator\": \"\" },\n\t\t\t\"Boll %b\": {\"%b\": \"\"},\n\t\t\t\"Boll BW\": {\"Bandwidth\": \"\"},\n\t\t\t\"COG\": { \"Center of Gravity\": \"\" },\n\t\t\t\"Donchian Channel\": {\"Donchian High\": \"High\", \"Donchian Low\": \"Low\", \"Donchian Median\": \"Median\"},\n\t\t\t\"Klinger\": {\"KlingerSignal\": \"Signal\"},\n\t\t\t\"PMO\": { \"PMOSignal\": \"Signal\" },\n\t\t\t\"Prime Number Bands\": {\"Prime Bands Bottom\": \"Bottom\", \"Prime Bands Top\": \"Top\", },\n\t\t\t\"Pring KST\": {\"KST\": \"\", \"KSTSignal\": \"Signal\"},\n\t\t\t\"Rel Vig\": {\"RelVigSignal\": \"Signal\"}\n\t\t},\n\t\t// Function to create a new chart; returns a CIQ.ChartEngine instance\n\t\tcreateChart: function(container) {\n\t\t\tthis.updateFromQueryString();\n\t\t\tconst config = this;\n\t\t\tif(CIQ.UI) return (new CIQ.UI.Chart()).createChartAndUI({ container, config }).stx;\n\t\t\treturn CIQ.ChartEngine.create({ container, config });\n\t\t}\n\t};\n};\n// This is config for v9.0+ webcomponents\nconst extendedConfig = (resources) => {\n\treturn {\n\t\tabstractMarkers: {},\n\t\tariaActive: null,\n\t\tattributions: {\n\t\t\tsources: {\n\t\t\t\tsimulator: \"Simulated data.\",\n\t\t\t\tdemo: \"Demo data.\",\n\t\t\t\txignite:\n\t\t\t\t\t'Market Data by Xignite.',\n\t\t\t\tfis_mm:\n\t\t\t\t\t'Market Data by FIS MarketMap.',\n\t\t\t\tTwiggs:\n\t\t\t\t\t'Twiggs MF Formula courtesy IncredibleCharts.'\n\t\t\t},\n\t\t\texchanges: {\n\t\t\t\tRANDOM: \"Data is randomized.\",\n\t\t\t\t\"REAL-TIME\": \"Data is real-time.\",\n\t\t\t\tDELAYED: \"Data delayed 15 min.\",\n\t\t\t\tRATES: \"Yield data latest from source, bid/ask simulated.\",\n\t\t\t\tBATS: \"BATS BZX real-time.\",\n\t\t\t\tEOD: \"End of day data.\"\n\t\t\t}\n\t\t},\n\t\tgroups: {\n\t\t\trange: {\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"heading\", label: \"Set Range\", className: \"hidden\", id: \"label_showRange\" },\n\t\t\t\t\t{ type: \"item\", label: \"1D\", tap: \"set\", value: [1, \"today\"] },\n\t\t\t\t\t{ type: \"item\", label: \"5D\", tap: \"set\", value: [5, \"day\", 30, 2, \"minute\"] },\n\t\t\t\t\t{ type: \"separator\", className: \"hide-sm\" },\n\t\t\t\t\t{ type: \"item\", label: \"1M\", tap: \"set\", value: [1, \"month\", 30, 8, \"minute\"] },\n\t\t\t\t\t{ type: \"item\", label: \"3M\", tap: \"set\", value: [3, \"month\"], className: \"hide-sm\" },\n\t\t\t\t\t{ type: \"item\", label: \"6M\", tap: \"set\", value: [6, \"month\"], className: \"hide-sm\" },\n\t\t\t\t\t{ type: \"item\", label: \"YTD\", tap: \"set\", value: [1, \"YTD\"], className: \"hide-sm\" },\n\t\t\t\t\t{ type: \"separator\", className: \"hide-sm\" },\n\t\t\t\t\t{ type: \"item\", label: \"1Y\", tap: \"set\", value: [1, \"year\"] },\n\t\t\t\t\t{ type: \"item\", label: \"5Y\", tap: \"set\", value: [5, \"year\", 1, 1, \"week\"], className: \"hide-sm\" },\n\t\t\t\t\t{ type: \"item\", label: \"All\", tap: \"set\", value: [1, \"all\"], className: \"hide-sm\" }\n\t\t\t\t]\n\t\t\t}\n\t\t},\n\t\tmenus: {\n\t\t\t/* navigation menus */\n\t\t\tcrosshair: {\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"radio\", label: \"Hide Heads-Up Display\", setget: \"Layout.HeadsUp\", value: \"crosshair\" },\n\t\t\t\t\t{ type: \"radio\", label: \"Show Heads-Up Display\", setget: \"Layout.HeadsUp\", value: \"static\" }\n\t\t\t\t]\n\t\t\t},\n\t\t\tdisplay: {\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"heading\", label: \"Chart Types\" },\n\t\t\t\t\t{ type: \"radio\", label: \"Candle\", setget: \"Layout.ChartType\", iconCls: \"candle\", value: \"candle\", helpId: \"chart_style_candle\" },\n\t\t\t\t\t{ type: \"radio\", label: \"Line\", setget: \"Layout.ChartType\", iconCls: \"line\", value: \"line\", helpId: \"chart_style_line\" },\n\t\t\t\t\t{ type: \"radio\", label: \"Vertex Line\", setget: \"Layout.ChartType\", iconCls: \"vertex-line\", value: \"vertex_line\", helpId: \"chart_style_vertex_line\" },\n\t\t\t\t\t{ type: \"radio\", label: \"Step\", setget: \"Layout.ChartType\", iconCls: \"step\", value: \"step\", helpId: \"chart_style_step\" },\n\t\t\t\t\t{ type: \"radio\", label: \"Mountain\", setget: \"Layout.ChartType\", iconCls: \"mountain\", value: \"mountain\", helpId: \"chart_style_mountain\" },\n\t\t\t\t\t{ type: \"radio\", label: \"Histogram\", setget: \"Layout.ChartType\", iconCls: \"histogram\", value: \"histogram\", helpId: \"chart_style_histogram\" },\n\t\t\t\t]\n\t\t\t},\n\t\t\tinfo: {\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"radio\", label: \"Show Dynamic Callout\", setget: \"Layout.HeadsUp\", value: \"dynamic\" },\n\t\t\t\t\t{ type: \"radio\", label: \"Show Tooltip\", setget: \"Layout.HeadsUp\", feature: \"tooltip\", value: \"floating\" },\n\t\t\t\t\t{ type: \"item\", label: \"Remove Pinned Tooltips\", tap: \"Markers.removePinnedMarkers\", value: \"pinned_tooltip\", feature: \"pinnedmarkers\" },\n\t\t\t\t]\n\t\t\t},\n\t\t\tmarkers: {\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"heading\", label: \"SignalIQ\", feature: \"signaliq\" },\n\t\t\t\t\t{ type: \"component\", value: \"cq-study-legend\", attributes: { filter: \"signal\", \"button-remove\": \"true\" }, feature: \"signaliq\" },\n\t\t\t\t\t{ type: \"separator\", className: \"partial\", feature: \"signaliq\" },\n\t\t\t\t\t{ type: \"clickable\", label: \"New Signal\", iconCls: \"plus\", selector: \"cq-signaliq-dialog\", method: \"open\", feature: \"signaliq\" },\n\t\t\t\t\t{ type: \"separator\", feature: \"signaliq\" },\n\t\t\t\t\t{ type: \"heading\", label: \"Chart Events\" },\n\t\t\t\t\t{ type: \"switch\", label: \"Simple Square\", tap: \"Markers.showMarkers\", value: \"square\" },\n\t\t\t\t\t{ type: \"switch\", label: \"Simple Circle\", tap: \"Markers.showMarkers\", value: \"circle\" },\n\t\t\t\t\t{ type: \"switch\", label: \"Callouts\", tap: \"Markers.showMarkers\", value: \"callout\" },\n\t\t\t\t\t{ type: \"switch\", label: \"Trade\", tap: \"Markers.showMarkers\", value: \"trade\", feature: \"ta_markers\" },\n\t\t\t\t\t{ type: \"switch\", label: \"Video\", tap: \"Markers.showMarkers\", value: \"video\", feature: \"video_markers\" },\n\t\t\t\t\t{ type: \"switch\", label: \"Abstract\", tap: \"Markers.showMarkers\", value: \"helicopter\" },\n\t\t\t\t\t{ type: \"separator\", className: \"partial\", feature: \"pinnedmarkers\" },\n\t\t\t\t\t{ type: \"item\", label: \"Remove Pinned Events\", tap: \"Markers.removePinnedMarkers\", value: \"pinned_event\", feature: \"pinnedmarkers\" },\n\t\t\t\t\t{ type: \"separator\", feature: \"ptv\" },\n\t\t\t\t\t{ type: \"heading\", label: \"Panel Events\", feature: \"ptv\" },\n\t\t\t\t\t{ type: \"switch\", label: \"Order\", tap: \"TimeSpanEvent.showMarkers\", value: \"Order\", feature: \"ptv\" },\n\t\t\t\t\t{ type: \"switch\", label: \"CEO\", tap: \"TimeSpanEvent.showMarkers\", value: \"CEO\", feature: \"ptv\" },\n\t\t\t\t\t{ type: \"switch\", label: \"News\", tap: \"TimeSpanEvent.showMarkers\", value: \"News\", feature: \"ptv\" }\n\t\t\t\t]\n\t\t\t},\n\t\t\tperiod: {\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"item\", label: \"1 D\", tap: \"Layout.setPeriodicity\", value: [1, 1, \"day\"] },\n\t\t\t\t\t{ type: \"item\", label: \"1 W\", tap: \"Layout.setPeriodicity\", value: [1, 1, \"week\"] },\n\t\t\t\t\t{ type: \"item\", label: \"1 Mo\", tap: \"Layout.setPeriodicity\", value: [1, 1, \"month\"] },\n\t\t\t\t\t{ type: \"separator\" },\n\t\t\t\t\t{ type: \"item\", label: \"1 Min\", tap: \"Layout.setPeriodicity\", value: [1, 1, \"minute\"] },\n\t\t\t\t\t{ type: \"item\", label: \"5 Min\", tap: \"Layout.setPeriodicity\", value: [1, 5, \"minute\"] },\n\t\t\t\t\t{ type: \"item\", label: \"10 Min\", tap: \"Layout.setPeriodicity\", value: [1, 10, \"minute\"] },\n\t\t\t\t\t{ type: \"item\", label: \"15 Min\", tap: \"Layout.setPeriodicity\", value: [3, 5, \"minute\"] },\n\t\t\t\t\t{ type: \"item\", label: \"30 Min\", tap: \"Layout.setPeriodicity\", value: [1, 30, \"minute\"] },\n\t\t\t\t\t{ type: \"item\", label: \"1 Hour\", tap: \"Layout.setPeriodicity\", value: [2, 30, \"minute\"] },\n\t\t\t\t\t{ type: \"item\", label: \"4 Hour\", tap: \"Layout.setPeriodicity\", value: [8, 30, \"minute\"] },\n\t\t\t\t\t{ type: \"separator\" },\n\t\t\t\t\t{ type: \"item\", label: \"1 Sec\", tap: \"Layout.setPeriodicity\", value: [1, 1, \"second\"] },\n\t\t\t\t\t{ type: \"item\", label: \"10 Sec\", tap: \"Layout.setPeriodicity\", value: [1, 10, \"second\"] },\n\t\t\t\t\t{ type: \"item\", label: \"30 Sec\", tap: \"Layout.setPeriodicity\", value: [1, 30, \"second\"] },\n\t\t\t\t\t{ type: \"separator\" },\n\t\t\t\t\t{ type: \"item\", label: \"250 MSec\", tap: \"Layout.setPeriodicity\", value: [1, 250, \"millisecond\"] }\n\t\t\t\t]\n\t\t\t},\n\t\t\tpreferences: {\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"heading\", label: \"Chart Preferences\" },\n\t\t\t\t\t{ type: \"switch\", label: \"Range Selector\", setget: \"Layout.RangeSlider\", feature: \"rangeslider\" },\n\t\t\t\t\t{ type: \"switch\", label: \"Extended Hours\", setget: \"Layout.ExtendedHours\", feature: \"extendedhours\" },\n\t\t\t\t\t{ type: \"switch\", label: \"Market Depth\", setget: \"Layout.MarketDepth\", feature: \"marketdepth\" },\n\t\t\t\t\t{ type: \"switch\", label: \"L2 Heat Map\", setget: \"Layout.L2Heatmap\", feature: \"marketdepth\" },\n\t\t\t\t\t{ type: \"separator\" },\n\t\t\t\t\t{ type: \"heading\", label: \"Y-Axis Preferences\" },\n\t\t\t\t\t{ type: \"switch\", label: \"Log Scale\", setget: \"Layout.ChartScale\", value: \"log\" },\n\t\t\t\t\t{ type: \"switch\", label: \"Invert\", setget: \"Layout.FlippedChart\" },\n\t\t\t\t\t{ type: \"separator\" },\n\t\t\t\t\t{ type: \"heading\", label: \"Additional Features\" },\n\t\t\t\t\t{ type: \"item\", label: \"Shortcuts / Hotkeys\", tap: \"Layout.showShortcuts\", value: true, feature: \"shortcuts\" },\n\t\t\t\t\t{ type: \"item\", label: \"Import Data\", tap: \"Channel.write\", value: [\"dataLoader\", true], feature: \"dataloader\" },\n\t\t\t\t\t{ type: \"separator\" },\n\t\t\t\t\t{ type: \"heading\", label: \"Themes\" },\n\t\t\t\t\t{ type: \"component\", value: \"cq-themes\", menuPersist: true },\n\t\t\t\t\t{ type: \"separator\", className: \"partial\" },\n\t\t\t\t\t{ type: \"clickable\", label: \"New Theme\", iconCls: \"plus\", selector: \"cq-theme-dialog\", method: \"open\" },\n\t\t\t\t\t{ type: \"separator\" },\n\t\t\t\t\t{ type: \"heading\", label: \"Locale\" },\n\t\t\t\t\t{ type: \"clickable\", label: \"Change Timezone\", selector: \"cq-timezone-dialog\", method: \"open\" },\n\t\t\t\t\t{ type: \"item\", label: \"Change Language\", setget: \"Layout.Language\", iconCls: \"flag\" }\n\t\t\t\t]\n\t\t\t},\n\t\t\tstudies: {\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"component\", value: \"cq-study-legend\", attributes: { class: \"shaded\", heading: \"Active Studies\", \"button-remove\": \"true\", \"button-clear-all\": \"Layout.clearStudies()\" } },\n\t\t\t\t\t{ type: \"heading\", label: \"ScriptIQ\", feature: \"scriptiq\" },\n\t\t\t\t\t{ type: \"component\", value: \"cq-scriptiq-menu\", feature: \"scriptiq\" },\n\t\t\t\t\t{ type: \"separator\", className: \"partial\", feature: \"scriptiq\" },\n\t\t\t\t\t{ type: \"clickable\", label: \"New Script\", iconCls: \"plus\", selector: \"cq-scriptiq-editor\", method: \"open\", feature: \"scriptiq\" },\n\t\t\t\t\t{ type: \"separator\", feature: \"scriptiq\" },\n\t\t\t\t\t{ type: \"heading\", label: \"Studies\", filterFor: \"studylist\", filterMin: 15 },\n\t\t\t\t\t{ type: \"component\", value: \"cq-studies\", attributes: { \"filter-name\": \"studylist\", favorites: \"\" } }\n\t\t\t\t]\n\t\t\t},\n\t\t\tviews: {\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"heading\", label: \"Saved Views\" },\n\t\t\t\t\t{ type: \"component\", value: \"cq-views\" },\n\t\t\t\t\t{ type: \"separator\", className: \"partial\" },\n\t\t\t\t\t{ type: \"clickable\", label: \"Save View\", iconCls: \"plus\", selector: \"cq-view-dialog\", method: \"open\" }\n\t\t\t\t]\n\t\t\t},\n\t\t\t/* drawing palette menus */\n\t\t\tcvplinestyle: {\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"item\", label: \"Line Style Solid 1\", tap: \"setStyle\", value: [1,\"solid\"], iconCls: \"ciq-line-style-option ciq-solid-1\" },\n\t\t\t\t\t{ type: \"item\", label: \"Line Style Solid 3\", tap: \"setStyle\", value: [3,\"solid\"], iconCls: \"ciq-line-style-option ciq-solid-3\" },\n\t\t\t\t\t{ type: \"item\", label: \"Line Style Solid 5\", tap: \"setStyle\", value: [5,\"solid\"], iconCls: \"ciq-line-style-option ciq-solid-5\" },\n\t\t\t\t\t{ type: \"item\", label: \"Line Style Dotted 1\", tap: \"setStyle\", value: [1,\"dotted\"], iconCls: \"ciq-line-style-option ciq-dotted-1\" },\n\t\t\t\t\t{ type: \"item\", label: \"Line Style Dotted 3\", tap: \"setStyle\", value: [3,\"dotted\"], iconCls: \"ciq-line-style-option ciq-dotted-3\" },\n\t\t\t\t\t{ type: \"item\", label: \"Line Style Dotted 5\", tap: \"setStyle\", value: [5,\"dotted\"], iconCls: \"ciq-line-style-option ciq-dotted-5\" },\n\t\t\t\t\t{ type: \"item\", label: \"Line Style Dashed 1\", tap: \"setStyle\", value: [1,\"dashed\"], iconCls: \"ciq-line-style-option ciq-dashed-1\" },\n\t\t\t\t\t{ type: \"item\", label: \"Line Style Dashed 3\", tap: \"setStyle\", value: [3,\"dashed\"], iconCls: \"ciq-line-style-option ciq-dashed-3\" },\n\t\t\t\t\t{ type: \"item\", label: \"Line Style Dashed 5\", tap: \"setStyle\", value: [5,\"dashed\"], iconCls: \"ciq-line-style-option ciq-dashed-5\" }\n\t\t\t\t]\n\t\t\t},\n\t\t\tfontfamily: {\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"item\", label: \"Default\", tap: \"setFontFamily\", value: [\"Default\"] },\n\t\t\t\t\t{ type: \"item\", label: \"Helvetica\", tap: \"setFontFamily\", value: [\"Helvetica\"] },\n\t\t\t\t\t{ type: \"item\", label: \"Courier\", tap: \"setFontFamily\", value: [\"Courier\"] },\n\t\t\t\t\t{ type: \"item\", label: \"Garamond\", tap: \"setFontFamily\", value: [\"Garamond\"] },\n\t\t\t\t\t{ type: \"item\", label: \"Palatino\", tap: \"setFontFamily\", value: [\"Palatino\"] },\n\t\t\t\t\t{ type: \"item\", label: \"Times New Roman\", tap: \"setFontFamily\", value: [\"Times New Roman\"] }\n\t\t\t\t]\n\t\t\t},\n\t\t\tfontsize: {\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"item\", label: \"8\", tap: \"setFontSize\", value: [\"8px\"] },\n\t\t\t\t\t{ type: \"item\", label: \"10\", tap: \"setFontSize\", value: [\"10px\"] },\n\t\t\t\t\t{ type: \"item\", label: \"12\", tap: \"setFontSize\", value: [\"12px\"] },\n\t\t\t\t\t{ type: \"item\", label: \"13\", tap: \"setFontSize\", value: [\"13px\"] },\n\t\t\t\t\t{ type: \"item\", label: \"14\", tap: \"setFontSize\", value: [\"14px\"] },\n\t\t\t\t\t{ type: \"item\", label: \"16\", tap: \"setFontSize\", value: [\"16px\"] },\n\t\t\t\t\t{ type: \"item\", label: \"20\", tap: \"setFontSize\", value: [\"20px\"] },\n\t\t\t\t\t{ type: \"item\", label: \"28\", tap: \"setFontSize\", value: [\"28px\"] },\n\t\t\t\t\t{ type: \"item\", label: \"36\", tap: \"setFontSize\", value: [\"36px\"] },\n\t\t\t\t\t{ type: \"item\", label: \"48\", tap: \"setFontSize\", value: [\"48px\"] },\n\t\t\t\t\t{ type: \"item\", label: \"64\", tap: \"setFontSize\", value: [\"64px\"] }\n\t\t\t\t]\n\t\t\t},\n\t\t\tlinestyle: {\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"item\", label: \"Line Style Solid 1\", tap: \"setLine\", value: [1,\"solid\"], iconCls: \"ciq-line-style-option ciq-solid-1\" },\n\t\t\t\t\t{ type: \"item\", label: \"Line Style Solid 3\", tap: \"setLine\", value: [3,\"solid\"], iconCls: \"ciq-line-style-option ciq-solid-3\" },\n\t\t\t\t\t{ type: \"item\", label: \"Line Style Solid 5\", tap: \"setLine\", value: [5,\"solid\"], iconCls: \"ciq-line-style-option ciq-solid-5\" },\n\t\t\t\t\t{ type: \"item\", label: \"Line Style Dotted 1\", tap: \"setLine\", value: [1,\"dotted\"], iconCls: \"ciq-line-style-option ciq-dotted-1\" },\n\t\t\t\t\t{ type: \"item\", label: \"Line Style Dotted 3\", tap: \"setLine\", value: [3,\"dotted\"], iconCls: \"ciq-line-style-option ciq-dotted-3\" },\n\t\t\t\t\t{ type: \"item\", label: \"Line Style Dotted 5\", tap: \"setLine\", value: [5,\"dotted\"], iconCls: \"ciq-line-style-option ciq-dotted-5\" },\n\t\t\t\t\t{ type: \"item\", label: \"Line Style Dashed 1\", tap: \"setLine\", value: [1,\"dashed\"], iconCls: \"ciq-line-style-option ciq-dashed-1\" },\n\t\t\t\t\t{ type: \"item\", label: \"Line Style Dashed 3\", tap: \"setLine\", value: [3,\"dashed\"], iconCls: \"ciq-line-style-option ciq-dashed-3\" },\n\t\t\t\t\t{ type: \"item\", label: \"Line Style Dashed 5\", tap: \"setLine\", value: [5,\"dashed\"], iconCls: \"ciq-line-style-option ciq-dashed-5\" },\n\t\t\t\t\t{ type: \"item\", className: \"fills-only\", label: \"Line Style None\", tap: \"setLine\", value: [0,\"none\"], iconCls: \"ciq-none\" }\n\t\t\t\t]\n\t\t\t},\n\t\t\ttoolgrouping: {\n\t\t\t\tcontent: [] // reserved\n\t\t\t},\n\t\t\twavecorrective: {\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"item\", label: \"- - -\", tap: \"update\", value: [\"corrective\", null] },\n\t\t\t\t\t{ type: \"item\", label: \"A B C\", tap: \"update\", value: [\"corrective\", \"A,B,C\"] },\n\t\t\t\t\t{ type: \"item\", label: \"a b c\", tap: \"update\", value: [\"corrective\", \"a,b,c\"] },\n\t\t\t\t\t{ type: \"item\", label: \"W X Y\", tap: \"update\", value: [\"corrective\", \"W,X,Y\"] },\n\t\t\t\t\t{ type: \"item\", label: \"w x y\", tap: \"update\", value: [\"corrective\", \"w,x,y\"] }\n\t\t\t\t]\n\t\t\t},\n\t\t\twaveimpulse: {\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"item\", label: \"- - -\", tap: \"update\", value: [\"impulse\", null] },\n\t\t\t\t\t{ type: \"item\", label: \"I II III IV V\", tap: \"update\", value: [\"impulse\", \"I,II,III,IV,V\"] },\n\t\t\t\t\t{ type: \"item\", label: \"i ii iii iv v\", tap: \"update\", value: [\"impulse\", \"i,ii,iii,iv,v\"] },\n\t\t\t\t\t{ type: \"item\", label: \"1 2 3 4 5\", tap: \"update\", value: [\"impulse\", \"1,2,3,4,5\"] },\n\t\t\t\t\t{ type: \"item\", label: \"A B C D E\", tap: \"update\", value: [\"impulse\", \"A,B,C,D,E\"] },\n\t\t\t\t\t{ type: \"item\", label: \"a b c d e\", tap: \"update\", value: [\"impulse\", \"a,b,c,d,e\"] },\n\t\t\t\t\t{ type: \"item\", label: \"W X Y X Z\", tap: \"update\", value: [\"impulse\", \"W,X,Y,X,Z\"] },\n\t\t\t\t\t{ type: \"item\", label: \"w x y x z\", tap: \"update\", value: [\"impulse\", \"w,x,y,x,z\"] }\n\t\t\t\t]\n\t\t\t},\n\t\t\twavetemplate: {\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"item\", label: \"Grand Supercycle\", tap: \"update\", value: [\"template\", \"Grand Supercycle\"] },\n\t\t\t\t\t{ type: \"item\", label: \"Supercycle\", tap: \"update\", value: [\"template\", \"Supercycle\"] },\n\t\t\t\t\t{ type: \"item\", label: \"Cycle\", tap: \"update\", value: [\"template\", \"Cycle\"] },\n\t\t\t\t\t{ type: \"item\", label: \"Primary\", tap: \"update\", value: [\"template\", \"Primary\"] },\n\t\t\t\t\t{ type: \"item\", label: \"Intermediate\", tap: \"update\", value: [\"template\", \"Intermediate\"] },\n\t\t\t\t\t{ type: \"item\", label: \"Minor\", tap: \"update\", value: [\"template\", \"Minor\"] },\n\t\t\t\t\t{ type: \"item\", label: \"Minute\", tap: \"update\", value: [\"template\", \"Minute\"] },\n\t\t\t\t\t{ type: \"item\", label: \"Minuette\", tap: \"update\", value: [\"template\", \"Minuette\"] },\n\t\t\t\t\t{ type: \"item\", label: \"Sub-Minuette\", tap: \"update\", value: [\"template\", \"Sub-Minuette\"] },\n\t\t\t\t\t{ type: \"item\", label: \"Custom\", tap: \"update\", value: [\"template\", \"Custom\"] }\n\t\t\t\t]\n\t\t\t}\n\t\t},\n\t\ttoggles: {\n\t\t\tcrosshair: {\n\t\t\t\tcallbacks: [\n\t\t\t\t\tfunction (value) {\n\t\t\t\t\t\tlet { context } = this;\n\t\t\t\t\t\tconst multiChartContextEl = context.topNode.parentElement.closest(\"cq-context\");\n\t\t\t\t\t\tif (multiChartContextEl) {\n\t\t\t\t\t\t\tcontext = multiChartContextEl.CIQ.UI.context;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!this.getCharts && context.topNode.getCharts) this.getCharts = context.topNode.getCharts;\n\t\t\t\t\t\tconst { layout } = context.stx;\n\t\t\t\t\t\tif (!layout.headsUp || typeof layout.headsUp !== \"object\") {\n\t\t\t\t\t\t\tif (layout.headsUp === \"static\") layout.headsUp = { static: true };\n\t\t\t\t\t\t\telse layout.headsUp = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!this.listener) {\n\t\t\t\t\t\t\tconst listenerLayout = multiChartContextEl\n\t\t\t\t\t\t\t\t? multiChartContextEl.CIQ.UI.context.stx.layout\n\t\t\t\t\t\t\t\t: layout;\n\t\t\t\t\t\t\tthis.listener = (obj) => {\n\t\t\t\t\t\t\t\tconst { stx } = this.context;\n\t\t\t\t\t\t\t\tthis.value = (\n\t\t\t\t\t\t\t\t\tobj.value && (obj.value === \"static\" || obj.value.static)\n\t\t\t\t\t\t\t\t) || listenerLayout.crosshair;\n\t\t\t\t\t\t\t\tthis.classList.toggle(\"active\", !!this.value);\n\t\t\t\t\t\t\t\tif (this.value) {\n\t\t\t\t\t\t\t\t\tstx.centerCrosshairs();\n\t\t\t\t\t\t\t\t\tstx.doDisplayCrosshairs();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tstx.undisplayCrosshairs();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// set keystroke hub context to active chart to allow arrow keys to move cursor or pan the chart \n\t\t\t\t\t\t\t\tif (stx.container.closest(\"cq-context-wrapper.active\")) {\n\t\t\t\t\t\t\t\t\tdocument.body.keystrokeHub.context = this.context;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tCIQ.UI.observeProperty(\"crosshair\", listenerLayout, this.listener);\n\t\t\t\t\t\t\tthis.observeInfo = { member: \"crosshair\", obj: listenerLayout, listener: this.listener };\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst charts = this.getCharts && this.getCharts() || [context.stx];\n\t\t\t\t\t\tcharts.forEach(({ layout }) => {\n\t\t\t\t\t\t\tlet headsUp = Object.assign({}, layout.headsUp);\n\t\t\t\t\t\t\tif (!this.lastState) this.lastState = headsUp;\n\t\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\t\tif (!headsUp.static) {\n\t\t\t\t\t\t\t\t\theadsUp.static = this.lastState.static;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tlayout.crosshair = true;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (layout.crosshair) this.lastState = Object.assign({}, headsUp);\n\t\t\t\t\t\t\t\theadsUp.static = false;\n\t\t\t\t\t\t\t\tlayout.crosshair = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlayout.headsUp = headsUp;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\tinfo: {\n\t\t\t\tcallbacks: [\n\t\t\t\t\tfunction (value) {\n\t\t\t\t\t\tlet { context } = this;\n\t\t\t\t\t\tconst multiChartContextEl = context.topNode.parentElement.closest(\"cq-context\");\n\t\t\t\t\t\tif (multiChartContextEl && !context.topNode.isMultiChartHost) {\n\t\t\t\t\t\t\tcontext = multiChartContextEl.CIQ.UI.context;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!this.getCharts && context.topNode.getCharts) this.getCharts = context.topNode.getCharts;\n\t\t\t\t\t\tconst { layout } = context.stx;\n\t\t\t\t\t\tif (!layout.headsUp || typeof layout.headsUp !== \"object\") {\n\t\t\t\t\t\t\tif ([\"dynamic\", \"floating\", \"static\"].includes(layout.headsUp))\n\t\t\t\t\t\t\t\tlayout.headsUp = { [layout.headsUp]: true };\n\t\t\t\t\t\t\telse layout.headsUp = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!this.listener) {\n\t\t\t\t\t\t\tconst { stx: { layout: listenerLayout }, stx } = multiChartContextEl\n\t\t\t\t\t\t\t\t? multiChartContextEl.CIQ.UI.context\n\t\t\t\t\t\t\t\t: context;\n\t\t\t\t\t\t\tthis.listener = (obj) => {\n\t\t\t\t\t\t\t\tthis.value = obj.value && (\n\t\t\t\t\t\t\t\t\t[\"dynamic\", \"floating\"].includes(obj.value) ||\n\t\t\t\t\t\t\t\t\tobj.value.dynamic ||\n\t\t\t\t\t\t\t\t\tobj.value.floating\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tthis.classList.toggle(\"active\", !!this.value);\n\t\t\t\t\t\t\t\tif (obj.value && (obj.value === \"dynamic\" || obj.value.dynamic || obj.value === \"floating\" || obj.value.floating)) {\n\t\t\t\t\t\t\t\t\tthis.context.stx.centerCrosshairs();\n\t\t\t\t\t\t\t\t\tthis.context.stx.doDisplayCrosshairs();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// set keystroke hub context to active chart to allow arrow keys to move cursor or pan the chart \n\t\t\t\t\t\t\t\tif (stx.container.closest(\"cq-context-wrapper.active\")) {\n\t\t\t\t\t\t\t\t\tdocument.body.keystrokeHub.context = this.context;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tCIQ.UI.observeProperty(\"headsUp\", listenerLayout, this.listener);\n\t\t\t\t\t\t\tthis.observeInfo = { member: \"headsUp\", obj: listenerLayout, listener: this.listener };\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst charts = this.getCharts && this.getCharts() || [context.stx];\n\t\t\t\t\t\tcharts.forEach(({ layout }) => {\n\t\t\t\t\t\t\tlet headsUp = Object.assign({}, layout.headsUp);\n\t\t\t\t\t\t\tif (!this.lastState) this.lastState = headsUp;\n\t\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\t\tif (!headsUp.dynamic && !headsUp.floating) {\n\t\t\t\t\t\t\t\t\theadsUp.dynamic =\n\t\t\t\t\t\t\t\t\t\tthis.lastState.dynamic || !this.context.stx.huTooltip;\n\t\t\t\t\t\t\t\t\theadsUp.floating = this.lastState.floating || !headsUp.dynamic;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.lastState = Object.assign({}, headsUp);\n\t\t\t\t\t\t\t\theadsUp.dynamic = headsUp.floating = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlayout.headsUp = headsUp;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\tsymbolsearch: {\n\t\t\t\tcallbacks: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfn: function (value) {\n\t\t\t\t\t\t\tconst {context, channelWrite } = this;\n\t\t\t\t\t\t\tconst channel =\n\t\t\t\t\t\t\t\t(context.config.channels || {}).dialog || \"channel.dialog\";\n\t\t\t\t\t\t\tchannelWrite(\n\t\t\t\t\t\t\t\tchannel,\n\t\t\t\t\t\t\t\t{ type: \"lookup\", params: { context, caller: this } },\n\t\t\t\t\t\t\t\tcontext.stx\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t\timmediate: false\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t}\n\t};\n};\n// This is specific to pre-9.0 versions\n// You must set the `deprecatedSettings` resource to true to enable these, as some of this overrides default settings.\nconst deprecatedConfig = (resources) => {\n\treturn {\n\t\t// begin cq-menu-dropdown options\n\t\tmenuChartStyle: [ // if displayStyleIcons is true and a suitable icon class for the iconCls parameter is not available, \"generic\" class can be applied\n\t\t\t{ type: \"radio\", label: \"Candle\", cmd: \"Layout.ChartType()\", iconCls: \"candle\", value: \"candle\", helpId: \"chart_style_candle\"},\n\t\t\t{ type: \"radio\", label: \"Line\", cmd: \"Layout.ChartType()\", iconCls: \"line\", value: \"line\", helpId: \"chart_style_line\" },\n\t\t\t{ type: \"radio\", label: \"Colored Line\", cmd: \"Layout.ChartType()\", iconCls: \"colored-line\", value: \"colored_line\", cls: \"advanced-ui\", helpId: \"chart_style_colored_line\" },\n\t\t\t{ type: \"radio\", label: \"Vertex Line\", cmd: \"Layout.ChartType()\", iconCls: \"vertex-line\", value: \"vertex_line\", helpId: \"chart_style_vertex_line\" },\n\t\t\t{ type: \"radio\", label: \"Step\", cmd: \"Layout.ChartType()\", iconCls: \"step\", value: \"step\", helpId: \"chart_style_step\" },\n\t\t\t{ type: \"radio\", label: \"Mountain\", cmd: \"Layout.ChartType()\", iconCls: \"mountain\", value: \"mountain\", helpId: \"chart_style_mountain\" },\n\t\t\t{ type: \"radio\", label: \"Histogram\", cmd: \"Layout.ChartType()\", iconCls: \"histogram\", value: \"histogram\", helpId: \"chart_style_histogram\" }\n\t\t],\n\t\tmenuPeriodicity: [\n\t\t\t{ type: \"item\", label: \"1 D\", cmd: \"Layout.setPeriodicity(1,1,'day')\", value: { period: 1, interval: 1, timeUnit: 'day'} },\n\t\t\t{ type: \"item\", label: \"1 W\", cmd: \"Layout.setPeriodicity(1,1,'week')\", value: { period: 1, interval: 1, timeUnit: 'week' } },\n\t\t\t{ type: \"item\", label: \"1 Mo\", cmd: \"Layout.setPeriodicity(1,1,'month')\", value: { period: 1, interval: 1, timeUnit: 'month' } },\n\t\t\t{ type: \"separator\", },\n\t\t\t{ type: \"item\", label: \"1 Min\", cmd: \"Layout.setPeriodicity(1,1,'minute')\", value: { period: 1, interval: 1, timeUnit: 'minute' } },\n\t\t\t{ type: \"item\", label: \"5 Min\", cmd: \"Layout.setPeriodicity(1,5,'minute')\", value: { period: 1, interval: 5, timeUnit: 'minute' } },\n\t\t\t{ type: \"item\", label: \"10 Min\", cmd: \"Layout.setPeriodicity(1,10,'minute')\", value: { period: 1, interval: 10, timeUnit: 'minute' } },\n\t\t\t{ type: \"item\", label: \"15 Min\", cmd: \"Layout.setPeriodicity(3,5,'minute')\", value: { period: 1, interval: 1, timeUnit: 'minute' } },\n\t\t\t{ type: \"item\", label: \"30 Min\", cmd: \"Layout.setPeriodicity(1,30,'minute')\", value: { period: 1, interval: 30, timeUnit: 'minute' } },\n\t\t\t{ type: \"item\", label: \"1 Hour\", cmd: \"Layout.setPeriodicity(2,30,'minute')\", value: { period: 2, interval: 30, timeUnit: 'minute' } },\n\t\t\t{ type: \"item\", label: \"4 Hour\", cmd: \"Layout.setPeriodicity(8,30,'minute')\", value: { period: 8, interval: 30, timeUnit: 'minute' } },\n\t\t\t{ type: \"separator\", },\n\t\t\t{ type: \"item\", label: \"1 Sec\", cmd: \"Layout.setPeriodicity(1,1,'second')\", value: { period: 1, interval: 1, timeUnit: 'second' } },\n\t\t\t{ type: \"item\", label: \"10 Sec\", cmd: \"Layout.setPeriodicity(1,10,'second')\", value: { period: 1, interval: 10, timeUnit: 'second' } },\n\t\t\t{ type: \"item\", label: \"30 Sec\", cmd: \"Layout.setPeriodicity(1,30,'second')\", value: { period: 1, interval: 30, timeUnit: 'second' } },\n\t\t\t{ type: \"separator\", },\n\t\t\t{ type: \"item\", label: \"250 MSec\", cmd: \"Layout.setPeriodicity(1,250,'millisecond')\", value: { period: 1, interval: 250, timeUnit: 'millisecond' } }\n\t\t],\n\t\tmenuChartPreferences: [\n\t\t\t{ type: \"checkbox\", label: \"Range Selector\", cmd: \"Layout.RangeSlider()\", cls: \"rangeslider-ui\" },\n\t\t\t{ type: \"checkbox\", label: \"Extended Hours\", cmd: \"Layout.ExtendedHours()\", cls: \"extendedhours-ui\" },\n\t\t\t{ type: \"checkbox\", label: \"Market Depth\", cmd: \"Layout.MarketDepth()\", cls: \"marketdepth-ui\" },\n\t\t\t{ type: \"checkbox\", label: \"L2 Heat Map\", cmd: \"Layout.L2Heatmap()\", cls: \"marketdepth-ui\" },\n\t\t],\n\t\tmenuYAxisPreferences: [\n\t\t\t{ type: \"checkbox\", label: \"Log Scale\", cmd: \"Layout.ChartScale('log')\" },\n\t\t\t{ type: \"checkbox\", label: \"Invert\", cmd: \"Layout.FlippedChart()\" },\n\t\t],\n\t\tmenuAddOns: [\n\t\t\t{ type: \"item\", label: \"Shortcuts / Hotkeys\", cmd: \"Layout.showShortcuts(true)\", cls: \"shortcuts-ui\" },\n\t\t\t{ type: \"item\", label: \"Import Data\", cmd: \"Channel.write('dataLoader', true)\", cls: \"dataLoader-ui\"}\n\t\t],\n\t\t// end cq-menu-dropdown options\n\t\trangeMenu: [\n\t\t\t{ type: \"range\", label: \"1D\", cmd: \"set(1,'today')\" },\n\t\t\t{ type: \"range\", label: \"5D\", cmd: \"set(5,'day',30,2,'minute')\" },\n\t\t\t{ type: \"range\", label: \"1M\", cmd: \"set(1,'month',30,8,'minute')\" },\n\t\t\t{ type: \"range\", label: \"3M\", cmd: \"set(3,'month')\", cls: \"hide-sm\" },\n\t\t\t{ type: \"range\", label: \"6M\", cmd: \"set(6,'month')\", cls: \"hide-sm\" },\n\t\t\t{ type: \"range\", label: \"YTD\", cmd: \"set(1,'YTD')\", cls: \"hide-sm\" },\n\t\t\t{ type: \"range\", label: \"1Y\", cmd: \"set(1,'year')\" },\n\t\t\t{ type: \"range\", label: \"5Y\", cmd: \"set(5,'year',1,1,'week')\", cls: \"hide-sm\" },\n\t\t\t{ type: \"range\", label: \"All\", cmd: \"set(1,'all')\", cls: \"hide-sm\" },\n\t\t],\n\t\tmenuRendering: {\n\t\t\tseparator: () => `\n\t\t\t\t`,\n\t\t\titem: ({ label, cmd, cls }) => `\n\t\t\t\t${label}`,\n\t\t\tradio: ({ label, cmd, options, cls, iconCls, value, helpId }, { displayStyleIcons }) => `\n\t\t\t\t\n\t\t\t\t\t${iconCls && displayStyleIcons ? `` : \"\" }\n\t\t\t\t\t${helpId ? `` : \"\"}\n\t\t\t\t\t${options ? `` : \"\" }\n\t\t\t\t\t
        \n\t\t\t\t\t${label}\n\t\t\t\t\t
        \n\t\t\t\t
        `,\n\t\t\tradioOptions: (...args) => { // alias for deprecated radioOption\n\t\t\t\treturn args[1].menuRendering.radio.apply(null, args);\n\t\t\t},\n\t\t\tcheckbox: ({ label, cmd, cls }) => `\n\t\t\t\t${label}\n\t\t\t\t`,\n\t\t\tcheckboxOptions: ({ label, cmd, options, cls }) => `\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
        ${label}
        \n\t\t\t\t
        `,\n\t\t\tdoubleslider: ({ label, cmd, attrs, cls }) => `\n\t\t\t\t${label}\n\t\t\t\t`,\n\t\t\trange: ({ label, cmd, cls }) => `\n\t\t\t\t
        ${label}
        \n\t\t\t`,\n\t\t\tdt: ({ tool, group, label, shortcut }) => `\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t`\n\t\t},\n\t\tplugins: {\n\t\t\tvisualEarnings: {\n\t\t\t\tdeprecatedMenu: true\n\t\t\t}\n\t\t},\n\t\tariaActive: [\n\t\t\t\"cq-chart-instructions\",\n\t\t\t\"cq-toggle.tableview-ui\",\n\t\t\t\"cq-lookup\",\n\t\t\t\".symbol-search\",\n\t\t\t\".ciq-data-table-container\",\n\t\t\t\".hu-tooltip\"\n\t\t]\n\t};\n};\n// Available resources:\n// markerFeed\n// scrollStyle\n// quoteFeed\n// forecastQuoteFeed\n// nameValueStore\n// chartSharing\n// deprecatedSettings\nfunction getConfig(resources = {}) {\n\tconst config = defaultConfig(resources);\n\tCIQ.extend(config, extendedConfig(resources));\n\tif (resources.deprecatedSettings) {\n\t\tCIQ.extend(config, deprecatedConfig(resources));\n\t\tif (CIQ.UI) CIQ.UI.usingLegacyComponents = true;\n\t}\n\treturn config;\n}\nexport default getConfig;","/**!\n *\t9.3.0\n *\tGeneration date: 2024-06-03T13:22:07.487Z\n *\tClient name: euroland as\n *\tPackage Type: Core alacarte\n *\tLicense type: annual\n *\tBuild descriptor: 13d0ed304\n */\n\n/***********************************************************!\n * Copyright © 2023 S&P Global All rights reserved\n*************************************************************/\n/*************************************! DO NOT MAKE CHANGES TO THIS LIBRARY FILE!! !*************************************\n* If you wish to overwrite default functionality, create a separate file with a copy of the methods you are overwriting *\n* and load that file right after the library has been loaded, but before the chart engine is instantiated. *\n* Directly modifying library files will prevent upgrades and the ability for ChartIQ to support your solution. *\n*************************************************************************************************************************/\n/* eslint-disable no-extra-parens */\n\n\n/* eslint-disable */ /* jshint ignore:start */ /* ignore jslint start */\nq1l46[398538]=(function(){var g=2;for(;g !== 9;){switch(g){case 1:return globalThis;break;case 2:g=typeof globalThis === '\\x6f\\u0062\\x6a\\x65\\x63\\x74'?1:5;break;case 5:var P;try{var B=2;for(;B !== 6;){switch(B){case 4:B=typeof yGec8 === '\\u0075\\x6e\\u0064\\x65\\u0066\\x69\\u006e\\u0065\\x64'?3:9;break;case 2:Object['\\x64\\u0065\\x66\\x69\\x6e\\x65\\x50\\u0072\\u006f\\x70\\u0065\\u0072\\x74\\u0079'](Object['\\u0070\\u0072\\u006f\\x74\\x6f\\x74\\u0079\\x70\\x65'],'\\u0056\\u0079\\x72\\x44\\u0049',{'\\x67\\x65\\x74':function(){return this;},'\\x63\\x6f\\x6e\\x66\\x69\\x67\\x75\\x72\\x61\\x62\\x6c\\x65':true});P=VyrDI;P['\\x79\\u0047\\x65\\x63\\x38']=P;B=4;break;case 9:delete P['\\x79\\x47\\x65\\u0063\\u0038'];var K=Object['\\u0070\\u0072\\x6f\\u0074\\x6f\\u0074\\u0079\\u0070\\u0065'];delete K['\\x56\\x79\\x72\\x44\\u0049'];B=6;break;case 3:throw \"\";B=9;break;}}}catch(Y){P=window;}return P;break;}}})();q1l46.F3EKN=F3EKN;o_udC_(q1l46[398538]);q1l46[425657]=(function(){var q3=2;for(;q3 !== 5;){switch(q3){case 2:var N={V1dKs2g:(function(j1){var q6=2;for(;q6 !== 18;){switch(q6){case 7:q6=T === j1.length?6:14;break;case 12:W=W.g2huh(',');var J=0;var w8=function(X9){var G9=2;for(;G9 !== 35;){switch(G9){case 13:G9=J === 3 && X9 === 34?12:10;break;case 18:G9=J === 5 && X9 === 12?17:15;break;case 10:G9=J === 4 && X9 === 8?20:18;break;case 3:G9=J === 1 && X9 === 10?9:7;break;case 8:W.i$w$F.F7rSKr(W,W.e$MWd_(-2,2).e$MWd_(0,1));G9=4;break;case 24:J+=1;G9=23;break;case 20:J+=1;G9=19;break;case 7:G9=J === 2 && X9 === 2?6:13;break;case 1:J+=1;G9=5;break;case 17:J+=1;G9=16;break;case 9:J+=1;G9=8;break;case 6:J+=1;G9=14;break;case 22:N.V1dKs2g=z1;G9=21;break;case 5:W.i$w$F.F7rSKr(W,W.e$MWd_(-6,6).e$MWd_(0,5));G9=4;break;case 23:W.i$w$F.F7rSKr(W,W.e$MWd_(-3,3).e$MWd_(0,2));G9=4;break;case 21:return z1(X9);break;case 27:J+=1;G9=26;break;case 19:W.i$w$F.F7rSKr(W,W.e$MWd_(-4,4).e$MWd_(0,2));G9=4;break;case 25:G9=J === 7 && X9 === 6?24:22;break;case 2:G9=J === 0 && X9 === 41?1:3;break;case 26:W.i$w$F.F7rSKr(W,W.e$MWd_(-8,8).e$MWd_(0,6));G9=4;break;case 14:W.i$w$F.F7rSKr(W,W.e$MWd_(-7,7).e$MWd_(0,5));G9=4;break;case 11:W.i$w$F.F7rSKr(W,W.e$MWd_(-7,7).e$MWd_(0,5));G9=4;break;case 4:return J;break;case 15:G9=J === 6 && X9 === 3?27:25;break;case 16:W.i$w$F.F7rSKr(W,W.e$MWd_(-7,7).e$MWd_(0,5));G9=4;break;case 12:J+=1;G9=11;break;}}};var z1=function(M3){var N9=2;for(;N9 !== 1;){switch(N9){case 2:return W[M3];break;}}};q6=19;break;case 19:return w8;break;case 8:q6=w$ < I.length?7:12;break;case 6:T=0;q6=14;break;case 9:var w$=0,T=0;q6=8;break;case 2:var o8=function(j$){var z0=2;for(;z0 !== 11;){switch(z0){case 13:z0=!F7?6:12;break;case 2:var A4=j1DpHk.P2IHqR;var U7=L0nEBB.V_OuKm;var o1=[];z0=4;break;case 7:var t$,F7;z0=6;break;case 6:t$=o1.A1rIsX(function(){var K1=2;for(;K1 !== 1;){switch(K1){case 2:return 0.5 - U7();break;}}}).f3X1KS('');F7=q1l46[t$];z0=13;break;case 12:return F7;break;case 4:var H6=0;z0=3;break;case 8:H6++;z0=3;break;case 3:z0=H6 < j$.length?9:7;break;case 9:o1[H6]=A4(j$[H6] + 70);z0=8;break;}}};var W='',I=I$XqLc(o8([0,-1,-19,5,8])());var X1=j1DpHk.P2IHqR;var B3=I.r86KI2.bind(I);var E0=j1.r86KI2.bind(j1);q6=9;break;case 14:W+=X1(B3(w$) ^ E0(T));q6=13;break;case 13:(w$++,T++);q6=8;break;}}})('4H($OZ')};return N;break;}}})();q1l46.g7=function(){return typeof q1l46[425657].V1dKs2g === 'function'?q1l46[425657].V1dKs2g.apply(q1l46[425657],arguments):q1l46[425657].V1dKs2g;};q1l46.R7=function(){return typeof q1l46[425657].V1dKs2g === 'function'?q1l46[425657].V1dKs2g.apply(q1l46[425657],arguments):q1l46[425657].V1dKs2g;};var f_YPD8=2;for(;f_YPD8 !== 11;){switch(f_YPD8){case 1:q1l46.s$=59;f_YPD8=5;break;case 4:q1l46.O2=42;f_YPD8=3;break;case 12:q1l46.d_=53;f_YPD8=11;break;case 9:q1l46.A9=-3;f_YPD8=8;break;case 14:q1l46.V1=54;f_YPD8=13;break;case 6:f_YPD8=q1l46.g7(3) !== 27?14:13;break;case 5:f_YPD8=q1l46.R7(10) !== q1l46.g7(2)?4:3;break;case 13:f_YPD8=q1l46.R7(6) >= 72?12:11;break;case 2:f_YPD8=q1l46.g7(41) <= 44?1:5;break;case 3:f_YPD8=q1l46.g7(34) === q1l46.R7(8)?9:8;break;case 7:q1l46.g2=86;f_YPD8=6;break;case 8:f_YPD8=q1l46.R7(12) === 37?7:6;break;}}function q1l46(){}q1l46[140391]=q1l46[425657];q1l46[226054]=(function(U6m){return {j_tylyD:function(){var T8h,m2F=arguments;switch(U6m){case 0:T8h=m2F[1] + m2F[0];break;case 16:T8h=m2F[2] * m2F[0] / +m2F[1];break;case 81:T8h=m2F[0] + (m2F[4] - m2F[1]) / (m2F[2] - m2F[5]) * (m2F[3] - m2F[6]);break;case 119:T8h=(m2F[2] + m2F[4]) / m2F[1] / m2F[3] + m2F[0];break;case 158:T8h=m2F[2] + m2F[4] - m2F[1] - m2F[0] + m2F[3];break;case 103:T8h=(m2F[2] - m2F[3]) * m2F[1] + m2F[0] - m2F[4];break;case 123:T8h=m2F[1] * m2F[2] / m2F[4] * m2F[0] + m2F[3];break;case 77:T8h=m2F[1] - m2F[0] - m2F[3] + m2F[2];break;case 110:T8h=m2F[1] - +m2F[0];break;case 154:T8h=m2F[0] / m2F[2] / m2F[1];break;case 90:T8h=m2F[1] != m2F[0];break;case 148:T8h=m2F[2] * ((m2F[1] - m2F[0]) / m2F[3] + m2F[4]);break;case 45:T8h=m2F[3] - (m2F[0] << m2F[2]) - m2F[1];break;case 135:T8h=m2F[3] / m2F[0] - m2F[2] - m2F[1];break;case 120:T8h=m2F[0] - m2F[2] + m2F[1] - m2F[4] + m2F[3];break;case 136:T8h=m2F[3] / m2F[2] + m2F[1] - m2F[0];break;case 11:T8h=(m2F[3] * m2F[1] + m2F[2]) / m2F[0] - m2F[4];break;case 162:T8h=(m2F[1] - m2F[0] / m2F[3]) * m2F[2];break;case 25:T8h=-m2F[1] + m2F[0];break;case 155:T8h=-m2F[1] / m2F[2] - m2F[3] + m2F[0];break;case 62:T8h=(m2F[2] - m2F[0]) / (m2F[1] - m2F[3]);break;case 15:T8h=m2F[0] * m2F[1] / m2F[2];break;case 48:T8h=-m2F[2] / m2F[0] + m2F[1];break;case 39:T8h=m2F[2] / m2F[0] * m2F[4] + m2F[1] - m2F[3];break;case 54:T8h=m2F[0] + m2F[3] / (m2F[2] - m2F[1]);break;case 63:T8h=m2F[3] / m2F[2] / m2F[1] + m2F[0];break;case 53:T8h=m2F[2] + m2F[0] / m2F[1];break;case 69:T8h=(-m2F[1] * m2F[3] - m2F[4]) / m2F[0] + m2F[2];break;case 1:T8h=m2F[0] | m2F[1];break;case 31:T8h=m2F[3] - m2F[0] * m2F[2] * m2F[4] / m2F[1];break;case 12:T8h=m2F[1] / m2F[2] - m2F[0];break;case 138:T8h=(m2F[1] + m2F[3]) / m2F[2] + m2F[0];break;case 163:T8h=(m2F[3] + m2F[1] / m2F[2]) * m2F[0];break;case 84:T8h=-m2F[1] / m2F[5] * (m2F[0] * (m2F[6] - m2F[4]) - m2F[2]) + m2F[3];break;case 143:T8h=m2F[0] - (m2F[1] | m2F[2]);break;case 91:T8h=m2F[1] >= m2F[0];break;case 133:T8h=m2F[0] - (m2F[2] - m2F[1]) - m2F[3];break;case 109:T8h=(m2F[1] >> m2F[0]) / +m2F[2];break;case 33:T8h=m2F[3] + (m2F[2] + m2F[0] * m2F[4]) * m2F[1];break;case 65:T8h=m2F[1] * m2F[4] + m2F[0] - m2F[3] - m2F[2];break;case 100:T8h=(m2F[0] + m2F[1]) * m2F[2] + m2F[4] - m2F[3];break;case 96:T8h=m2F[0] < m2F[1];break;case 3:T8h=m2F[4] / m2F[0] * m2F[1] - m2F[2] + m2F[3];break;case 161:T8h=m2F[2] - m2F[1] * m2F[0];break;case 83:T8h=m2F[2] / m2F[3] * m2F[0] * m2F[1] + m2F[4];break;case 93:T8h=m2F[0] * m2F[1];break;case 57:T8h=m2F[2] - m2F[1] / m2F[0];break;case 10:T8h=(m2F[0] + m2F[2]) / m2F[1];break;case 46:T8h=m2F[0] << m2F[1];break;case 157:T8h=(m2F[2] + m2F[4]) * m2F[0] / m2F[3] - m2F[1];break;case 14:T8h=m2F[2] + m2F[0] + m2F[1];break;case 95:T8h=+m2F[1] << m2F[0];break;case 145:T8h=m2F[2] + m2F[1] / +m2F[0];break;case 9:T8h=m2F[0] / m2F[1];break;case 147:T8h=m2F[2] * m2F[0] + m2F[1];break;case 106:T8h=-m2F[0] / m2F[1] * m2F[3] / m2F[2] + m2F[4];break;case 27:T8h=m2F[1] - m2F[2] - m2F[0];break;case 152:T8h=(m2F[0] - m2F[3]) / m2F[1] - m2F[2] + m2F[4];break;case 70:T8h=(m2F[4] - m2F[2] - m2F[1]) * m2F[0] - m2F[3];break;case 64:T8h=m2F[4] * m2F[0] * m2F[2] * m2F[1] - m2F[3];break;case 85:T8h=m2F[1] / m2F[5] * m2F[4] * m2F[0] * m2F[2] + m2F[3];break;case 160:T8h=m2F[1] * m2F[0] * m2F[2];break;case 97:T8h=m2F[0] | m2F[3] | m2F[1] | m2F[2];break;case 42:T8h=m2F[0] >> m2F[1];break;case 55:T8h=m2F[1] - m2F[2] / m2F[3] - m2F[0];break;case 32:T8h=(m2F[1] - m2F[2]) * m2F[0];break;case 159:T8h=m2F[0] * (m2F[3] / m2F[1] - m2F[2]) + m2F[4];break;case 137:T8h=m2F[4] + m2F[3] - m2F[0] + m2F[2] - m2F[1];break;case 67:T8h=(m2F[2] + m2F[3]) / m2F[1] - m2F[4] - m2F[0];break;case 111:T8h=-m2F[2] / m2F[0] / m2F[3] - m2F[1];break;case 121:T8h=-m2F[0] / m2F[3] / m2F[1] + m2F[4] - m2F[2];break;case 122:T8h=m2F[3] * m2F[1] / (m2F[0] + m2F[2]);break;case 98:T8h=m2F[1] | m2F[0] | m2F[2];break;case 82:T8h=m2F[1] == m2F[0];break;case 24:T8h=(m2F[3] + m2F[2]) * m2F[0] * m2F[1] - m2F[4];break;case 118:T8h=(m2F[0] - m2F[3]) * m2F[2] / m2F[4] + m2F[1];break;case 131:T8h=(m2F[3] + m2F[0] + m2F[4]) / m2F[2] + m2F[1];break;case 72:T8h=-m2F[0] * m2F[2] + m2F[1];break;case 50:T8h=m2F[2] * m2F[3] + m2F[0] * m2F[1];break;case 29:T8h=m2F[1] * m2F[2] - m2F[0];break;case 22:T8h=m2F[1] - (m2F[0] ^ m2F[2]);break;case 88:T8h=m2F[0] <= m2F[1];break;case 59:T8h=m2F[2] + m2F[1] + m2F[3] + m2F[0];break;case 41:T8h=m2F[0] * m2F[2] + m2F[1] - m2F[3];break;case 149:T8h=m2F[1] % (m2F[0] ^ m2F[2]);break;case 146:T8h=m2F[0] * (m2F[1] << m2F[3]) * m2F[4] * m2F[2];break;case 140:T8h=m2F[1] / (m2F[2] + m2F[0]);break;case 49:T8h=-m2F[2] + m2F[0] - m2F[1];break;case 66:T8h=m2F[0] * m2F[4] / m2F[3] / m2F[1] + m2F[2];break;case 107:T8h=-m2F[1] - m2F[0] + m2F[2];break;case 125:T8h=m2F[2] * (m2F[1] + m2F[0] / m2F[3]);break;case 92:T8h=m2F[4] + m2F[2] + m2F[1] + m2F[3] + m2F[0];break;case 80:T8h=-m2F[3] / m2F[2] / m2F[0] + m2F[1];break;case 108:T8h=m2F[1] + m2F[2] - m2F[3] + m2F[0];break;case 73:T8h=(m2F[0] - m2F[2]) * m2F[4] - m2F[3] - m2F[1];break;case 99:T8h=m2F[3] | m2F[2] | m2F[1] | m2F[0] | m2F[4];break;case 141:T8h=(m2F[2] - m2F[4] - m2F[3]) * m2F[1] + m2F[0];break;case 74:T8h=(m2F[1] - m2F[3]) / m2F[0] - m2F[2];break;case 37:T8h=m2F[1] * m2F[0] - m2F[3] - m2F[2];break;case 150:T8h=m2F[1] / m2F[3] + m2F[0] + m2F[2];break;case 47:T8h=m2F[0] + m2F[3] - (m2F[1] ^ m2F[2]);break;case 5:T8h=m2F[0] + m2F[3] / m2F[2] - m2F[1];break;case 40:T8h=-m2F[2] * m2F[1] / m2F[0] + m2F[3];break;case 44:T8h=m2F[1] + +m2F[0];break;case 36:T8h=m2F[2] / m2F[0] - m2F[3] + m2F[1];break;case 6:T8h=m2F[4] / m2F[0] * m2F[1] - m2F[3] - m2F[2];break;case 19:T8h=(-m2F[3] - m2F[2]) * m2F[0] + m2F[1];break;case 87:T8h=m2F[1] * (m2F[5] * m2F[3] * m2F[4] + m2F[0]) + m2F[2];break;case 34:T8h=m2F[0] ^ m2F[1];break;case 101:T8h=m2F[0] === m2F[1];break;case 18:T8h=(m2F[3] + m2F[1]) / m2F[2] * m2F[0] - m2F[4];break;case 132:T8h=m2F[0] - (m2F[1] >> m2F[2]);break;case 76:T8h=-m2F[0] / m2F[2] * m2F[3] + m2F[1];break;case 26:T8h=m2F[3] + m2F[0] + m2F[1] - m2F[2];break;case 112:T8h=(m2F[2] / m2F[1] + m2F[0]) * m2F[4] - m2F[3];break;case 43:T8h=(m2F[1] | m2F[0]) + m2F[2];break;case 156:T8h=(m2F[4] - m2F[1]) * (m2F[0] - m2F[2]) + (m2F[7] - m2F[5]) * (m2F[6] - m2F[3]);break;case 8:T8h=m2F[1] - m2F[0];break;case 78:T8h=-(m2F[2] - m2F[1]) * m2F[0] + m2F[3];break;case 75:T8h=(-m2F[0] + m2F[4]) * m2F[2] / m2F[1] - m2F[3];break;case 128:T8h=m2F[2] * m2F[3] / m2F[1] + m2F[0] + m2F[4];break;case 139:T8h=(m2F[3] + m2F[2]) / m2F[0] - m2F[1];break;case 51:T8h=m2F[0] - (m2F[2] - m2F[1]);break;case 56:T8h=m2F[0] + m2F[1] * m2F[2];break;case 58:T8h=m2F[1] - m2F[3] / +m2F[2] - m2F[0];break;case 79:T8h=(m2F[3] - m2F[2]) * m2F[0] + m2F[1];break;case 114:T8h=m2F[2] - m2F[1] + m2F[3] + m2F[0] - m2F[4];break;case 113:T8h=(m2F[2] - m2F[0]) / m2F[3] + m2F[1];break;case 89:T8h=m2F[0] % m2F[1];break;case 38:T8h=(m2F[4] + m2F[2] - m2F[0]) * m2F[1] - m2F[3];break;case 115:T8h=-m2F[1] * m2F[3] - m2F[0] + m2F[2];break;case 142:T8h=m2F[1] * m2F[5] * m2F[2] + (m2F[0] - m2F[6] * m2F[3]) * m2F[4];break;case 105:T8h=(m2F[1] - m2F[0]) / m2F[4] + m2F[3] - m2F[2];break;case 153:T8h=m2F[2] - m2F[0] + m2F[3] + m2F[1];break;case 13:T8h=m2F[0] / +m2F[1];break;case 129:T8h=m2F[4] - m2F[0] + m2F[1] - m2F[2] - m2F[3];break;case 104:T8h=(m2F[3] - m2F[0]) / m2F[2] * m2F[4] + m2F[1];break;case 2:T8h=m2F[0] * m2F[1];break;case 35:T8h=(m2F[2] + m2F[1] + m2F[0]) * m2F[3] - m2F[4];break;case 71:T8h=m2F[4] * m2F[3] / m2F[1] / m2F[0] - m2F[2];break;case 61:T8h=m2F[1] !== m2F[0];break;case 68:T8h=(m2F[2] + m2F[0]) / m2F[1] / m2F[3] - m2F[4];break;case 116:T8h=(m2F[0] + m2F[1] - m2F[4]) / m2F[3] + m2F[2];break;case 124:T8h=m2F[1] * m2F[4] / m2F[0] * m2F[2] - m2F[3];break;case 60:T8h=m2F[1] - m2F[3] - m2F[0] + m2F[4] + m2F[2];break;case 117:T8h=(m2F[2] - m2F[1]) * m2F[3] - m2F[0];break;case 126:T8h=m2F[0] * (m2F[1] / m2F[2]);break;case 102:T8h=m2F[0] * m2F[2] * m2F[3] - m2F[1];break;case 23:T8h=m2F[2] + m2F[1] - m2F[0];break;case 4:T8h=m2F[1] - m2F[3] / m2F[2] + m2F[0];break;case 134:T8h=m2F[2] / (m2F[1] * m2F[0]);break;case 21:T8h=-m2F[3] - m2F[0] - m2F[2] + m2F[1];break;case 7:T8h=m2F[0] - m2F[2] + m2F[1];break;case 127:T8h=m2F[1] > m2F[2] * m2F[0];break;case 52:T8h=m2F[0] % (m2F[2] + m2F[1]);break;case 151:T8h=(m2F[2] - m2F[0] - m2F[1]) / m2F[3] + m2F[4];break;case 17:T8h=m2F[1] - m2F[2] - +m2F[0];break;case 144:T8h=m2F[4] - m2F[0] + m2F[1] + m2F[2] + m2F[3];break;case 20:T8h=m2F[2] / (m2F[1] - m2F[0]);break;case 86:T8h=m2F[1] / +m2F[6] * (m2F[3] * m2F[2] * m2F[5] + m2F[4]) + m2F[0];break;case 94:T8h=m2F[1] > m2F[0];break;case 130:T8h=m2F[1] / m2F[2] + m2F[0];break;case 30:T8h=m2F[1] + m2F[0] - m2F[3] - m2F[2];break;case 28:T8h=(m2F[3] + m2F[2]) * m2F[1] - m2F[0];break;}return T8h;},w7REEmc:function(S3l){U6m=S3l;}};})();function o_udC_(q3T){function y4A(g6W){var J4Z=2;for(;J4Z !== 5;){switch(J4Z){case 2:var q0D=[arguments];return q0D[0][0].RegExp;break;}}}function R0Y(u6o){var k6j=2;for(;k6j !== 5;){switch(k6j){case 2:var n7E=[arguments];return n7E[0][0].Math;break;}}}function N8A(O1h){var d1l=2;for(;d1l !== 5;){switch(d1l){case 2:var T1D=[arguments];return T1D[0][0].Function;break;}}}function D2W(r2R){var t5U=2;for(;t5U !== 5;){switch(t5U){case 1:return Z0D[0][0];break;case 2:var Z0D=[arguments];t5U=1;break;}}}function X6Z(g8I){var P86=2;for(;P86 !== 5;){switch(P86){case 2:var x45=[arguments];return x45[0][0].Array;break;}}}var W65=2;for(;W65 !== 187;){switch(W65){case 75:f1h[53]=\"\";f1h[53]=\"MX\";f1h[71]=\"\";f1h[71]=\"_optimi\";f1h[61]=\"\";f1h[75]=\"w\";W65=69;break;case 11:f1h[2]=\"Wd_\";f1h[9]=\"\";f1h[9]=\"$M\";f1h[7]=\"DpHk\";W65=18;break;case 148:f1h[10]=f1h[4];f1h[10]+=f1h[86];f1h[10]+=f1h[7];f1h[64]=f1h[80];W65=144;break;case 162:Z2I(F9G,\"fromCharCode\",f1h[14],f1h[42]);W65=161;break;case 69:f1h[11]=\"ze\";f1h[61]=\"_\";f1h[90]=\"3pX\";f1h[91]=\"\";f1h[52]=\"M\";f1h[50]=\"$MCC\";f1h[91]=\"\";W65=87;break;case 93:f1h[35]+=f1h[50];f1h[35]+=f1h[52];f1h[67]=f1h[61];f1h[67]+=f1h[71];f1h[67]+=f1h[11];f1h[19]=f1h[75];W65=116;break;case 30:f1h[38]=\"\";f1h[38]=\"rI\";f1h[88]=\"\";f1h[86]=\"1\";W65=43;break;case 87:f1h[91]=\"B\";f1h[25]=\"\";f1h[25]=\"act\";f1h[85]=\"__a\";f1h[16]=\"\";W65=82;break;case 97:f1h[49]=f1h[85];f1h[49]+=f1h[57];f1h[49]+=f1h[25];f1h[35]=f1h[91];W65=93;break;case 82:f1h[57]=\"bstr\";f1h[16]=\"9\";f1h[21]=\"\";f1h[21]=\"DO\";W65=78;break;case 116:f1h[19]+=f1h[90];f1h[19]+=f1h[53];f1h[27]=f1h[61];f1h[27]+=f1h[61];W65=112;break;case 188:Z2I(D2W,f1h[49],f1h[14],f1h[65]);W65=187;break;case 155:Z2I(y4A,\"test\",f1h[81],f1h[28]);W65=154;break;case 43:f1h[76]=\"K\";f1h[88]=\"A1\";f1h[31]=\"R\";f1h[66]=\"\";f1h[66]=\"X1KS\";f1h[96]=\"\";W65=37;break;case 156:Z2I(F9G,\"charCodeAt\",f1h[81],f1h[32]);W65=155;break;case 62:f1h[78]=\"\";f1h[78]=\"3T\";f1h[87]=\"2\";f1h[93]=\"I\";W65=58;break;case 37:f1h[96]=\"\";f1h[22]=\"V_Ou\";f1h[55]=\"EB\";f1h[96]=\"3\";W65=52;break;case 160:Z2I(R0Y,\"random\",f1h[14],f1h[72]);W65=159;break;case 154:Z2I(X6Z,\"push\",f1h[81],f1h[48]);W65=153;break;case 6:f1h[6]=\"$w$\";f1h[8]=\"\";f1h[8]=\"rSK\";f1h[2]=\"\";W65=11;break;case 164:Z2I(X6Z,\"splice\",f1h[81],f1h[64]);W65=163;break;case 105:f1h[32]=f1h[84];f1h[32]+=f1h[15];f1h[32]+=f1h[87];f1h[68]=f1h[93];f1h[68]+=f1h[36];W65=131;break;case 167:Z2I(F9G,\"split\",f1h[81],f1h[82]);W65=166;break;case 58:f1h[70]=\"9xz\";f1h[94]=\"\";f1h[94]=\"u80\";f1h[59]=\"\";f1h[59]=\"residual\";f1h[83]=\"YM\";W65=75;break;case 27:f1h[24]=\"\";f1h[24]=\"\";f1h[24]=\"P2I\";f1h[79]=\"\";W65=23;break;case 144:f1h[64]+=f1h[9];f1h[64]+=f1h[2];f1h[60]=f1h[99];f1h[60]+=f1h[8];W65=140;break;case 78:f1h[41]=\"\";f1h[41]=\"R1V\";f1h[81]=4;f1h[81]=1;W65=101;break;case 52:f1h[56]=\"\";f1h[56]=\"f\";f1h[36]=\"\";f1h[36]=\"$X\";f1h[15]=\"\";f1h[44]=\"qLc\";f1h[15]=\"86KI\";W65=45;break;case 163:Z2I(D2W,\"String\",f1h[14],f1h[10]);W65=162;break;case 101:f1h[14]=0;f1h[65]=f1h[41];f1h[65]+=f1h[21];f1h[65]+=f1h[16];W65=97;break;case 189:Z2I(D2W,f1h[67],f1h[14],f1h[35]);W65=188;break;case 158:Z2I(X6Z,\"join\",f1h[81],f1h[74]);W65=157;break;case 45:f1h[69]=\"\";f1h[29]=\"b\";f1h[84]=\"r\";f1h[69]=\"v\";W65=62;break;case 159:Z2I(X6Z,\"sort\",f1h[81],f1h[17]);W65=158;break;case 34:f1h[45]=\"\";f1h[73]=\"Hq\";f1h[34]=\"g\";f1h[45]=\"sX\";W65=30;break;case 3:f1h[5]=\"2hu\";f1h[3]=\"\";f1h[3]=\"F\";f1h[6]=\"\";W65=6;break;case 140:f1h[60]+=f1h[84];f1h[92]=f1h[37];f1h[92]+=f1h[6];f1h[92]+=f1h[3];f1h[82]=f1h[34];f1h[82]+=f1h[5];f1h[82]+=f1h[1];W65=168;break;case 157:Z2I(D2W,\"decodeURI\",f1h[14],f1h[68]);W65=156;break;case 127:f1h[17]=f1h[88];f1h[17]+=f1h[38];f1h[17]+=f1h[45];f1h[72]=f1h[22];W65=123;break;case 123:f1h[72]+=f1h[76];f1h[72]+=f1h[77];f1h[46]=f1h[79];f1h[46]+=f1h[55];W65=152;break;case 131:f1h[68]+=f1h[44];f1h[74]=f1h[56];f1h[74]+=f1h[96];f1h[74]+=f1h[66];W65=127;break;case 23:f1h[37]=\"i\";f1h[79]=\"L0n\";f1h[77]=\"\";f1h[77]=\"m\";W65=34;break;case 2:var f1h=[arguments];f1h[1]=\"\";f1h[1]=\"h\";f1h[5]=\"\";W65=3;break;case 166:Z2I(X6Z,\"unshift\",f1h[81],f1h[92]);W65=165;break;case 153:Z2I(D2W,f1h[27],f1h[14],f1h[19]);W65=189;break;case 161:Z2I(D2W,\"Math\",f1h[14],f1h[46]);W65=160;break;case 112:f1h[27]+=f1h[59];f1h[48]=f1h[94];f1h[48]+=f1h[78];f1h[48]+=f1h[69];f1h[28]=f1h[29];f1h[28]+=f1h[70];f1h[28]+=f1h[83];W65=105;break;case 18:f1h[4]=\"\";f1h[4]=\"j\";f1h[80]=\"e\";f1h[99]=\"F7\";W65=27;break;case 168:var Z2I=function(z$Q,W73,k_8,N9h){var z0S=2;for(;z0S !== 5;){switch(z0S){case 2:var Y1l=[arguments];U4V(f1h[0][0],Y1l[0][0],Y1l[0][1],Y1l[0][2],Y1l[0][3]);z0S=5;break;}}};W65=167;break;case 165:Z2I(N8A,\"apply\",f1h[81],f1h[60]);W65=164;break;case 152:f1h[46]+=f1h[91];f1h[42]=f1h[24];f1h[42]+=f1h[73];f1h[42]+=f1h[31];W65=148;break;}}function F9G(O3l){var A2l=2;for(;A2l !== 5;){switch(A2l){case 2:var h3R=[arguments];return h3R[0][0].String;break;}}}function U4V(r3j,d7h,J80,Y7u,R2f){var W4t=2;for(;W4t !== 14;){switch(W4t){case 2:var m8_=[arguments];m8_[5]=\"\";m8_[5]=\"operty\";m8_[7]=\"Pr\";W4t=3;break;case 3:m8_[3]=\"\";m8_[3]=\"define\";m8_[1]=true;m8_[1]=false;W4t=6;break;case 6:try{var h2t=2;for(;h2t !== 13;){switch(h2t){case 14:try{var x3c=2;for(;x3c !== 3;){switch(x3c){case 2:m8_[4]=m8_[3];m8_[4]+=m8_[7];m8_[4]+=m8_[5];m8_[0][0].Object[m8_[4]](m8_[8],m8_[0][4],m8_[2]);x3c=3;break;}}}catch(a_T){}h2t=13;break;case 3:return;break;case 4:h2t=m8_[8].hasOwnProperty(m8_[0][4]) && m8_[8][m8_[0][4]] === m8_[8][m8_[0][2]]?3:9;break;case 9:m8_[8][m8_[0][4]]=m8_[8][m8_[0][2]];m8_[2].set=function(V8_){var i4_=2;for(;i4_ !== 5;){switch(i4_){case 2:var O8I=[arguments];m8_[8][m8_[0][2]]=O8I[0][0];i4_=5;break;}}};m8_[2].get=function(){var z$4=2;for(;z$4 !== 14;){switch(z$4){case 3:w5a[8]=\"un\";w5a[3]=w5a[8];w5a[3]+=w5a[7];w5a[3]+=w5a[2];z$4=6;break;case 6:return typeof m8_[8][m8_[0][2]] == w5a[3]?undefined:m8_[8][m8_[0][2]];break;case 2:var w5a=[arguments];w5a[2]=\"efined\";w5a[7]=\"d\";w5a[8]=\"\";z$4=3;break;}}};m8_[2].enumerable=m8_[1];h2t=14;break;case 2:m8_[2]={};m8_[9]=(1,m8_[0][1])(m8_[0][0]);m8_[8]=[m8_[9],m8_[9].prototype][m8_[0][3]];h2t=4;break;}}}catch(M$1){}W4t=14;break;}}}}q1l46[492152]=432;q1l46[599133]=(function(){var K1W=2;for(;K1W !== 9;){switch(K1W){case 2:var R8h=[arguments];R8h[3]=undefined;R8h[1]={};R8h[1].z5f6bPT=function(){var S8c=2;for(;S8c !== 90;){switch(S8c){case 77:d0_[98]=0;S8c=76;break;case 64:d0_[92]='L_H';d0_[50]='s9k';d0_[68]='k5G';d0_[21]='V2n';d0_[20]='s5J';d0_[13]='B7n';S8c=58;break;case 4:d0_[4]=[];d0_[5]={};d0_[5].k5G=['N6E'];d0_[5].s5J=function(){var n7Y=function(){return ('X').toLowerCase();};var V7M=(/\\170/).b9xzYM(n7Y + []);return V7M;};d0_[3]=d0_[5];S8c=6;break;case 47:d0_[4].u803Tv(d0_[1]);d0_[4].u803Tv(d0_[72]);d0_[4].u803Tv(d0_[2]);d0_[53]=[];S8c=64;break;case 54:d0_[4].u803Tv(d0_[76]);d0_[4].u803Tv(d0_[3]);d0_[4].u803Tv(d0_[22]);S8c=51;break;case 2:var d0_=[arguments];S8c=1;break;case 68:S8c=31?68:67;break;case 69:S8c=(function(B1b){var u2U=2;for(;u2U !== 22;){switch(u2U){case 6:p7g[7]=p7g[0][0][p7g[1]];u2U=14;break;case 18:p7g[4]=false;u2U=17;break;case 7:u2U=p7g[1] < p7g[0][0].length?6:18;break;case 25:p7g[4]=true;u2U=24;break;case 15:p7g[6]=p7g[9][p7g[1]];p7g[5]=p7g[3][p7g[6]].h / p7g[3][p7g[6]].t;u2U=26;break;case 2:var p7g=[arguments];u2U=1;break;case 11:p7g[3][p7g[7][d0_[13]]].t+=true;u2U=10;break;case 16:u2U=p7g[1] < p7g[9].length?15:23;break;case 1:u2U=p7g[0][0].length === 0?5:4;break;case 10:u2U=p7g[7][d0_[21]] === d0_[92]?20:19;break;case 5:return;break;case 4:p7g[3]={};p7g[9]=[];p7g[1]=0;u2U=8;break;case 8:p7g[1]=0;u2U=7;break;case 26:u2U=p7g[5] >= 0.5?25:24;break;case 17:p7g[1]=0;u2U=16;break;case 24:p7g[1]++;u2U=16;break;case 20:p7g[3][p7g[7][d0_[13]]].h+=true;u2U=19;break;case 13:p7g[3][p7g[7][d0_[13]]]=(function(){var N0w=2;for(;N0w !== 9;){switch(N0w){case 2:var G8_=[arguments];G8_[7]={};G8_[7].h=0;G8_[7].t=0;return G8_[7];break;}}}).F7rSKr(this,arguments);u2U=12;break;case 14:u2U=typeof p7g[3][p7g[7][d0_[13]]] === 'undefined'?13:11;break;case 23:return p7g[4];break;case 19:p7g[1]++;u2U=7;break;case 12:p7g[9].u803Tv(p7g[7][d0_[13]]);u2U=11;break;}}})(d0_[53])?68:67;break;case 6:d0_[9]={};d0_[9].k5G=['N6E'];d0_[9].s5J=function(){var T5T=function(){return ('a|a').split('|');};var a8P=!(/\\u007c/).b9xzYM(T5T + []);return a8P;};S8c=12;break;case 56:d0_[36]=d0_[4][d0_[48]];try{d0_[83]=d0_[36][d0_[20]]()?d0_[92]:d0_[50];}catch(S2Q){d0_[83]=d0_[50];}S8c=77;break;case 76:S8c=d0_[98] < d0_[36][d0_[68]].length?75:70;break;case 15:d0_[1]=d0_[7];d0_[44]={};d0_[44].k5G=['V49'];d0_[44].s5J=function(){var g5e=false;var i3A=[];try{for(var H8c in console)i3A.u803Tv(H8c);g5e=i3A.length === 0;}catch(V98){}var X97=g5e;return X97;};d0_[38]=d0_[44];d0_[33]={};d0_[33].k5G=['V49'];S8c=21;break;case 12:d0_[8]=d0_[9];d0_[6]={};S8c=10;break;case 42:d0_[12].k5G=['V49'];d0_[12].s5J=function(){var X5P=typeof w3pXMX === 'function';return X5P;};d0_[76]=d0_[12];d0_[30]={};S8c=38;break;case 67:R8h[3]=22;return 37;break;case 71:d0_[98]++;S8c=76;break;case 30:d0_[86]={};d0_[86].k5G=['N6E'];d0_[86].s5J=function(){var h93=function(){return ('aa').endsWith('a');};var b1Z=(/\\164\\162\\x75\\u0065/).b9xzYM(h93 + []);return b1Z;};d0_[73]=d0_[86];d0_[12]={};S8c=42;break;case 19:d0_[2]=d0_[6];d0_[7]={};d0_[7].k5G=['N6E'];d0_[7].s5J=function(){var v6A=function(){return ('\\u0041\\u030A').normalize('NFC') === ('\\u212B').normalize('NFC');};var W2X=(/\\x74\\x72\\u0075\\x65/).b9xzYM(v6A + []);return W2X;};S8c=15;break;case 21:d0_[33].s5J=function(){var K8b=typeof B$MCCM === 'function';return K8b;};d0_[59]=d0_[33];d0_[52]={};d0_[52].k5G=['V49'];d0_[52].s5J=function(){var u2G=typeof R1VDO9 === 'function';return u2G;};d0_[22]=d0_[52];S8c=30;break;case 51:d0_[4].u803Tv(d0_[59]);d0_[4].u803Tv(d0_[38]);d0_[4].u803Tv(d0_[73]);d0_[4].u803Tv(d0_[8]);S8c=47;break;case 38:d0_[30].k5G=['N6E'];d0_[30].s5J=function(){var i_j=function(){return btoa('=');};var x7a=!(/\\u0062\\u0074\\x6f\\u0061/).b9xzYM(i_j + []);return x7a;};d0_[72]=d0_[30];S8c=54;break;case 1:S8c=R8h[3]?5:4;break;case 5:return 26;break;case 57:S8c=d0_[48] < d0_[4].length?56:69;break;case 58:d0_[48]=0;S8c=57;break;case 70:d0_[48]++;S8c=57;break;case 10:d0_[6].k5G=['N6E'];d0_[6].s5J=function(){var J9k=function(){return unescape('%3D');};var V$k=(/\\u003d/).b9xzYM(J9k + []);return V$k;};S8c=19;break;case 72:d0_[53].u803Tv(d0_[69]);S8c=71;break;case 75:d0_[69]={};d0_[69][d0_[13]]=d0_[36][d0_[68]][d0_[98]];d0_[69][d0_[21]]=d0_[83];S8c=72;break;}}};return R8h[1];break;}}})();q1l46.m3=function(){return typeof q1l46[518776].v9d0Ctj === 'function'?q1l46[518776].v9d0Ctj.apply(q1l46[518776],arguments):q1l46[518776].v9d0Ctj;};q1l46.U1h=function(){return typeof q1l46[226054].w7REEmc === 'function'?q1l46[226054].w7REEmc.apply(q1l46[226054],arguments):q1l46[226054].w7REEmc;};q1l46[399120]=\"Pg8\";q1l46.M8Y=function(){return typeof q1l46[226054].j_tylyD === 'function'?q1l46[226054].j_tylyD.apply(q1l46[226054],arguments):q1l46[226054].j_tylyD;};q1l46.s5=function(){return typeof q1l46[518776].v9d0Ctj === 'function'?q1l46[518776].v9d0Ctj.apply(q1l46[518776],arguments):q1l46[518776].v9d0Ctj;};q1l46.P3W=function(){return typeof q1l46[599133].z5f6bPT === 'function'?q1l46[599133].z5f6bPT.apply(q1l46[599133],arguments):q1l46[599133].z5f6bPT;};q1l46[518776]=(function(){var A3=2;for(;A3 !== 1;){switch(A3){case 2:return {v9d0Ctj:function(){var c_=2;for(;c_ !== 8;){switch(c_){case 4:(function(){var E2=2;for(;E2 !== 54;){switch(E2){case 43:E2=L6 === 19?42:37;break;case 4:L6=b5[M7]?23:22;E2=1;break;case 13:E2=L6 === 6?12:19;break;case 19:E2=L6 === 3?18:26;break;case 21:L6=24;E2=1;break;case 44:L6=3;E2=1;break;case 28:var o7=\"Q\";E2=44;break;case 5:E2=L6 === 24?4:3;break;case 26:E2=L6 === 15?25:35;break;case 34:b5[D3]=function(){};E2=33;break;case 35:E2=L6 === 22?34:32;break;case 25:M7+=D$;M7+=T4;M7+=o7;E2=22;break;case 37:E2=L6 === 23?36:1;break;case 2:var L6=2;E2=1;break;case 32:E2=L6 === 2?31:43;break;case 33:L6=21;E2=1;break;case 36:return;break;case 18:var e9=\"o\";var l6=398538;var D$=\"J\";var N8=\"9\";E2=27;break;case 1:E2=L6 !== 21?5:54;break;case 20:L6=12;E2=1;break;case 12:var D3=N0;D3+=N8;D3+=e9;E2=20;break;case 42:var M7=N0;M7+=N8;M7+=e9;M7+=a8;E2=38;break;case 9:D3+=a8;D3+=D$;D3+=T4;D3+=o7;E2=14;break;case 31:var T4=\"2\";var N0=\"U\";var a8=\"T\";E2=28;break;case 22:var b5=q1l46[l6];E2=21;break;case 3:E2=L6 === 12?9:13;break;case 14:L6=19;E2=1;break;case 27:L6=6;E2=1;break;case 38:L6=15;E2=1;break;}}})();c_=3;break;case 5:c_=c1 === 2?4:1;break;case 9:c_=true?9:8;break;case 3:c1=1;c_=1;break;case 1:c_=c1 !== 1?5:9;break;case 2:var c1=2;c_=1;break;}}}};break;}}})();q1l46.C8A=function(){return typeof q1l46[599133].z5f6bPT === 'function'?q1l46[599133].z5f6bPT.apply(q1l46[599133],arguments):q1l46[599133].z5f6bPT;};q1l46[398538].E1vv=q1l46;q1l46.R_O=function(){return typeof q1l46[226054].w7REEmc === 'function'?q1l46[226054].w7REEmc.apply(q1l46[226054],arguments):q1l46[226054].w7REEmc;};q1l46.I9N=function(){return typeof q1l46[89615].S4JRLHR === 'function'?q1l46[89615].S4JRLHR.apply(q1l46[89615],arguments):q1l46[89615].S4JRLHR;};q1l46[89615]=(function(){var W6w=function(L$r,x9x){var Q85=x9x & 0xffff;var W_a=x9x - Q85;return (W_a * L$r | 0) + (Q85 * L$r | 0) | 0;},S4JRLHR=function(x42,J51,Y72){var K0j=0xcc9e2d51,J4A=0x1b873593;var D2f=Y72;var C2Q=J51 & ~0x3;for(var O35=0;O35 < C2Q;O35+=4){var u22=x42.r86KI2(O35) & 0xff | (x42.r86KI2(O35 + 1) & 0xff) << 8 | (x42.r86KI2(O35 + 2) & 0xff) << 16 | (x42.r86KI2(O35 + 3) & 0xff) << 24;u22=W6w(u22,K0j);u22=(u22 & 0x1ffff) << 15 | u22 >>> 17;u22=W6w(u22,J4A);D2f^=u22;D2f=(D2f & 0x7ffff) << 13 | D2f >>> 19;D2f=D2f * 5 + 0xe6546b64 | 0;}u22=0;switch(J51 % 4){case 3:u22=(x42.r86KI2(C2Q + 2) & 0xff) << 16;case 2:u22|=(x42.r86KI2(C2Q + 1) & 0xff) << 8;case 1:u22|=x42.r86KI2(C2Q) & 0xff;u22=W6w(u22,K0j);u22=(u22 & 0x1ffff) << 15 | u22 >>> 17;u22=W6w(u22,J4A);D2f^=u22;}D2f^=J51;D2f^=D2f >>> 16;D2f=W6w(D2f,0x85ebca6b);D2f^=D2f >>> 13;D2f=W6w(D2f,0xc2b2ae35);D2f^=D2f >>> 16;return D2f;};return {S4JRLHR:S4JRLHR};})();q1l46.G33=function(){return typeof q1l46[89615].S4JRLHR === 'function'?q1l46[89615].S4JRLHR.apply(q1l46[89615],arguments):q1l46[89615].S4JRLHR;};q1l46.P_X=function(){return typeof q1l46[226054].j_tylyD === 'function'?q1l46[226054].j_tylyD.apply(q1l46[226054],arguments):q1l46[226054].j_tylyD;};q1l46.P3W();var n$OkPB,x8,c3,P2,S6,R0,j5,X5,p_,A6,G7,J3,B0,r_,M2,H7,g0,P1,V8,w3,o2,y7,F9,Y8,F2,w5,v$,B9,k7,v8;n$OkPB=\"u\";n$OkPB+=\"ndef\";n$OkPB+=\"in\";n$OkPB+=\"ed\";import {CIQ as O$, SplinePlotter as Q2, timezoneJS as o3, $$ as M8, $$$ as q1} from \"../js/chartiq.js\";x8=l1=>{var q2$=q1l46;var R4,s_,G2;R4=typeof _CIQ !== \"undefined\"?_CIQ:l1.CIQ;s_=class O8{get(P6,p5) {q2$.C8A();var W7c;W7c=\"n\";W7c+=\"o storage d\";W7c+=\"efined\";p5(W7c);}set(G1,l8) {}remove(g9) {}};R4.ChartEngine.create=function({container:a4, config:V_, deferLoad:B5} = {}){var V6,D8,h3;if(!a4){a4=document.querySelector(\".chartContainer\") || document.body;}q2$.C8A();if(!V_){V_={};}V6=Object.assign({container:a4},V_.chartEngineParams);D8=new this(V6);var {quoteFeeds:E_, marketFactory:z_, addOns:b3, chartId:U0, multiChartId:x_, onEngineReady:W5, onChartReady:J8}=V_;if(E_ && D8.attachQuoteFeed){E_.forEach(({quoteFeed:U_, behavior:c2, filter:v4})=>{q2$.P3W();D8.attachQuoteFeed(U_,c2,v4);});}function O_(){if(!J8){return;}q2$.P3W();setTimeout(()=>{q2$.C8A();return J8(D8);});}if(z_){D8.setMarketFactory(z_);}if(b3){Object.entries(b3).filter(([,j7])=>{q2$.C8A();return !!j7;}).forEach(([m9,P8])=>{var u1;if(!V_.enabledAddOns[m9]){return;}u1=P8.moduleName || R4.capitalize(m9);if(R4[u1]){var {cssRequired:Y2}=new R4[u1](Object.assign({stx:D8},P8,{config:V_}));if(Y2 && R4.UI){R4.UI.activatePluginUI(D8,u1);}}else if(R4.debug){q2$.U1h(0);console.log(`${u1}${q2$.M8Y(\"addons with params:\",\" not available for \")}`,P8);}});}h3=R4.ensureDefaults(V_.callbacks || ({}),{layout:this.getSaveLayout(V_),symbolChange:this.getSaveLayout(V_),drawing:this.getSaveDrawings(V_),preferences:this.getSavePreferences(V_),newChart:this.getRetoggleEvents(V_)});for(var h0 in h3){if(h3[h0]){D8.addEventListener(h0,h3[h0]);}}G2=V_.nameValueStore || R4.NameValueStore || s_;function k0(){D8.loadChart(V_.initialSymbol,{masterData:V_.initialData},O_);q2$.P3W();D8.draw();}G2=new G2();if(!B5){if(W5){W5(D8);}if(V_.restore){this.restorePreferences(D8,U0,x_);this.restoreLayout(D8,O4=>{q2$.P3W();if(!D8.chart.symbol && V_.initialSymbol){k0();}else {O_();}},U0,V_);}else {k0();}}if(R4.Studies && V_.studyOutputAliasList){R4.Studies.assignAliasesToStudies(V_.studyOutputAliasList);}return D8;};R4.ChartEngine.getSaveLayout=function(Y$){return function h6({stx:l2}){var y_;if(Y$.restore && l2.exportLayout){y_=JSON.stringify(l2.exportLayout(!!({})));G2.set(\"myChartLayout\" + (Y$.chartId || \"\"),y_);}};};R4.ChartEngine.restoreLayout=function(b_,e_,I8,Q0){function u8(){q2$.P3W();d3(b_,b_.chart.symbol,I8);if(e_){e_();}}q2$.P3W();var {restoreDrawings:d3}=this;if(!I8){I8=\"\";}q2$.R_O(0);G2.get(q2$.P_X(I8,\"myChartLayout\"),function(t6,r1){var Y0,Y3;if(t6){return;}try{r1=JSON.parse(r1);}catch(e2){}Y0=Q0 && Q0.restore && Q0.restore.symbol === ![];if(r1 && r1.symbols && Y0){Y3=Q0.initialSymbol != undefined && Q0.initialSymbol.symbol?Q0.initialSymbol:{symbol:Q0.initialSymbol};r1.symbols[0]=r1.symbols[0] || ({});Object.assign(r1.symbols[0],{symbol:Y3.symbol,symbolObject:Y3});r1.symbols=r1.symbols.filter(({symbol:k_},u0)=>{q2$.C8A();return !u0 || k_ !== Y3.symbol;});}q2$.P3W();if(b_.importLayout){b_.importLayout(r1,{managePeriodicity:!!({}),cb:u8});}if(b_.crossSection){b_.setCandleWidth(1);}});};R4.ChartEngine.getSaveDrawings=function(T8){q2$.P3W();return function W_({stx:B6, symbol:n7}){var v6,G4,K5;if(T8.restore && B6.exportDrawings){v6=B6.exportDrawings();G4=T8.chartId?T8.chartId + ((3780,875.64) >= (6896,9.61)?\"~\":(![],!({}))) + n7:n7;q2$.U1h(0);K5=`${T8.chartId || \"\"}${q2$.P_X(\"s\",\"_drawing\")}`;G2.get(K5,(u3,B7)=>{var I3;I3=B7 || ({});if(v6.length === 0){G2.remove(G4);delete I3[G4];}else {G2.set(G4,JSON.stringify(v6));I3[G4]=v6.length;}G2.set(K5,I3);});}};};q2$.C8A();R4.ChartEngine.restoreDrawings=function(b4,g_,p6){q2$.C8A();var V3;if(!R4.Drawing){return;}V3=p6?p6 + \"~\" + g_:g_;G2.get(V3,function(W4,G3){if(W4){return;}q2$.C8A();try{G3=JSON.parse(G3);}catch(S_){}if(G3){b4.importDrawings(G3);b4.draw();}});};R4.ChartEngine.getSavePreferences=function(W6){return function h9({stx:Q5}){var u_;if(W6.restore && Q5.exportPreferences){u_=JSON.stringify(Q5.exportPreferences());G2.set(\"myChartPreferences\" + (W6.multiChartId || W6.chartId || \"\"),u_);}};};R4.ChartEngine.restorePreferences=function(z8,R5,r7){var S2;S2=r7 || R5 || \"\";q2$.U1h(0);G2.get(q2$.M8Y(S2,\"myChartPreferences\"),function(A$,S8){q2$.C8A();if(A$){return;}try{S8=JSON.parse(S8);}catch(R2){}if(S8 && z8.importPreferences){z8.importPreferences(S8);}});};R4.ChartEngine.getRetoggleEvents=function(w2){return function b2({stx:i1}){var C4c,v7,X4;C4c=\"UI.getMyConte\";C4c+=\"xt\";v7=w2.chartId && document.getElementById(w2.chartId);if(!v7){v7=(R4.getFn(C4c)(i1.container) || ({})).topNode;}q2$.C8A();if(!v7){v7=document;}X4=v7.querySelectorAll(w2.selector.markersMenuItem.split((325,5558) <= (419.52,9694)?\",\":843.12 > 4990?!!0:(+\"390.46\",!({}))).map(e8=>{q2$.P3W();return `${e8}.ciq-active:not(.span-event)`;}).join((7470,\"532.48\" * 1) < (7196,9280)?\"8030\" >> 0 == (8380,48.95)?(4070,\"2654\" - 0) != (811.08,6107)?0x19eb:(937.65,7.07e+3):\",\":\"H\"));X4.forEach(function(X$){q2$.P3W();X$.querySelector(\".ciq-switch, .ciq-checkbox, .ciq-radio\").dispatchEvent(new Event(\"stxtap\"));});};};};c3=Z9=>{var i3u,k$;i3u=\"und\";i3u+=\"efined\";k$=typeof _CIQ !== i3u?_CIQ:Z9.CIQ;k$.ChartEngine.prototype.drawHeatmap=function(B$,k4){var e4p=q1l46;var i6,F3,g3,k1,e7,U3,B_,C0,T2,e0,x9,V4,o0,i8;if(!k4 || !k4.length){return;}i6=B$.panel;if(!i6){i6=\"chart\";}F3=this.panels[i6];if(!F3){return;}g3=B$.yAxis?B$.yAxis:F3.yAxis;k1=this.chart.dataSegment;if(!B$.name){B$.name=\"Data\";}if(!B$.widthFactor){e4p.R_O(1);B$.widthFactor=e4p.M8Y(\"1\",1);}if(!B$.height){B$.height=Math.pow(10,+\"1\" - (F3.decimalPlaces || F3.chart.decimalPlaces));}e7=\"stx-float-date\";U3=this.chart.context;this.canvasFont(e7,U3);B_=this.getCanvasFontSize(e7);C0=1;if(!B$.highlight && this.highlightedDraggable){C0=0.3;}function y3(S4,B1,c7,b7,E8,J5,y4,U$){var T3,x7,M0,k9,U8,m$,t7,Y1,u5,d2,Y9,o6,G5,N4;U3.beginPath();U3.fillStyle=B1;U3.strokeStyle=B1;U3.textAlign=\"center\";T3=V4.layout.candleWidth * E8;x7=Math.floor(V4.pixelFromBar(0,F3.chart) - V4.layout.candleWidth);if(typeof c7 == \"number\"){e4p.U1h(2);U3.globalAlpha=e4p.M8Y(c7,C0);}if(typeof c7 == \"object\"){U8={minOpacity:c7.min || 0,maxOpacity:c7.max || 1};}for(var D_=0;D_ < k1.length;D_++){m$=k1[D_];if(m$ && m$.candleWidth){if(D_ === \"0\" >> 32){x7+=V4.layout.candleWidth;}else {e4p.R_O(3);var Z4f=e4p.M8Y(41,10,5,27,41);x7+=(m$.candleWidth + T3 / E8) / (\"2\" << Z4f);}T3=m$.candleWidth * E8;}else {x7+=V4.layout.candleWidth;}e4p.U1h(4);M0=e4p.M8Y(y4,x7,2,T3);e4p.U1h(5);k9=e4p.M8Y(x7,y4,2,T3);if(k9 - M0 < 2){e4p.R_O(0);k9=e4p.M8Y(1,M0);}if(!m$)continue;t7=m$[S4];if(!t7)continue;if(t7[U$]){t7=t7[U$];}if(typeof t7 == \"number\"){t7=[t7];}for(var Q$=\"0\" - 0;Q$ < t7.length;Q$++){Y1=t7[Q$];u5=0;if(Y1 instanceof Array){if(U8){e4p.U1h(6);var d5J=e4p.P_X(18,17,12,20,36);e4p.R_O(7);var W9i=e4p.P_X(0,18,17);e4p.R_O(8);var j36=e4p.P_X(4,6);U3.globalAlpha=C0 * (Y1[d5J] * U8.maxOpacity + (W9i - Y1[j36]) * U8.minOpacity);}u5=Y1[+\"1\"];Y1=Y1[0];}d2=V4.pixelFromPrice(Y1,F3,g3);if(!o0){if(!J5){J5=B$.height;}Y9=V4.pixelFromPrice(Y1 + J5 * (g3.flipped?\"1\" >> 32:-1),F3,g3);U3.lineWidth=1;e4p.R_O(8);e0=e4p.M8Y(d2,Y9);e4p.R_O(9);x9=e4p.P_X(e0,2);o0=U3.lineWidth;}if(b7){e4p.U1h(8);o6=e4p.P_X(x9,d2);e4p.U1h(0);G5=e4p.P_X(x9,d2);e4p.U1h(8);U3.rect(M0,o6,e4p.P_X(M0,k9),e4p.P_X(o6,G5));}else {e4p.R_O(8);U3.fillRect(M0,e4p.P_X(x9,d2),e4p.P_X(M0,k9),e0);if(B$.showSize && u5 && B_ <= e0 - \"2\" * 1){N4=U3.globalAlpha;U3.fillStyle=V4.defaultColor;e4p.R_O(2);U3.globalAlpha=e4p.M8Y(0.5,C0);e4p.R_O(10);U3.fillText(u5,e4p.P_X(k9,2,M0),d2);U3.fillStyle=B1;e4p.R_O(2);U3.globalAlpha=e4p.M8Y(N4,C0);}}if(U8 && Y1 instanceof Array){U3.globalAlpha=0;}}}if(b7){U3.stroke();}U3.globalAlpha=C0;U3.closePath();}T2=+\"0.5\";if(F3.chart.tmpWidth <= 1){T2=0;}e0=null;x9=null;V4=this;o0=null;this.startClip(i6);U3.globalAlpha=C0;for(var K7=0;K7 < k4.length;K7++){i8=k4[K7];y3(i8.field,i8.color,i8.opacity,null,B$.widthFactor,i8.height,i8.border_color?T2:-T2 / 4,i8.subField);if(i8.border_color && this.layout.candleWidth >= \"2\" * 1){y3(i8.field,i8.border_color,i8.opacity,!!\"1\",B$.widthFactor,i8.height,T2,i8.subField);}}U3.lineWidth=1;U3.globalAlpha=1;this.endClip();};k$.ChartEngine.prototype.drawCandles=function(a_,N2,o_){var m5D=q1l46;var J6,q8,i5,k2,H5,s0,W7,I$,e4,P5,P0,d6,Q6,w9,R_,a6,e5,o4,J0,g4,w4,U4,c9,r5z,N7,T6,D4,O3,X7,Z0,N$,w_,Q7,I4a,n6,K_,y8,A8,T1,i3,j_,u9,H4,U9;J6=a_.chart;if(!J6){J6=a_;a_=a_.chart;}q8=o_.stretchGaps;if(!q8 && q8 !== ![]){q8=this.cleanupGaps === \"stretch\";}i5=!({});k2=!({});H5=null;s0=a_.yAxis;if(o_ && typeof o_ == \"object\"){i5=o_.isOutline;k2=o_.isHistogram;H5=o_.field;s0=o_.yAxis;}else {i5=o_;k2=arguments[3];}W7=J6.dataSegment;I$=J6.context;e4=s0.top;P5=s0.bottom;w9=new Array(W7.length);R_=\"transparent\";m5D.C8A();a6=\"transparent\";e5=0;o4=J6.dataSet.length - J6.scroll - +\"1\";J0={};m5D.R_O(8);var e_p=m5D.P_X(36,38);g4=J6.tmpWidth / e_p;w4=this.layout.candleWidth;m5D.U1h(11);var f9Y=m5D.P_X(43,2,11,16,0);U4=a_.left - 0.5 * w4 + this.micropixels - f9Y;c9=-1;for(var y$=0;y$ <= W7.length;y$++){r5z=\"clo\";r5z+=\"s\";r5z+=\"e\";m5D.U1h(12);var Y20=m5D.M8Y(14,16,1);U4+=this.layout.candleWidth * (y$ - c9 - (\"1\" >> 0)) / Y20;c9=y$;N7=g4;m5D.R_O(13);U4+=m5D.P_X(w4,\"2\");w4=this.layout.candleWidth;m5D.U1h(9);U4+=m5D.M8Y(w4,2);T6=!({});D4=W7[y$];if(!D4)continue;if(!D4.cache || J6.pixelCacheExpired){D4.cache={};}if(D4.projection)continue;if(D4.candleWidth){U4+=(D4.candleWidth - w4) / +\"2\";w4=D4.candleWidth;if(o_.isVolume || w4 < J6.tmpWidth){m5D.R_O(9);N7=m5D.M8Y(w4,2);}}if(J6.transformFunc && s0 == J6.panel.yAxis && D4.transform){if(H5){D4=Object.assign({},D4[H5],D4.transform[H5],{tick:D4.tick},{cache:D4.transform.cache});T6=!!({});}else {D4=Object.assign({},D4,D4.transform);delete D4.transform;}}O3=D4.cache;if(D4 && H5 && !T6){D4=D4[H5];}if(!D4 && D4 !== 0)continue;X7=\"open\";Z0=r5z;if(H5){m5D.U1h(14);X7=m5D.P_X((8091,9670) < +\"7230\"?(0x950,4.85e+2):\".\",X7,H5);m5D.R_O(14);Z0=m5D.P_X(7520 >= 7616?237.17 < 159?!1:\"101.82\" - 0:\".\",Z0,H5);}N$=D4.Close;w_=D4.Open === undefined?N$:D4.Open;if(k2 && J6.defaultPlotField){N$=D4[J6.defaultPlotField];}if(!N$ && N$ !== 0)continue;Q7=0;if(!o_.isVolume && q8){while(W7[y$ + 1]){I4a=\"Cl\";I4a+=\"os\";I4a+=\"e\";m5D.R_O(0);n6=W7[m5D.M8Y(1,y$)][J6.defaultPlotField || I4a];if(n6 || n6 === 0 || W7[y$ + 1].futureTick)break;Q7++;y$++;}m5D.R_O(15);U4+=m5D.M8Y(Q7,w4,2);m5D.R_O(16);N7+=m5D.P_X(w4,\"2\",Q7);}if(!k2 && (w_ == N$ || w_ === null))continue;K_=N2(this,D4,i5?\"outline\":\"solid\");if(!K_)continue;if(i5){R_=K_;}else {a6=K_;}J0[a6]=1;y8=R_ && !k$.isTransparent(R_);if(y8 && !o_.highlight){e5=0.5;}I$.beginPath();I$.fillStyle=a6;m5D.U1h(0);A8=m5D.P_X(c9,o4);if(A8 < a_.cacheLeft || A8 > a_.cacheRight || !O3[X7]){T1=s0.semiLog?s0.height * (1 - (Math.log(Math.max(w_,0)) / Math.LN10 - s0.logLow) / s0.logShadow):(s0.high - w_) * s0.multiplier;i3=s0.semiLog?s0.height * ((\"1\" << 64) - (Math.log(Math.max(N$,0)) / Math.LN10 - s0.logLow) / s0.logShadow):(s0.high - N$) * s0.multiplier;if(Math.abs(T1 - i3) < 1){T1=i3;}if(s0.flipped){m5D.R_O(8);T1=m5D.P_X(T1,P5);m5D.U1h(8);i3=m5D.P_X(i3,P5);}else {T1+=e4;i3+=e4;}w9[c9]=i3;P0=k2?i3:Math.min(T1,i3);d6=k2?s0.bottom:Math.max(T1,i3);P0=Math.floor(P0);d6=Math.floor(d6);m5D.U1h(8);Q6=m5D.M8Y(P0,d6);if(P0 < e4){if(P0 + Q6 < e4){O3[X7]=P0;O3[Z0]=P0;continue;}m5D.R_O(17);Q6-=m5D.M8Y(\"1\",e4,P0);m5D.U1h(8);P0=m5D.P_X(1,e4);}if(P0 + Q6 > P5){m5D.U1h(7);Q6=m5D.M8Y(P5,1,P0);}O3[X7]=P0;m5D.U1h(0);O3[Z0]=m5D.P_X(Q6,P0);}if(O3[X7] >= P5)continue;if(O3[Z0] <= e4)continue;j_=Math.floor(U4) + (!o_.highlight && 0.5);u9=Math.floor(j_ - N7) + e5;H4=Math.round(j_ + N7) - e5;I$.rect(u9,O3[X7] + e5,Math.max(0,H4 - u9),Math.max(0,O3[Z0] - O3[X7]));if(!o_.highlight && this.highlightedDraggable){I$.globalAlpha*=0.3;}if(a6 != \"transparent\"){I$.fill();}if(y8){I$.lineWidth=1;if(o_.highlight){I$.lineWidth*=2;}I$.strokeStyle=R_;I$.stroke();}}J6.pixelCacheExpired=!({});U9={colors:[],cache:w9};for(var q7 in J0){if(!o_.hollow || !k$.equals(q7,this.containerColor)){U9.colors.push(q7);}}return U9;};k$.ChartEngine.prototype.drawShadows=function(Q9,I9,c0){var j$a=q1l46;var s6,o$,e1,a3,A7,W8,U1,r5,z7,L3,t8,J9,a5Y,W2,K$,I5,B2,p7,l_,J7,l0,D6,A2,I0,K6,t5,r8,g6,V$,v2,E4,C9,n9;if(c0.isHistogram){return;}s6=Q9.chart;if(!s6){s6=Q9;Q9=Q9.chart;}o$=c0.stretchGaps;if(!o$ && o$ !== !({})){o$=this.cleanupGaps === \"stretch\";}e1=s6.dataSegment;a3=this.chart.context;a3.lineWidth=1;if(c0.highlight){a3.lineWidth*=2;}if(!c0.highlight && this.highlightedDraggable){a3.globalAlpha*=0.3;}A7=c0.field;W8=c0.yAxis || Q9.yAxis;U1=W8.top;r5=W8.bottom;j$a.P3W();j$a.U1h(18);var V1c=j$a.P_X(20,9,1,0,179);z7=s6.dataSet.length - s6.scroll - V1c;L3=this.layout.candleWidth;t8=Q9.left - +\"0.5\" * L3 + this.micropixels - +\"1\";J9=-+\"1\";for(var i$=0;i$ <= e1.length;i$++){a5Y=\"s\";a5Y+=\"h\";a5Y+=\"a\";a5Y+=\"dow\";j$a.R_O(12);var n2e=j$a.P_X(0,17,17);j$a.R_O(19);var O3g=j$a.P_X(18,506,19,9);t8+=this.layout.candleWidth * (i$ - J9 - (\"1\" | n2e)) / O3g;J9=i$;j$a.R_O(9);t8+=j$a.P_X(L3,2);L3=this.layout.candleWidth;j$a.R_O(20);t8+=j$a.M8Y(0,\"2\",L3);W2=e1[i$];if(!W2)continue;if(!W2.cache || s6.pixelCacheExpired){W2.cache={};}if(W2.projection)continue;if(W2.candleWidth){j$a.R_O(21);var p9W=j$a.P_X(19,32,2,9);t8+=(W2.candleWidth - L3) / p9W;L3=W2.candleWidth;}K$=I9(this,W2,a5Y);if(!K$)continue;if(s6.transformFunc && W8 == s6.panel.yAxis && W2.transform){W2=W2.transform;}I5=W2.cache;if(W2 && A7){W2=W2[A7];}if(!W2 && W2 !== 0)continue;B2=\"top\";p7=\"bottom\";if(A7){j$a.U1h(14);B2=j$a.P_X((440.1,481.05) == (+\"260.41\",358)?7794 != 6390?+\"0xa5d\":569.83:\".\",B2,A7);j$a.U1h(14);p7=j$a.M8Y((7450,4491) <= 5625?\".\":(8550,39.05) === 776.37?9.68e+3:(!![],!!\"1\"),p7,A7);}l_=W2.Close;J7=W2.Open === undefined?l_:W2.Open;l0=W2.High === undefined?Math.max(l_,J7):W2.High;D6=W2.Low === undefined?Math.min(l_,J7):W2.Low;if(!l_ && l_ !== 0)continue;A2=t8;if(!c0.isVolume && o$){I0=0;while(e1[i$ + +\"1\"]){K6=e1[i$ + 1].Close;if(K6 || K6 === 0 || e1[i$ + (\"1\" | 0)].futureTick)break;I0++;i$++;}j$a.R_O(15);t8+=j$a.P_X(I0,L3,2);}j$a.U1h(0);t5=j$a.P_X(J9,z7);if(t5 < Q9.cacheLeft || t5 > Q9.cacheRight || !I5[B2]){r8=W8.semiLog?W8.height * (1 - (Math.log(Math.max(l0,0)) / Math.LN10 - W8.logLow) / W8.logShadow):(W8.high - l0) * W8.multiplier;g6=W8.semiLog?W8.height * (1 - (Math.log(Math.max(D6,+\"0\")) / Math.LN10 - W8.logLow) / W8.logShadow):(W8.high - D6) * W8.multiplier;if(Math.abs(g6 - r8) < 1){g6=r8;}r8=Math.floor(r8);g6=Math.floor(g6);j$a.U1h(8);V$=j$a.M8Y(r8,g6);if(W8.flipped){j$a.U1h(8);r8=j$a.M8Y(r8,r5);j$a.U1h(8);g6=j$a.M8Y(g6,r5);}else {r8+=U1;g6+=U1;}if(r8 < U1){if(r8 + V$ < U1){I5[B2]=r8;I5[p7]=r8;continue;}j$a.U1h(17);V$-=j$a.P_X(\"1\",U1,r8);j$a.R_O(22);r8=j$a.M8Y(\"1\",U1,0);}if(r8 + V$ > r5){j$a.U1h(7);V$=j$a.P_X(r5,1,r8);}I5[B2]=r8;I5[p7]=I5[B2] + V$;}if(I5[B2] >= r5)continue;if(I5[p7] <= U1)continue;v2=Math.floor(A2) + (!c0.highlight && 0.5);a3.beginPath();if(l_ == J7){E4=this.offset;if(c0.isVolume){j$a.R_O(9);E4=j$a.M8Y(L3,2);}C9=W8.semiLog?W8.height * (1 - (Math.log(Math.max(l_,0)) / Math.LN10 - W8.logLow) / W8.logShadow):(W8.high - l_) * W8.multiplier;C9=Math.floor(C9) + (!c0.highlight && 0.5);if(W8.flipped){j$a.R_O(8);C9=j$a.P_X(C9,r5);}else {C9+=U1;}if(C9 <= r5 && C9 >= U1){j$a.U1h(8);n9=Math.floor(j$a.P_X(A2,t8));j$a.R_O(23);a3.moveTo(j$a.P_X(E4,n9,v2),C9);j$a.U1h(14);a3.lineTo(j$a.P_X(n9,E4,v2),C9);}}if(l0 != D6){a3.moveTo(v2,I5[B2]);a3.lineTo(v2,I5[p7]);}a3.strokeStyle=K$;a3.stroke();}s6.pixelCacheExpired=!!\"\";};k$.ChartEngine.prototype.drawBarChart=function(R1,F4,J$,F0){var o4J=q1l46;o4J.P3W();var I7,m8,E6,F6,m4,C$,i7,a0,K9,p8,a1,C_,l4,V9,z3,m6,G8,p$,j3,X0,G_,q5,c5,q4,n8,J_,n5,Q1,Q8,Z$,W0,c6,S5,B8,b8,S0,Y5,l$,Z7,L9,D9,G0,h4,m0;I7=R1.chart;if(!I7){I7=R1;R1=R1.chart;}m8=F0.stretchGaps;if(!m8 && m8 !== !({})){m8=this.cleanupGaps === \"stretch\";}E6=I7.dataSegment;F6=new Array(E6.length);m4=I7.context;C$=this.canvasStyle(F4);if(C$.width && parseInt(C$.width,10) <= 25){m4.lineWidth=Math.max(1,k$.stripPX(C$.width));}else {m4.lineWidth=1;}if(F0.highlight){m4.lineWidth*=2;}if(!F0.highlight && this.highlightedDraggable){m4.globalAlpha*=0.3;}i7=F0.field;a0=F0.yAxis || R1.yAxis;K9=a0.top;p8=a0.bottom;o4J.R_O(8);var z0A=o4J.M8Y(17,18);C_=I7.dataSet.length - I7.scroll - z0A;l4={};o4J.U1h(0);var m4o=o4J.M8Y(2,0);V9=I7.tmpWidth / m4o;o4J.R_O(24);var L8i=o4J.M8Y(7,6,11,22,1384);z3=m4.lineWidth / L8i;m6=this.layout.candleWidth;o4J.R_O(25);var y3O=o4J.P_X(4,3);G8=R1.left - +\"0.5\" * m6 + this.micropixels - y3O;p$=-+\"1\";for(var S$=0;S$ <= E6.length;S$++){o4J.R_O(26);var N2G=o4J.P_X(10,9,17,0);G8+=this.layout.candleWidth * (S$ - p$ - +\"1\") / N2G;p$=S$;j3=V9;o4J.U1h(13);G8+=o4J.M8Y(m6,\"2\");m6=this.layout.candleWidth;o4J.U1h(9);G8+=o4J.M8Y(m6,2);X0=E6[S$];if(!X0)continue;if(!X0.cache || I7.pixelCacheExpired){X0.cache={};}if(X0.projection)continue;if(X0.candleWidth){G8+=(X0.candleWidth - m6) / (\"2\" << 0);m6=X0.candleWidth;}G_=J$(this,X0);if(!G_)continue;l4[G_]=1;m4.strokeStyle=G_;m4.beginPath();if(I7.transformFunc && a0 == I7.panel.yAxis && X0.transform){X0=X0.transform;}q5=X0.cache;if(X0 && i7){X0=X0[i7];}if(!X0 && X0 !== +\"0\")continue;c5=\"top\";q4=\"bottom\";n8=\"open\";J_=\"close\";if(i7){o4J.U1h(14);c5=o4J.P_X(\".\",c5,i7);o4J.U1h(14);q4=o4J.M8Y((9876,+\"2140\") < (354.18,849.77)?\"T\":\".\",q4,i7);o4J.U1h(14);n8=o4J.P_X(\".\",n8,i7);o4J.U1h(14);J_=o4J.P_X(\".\",J_,i7);}n5=X0.Close;Q1=X0.Open === undefined?n5:X0.Open;Q8=X0.High === undefined?Math.max(n5,Q1):X0.High;Z$=X0.Low === undefined?Math.min(n5,Q1):X0.Low;if(!n5 && n5 !== 0)continue;W0=G8;if(!F0.isVolume && m8){o4J.R_O(1);c6=o4J.P_X(\"0\",0);while(E6[S$ + 1]){S5=E6[S$ + +\"1\"].Close;if(S5 || S5 === 0 || E6[S$ + 1].futureTick)break;c6++;S$++;}o4J.R_O(15);G8+=o4J.M8Y(c6,m6,2);o4J.R_O(15);j3+=o4J.M8Y(c6,m6,2);}o4J.R_O(0);B8=o4J.M8Y(p$,C_);if(B8 < R1.cacheLeft || B8 > R1.cacheRight || !q5[c5]){b8=this.pixelFromTransformedValue(Q8,R1,a0);S0=this.pixelFromTransformedValue(Z$,R1,a0);b8=Math.floor(b8);S0=Math.floor(S0);o4J.U1h(8);a1=o4J.M8Y(b8,S0);q5[n8]=a0.semiLog?a0.height * (1 - (Math.log(Math.max(Q1,0)) / Math.LN10 - a0.logLow) / a0.logShadow):(a0.high - Q1) * a0.multiplier;q5[J_]=a0.semiLog?a0.height * (1 - (Math.log(Math.max(n5,0)) / Math.LN10 - a0.logLow) / a0.logShadow):(a0.high - n5) * a0.multiplier;if(Math.abs(q5[J_] - q5[n8]) < 1){q5[J_]=q5[n8];}q5[n8]=Math.floor(q5[n8]);q5[J_]=Math.floor(q5[J_]);if(a0.flipped){q5[n8]=a0.bottom - q5[n8];q5[J_]=a0.bottom - q5[J_];}else {q5[n8]+=a0.top;q5[J_]+=a0.top;}F6[p$]=q5[J_];if(b8 < K9){if(b8 + a1 < K9){q5[c5]=b8;q5[q4]=b8;continue;}o4J.R_O(27);a1-=o4J.P_X(1,K9,b8);o4J.R_O(8);b8=o4J.P_X(1,K9);}if(b8 + a1 > p8){o4J.U1h(7);a1=o4J.M8Y(p8,1,b8);}q5[c5]=b8;o4J.U1h(0);q5[q4]=o4J.P_X(a1,b8);}Y5=!F0.highlight && 0.5;l$=Math.floor(W0) + Y5;Z7=q5[n8] + Y5;L9=q5[J_] + Y5;D9=q5[c5] + Y5;G0=q5[q4] + Y5;if(D9 < p8 && G0 > K9 && X0.High != X0.Low){o4J.U1h(8);m4.moveTo(l$,o4J.P_X(z3,D9));o4J.R_O(0);m4.lineTo(l$,o4J.M8Y(z3,G0));}o4J.R_O(8);h4=Math.floor(o4J.M8Y(W0,G8));if(F0.type != \"hlc\" && Z7 > K9 && Z7 < p8){m4.moveTo(l$,Z7);o4J.U1h(23);m4.lineTo(o4J.M8Y(j3,h4,l$),Z7);}if(L9 > K9 && L9 < p8){m4.moveTo(l$,L9);o4J.R_O(14);m4.lineTo(o4J.M8Y(h4,j3,l$),L9);}m4.stroke();}m4.lineWidth=1;I7.pixelCacheExpired=!!\"\";m0={colors:[],cache:F6};for(var o5 in l4){if(!k$.equals(o5,this.containerColor)){m0.colors.push(o5);}}return m0;};k$.ChartEngine.prototype.drawWaveChart=function(O9,d9){var I7M=q1l46;var K4i,Y4l,C1,z4,W9,f5,C5,u$,V5,E9,r4,p9,s2,O5,a9,d5,r9,g1,q9,R6,v9,Q_,r0,l7,E7,x5,u7,h1,m7,z$;K4i=\"st\";K4i+=\"x_li\";K4i+=\"ne\";K4i+=\"_chart\";Y4l=\"stre\";I7M.P3W();Y4l+=\"tch\";C1=O9.chart;z4=d9.stretchGaps;if(!z4 && z4 !== ![]){z4=this.cleanupGaps === Y4l;}W9=C1.dataSegment;f5=new Array(W9.length);C5=C1.context;if(!d9){d9={};}u$=d9.yAxis || O9.yAxis;this.startClip(O9.name);C5.beginPath();V5=![];E9=!!0;r4=O9.yAxis.top;p9=O9.yAxis.bottom;s2=this.layout.candleWidth;O5=O9.left + Math.floor(-0.5 * this.layout.candleWidth + this.micropixels);a9=this;d5=-1;for(var V2=0;V2 <= W9.length;V2++){I7M.U1h(28);var K_5=I7M.P_X(104,7,3,12);I7M.R_O(29);var P6k=I7M.P_X(83,17,5);O5+=this.layout.candleWidth * (V2 - d5 - K_5) / P6k;d5=V2;I7M.U1h(9);O5+=I7M.M8Y(s2,2);s2=this.layout.candleWidth;I7M.R_O(9);O5+=I7M.P_X(s2,2);r9=W9[V2];if(!r9)continue;if(r9.projection)break;if(r9.candleWidth){I7M.U1h(30);var F15=I7M.P_X(18,0,7,9);O5+=(r9.candleWidth - s2) / F15;s2=r9.candleWidth;}if(C1.transformFunc && u$ == C1.panel.yAxis && r9.transform){r9=r9.transform;}if(r9 && d9.field){r9=r9[d9.field];}if(!r9 && r9 !== 0)continue;g1=r9.Close;q9=r9.Open === undefined?g1:r9.Open;R6=r9.High === undefined?Math.max(g1,q9):r9.High;v9=r9.Low === undefined?Math.min(g1,q9):r9.Low;if(!g1 && g1 !== 0)continue;if(z4){while(W9[V2 + 1]){Q_=W9[V2 + +\"1\"].Close;if(Q_ || Q_ === 0 || W9[V2 + 1].futureTick)break;I7M.U1h(9);O5+=I7M.P_X(s2,2);V2++;}}I7M.U1h(7);r0=I7M.M8Y(V2,1,d5);I7M.U1h(31);l7=I7M.M8Y(r0,8,3,O5,s2);E7=L$(q9);if(E7 < r4){E7=r4;if(E9){C5.moveTo(l7,E7);continue;}E9=!!\"1\";}else if(E7 > p9){E7=p9;if(E9){C5.moveTo(l7,E7);continue;}E9=!!1;}else {E9=![];}if(!V5){V5=!0;I7M.U1h(12);var h94=I7M.P_X(0,7,7);x5=C1.dataSet.length - C1.scroll - h94;if(x5 < (\"0\" ^ 0)){C5.moveTo(l7,E7);}else if(x5 >= 0){u7=C1.dataSet[x5];if(u7.transform){u7=u7.transform;}h1=u7.Close;h1=L$(h1);h1=Math.min(Math.max(h1,r4),p9);C5.moveTo(O9.left + (V2 - 1) * this.layout.candleWidth + this.micropixels,h1);C5.lineTo(l7,E7);}C5.moveTo(l7,E7);}else {C5.lineTo(l7,E7);}I7M.R_O(15);l7+=I7M.P_X(r0,s2,4);if(q9 < g1){E7=L$(v9);if(E7 < r4){E7=r4;}if(E7 > p9){E7=p9;}C5.lineTo(l7,E7);I7M.U1h(15);l7+=I7M.M8Y(r0,s2,4);E7=L$(R6);if(E7 < r4){E7=r4;}if(E7 > p9){E7=p9;}C5.lineTo(l7,E7);}else {E7=L$(R6);if(E7 < r4){E7=r4;}if(E7 > p9){E7=p9;}C5.lineTo(l7,E7);I7M.U1h(15);l7+=I7M.P_X(r0,s2,4);E7=L$(v9);if(E7 < r4){E7=r4;}if(E7 > p9){E7=p9;}C5.lineTo(l7,E7);}I7M.R_O(15);l7+=I7M.P_X(r0,s2,4);E7=L$(g1);f5[V2]=E7;if(E7 < r4){E7=r4;}if(E7 > p9){E7=p9;}C5.lineTo(l7,E7);}m7=this.canvasStyle(\"stx_line_chart\");if(m7.width && parseInt(m7.width,\"10\" - 0) <= +\"25\"){C5.lineWidth=Math.max(1,k$.stripPX(m7.width));}else {C5.lineWidth=1;}if(d9.highlight){C5.lineWidth*=2;}this.canvasColor(K4i);if(d9.color){C5.strokeStyle=d9.color;}if(!d9.highlight && this.highlightedDraggable){C5.globalAlpha*=0.3;}C5.stroke();C5.closePath();z$={colors:[C5.strokeStyle],cache:f5};this.endClip();C5.lineWidth=1;function L$(d8){I7M.C8A();return a9.pixelFromTransformedValue(d8,O9,u$);}return z$;};k$.ChartEngine.prototype.drawHistogram=function(Y_,S9){var e3e=q1l46;var G1K,k6,O6,h8,i9,Z5,x$,X3,g5,K4,t_,T5,N3,R$,N6,a$,q$,P5d,T0,I1,D2,r$,a5,H3,b$,A1,Y7,f9,Z1,C2B,x6,C4,F8,E1,F1,q5A;G1K=\"stretc\";G1K+=\"h\";if(!S9 || !S9.length){return;}k6=Y_.panel;if(!k6){k6=\"chart\";}O6=this.panels[k6];if(!O6){return;}h8=Y_.stretchGaps;if(!h8 && h8 !== ![]){h8=this.cleanupGaps === G1K;}i9=Y_.yAxis?Y_.yAxis:O6.yAxis;Z5=Y_.type;x$=this.chart.dataSegment;function K8(M$,s8,D7,y6,w0,N5,n_,b0,P_){var X8,L1,O0,C48,p5F,Z_,u4,L5,i4,c4,t3,H9,P$,T_,L7,v_,m1,j8,K3,D1;if(!y6){y6=1;}H3.globalAlpha=y6;H3.beginPath();e3e.R_O(0);X8=e3e.M8Y(0.5,I1);L1=Math.floor(f9.pixelFromBar(0,O6.chart) - f9.layout.candleWidth / 2);O0=L1;for(var D5=0;D5 < x$.length;D5++){C48=\"c\";C48+=\"lustered\";p5F=\"clus\";p5F+=\"tered\";Z_=0;u4=Y7[D5] || I1;if(D5 === \"0\" - 0){X8=u4;}L5=x$[D5];i4=k$.Studies.getQuoteFieldValue(L5,M$,s8);if(i4 === null){X8=u4;O0+=f9.layout.candleWidth;continue;}if(h8 && Z5 !== \"clustered\"){while(x$[D5 + 1]){e3e.R_O(0);c4=x$[e3e.P_X(1,D5)][M$];if(c4 || c4 === (\"0\" | 0) || x$[D5 + 1].futureTick)break;if(c4 && (c4.Close || c4.Close === 0))break;Z_++;D5++;}u4=Y7[D5] || I1;}e3e.R_O(32);t3=e3e.M8Y(N3,i4,N6);H9=f9.layout.candleWidth;if(L5.candleWidth || L5.lineTravel != null){H9=L5.candleWidth || L5.lineTravel;if(L5.lineTravel != null && D5 === x$.length - 1){H9=x$[D5 - (\"2\" - 0)].lineTravel;}if(D5 === 0){L1=O0=Math.floor(f9.pixelFromBar(0,O6.chart) - H9 / 2);}}if(isNaN(t3)){X8=u4;O0+=H9;continue;}P$=Math.floor(u4 - t3) + 0.5;if(P$ > u4 && !D2){P$=u4;}T_=(typeof L5[M$] == \"object\"?L5[M$]:L5).Close;L7=(typeof L5[M$] == \"object\"?L5[M$]:L5).iqPrevClose;if(P_ && P_.indexOf(D5) == -1 || !P_ && (N5 && T_ < L7 || !N5 && T_ >= L7)){X8=P$;O0+=H9 + f9.layout.candleWidth * Z_;continue;}v_=H9 / f9.layout.candleWidth;e3e.U1h(33);m1=Math.round(e3e.M8Y(n_,v_,b$,O0,b0));e3e.R_O(0);j8=e3e.M8Y(w0?0:a5,m1);K3=m1 + Math.round(b0 * v_) - (w0?+\"0\":a5);if(K3 - j8 < 2){e3e.R_O(0);K3=e3e.P_X(1,j8);}D1=w0?+\"0\":0.5;if(j8 % +\"1\" == D1){j8+=+\"0.5\";}if(K3 % 1 == D1){K3+=0.5;}e3e.U1h(2);K3+=e3e.P_X(b0,Z_);H3.moveTo(K3,u4);if(I1 != u4 && w0 && !b$ && Y7[D5 + 1]){H3.moveTo(K3,Math.max(P$,Math.min(u4,Y7[D5 + (\"1\" | 0)])));}H3.lineTo(K3,P$);H3.lineTo(j8,P$);if(w0 && n_){if(A1[D5] > P$ || D5 === 0){H3.lineTo(j8,Math.min(u4,A1[D5]));}}else if(w0 && !b$ && Z5 == p5F){if(D5 > 0 && A1[D5 - (\"1\" >> 0)] && A1[D5 - 1] > P$){H3.lineTo(j8,Math.min(u4,A1[D5 - 1]));}}else if(w0 && !b$){if(X8 > P$ || D5 === (\"0\" ^ 0)){H3.lineTo(j8,Math.min(u4,X8));}}else {H3.lineTo(j8,u4);}X8=P$;O0+=H9 + f9.layout.candleWidth * Z_;if(Z5 != C48 || w0){A1[D5]=P$;}for(var E3=0;E3 < Z_;E3++){e3e.U1h(8);A1[e3e.M8Y(E3,D5)]=A1[D5];}}e3e.P3W();if(w0){H3.strokeStyle=!D7 || D7 == \"auto\"?f9.defaultColor:D7;H3.stroke();}else {H3.fillStyle=!D7 || D7 == \"auto\"?f9.defaultColor:D7;H3.fill();}H3.closePath();}X3=!\"1\";g5=1;K4=+\"1\";for(T5=0;T5 < S9.length;T5++){X3|=S9[T5].border_color_up && !k$.isTransparent(S9[T5].border_color_up);X3|=S9[T5].border_color_down && !k$.isTransparent(S9[T5].border_color_down);g5=S9[T5].opacity_up;K4=S9[T5].opacity_down;if(!Y_.highlight && this.highlightedDraggable){g5*=+\"0.3\";K4*=0.3;}}if(Y_.borders === !\"1\"){X3=!!\"\";}if(!Y_.name){Y_.name=\"Data\";}N3=i9.multiplier;if(!Y_.heightPercentage){Y_.heightPercentage=+\"0.7\";}if(!Y_.widthFactor){Y_.widthFactor=0.8;}R$=0;N6=0;for(var T7=0;T7 < this.chart.maxTicks;T7++){a$=x$[T7];if(!a$)continue;q$=0;for(T5=0;T5 < S9.length;T5++){P5d=\"C\";P5d+=\"l\";P5d+=\"os\";P5d+=\"e\";t_=S9[T5].subField || this.chart.defaultPlotField || P5d;T0=k$.Studies.getQuoteFieldValue(a$,S9[T5].field,t_);if(!T0 && this.cleanupGaps === \"stretch\"){T0=this.valueFromInterpolation(T7,S9[T5].field,t_,O6,i9,!!({}));}if(T0 || T0 === 0){if(typeof T0 == \"object\" && T0[t_]){T0=T0[t_];}if(Z5 == \"stacked\"){q$+=T0;}else {q$=T0;}if(q$ > R$){R$=q$;}if(q$ < N6){N6=q$;}}}}if(R$ === 0 && N6 === 0){this.displayErrorAsWatermark(k6,this.translateIf(Y_.name + \" Not Available\"));return;}D2=![];if(!Y_.bindToYAxis){if(i9.flipped){I1=Math.floor(i9.top) - +\"0.5\";r$=Math.floor(i9.bottom) - (\"0.5\" - 0);}else {I1=Math.floor(i9.bottom) + 0.5;r$=Math.floor(i9.top) + 0.5;}N3=Math.abs(I1 - r$) * Y_.heightPercentage / (R$ - N6);}else {if(i9.baseline){N6=i9.baseline.value;D2=!\"\";}I1=Math.floor(this.pixelFromPrice(N6,O6,i9)) + (i9.flipped?-0.5:0.5);}this.startClip(k6);a5=this.layout.candleWidth <= 1 || !X3?0:0.5;H3=this.chart.context;e3e.C8A();if(i9.flipped){H3.translate(0,2 * i9.top);H3.scale(1,-1);}b$=Math.max(0,(1 - Y_.widthFactor) * this.layout.candleWidth / 2);A1=new Array(x$.length);Y7=[];f9=this;e3e.R_O(34);Z1=e3e.M8Y(\"1\",0);for(T5=+\"0\";T5 < S9.length;T5++){C2B=\"stac\";C2B+=\"ked\";x6=S9[T5];Z1=this.layout.candleWidth * Y_.widthFactor;if(b$){if(this.layout.candleWidth - Z1 <= 2){X3=!({});}}C4=0;if(Z5 == \"clustered\"){C4=T5;Z1/=S9.length;}t_=x6.subField || this.chart.defaultPlotField || \"Close\";if(typeof x6.color_function == \"function\"){E1={};for(var R3=0;R3 < x$.length;R3++){if(x$[R3]){q5A=\"s\";q5A+=\"tr\";q5A+=\"in\";q5A+=\"g\";F8=x6.color_function(x$[R3]);if(typeof F8 == q5A){F8={fill_color:F8,border_color:F8};}if(!F8.hasOwnProperty(\"border_opacity\")){F8.border_opacity=F8.opacity;}e3e.R_O(35);var v1i=e3e.M8Y(15,20,682,12,7932);e3e.R_O(36);var P_F=e3e.P_X(7,2481,2905,6);e3e.U1h(28);var j71=e3e.P_X(57861,7,6,9637);e3e.R_O(36);var a0C=e3e.P_X(831,5808,5817,5);e3e.R_O(0);var G0f=e3e.P_X(3690,335);e3e.R_O(8);var E18=e3e.M8Y(65920,70040);e3e.U1h(8);var a02=e3e.M8Y(19080,25440);F1=F8.fill_color + (v1i <= (P_F,733.96)?(109.85,j71) > (a0C,G0f)?\",\":E18:a02) + F8.border_color;if((F1 in E1)){E1[F1].positions.push(R3);}else {F8.positions=[R3];E1[F1]=F8;}}}for(F1 in E1){F8=E1[F1];K8(x6.field,t_,F8.fill_color,F8.opacity,null,null,C4,Z1,F8.positions);K8(x6.field,t_,F8.border_color,F8.border_opacity,!![],null,C4,Z1,F8.positions);}}else {K8(x6.field,t_,x6.fill_color_up,g5,null,!!({}),C4,Z1);K8(x6.field,t_,x6.fill_color_down,K4,null,null,C4,Z1);if(this.layout.candleWidth >= 2 && X3){K8(x6.field,t_,x6.border_color_up,g5,!!1,!!({}),C4,Z1);K8(x6.field,t_,x6.border_color_down,K4,!\"\",null,C4,Z1);}}if(Z5 == C2B){Y7=k$.shallowClone(A1);}}H3.globalAlpha=1;this.endClip();};k$.ChartEngine.prototype.scatter=function(k3,M5){var e6j=q1l46;var P3,d7,Q4,i_,S7,e3,f8,Z8,b9,H1,y9,h5,X2,i2,h7,K0,t4,t9;P3=k3.chart;d7=P3.dataSegment;Q4=new Array(d7.length);i_=this.chart.context;e6j.C8A();this.canvasColor(\"stx_scatter_chart\");if(!M5){M5={};}S7=M5.field || P3.defaultPlotField;e3=M5.yAxis || k3.yAxis;f8=M5.subField || P3.defaultPlotField || \"Close\";this.startClip(k3.name);i_.beginPath();i_.lineWidth=M5.lineWidth || 4;if(M5.highlight){e6j.R_O(2);i_.lineWidth*=e6j.P_X(\"2\",1);}if(!M5.highlight && this.highlightedDraggable){i_.globalAlpha*=0.3;}if(M5.color){i_.strokeStyle=M5.color;}Z8=e3.top;b9=e3.bottom;H1=this.layout.candleWidth;e6j.U1h(0);var p34=e6j.P_X(1,0);y9=k3.left - 0.5 * H1 + this.micropixels - p34;var {tickFilter:W1}=M5;for(var j0=\"0\" - 0;j0 <= d7.length;j0++){e6j.R_O(9);y9+=e6j.M8Y(H1,2);H1=this.layout.candleWidth;e6j.U1h(9);y9+=e6j.M8Y(H1,2);h5=d7[j0];if(!h5)continue;if(h5.candleWidth){e6j.U1h(37);var C5m=e6j.M8Y(5,10,40,8);y9+=(h5.candleWidth - H1) / C5m;H1=h5.candleWidth;}if(W1){if(W1.length === +\"0\")break;if(!W1.has(h5.tick))continue;W1.delete(h5.tick);}if(!h5.projection){if(P3.transformFunc && e3 == P3.panel.yAxis && h5.transform){h5=h5.transform;}X2=h5[S7];if(X2 && X2[f8] !== undefined){X2=X2[f8];}if(!(X2 instanceof Array)){X2=[X2];}if((\"Scatter\" in h5)){X2=h5.Scatter;}for(var G6=0;G6 < X2.length;G6++){if(!X2[G6] && X2[G6] !== 0)continue;i2=X2[G6];h7=0;if(X2[G6] instanceof Array){i2=X2[G6][0];h7=X2[G6][2];}K0=e3.semiLog?e3.height * (+\"1\" - (Math.log(Math.max(i2,0)) / Math.LN10 - e3.logLow) / e3.logShadow):(e3.high - i2) * e3.multiplier;if(e3.flipped){e6j.R_O(8);K0=e6j.M8Y(K0,b9);}else {K0+=Z8;}if(K0 < Z8)continue;if(K0 > b9)continue;t4=2;if(h7){e6j.R_O(2);t4=e6j.P_X(H1,h7);}e6j.U1h(8);i_.moveTo(e6j.P_X(t4,y9),K0);e6j.R_O(0);i_.lineTo(e6j.P_X(t4,y9),K0);Q4[j0]=K0;}}}i_.stroke();i_.closePath();t9={colors:[i_.strokeStyle],cache:Q4};this.endClip();i_.lineWidth=1;return t9;};};P2=o9=>{var i_g=q1l46;var a$w,e6M,J2K,C06,W44,k9R,q2Y,a7L,c7M,U4T,e3a,t6T,E7O,A07,w36,f4h,O4V,z5I,D49,o$p,Z7j,U5S,C6,w1;a$w=\"fillCo\";a$w+=\"lor\";e6M=\"l\";e6M+=\"i\";e6M+=\"neWidth\";J2K=\"lin\";J2K+=\"e\";J2K+=\"Wid\";J2K+=\"th\";C06=\"a\";C06+=\"xis\";C06+=\"Labe\";C06+=\"l\";W44=\"so\";W44+=\"lid\";k9R=\"s\";k9R+=\"oli\";k9R+=\"d\";q2Y=\"a\";q2Y+=\"u\";q2Y+=\"t\";q2Y+=\"o\";a7L=\"s\";a7L+=\"ol\";a7L+=\"i\";a7L+=\"d\";c7M=\"a\";c7M+=\"u\";c7M+=\"t\";c7M+=\"o\";U4T=\"so\";U4T+=\"l\";U4T+=\"i\";U4T+=\"d\";e3a=\"au\";e3a+=\"to\";t6T=\"sol\";t6T+=\"i\";t6T+=\"d\";E7O=\"au\";E7O+=\"to\";A07=\"s\";A07+=\"o\";A07+=\"li\";A07+=\"d\";w36=\"a\";w36+=\"u\";w36+=\"t\";w36+=\"o\";f4h=\"sol\";f4h+=\"id\";O4V=\"s\";O4V+=\"o\";O4V+=\"l\";i_g.C8A();O4V+=\"id\";z5I=\"a\";z5I+=\"u\";z5I+=\"t\";z5I+=\"o\";D49=\"a\";D49+=\"ut\";D49+=\"o\";o$p=\"so\";o$p+=\"lid\";Z7j=\"unde\";Z7j+=\"f\";Z7j+=\"ined\";U5S=\"undefin\";U5S+=\"ed\";C6=typeof _CIQ !== U5S?_CIQ:o9.CIQ;w1=typeof _timezoneJS !== Z7j?_timezoneJS:o9.timezoneJS;C6.ChartEngine.drawingTools={};C6.ChartEngine.currentVectorParameters={vectorType:null,pattern:o$p,lineWidth:1,fillColor:\"#7DA6F5\",currentColor:\"auto\",axisLabel:!![],showCallout:!1,alwaysMagnetize:!({}),spanPanels:!\"1\",fibonacci:{trend:{color:D49,parameters:{pattern:\"solid\",opacity:0.25,lineWidth:1}},fibs:[{level:-0.786,color:\"auto\",parameters:{pattern:\"solid\",opacity:0.25,lineWidth:1}},{level:-(\"0.618\" - 0),color:z5I,parameters:{pattern:O4V,opacity:0.25,lineWidth:\"1\" | 1},display:!!\"1\"},{level:-0.5,color:\"auto\",parameters:{pattern:f4h,opacity:0.25,lineWidth:1}},{level:-0.382,color:\"auto\",parameters:{pattern:\"solid\",opacity:0.25,lineWidth:\"1\" >> 32},display:!\"\"},{level:-0.236,color:w36,parameters:{pattern:\"solid\",opacity:0.25,lineWidth:1}},{level:\"0\" | 0,color:\"auto\",parameters:{pattern:\"solid\",lineWidth:+\"1\"},display:!!1},{level:0.236,color:\"auto\",parameters:{pattern:\"solid\",opacity:0.25,lineWidth:1}},{level:+\"0.382\",color:\"auto\",parameters:{pattern:A07,opacity:0.25,lineWidth:1},display:!![]},{level:+\"0.5\",color:\"auto\",parameters:{pattern:\"solid\",opacity:0.25,lineWidth:1},display:!![]},{level:0.618,color:\"auto\",parameters:{pattern:\"solid\",opacity:\"0.25\" * 1,lineWidth:1},display:!![]},{level:\"0.786\" * 1,color:E7O,parameters:{pattern:t6T,opacity:0.25,lineWidth:+\"1\"}},{level:1,color:\"auto\",parameters:{pattern:\"solid\",lineWidth:1},display:!0},{level:+\"1.272\",color:\"auto\",parameters:{pattern:\"solid\",opacity:\"0.25\" - 0,lineWidth:1}},{level:1.382,color:\"auto\",parameters:{pattern:\"solid\",opacity:0.25,lineWidth:1},display:!!\"1\"},{level:+\"1.618\",color:e3a,parameters:{pattern:U4T,opacity:0.25,lineWidth:1},display:!!1},{level:2.618,color:c7M,parameters:{pattern:a7L,opacity:0.25,lineWidth:1}},{level:4.236,color:q2Y,parameters:{pattern:k9R,opacity:0.25,lineWidth:1}}],extendLeft:![],printLevels:!0,printValues:!1,timezone:{color:\"auto\",parameters:{pattern:W44,opacity:0.25,lineWidth:1}}},volumeProfile:{priceBuckets:30},annotation:{font:{style:null,size:null,weight:null,family:null}},measurementline:{calloutOnHover:![],displayGroups:{bars:!!({}),delta:!!({}),annpercent:!1,totreturn:!!0,volume:!({}),studies:!({})}}};C6.ChartEngine.registerDrawingTool=function(u6,P4){C6.ChartEngine.drawingTools[u6]=P4;};C6.ChartEngine.completeDrawing=function(l5){var T9;if(!l5 || !l5.activeDrawing){return;}T9=l5.activeDrawing;if(!l5.keepDrawingToolSelected){if(l5.drawingContainer && l5.drawingContainer.tool){l5.drawingContainer.tool({node:null},\"notool\");}else {l5.changeVectorType(\"\");}}l5.dispatch(\"drawingComplete\",{stx:l5,drawing:T9});};C6.ChartEngine.prototype.keepDrawingToolSelected=!\"1\";C6.ChartEngine.prototype.setDrawingContainer=function(H0){this.drawingContainer=H0;};C6.ChartEngine.prototype.exportDrawings=function(){var G$;i_g.C8A();G$=[];for(var s1=+\"0\";s1 < this.drawingObjects.length;s1++){G$.push(this.drawingObjects[s1].serialize());}return G$;};C6.ChartEngine.prototype.abortDrawings=function(H_){var n0;i_g.P3W();if(H_ !== ![]){H_=!!({});}for(var j9=this.drawingObjects.length - +\"1\";j9 >= 0;j9--){n0=this.drawingObjects[j9];n0.abort(!\"\");if(H_ || !n0.permanent){this.drawingObjects.splice(j9,1);}}};C6.ChartEngine.prototype.importDrawings=function(h_){var H$,f_,n$;if(!C6.Drawing){return;}for(var f4=0;f4 < h_.length;f4++){H$=h_[f4];if(H$.name == \"fibonacci\"){H$.name=\"retracement\";}f_=C6.ChartEngine.drawingTools[H$.name];if(!f_){if(C6.Drawing[H$.name]){f_=C6.Drawing[H$.name];C6.ChartEngine.registerDrawingTool(H$.name,f_);}}if(f_){n$=new f_();n$.reconstruct(this,H$);this.drawingObjects.push(n$);}}};C6.ChartEngine.prototype.clearDrawings=function(N_,L4){var U6,I2;if(L4 !== !1){L4=!!({});}U6=this.exportDrawings();this.abortDrawings(L4);if(N_){this.undoStamps=[];}else {this.undoStamp(U6,this.exportDrawings());}this.changeOccurred(\"vector\");this.cancelTouchSingleClick=!![];C6.clearCanvas(this.chart.tempCanvas,this);this.draw();I2=this.controls.mSticky;if(I2){I2.style.display=\"none\";I2.querySelector(\".mStickyInterior\").innerHTML=\"\";}};C6.ChartEngine.prototype.createDrawing=function(Q3,z6){var M9,O1;if(!C6.Drawing){return;}M9=new C6.Drawing[Q3]();M9.reconstruct(this,z6);O1=new C6.Drawing[Q3]();O1.stx=this;O1.copyConfig();for(var k5 in O1){M9[k5]=M9[k5] || O1[k5];}this.drawingObjects.push(M9);this.draw();return M9;};C6.ChartEngine.prototype.removeDrawing=function(P7){var t4M;for(var I6=0;I6 < this.drawingObjects.length;I6++){if(this.drawingObjects[I6] == P7){t4M=\"vec\";t4M+=\"t\";t4M+=\"o\";t4M+=\"r\";this.drawingObjects.splice(I6,1);this.changeOccurred(t4M);this.draw();return;}}};C6.ChartEngine.prototype.undo=function(){var i7H,t8G,n6W;i7H=\"u\";i7H+=\"n\";i7H+=\"d\";i7H+=\"o\";t8G=\"u\";t8G+=\"n\";t8G+=\"do\";if(this.runPrepend(t8G,arguments)){return;}if(this.activeDrawing){n6W=\"st\";n6W+=\"x_\";n6W+=\"crosshair_drawing\";this.editingAnnotation=!1;this.activeDrawing.abort();this.activeDrawing.hidden=!!0;this.drawingSnapshot=null;this.activateDrawing(null);C6.clearCanvas(this.chart.tempCanvas,this);this.draw();this.controls.crossX.classList.replace(n6W,\"stx_crosshair\");this.controls.crossY.classList.replace(\"stx_crosshair_drawing\",\"stx_crosshair\");C6.ChartEngine.drawingLine=!!\"\";this.cancelTouchSingleClick=!!({});}this.runAppend(i7H,arguments);};C6.ChartEngine.prototype.undoStamp=function(f7,I4){var c5D,z_Z,F9o;this.undoStamps.push(f7);c5D=-1551360412;i_g.P3W();z_Z=1528669697;F9o=2;for(var l$t=1;i_g.I9N(l$t.toString(),l$t.toString().length,78805) !== c5D;l$t++){this.dispatch(\"undoStamp\",{before:f7,after:I4,stx:this});F9o+=+\"2\";}if(i_g.I9N(F9o.toString(),F9o.toString().length,9690) !== z_Z){this.dispatch(\"\",{before:f7,after:I4,stx:this});}};C6.ChartEngine.prototype.undoLast=function(){var R_o;if(this.activeDrawing){this.undo();}else {if(this.undoStamps.length){R_o=\"vec\";R_o+=\"to\";R_o+=\"r\";this.drawingObjects=[];this.importDrawings(this.undoStamps.pop());this.changeOccurred(R_o);this.draw();}}};C6.ChartEngine.prototype.addDrawing=function(M6){var H2;i_g.P3W();H2=this.exportDrawings();this.drawingObjects.push(M6);this.undoStamp(H2,this.exportDrawings());};C6.ChartEngine.prototype.repositionDrawing=function(a2,O7){var u2,A0,C2;if(this.currentPanel.name != a2.panelName && !a2.spanPanels){return;}u2=this.panels[a2.panelName];A0=this.adjustIfNecessary(u2,this.crosshairTick,a2.valueFromPixel(this.backOutY(C6.ChartEngine.crosshairY),u2,this.getYAxisByField(u2,a2.field)));C2=this.chart.tempCanvas;C6.clearCanvas(C2,this);this.startClip(u2.name);if(O7){this.drawingSnapshot=this.exportDrawings();if(a2.spanPanels){a2.originPanelName=a2.panelName;Object.values(this.panels).forEach(n3=>{a2.panelName=n3.name;a2.render(C2.context);});a2.panelName=a2.originPanelName;}else {a2.render(C2.context);}}else {a2.reposition(C2.context,a2.repositioner,this.crosshairTick,A0);if(this.drawingSnapshot){this.undoStamp(C6.shallowClone(this.drawingSnapshot),this.exportDrawings());}this.drawingSnapshot=null;}if(this.editingDrawing){this.editingDrawing.render(C2.context);}this.endClip();if(a2.measure){a2.measure();}};C6.ChartEngine.prototype.activateRepositioning=function(d$){var s4;s4=this.repositioningDrawing=d$;if(d$){this.draw();this.repositionDrawing(d$,!\"\");}this.chart.tempCanvas.style.display=d$?\"block\":\"none\";};C6.ChartEngine.prototype.activateDrawing=function(S1,Y4){var D$T,L7x,p4;function e6(L0){var m_,P_n,h7X,N1H;if(!Y4 || !L0.layout.studies){return;}m_=L0.layout.studies[Y4.name];P_n=-1297385939;h7X=584948072;N1H=2;for(var C2i=1;i_g.I9N(C2i.toString(),C2i.toString().length,27636) !== P_n;C2i++){if(m_ && !m_.overlay){delete L0.overlays[m_.name];}N1H+=2;}if(i_g.G33(N1H.toString(),N1H.toString().length,50713) !== h7X){if(m_ || +m_.overlay){-L0.overlays[m_.name];}}}D$T=\"no\";D$T+=\"ne\";if(!Y4){Y4=this.currentPanel;}this.drawingSnapshot=null;if(!S1){L7x=\"n\";L7x+=\"on\";L7x+=\"e\";this.activeDrawing=null;this.chart.tempCanvas.style.display=L7x;e6(this);return !\"1\";}p4=C6.ChartEngine.drawingTools[S1];if(!p4){if(C6.Drawing[S1]){p4=C6.Drawing[S1];C6.ChartEngine.registerDrawingTool(S1,p4);}}if(p4){this.activeDrawing=new p4();this.activeDrawing.construct(this,Y4);if(!this.charts[Y4.name]){if(this.activeDrawing.chartsOnly){this.activeDrawing=null;e6(this);return !({});}}}this.chart.tempCanvas.style.display=\"block\";if(this.controls.drawOk){this.controls.drawOk.style.display=D$T;}e6(this);return !!({});};C6.ChartEngine.prototype.drawingClick=function(L_,E$,h$){var F_,s7,X6,A_,M1,M4,P$v,m6o,P7U;if(!C6.Drawing){return;}if(!L_){return;}if(this.openDialog){return;}i_g.P3W();if(this.editingDrawing){return;}if(!this.activeDrawing){if(!this.activateDrawing(this.currentVectorParameters.vectorType,L_)){return;}}if(this.activeDrawing){if(this.userPointerDown && !this.activeDrawing.dragToDraw){if(!C6.ChartEngine.drawingLine){this.activateDrawing(null);}return;}else if(!this.activeDrawing.p0){F_=this.highlightedDataSetField;if(this.magnetizedPrice !== null && (L_ !== this.chart.panel || [\"Open\",\"High\",\"Low\",\"Close\"].indexOf(this.magneticHold) < \"0\" - 0)){F_=C6.getObjectChainRoot(this.magneticHold);}if(!F_ && L_ != this.chart.panel){for(var F$ in this.chart.seriesRenderers){s7=this.chart.seriesRenderers[F$];if(s7.params.panel == L_.name){F_=s7.seriesParams[0].field;break;}}for(var P9 in this.layout.studies){X6=this.layout.studies[P9];if(X6.panel == L_.name){F_=Object.keys(X6.outputMap)[0];break;}}}this.activeDrawing.field=F_;}else if(this.activeDrawing.moving){E$=this.crosshairX - this.left;h$=this.crosshairY - this.top;}A_=this.tickFromPixel(E$,L_.chart);M1=this.panels[this.activeDrawing.panelName];if(this.magnetizedPrice || this.magnetizedPrice === \"0\" - 0){M4=this.adjustIfNecessary(M1,A_,this.magnetizedPrice);}else {M4=this.adjustIfNecessary(M1,A_,this.activeDrawing.valueFromPixel(h$,M1,this.getYAxisByField(M1,this.activeDrawing.field)));}if(this.activeDrawing.click(this.chart.tempCanvas.context,A_,M4)){if(this.activeDrawing){P$v=\"vec\";P$v+=\"tor\";C6.ChartEngine.drawingLine=![];C6.clearCanvas(this.chart.tempCanvas,this);this.addDrawing(this.activeDrawing);C6.ChartEngine.completeDrawing(this);this.activateDrawing(null);this.adjustDrawings();this.draw();this.changeOccurred(P$v);this.controls.crossX.classList.replace(\"stx_crosshair_drawing\",\"stx_crosshair\");this.controls.crossY.classList.replace(\"stx_crosshair_drawing\",\"stx_crosshair\");}}else {m6o=\"stx_cr\";m6o+=\"o\";m6o+=\"sshai\";m6o+=\"r_drawing\";P7U=\"stx_cro\";P7U+=\"sshair\";this.changeOccurred(\"drawing\");C6.ChartEngine.drawingLine=!![];this.controls.crossX.classList.replace(P7U,m6o);this.controls.crossY.classList.replace(\"stx_crosshair\",\"stx_crosshair_drawing\");}return !!({});}return !!\"\";};C6.ChartEngine.prototype.rightClickDrawing=function(H8,U5,l3){var Z7A,T17,D53,B11,e5p,p3,T$;if(this.runPrepend(\"rightClickDrawing\",arguments)){return;}Z7A=359039768;T17=1176589936;D53=2;for(var x9a=1;i_g.I9N(x9a.toString(),x9a.toString().length,88291) !== Z7A;x9a++){if(H8.permanent){return;}D53+=2;}if(i_g.G33(D53.toString(),D53.toString().length,26960) !== T17){if(H8.permanent){return;}}if(H8.permanent){return;}if(this.callbackListeners.drawingEdit.length){B11=\"drawi\";B11+=\"ngEdit\";this.dispatch(B11,{stx:this,drawing:H8,forceEdit:U5,forceText:l3});}else {e5p=\"v\";e5p+=\"ect\";e5p+=\"o\";e5p+=\"r\";p3=H8.abort();if(!p3){T$=this.exportDrawings();this.removeDrawing(H8);this.undoStamp(T$,this.exportDrawings());}this.changeOccurred(e5p);}this.runAppend(\"rightClickDrawing\",arguments);};C6.ChartEngine.prototype.magnetize=function(){var e8X,x8W,Z5C,Q8K,w6,W$,n4,Z6,Y6,x4,r6,C3,q2,u8I,S3,r3,V7,X_,C7,q_,C8,z2,f0,g$,Z2,j4;e8X=\"m\";e8X+=\"agnetize\";x8W=\"b\";x8W+=\"l\";x8W+=\"ock\";Z5C=\"Cl\";Z5C+=\"o\";Z5C+=\"s\";Z5C+=\"e\";Q8K=\"Hig\";Q8K+=\"h\";w6=this;this.magnetizedPrice=null;if(!this.preferences.magnet && !this.currentVectorParameters.alwaysMagnetize){return;}if(this.runPrepend(\"magnetize\",arguments)){return;}if(this.repositioningDrawing || this.editingDrawing){return;}W$=this.currentVectorParameters.vectorType;if(!W$ || W$ == \"projection\" || W$ == \"freeform\"){return;}if((W$ == \"annotation\" || W$ == \"callout\") && C6.ChartEngine.drawingLine){return;}n4=this.activeDrawing?this.panels[this.activeDrawing.panelName]:this.currentPanel;Z6=n4.chart;Y6=this.crosshairTick;if(Y6 > Z6.dataSet.length){return;}x4=Z6.dataSet[Y6];if(!x4){return;}C3=this.getRenderedItems();q2=[\"Open\",Q8K,\"Low\",Z5C];if(this.activeDrawing && this.activeDrawing.penDown){if(this.magneticHold){u8I=\"H\";u8I+=\"i\";u8I+=\"g\";u8I+=\"h\";if(q2.indexOf(this.magneticHold) != -1 && C3.indexOf(u8I) != -(\"1\" - 0)){C3=q2;}else {C3=[this.magneticHold];}}else {return;}}else {this.magneticHold=null;}S3=+\"1000000000\";r3=parseFloat(this.preferences.magnet);if(W$ == \"measurementline\"){r3=!1;}V7=function(){var e$,J4;X_=w6.getYAxisByField(n4,C3[z5]) || n4.yAxis;C7=Z6.transformFunc && X_ === Z6.yAxis;if(C7 && x4.transform){x4=x4.transform;}q_=x4[C3[z5]];i_g.C8A();C8=C6.existsInObjectChain(x4,C3[z5]);if(C8){q_=C8.obj[C8.member];}if(q_ || q_ === +\"0\"){z2=w6.pixelFromTransformedValue(q_,n4,X_);if(Math.abs(w6.cy - z2) < S3){S3=Math.abs(w6.cy - z2);if(r3 && r3 <= S3){return 1;}w6.magnetizedPrice=q_;if(C7){e$=Z6.untransformFunc;J4=C6.getObjectChainRoot(C3[z5]);if(e$ && Z6.series[J4]){Z6.untransformFunc=(b1,L2,L8,c8)=>{i_g.C8A();return e$(b1,L2,L8,c8,J4);};}w6.magnetizedPrice=w6.valueFromPixel(z2,n4);Z6.untransformFunc=e$;}r6=z2;w6.magneticHold=C3[z5];}}};for(var z5=0;z5 < C3.length;z5++){if(V7())continue;}f0=this.pixelFromTick(Y6,Z6);g$=r6;C6.clearCanvas(Z6.tempCanvas,this);Z2=Z6.tempCanvas.context;Z2.beginPath();i_g.R_O(8);Z2.lineWidth=i_g.P_X(0,\"1\");i_g.R_O(38);var M7u=i_g.M8Y(20,13,20,183,15);i_g.R_O(39);var L3N=i_g.P_X(2,19,6,55,13);j4=Math.max(this.layout.candleWidth,M7u) / L3N;Z2.arc(f0,g$,Math.min(j4,8),0,2 * Math.PI,![]);Z2.fillStyle=\"#398dff\";Z2.strokeStyle=\"#398dff\";Z2.fill();Z2.stroke();Z2.closePath();Z6.tempCanvas.style.display=x8W;if(this.anyHighlighted){this.container.classList.remove(\"stx-draggable\");}if(this.activeDrawing){this.startClip(n4.name);this.activeDrawing.move(Z2,this.crosshairTick,this.activeDrawing.valueFromPixel(g$,n4,this.getYAxisByField(n4,this.activeDrawing.field)));this.endClip();}this.runAppend(e8X,arguments);};C6.ChartEngine.prototype.changeVectorType=function(J1){var l3V,p2,j6,f6;l3V=\"cq-context-wra\";l3V+=\"ppe\";l3V+=\"r.active\";this.currentVectorParameters.vectorType=J1;this.currentVectorParameters.alwaysMagnetize=!!0;if(C6.Drawing){C6.Drawing.initializeSettings(this,J1);}if(C6.ChartEngine.drawingLine){this.undo();}p2=this.uiContext && this.uiContext.topNode.multiChartContainer?this.uiContext.topNode.closest(l3V):!![];if(!this.container.classList.contains(\"stx-crosshair-cursor-on\") && J1 && p2){var {chart:d4, left:I_, top:A5}=this;i_g.U1h(40);var Q1u=i_g.M8Y(1,5,8,41);j6=d4.width / (\"2\" * Q1u) + I_ + d4.left;f6=d4.height / (\"2\" - 0) + A5 + d4.top;this.mousemoveinner(j6,f6);}this.doDisplayCrosshairs();};C6.ChartEngine.prototype.changeVectorParameter=function(Z3,y5){var O34,e0$,V8r,H5D,R8,O3M,W$G,C4P,B1L;O34=\"f\";O34+=\"o\";O34+=\"n\";O34+=\"t\";e0$=\"un\";e0$+=\"de\";e0$+=\"fined\";V8r=\"l\";V8r+=\"ineW\";V8r+=\"idth\";H5D=\"t\";H5D+=\"ru\";H5D+=\"e\";if(Z3 == \"axisLabel\"){y5=y5.toString() === H5D || Number(y5);}else if(Z3 == V8r){y5=Number(y5);}else if(Z3 == \"fontSize\"){i_g.U1h(41);var K$v=i_g.P_X(20,17,3,67);y5=parseInt(y5,K$v) + \"px\";}R8=this.currentVectorParameters;if(typeof R8[Z3] !== e0$){O3M=-1601318780;W$G=+\"1486085145\";C4P=+\"2\";for(var H9s=+\"1\";i_g.I9N(H9s.toString(),H9s.toString().length,+\"33695\") !== O3M;H9s++){R8[Z3]=y5;C4P+=2;}if(i_g.I9N(C4P.toString(),C4P.toString().length,56108) !== W$G){R8[Z3]=y5;}return !!1;}else if(Z3.substr(0,4) == O34){B1L=\"def\";B1L+=\"ault\";Z3=Z3.substr(4).toLowerCase();if(Z3 == \"family\" && y5.toLowerCase() == B1L){y5=null;}R8=R8.annotation.font;if(typeof R8[Z3] !== \"undefined\"){R8[Z3]=y5;return !\"\";}}return !({});};C6.ChartEngine.prototype.drawVectors=function(){var T1X,j1k,D0,m5,v3,g8,B4,w7,N1;T1X=\"drawV\";T1X+=\"ecto\";T1X+=\"rs\";j1k=\"drawVec\";j1k+=\"tor\";j1k+=\"s\";if(this.vectorsShowing){return;}if(this.runPrepend(j1k,arguments)){return;}this.vectorsShowing=!![];if(!this.chart.hideDrawings && !this.highlightedDraggable){D0={};for(v3=\"0\" - 0;v3 < this.drawingObjects.length;v3++){g8=this.drawingObjects[v3];if(g8.hidden)continue;if(this.repositioningDrawing === g8 && !this.editingDrawing)continue;m5=g8.panelName;if(!this.panels[g8.panelName] || this.panels[g8.panelName].hidden)continue;for(var K2 in this.panels){if(!D0[K2]){D0[K2]=[];}if(g8.spanPanels || K2 == m5){g8.originPanelName=g8.panelName;D0[K2].push(g8);}}}if(this.editingDrawing){B4=this.chart.tempCanvas;C6.clearCanvas(B4,this);B4.style.display=\"block\";}for(m5 in D0){this.startClip(m5);w7=D0[m5];for(v3=\"0\" >> 32;v3 < w7.length;v3++){N1=w7[v3] === this.editingDrawing?this.chart.tempCanvas.context:this.chart.context;if(w7[v3].spanPanels){w7[v3].panelName=m5;w7[v3].render(N1);w7[v3].panelName=w7[v3].originPanelName;}else {w7[v3].render(N1);}}this.endClip();}}this.runAppend(T1X,arguments);};C6.ChartEngine.prototype.adjustDrawings=function(){var x3;for(var s9=0;s9 < this.drawingObjects.length;s9++){x3=this.drawingObjects[s9];if(this.panels[x3.panelName]){x3.adjust();}}};C6.Drawing=C6.Drawing || (function(){this.chartsOnly=![];this.penDown=!!0;});C6.Drawing.getDrawingParameters=function(v5,f$){var z9,E5,R9,V0;try{z9=new C6.Drawing[f$]();}catch(Z4){}if(!z9){return null;}z9.stx=v5;z9.copyConfig(!0);E5={};R9=z9.configs;for(var l9=0;l9 < R9.length;l9++){E5[R9[l9]]=z9[R9[l9]];}V0=v5.canvasStyle(\"stx_annotation\");i_g.P3W();if(V0 && E5.font){E5.font.size=V0.fontSize;E5.font.family=V0.fontFamily;E5.font.style=V0.fontStyle;E5.font.weight=V0.fontWeight;}return E5;};C6.Drawing.saveConfig=function(J2,c$){var a7,F5;i_g.P3W();if(!c$){return;}a7=J2.preferences;if(!a7.drawings){a7.drawings={};}a7.drawings[c$]={};F5=new C6.Drawing[c$]();F5.stx=J2;C6.Drawing.copyConfig(F5);F5.configs.forEach(function(W3){a7.drawings[c$][W3]=F5[W3];});J2.changeOccurred(\"preferences\");};C6.Drawing.restoreDefaultConfig=function(k8,y_q,L1R){if(L1R){k8.preferences.drawings=null;}else {k8.preferences.drawings[y_q]=null;}i_g.P3W();k8.changeOccurred(\"preferences\");k8.currentVectorParameters=C6.clone(C6.ChartEngine.currentVectorParameters);k8.currentVectorParameters.vectorType=y_q;};C6.Drawing.initializeSettings=function(C_z,D_Q){var p7Z,x5Z;p7Z=C6.Drawing[D_Q];if(p7Z){x5Z=new p7Z();if(x5Z.initializeSettings){x5Z.initializeSettings(C_z);}}};C6.Drawing.updateSource=function(c_j,v0U,N00,N85){var t5c,x0Y,a3n;t5c=\"v\";t5c+=\"ect\";i_g.P3W();t5c+=\"or\";if(!v0U){return;}x0Y=![];for(var C33 in c_j.drawingObjects){a3n=c_j.drawingObjects[C33];if(!a3n.field)continue;if(N00){if(a3n.field == v0U){a3n.field=N00;x0Y=!![];}else if(a3n.field.indexOf(v0U) > -(\"1\" - 0) && a3n.field.indexOf(v0U + ((977.3,777.59) != (9692,2920)?\"-\":(0xef4,!1))) == -1){a3n.field=a3n.field.replace(v0U,N00);x0Y=!!({});}}else {if(a3n.field.split(\"-->\")[0] == v0U || a3n.panelName == v0U){a3n.panelName=N85;x0Y=!!1;}}}if(x0Y){c_j.changeOccurred(t5c);}};C6.Drawing.prototype.copyConfig=function(g4k){i_g.P3W();C6.Drawing.copyConfig(this,g4k);};C6.Drawing.copyConfig=function(K0S,Y_D){i_g.C8A();var t6x,X2J,i8q,r4y,B$T,V14,q3Z;t6x=K0S.stx.currentVectorParameters;X2J=K0S.configs;for(i8q=0;i8q < X2J.length;i8q++){B$T=\"pa\";B$T+=\"rame\";B$T+=\"ter\";B$T+=\"s\";r4y=X2J[i8q];if(r4y == \"color\"){K0S.color=t6x.currentColor;}else if(r4y == B$T){K0S.parameters=C6.clone(t6x.fibonacci);}else if(r4y == \"font\"){K0S.font=C6.clone(t6x.annotation.font);}else {K0S[r4y]=t6x[r4y];}}if(!Y_D){return;}V14=K0S.stx.preferences;if(V14 && V14.drawings){C6.extend(K0S,V14.drawings[t6x.vectorType]);for(i8q=+\"0\";i8q < X2J.length;i8q++){q3Z=\"par\";q3Z+=\"ameters\";r4y=X2J[i8q];if(r4y == \"color\"){t6x.currentColor=K0S.color;}else if(r4y == q3Z){t6x.fibonacci=C6.clone(K0S.parameters);}else if(r4y == \"font\"){t6x.annotation.font=C6.clone(K0S.font);}else {t6x[r4y]=K0S[r4y];}}}};C6.Drawing.prototype.dragToDraw=![];C6.Drawing.prototype.permanent=![];C6.Drawing.prototype.chartsOnly=!!0;C6.Drawing.prototype.abort=function(h4N){};C6.Drawing.prototype.measure=function(){};C6.Drawing.prototype.construct=function(L2j,A2p){i_g.P3W();this.stx=L2j;this.panelName=A2p.name;};C6.Drawing.prototype.isAllowed=function(u50,N1L){return !0;};C6.Drawing.prototype.render=function(X2_){i_g.P3W();console.warn(\"must implement render function!\");};C6.Drawing.prototype.click=function(p3Z,a3h,f2M){var u1o;u1o=\"must imp\";u1o+=\"lement click f\";u1o+=\"unction!\";i_g.C8A();console.warn(u1o);};C6.Drawing.prototype.move=function(Q$E,e0I,w$J){var z09,o95,c5p,N8R;z09=\"must im\";z09+=\"plement move function!\";o95=-834050225;c5p=1015663651;N8R=2;for(var D90=+\"1\";i_g.I9N(D90.toString(),D90.toString().length,96189) !== o95;D90++){console.warn(\"\");N8R+=2;}if(i_g.G33(N8R.toString(),N8R.toString().length,21968) !== c5p){console.warn(\"\");}console.warn(z09);};C6.Drawing.prototype.reposition=function(k32,R2_,w5d,y$5){};C6.Drawing.prototype.intersected=function(N7K,m0c,D5y){var Z2s;Z2s=\"must impleme\";Z2s+=\"nt intersected function!\";console.warn(Z2s);};C6.Drawing.prototype.reconstruct=function(P9w,y_1){i_g.C8A();console.warn(\"must implement reconstruct function!\");};C6.Drawing.prototype.serialize=function(){console.warn(\"must implement serialize function!\");};C6.Drawing.prototype.adjust=function(){console.warn(\"must implement adjust function!\");};C6.Drawing.prototype.highlight=function(l47){var H4O,r57,z8B;if(l47 && !this.highlighted){this.highlighted=l47;}else if(!l47 && this.highlighted){H4O=-1911952615;r57=433155188;z8B=2;for(var w2g=1;i_g.G33(w2g.toString(),w2g.toString().length,+\"96048\") !== H4O;w2g++){this.highlighted=l47;i_g.U1h(42);z8B+=i_g.M8Y(\"2\",64);}if(i_g.I9N(z8B.toString(),z8B.toString().length,52385) !== r57){this.highlighted=l47;}}return this.highlighted;};C6.Drawing.prototype.littleCircleRadius=function(){var a4g;a4g=6;return a4g;};C6.Drawing.prototype.littleCircle=function(Q9S,n4A,A9L,Q_m){var h0D,D4A;if(this.permanent){return;}h0D=this.stx.defaultColor;D4A=C6.chooseForegroundColor(h0D);Q9S.beginPath();i_g.R_O(1);Q9S.lineWidth=i_g.P_X(\"1\",0);Q9S.arc(n4A,A9L,this.littleCircleRadius(),0,2 * Math.PI,!\"1\");if(Q_m){Q9S.fillStyle=h0D;}else {Q9S.fillStyle=D4A;}Q9S.strokeStyle=h0D;Q9S.setLineDash([]);Q9S.fill();Q9S.stroke();Q9S.closePath();};C6.Drawing.prototype.rotator=function(H6M,A6A,w6X,M5Y){var g$C,C$E,E0V,d13,d1I,W8h;if(this.permanent){return;}g$C=this.littleCircleRadius();C$E=this.stx.defaultColor;H6M.beginPath();H6M.lineWidth=2;if(!M5Y){H6M.globalAlpha=0.5;}i_g.R_O(43);E0V=i_g.P_X(4,\"4\",g$C);H6M.arc(A6A,w6X,E0V,0,3 * Math.PI / 2,!({}));i_g.U1h(14);H6M.moveTo(i_g.P_X(2,E0V,A6A),i_g.P_X(\"2\",w6X,i_g.R_O(44)));i_g.U1h(0);H6M.lineTo(i_g.M8Y(E0V,A6A),w6X);i_g.R_O(7);H6M.lineTo(i_g.P_X(A6A,E0V,2),i_g.M8Y(\"2\",w6X,i_g.R_O(44)));i_g.R_O(8);H6M.moveTo(i_g.P_X(2,A6A),i_g.M8Y(E0V,2,w6X,i_g.R_O(23)));i_g.R_O(8);H6M.lineTo(A6A,i_g.P_X(E0V,w6X));i_g.U1h(8);H6M.lineTo(i_g.M8Y(2,A6A),i_g.M8Y(\"2\",E0V,64,w6X,i_g.R_O(45)));H6M.strokeStyle=C$E;i_g.U1h(46);d13=i_g.M8Y(\"1426441145\",32);i_g.P3W();d1I=-2108683986;W8h=2;for(var W55=1;i_g.I9N(W55.toString(),W55.toString().length,43255) !== d13;W55++){H6M.stroke();H6M.closePath();i_g.U1h(34);W8h+=i_g.P_X(\"2\",0);}if(i_g.G33(W8h.toString(),W8h.toString().length,6031) !== d1I){H6M.stroke();H6M.closePath();}i_g.U1h(42);H6M.globalAlpha=i_g.M8Y(\"1\",96);};C6.Drawing.prototype.mover=function(x6D,G8t,p8R,N$n){var m0I,B0D,B0P,G82;if(this.permanent){return;}m0I=this.littleCircleRadius();B0D=this.stx.defaultColor;B0P=5;i_g.R_O(0);G82=i_g.P_X(1,m0I);x6D.save();i_g.P3W();x6D.lineWidth=2;x6D.strokeStyle=B0D;x6D.translate(G8t,p8R);if(!N$n){x6D.globalAlpha=0.5;}for(var i2W=0;i2W < 4;i2W++){x6D.rotate(Math.PI / 2);x6D.beginPath();x6D.moveTo(0,G82);i_g.R_O(0);x6D.lineTo(0,i_g.M8Y(B0P,G82));i_g.R_O(23);x6D.moveTo(-2,i_g.P_X(2,B0P,G82));i_g.U1h(0);x6D.lineTo(0,i_g.P_X(B0P,G82));i_g.U1h(47);x6D.lineTo(2,i_g.P_X(G82,\"2\",0,B0P));x6D.closePath();x6D.stroke();}x6D.globalAlpha=1;x6D.restore();};C6.Drawing.prototype.resizer=function(E8V,T5I,x7j,D5l){var q9J,n9q,Y9Q,H0s;if(this.permanent){return;}q9J=this.littleCircleRadius();n9q=this.stx.defaultColor;i_g.R_O(48);var A5v=i_g.P_X(1,6,1);i_g.U1h(49);var k6R=i_g.M8Y(17,12,3);Y9Q=A5v * Math.sqrt(k6R);i_g.U1h(0);H0s=i_g.M8Y(1,q9J);E8V.save();E8V.lineWidth=2;E8V.strokeStyle=n9q;E8V.translate(T5I,x7j);E8V.rotate(-(T5I * x7j) / Math.abs(T5I * x7j) * Math.PI / 4);if(!D5l){E8V.globalAlpha=0.5;}for(var N7L=0;N7L < 2;N7L++){E8V.rotate(Math.PI);E8V.beginPath();E8V.moveTo(0,H0s);i_g.R_O(0);E8V.lineTo(+\"0\",i_g.M8Y(Y9Q,H0s));i_g.R_O(23);E8V.moveTo(-2,i_g.P_X(2,Y9Q,H0s));i_g.U1h(0);E8V.lineTo(0,i_g.P_X(Y9Q,H0s));i_g.U1h(23);E8V.lineTo(2,i_g.P_X(2,Y9Q,H0s));E8V.closePath();E8V.stroke();}i_g.P3W();E8V.globalAlpha=1;E8V.restore();};C6.Drawing.prototype.pointIntersection=function(G1R,F$m,K1B,m3C){var J6b,A9m;J6b=this.stx;A9m=J6b.panels[this.panelName];i_g.P3W();if(!A9m){return !({});}if(this.field && !m3C){F$m=this.pixelFromValue(A9m,G1R,F$m,J6b.getYAxisByField(A9m,this.field));G1R=J6b.pixelFromTick(G1R,A9m.chart);m3C=!![];}if(m3C){if(G1R >= K1B.cx0 && G1R <= K1B.cx1 && F$m >= K1B.cy0 && F$m <= K1B.cy1){return !![];}}else {if(G1R >= K1B.x0 && G1R <= K1B.x1 && F$m >= Math.min(K1B.y0,K1B.y1) && F$m <= Math.max(K1B.y0,K1B.y1)){return !!1;}}return !!\"\";};C6.Drawing.prototype.setPoint=function(B9e,G9J,w0Y,N4N){var x$5,g54,C7u,H13,Q9t,v6j,e23,J5W;i_g.P3W();var {stx:l18}=this;var {maxTicks:F8o = 100, dataSet:T$L = []}=N4N || l18.chart || ({});x$5=-F8o;i_g.U1h(0);var s51=i_g.M8Y(1,0);g54=T$L.length - s51 + F8o;C7u=null;H13=null;if(typeof G9J == \"number\"){C7u=G9J;}else if(G9J.length >= 8){H13=G9J;}else {C7u=Number(G9J);}if(w0Y || w0Y === 0){i_g.U1h(0);this[i_g.M8Y(B9e,2840 > (+\"6070\",6050)?+\"455.64\":\"v\")]=w0Y;}if(C7u !== null){C7u=Math.max(C7u,x$5);C7u=Math.min(C7u,g54);Q9t=l18.dateFromTick(C7u,N4N,!0);i_g.R_O(0);this[i_g.M8Y(B9e,\"tzo\")]=Q9t.getTimezoneOffset();i_g.R_O(0);this[i_g.P_X(B9e,\"d\")]=C6.yyyymmddhhmmssmmm(Q9t);i_g.U1h(0);this[i_g.M8Y(B9e,315.37 == (74.71,696.39)?(!\"\",2.62e+3):\"p\")]=[C7u,w0Y];}else if(H13 !== null){v6j=C6.strToDateTime(H13);if(!this[\"tzo\" + B9e] && this[\"tzo\" + B9e] !== 0){i_g.R_O(0);this[i_g.M8Y(B9e,\"tzo\")]=v6j.getTimezoneOffset();}i_g.R_O(0);this[i_g.P_X(B9e,(4554,2400) >= 789.03?\"d\":\"B\")]=H13;e23=this[\"tzo\" + B9e] - v6j.getTimezoneOffset();v6j.setMinutes(v6j.getMinutes() + e23);J5W=!({});if(this.name != \"freeform\" && !C6.ChartEngine.isDailyInterval(l18.layout.interval) && !v6j.getHours() && !v6j.getMinutes() && !v6j.getSeconds() && !v6j.getMilliseconds()){J5W=!![];}i_g.U1h(0);this[i_g.P_X(B9e,2245 <= 410?(\"E\",3.47e+3):(369,3356) < 1350?\"m\":\"p\")]=[l18.tickFromDate(C6.yyyymmddhhmmssmmm(v6j),N4N,null,J5W),w0Y];}};C6.Drawing.prototype.getLineColor=function(G8r,x$l){var r2P,X8q,S6j,f4l,m8C,V_E,p1Z,U1w,R$8,t_w,F52,v76,E5O,l4W,V1a,u3S;r2P=\"au\";r2P+=\"to\";if(!G8r){G8r=this.color;}X8q=this.stx;S6j=G8r;if(!x$l && this.highlighted && this.stx.editingDrawing !== this){S6j=X8q.getCanvasColor(\"stx_highlight_vector\");}else if(S6j == r2P){S6j=X8q.defaultColor;if(this.field){for(f4l in X8q.layout.studies){m8C=X8q.layout.studies[f4l];V_E=m8C.outputs[m8C.outputMap[this.field]];if(V_E){S6j=V_E.color || V_E;break;}}for(f4l in X8q.chart.seriesRenderers){U1w=X8q.chart.seriesRenderers[f4l];for(var I7X=0;I7X < U1w.seriesParams.length;I7X++){R$8=\"-\";R$8+=\"-\";R$8+=\">\";t_w=\"-\";t_w+=\"-\";t_w+=\">\";F52=\"Clos\";F52+=\"e\";v76=U1w.seriesParams[I7X];E5O=v76.field;if(!E5O && !U1w.highLowBars){E5O=this.defaultPlotField || F52;}if(v76.symbol && v76.subField){E5O+=t_w + v76.subField;}if(this.field == E5O){S6j=v76.color;break;}if(v76.field && v76.field == this.field.split(R$8)[0]){p1Z=v76.color;}}}l4W=-719624871;V1a=721980455;u3S=2;for(var a85=1;i_g.I9N(a85.toString(),a85.toString().length,64404) !== l4W;a85++){if(p1Z){S6j=p1Z;}u3S+=2;}if(i_g.I9N(u3S.toString(),u3S.toString().length,71137) !== V1a){if(p1Z){S6j=p1Z;}}}}if(S6j == \"auto\"){S6j=X8q.defaultColor;}return S6j;};C6.Drawing.prototype.valueFromPixel=function(E11,E3G,I$4){var q60,U4Y,j41;q60=E3G.chart.untransformFunc;U4Y=this.field;if(q60 && E3G.chart.series[U4Y]){E3G.chart.untransformFunc=(a4s,H4P,A$w,m81)=>{i_g.C8A();return q60(a4s,H4P,A$w,m81,U4Y);};}j41=this.stx.valueFromPixel(E11,E3G,I$4);E3G.chart.untransformFunc=q60;return j41;};C6.Drawing.prototype.pixelFromValue=function(j_T,z86,e1O,Q0_){var Y$2,Y2U,C2k;i_g.P3W();Y$2=j_T.chart.transformFunc;Y2U=this.field;if(Y$2 && j_T.chart.series[Y2U]){j_T.chart.transformFunc=(o3J,r_p,N3h,a$y)=>{return Y$2(o3J,r_p,N3h,a$y,Y2U);};}C2k=this.stx.pixelFromValueAdjusted(j_T,z86,e1O,Q0_);j_T.chart.transformFunc=Y$2;return C2k;};C6.Drawing.prototype.boxToPixels=function(W24,P$p,e2v,q$3){var C8h,L8a,A1Y,D2b;C8h=W24.panels[P$p];L8a=C8h.chart.transformFunc;A1Y=this.field;if(L8a && C8h.chart.series[A1Y]){C8h.chart.transformFunc=(f6L,N_4,I5m,n4_)=>{i_g.C8A();return L8a(f6L,N_4,I5m,n4_,A1Y);};}D2b=C6.convertBoxToPixels(W24,P$p,e2v,q$3);C8h.chart.transformFunc=L8a;return D2b;};C6.Drawing.BaseTwoPoint=function(){i_g.P3W();this.p0=null;this.p1=null;this.color=\"\";};C6.inheritsFrom(C6.Drawing.BaseTwoPoint,C6.Drawing);C6.Drawing.BaseTwoPoint.prototype.configs=[];C6.Drawing.BaseTwoPoint.prototype.lineIntersection=function(J_A,o9M,Q2j,k7a,z17,C$d,t0r){var v4J,Z4p;if(!z17){z17=this.p0;}if(!C$d){C$d=this.p1;}v4J=this.stx;if(!(z17 && C$d)){return ![];}if(Q2j.cx0 === undefined){return ![];}Z4p={x0:z17[\"0\" - 0],x1:C$d[\"0\" - 0],y0:z17[+\"1\"],y1:C$d[1]};if(!t0r){Z4p=this.boxToPixels(v4J,this.panelName,Z4p,v4J.getYAxisByField(v4J.panels[this.panelName],this.field));}return C6.boxIntersects(Q2j.cx0,Q2j.cy0,Q2j.cx1,Q2j.cy1,Z4p.x0,Z4p.y0,Z4p.x1,Z4p.y1,k7a);};C6.Drawing.BaseTwoPoint.prototype.boxIntersection=function(O6z,G_5,y3U){var I0o,I2x;if(!this.p0 || !this.p1){return !!\"\";}var {x0:L5e, x1:l1Y, y0:v7U, y1:z1D, cy0:f9L, cy1:s29}=y3U;if(L5e > Math.max(this.p0[0],this.p1[0]) || l1Y < Math.min(this.p0[0],this.p1[+\"0\"])){return !({});}var {field:m$y, panelName:I2D, stx:V4W}=this;if(m$y){I0o=V4W.panels[I2D];I2x=V4W.getYAxisByField(I0o,m$y);v7U=this.valueFromPixel(f9L,I0o,I2x);z1D=this.valueFromPixel(s29,I0o,I2x);}if(z1D > Math.max(this.p0[1],this.p1[1]) || v7U < Math.min(this.p0[1],this.p1[1])){return !!0;}return !!({});};C6.Drawing.BaseTwoPoint.prototype.accidentalClick=function(u_5,c0X){var M4O,V3B,K65,V6O,p1D,T41,s4B,h7f,t1k,d4I;M4O=this.stx;V3B=M4O.panels[this.panelName];K65=M4O.pixelFromTick(this.p0[0],V3B.chart);V6O=M4O.pixelFromTick(u_5,V3B.chart);p1D=M4O.getYAxisByField(V3B,this.field);T41=this.pixelFromValue(V3B,this.p0[0],this.p0[1],p1D);s4B=this.pixelFromValue(V3B,u_5,c0X,p1D);i_g.C8A();i_g.R_O(8);h7f=Math.abs(i_g.M8Y(K65,V6O));i_g.U1h(8);t1k=Math.abs(i_g.M8Y(T41,s4B));i_g.R_O(50);d4I=Math.sqrt(i_g.M8Y(t1k,t1k,h7f,h7f));if(d4I < 10){this.penDown=!\"1\";M4O.undo();return !!({});}};C6.Drawing.BaseTwoPoint.prototype.click=function(K6E,O5m,c4e){var x7A,g3l;this.copyConfig();x7A=this.stx;g3l=x7A.panels[this.panelName];if(!this.penDown){this.setPoint(0,O5m,c4e,g3l.chart);this.penDown=!!\"1\";return !1;}if(this.accidentalClick(O5m,c4e)){return !\"\";}this.setPoint(1,O5m,c4e,g3l.chart);this.penDown=![];return !!\"1\";};C6.Drawing.BaseTwoPoint.prototype.adjust=function(){var O11;O11=this.stx.panels[this.panelName];if(!O11){return;}this.setPoint(0,this.d0,this.v0,O11.chart);this.setPoint(1,this.d1,this.v1,O11.chart);};C6.Drawing.BaseTwoPoint.prototype.move=function(A39,Y59,a3s){if(!this.penDown){this.moving=!({});return;}this.moving=!!({});this.copyConfig();this.p1=[Y59,a3s];this.render(A39);};C6.Drawing.BaseTwoPoint.prototype.measure=function(){var C$T,v1A,h3U,T4H,c1O,z2z,I_F,r17;C$T=this.stx;if(this.p0 && this.p1){C$T.setMeasure(this.p0[1],this.p1[1],this.p0[0],this.p1[0],!!\"1\",this.name);v1A=C$T.controls.mSticky;i_g.U1h(1);h3U=i_g.P_X(\"1679362377\",1);T4H=1007400478;i_g.R_O(2);c1O=i_g.P_X(\"2\",1);for(var n$w=1;i_g.G33(n$w.toString(),n$w.toString().length,1706) !== h3U;n$w++){z2z=v1A || v1A.querySelector(\"\");c1O+=2;}if(i_g.G33(c1O.toString(),c1O.toString().length,+\"18878\") !== T4H){z2z=v1A && v1A.querySelector(\".mStickyInterior\");}if(z2z){I_F=\"<\";I_F+=\"br\";I_F+=\">\";r17=[];r17.push(C$T.translateIf(C6.capitalize(this.name)));if(this.getYValue){r17.push(C$T.translateIf(this.field || C$T.defaultPlotField || \"Close\"));}r17.push(z2z.innerHTML);z2z.innerHTML=r17.join(I_F);}}};C6.Drawing.BaseTwoPoint.prototype.reposition=function(f_y,N4c,O0B,R1K){var Z6l,q0G,Z8Y;if(!N4c){return;}Z6l=this.stx.panels[this.panelName];q0G=N4c.tick - O0B;i_g.P3W();Z8Y=N4c.value - R1K;if(N4c.action == \"move\"){this.setPoint(0,N4c.p0[\"0\" << 64] - q0G,N4c.p0[1] - Z8Y,Z6l.chart);this.setPoint(1,N4c.p1[0] - q0G,N4c.p1[1] - Z8Y,Z6l.chart);this.render(f_y);}else if(N4c.action == \"drag\"){this[N4c.point]=[O0B,R1K];this.setPoint(0,this.p0[\"0\" | 0],this.p0[1],Z6l.chart);this.setPoint(1,this.p1[0],this.p1[1],Z6l.chart);this.render(f_y);}};C6.Drawing.BaseTwoPoint.prototype.drawDropZone=function(q1X,M_Z,l57,J8P,l$R){var a8e,s6m,k8a,B_J,O9E,D5A,f3c,v8W;a8e=\"#\";i_g.P3W();a8e+=\"008000\";s6m=this.stx.panels[this.panelName];if(!s6m){return;}k8a=this.stx;B_J=s6m.left;O9E=s6m.width;if(J8P || J8P === 0){B_J=k8a.pixelFromTick(J8P,s6m.chart);}if(l$R || l$R === 0){O9E=k8a.pixelFromTick(l$R,s6m.chart);}D5A=k8a.getYAxisByField(s6m,this.field);f3c=this.pixelFromValue(s6m,J8P,M_Z,D5A);v8W=this.pixelFromValue(s6m,l$R,l57,D5A);q1X.fillStyle=a8e;q1X.globalAlpha=0.2;i_g.U1h(8);q1X.fillRect(B_J,f3c,i_g.P_X(B_J,O9E),i_g.M8Y(f3c,v8W));q1X.globalAlpha=1;};C6.Drawing.BaseTwoPoint.prototype.valueOnDrawingAxis=function(q$t,k20){var d52;var {stx:H2R, panelName:j3z, field:E6Q}=this;d52=H2R.panels[j3z];i_g.P3W();return this.valueFromPixel(H2R.pixelFromValueAdjusted(H2R.currentPanel,q$t,k20),d52,H2R.getYAxisByField(d52,E6Q));};C6.Drawing.annotation=function(){var K2u;K2u=\"annotati\";K2u+=\"on\";this.name=K2u;this.arr=[];i_g.R_O(2);this.w=i_g.P_X(\"0\",1);this.h=0;this.padding=5;this.text=\"\";this.ta=null;this.border=!0;this.fontSize=0;this.font={};this.defaultWidth=25;this.whitespace=30;this.fontModifier=3;};C6.inheritsFrom(C6.Drawing.annotation,C6.Drawing.BaseTwoPoint);C6.Drawing.annotation.prototype.getFontString=function(){var D0i,o6M;this.fontDef={style:null,weight:null,size:\"12px\",family:null};D0i=this.stx.canvasStyle(\"stx_annotation\");if(D0i){if(D0i.fontStyle){this.fontDef.style=D0i.fontStyle;}if(D0i.fontWeight){this.fontDef.weight=D0i.fontWeight;}if(D0i.fontSize){this.fontDef.size=D0i.fontSize;}if(D0i.fontFamily){this.fontDef.family=D0i.fontFamily;}}if(this.font.style){this.fontDef.style=this.font.style;}i_g.P3W();if(this.font.weight){this.fontDef.weight=this.font.weight;}if(this.font.size){this.fontDef.size=this.font.size;}if(this.font.family){this.fontDef.family=this.font.family;}this.fontString=\"\";o6M=!!({});for(var h1F in this.fontDef){if(this.fontDef[h1F]){if(!o6M){this.fontString+=\" \";}else {o6M=!!\"\";}this.fontString+=this.fontDef[h1F];}}};C6.Drawing.annotation.prototype.configs=[\"color\",\"font\"];C6.Drawing.annotation.prototype.measure=function(){};C6.Drawing.annotation.prototype.render=function(Y8V){var m$O,O82,C0R,a71,u0b,V$l,g99,q7G,L$R,N3m,Z3Q,W6P,e0t,d__,S9k,V7w,C5c,m8P;if(this.ta){return;}m$O=this.stx;O82=m$O.panels[this.panelName];C0R=m$O.getYAxisByField(O82,this.field);if(!O82 || this.field && !C0R){return;}a71=m$O.pixelFromTick(this.p0[0],O82.chart);u0b=this.pixelFromValue(O82,this.p0[0],this.p0[1],C0R);Y8V.font=this.fontString;Y8V.textBaseline=\"middle\";i_g.P3W();V$l=a71;g99=u0b;q7G=this.w;L$R=this.h;N3m=this.getLineColor();if(this.stem){if(this.stem.d){Z3Q=m$O.pixelFromTick(this.stem.t);S9k=597700611;V7w=-173817404;i_g.R_O(46);C5c=i_g.M8Y(\"2\",64);for(var F38=1;i_g.I9N(F38.toString(),F38.toString().length,66478) !== S9k;F38++){e0t=this.pixelFromValue(O82,this.stem.t,this.stem.v,C0R);i_g.U1h(51);W6P=i_g.P_X(V$l,3,q7G);C5c+=2;}if(i_g.I9N(C5c.toString(),C5c.toString().length,90902) !== V7w){e0t=this.pixelFromValue(O82,this.stem.t,this.stem.v,C0R);i_g.U1h(52);W6P=i_g.P_X(V$l,4,q7G);}e0t=this.pixelFromValue(O82,this.stem.t,this.stem.v,C0R);i_g.U1h(53);W6P=i_g.P_X(q7G,2,V$l);i_g.U1h(54);d__=i_g.P_X(g99,0,\"2\",L$R);}else if(this.stem.x){Z3Q=V$l;e0t=g99;V$l+=this.stem.x;g99+=this.stem.y;i_g.R_O(53);W6P=i_g.P_X(q7G,2,V$l);i_g.R_O(53);d__=i_g.P_X(L$R,2,g99);}Y8V.beginPath();if(this.borderColor){Y8V.strokeStyle=this.borderColor;}else {Y8V.strokeStyle=N3m;}Y8V.moveTo(Z3Q,e0t);Y8V.lineTo(W6P,d__);Y8V.stroke();}m8P=Y8V.lineWidth;if(this.highlighted){m$O.canvasColor(\"stx_annotation_highlight_bg\",Y8V);i_g.R_O(8);Y8V.fillRect(i_g.P_X(m8P,V$l),i_g.M8Y(m8P,g99,L$R,2,i_g.U1h(55)),i_g.M8Y(q7G,2,m8P,i_g.R_O(56)),i_g.P_X(L$R,2,m8P,i_g.U1h(56)));}else {if(this.fillColor){Y8V.fillStyle=this.getLineColor(this.fillColor,!![]);i_g.U1h(57);Y8V.fillRect(V$l,i_g.P_X(2,L$R,g99),q7G,L$R);}else if(this.stem){Y8V.fillStyle=m$O.containerColor;i_g.R_O(57);Y8V.fillRect(V$l,i_g.M8Y(2,L$R,g99),q7G,L$R);}}if(this.borderColor){Y8V.beginPath();Y8V.strokeStyle=this.highlighted?m$O.getCanvasColor(\"stx_highlight_vector\"):this.borderColor;i_g.U1h(8);Y8V.rect(i_g.P_X(m8P,V$l),i_g.M8Y(m8P,g99,\"2\",L$R,i_g.U1h(58)),i_g.P_X(q7G,2,m8P,i_g.U1h(56)),i_g.M8Y(L$R,2,m8P,i_g.U1h(56)));Y8V.stroke();}if(this.highlighted){m$O.canvasColor(\"stx_annotation_highlight\",Y8V);}else {Y8V.fillStyle=N3m;}i_g.U1h(8);var K6v=i_g.M8Y(4,6);g99+=this.padding / K6v;if(!this.ta){for(var y_d=+\"0\";y_d < this.arr.length;y_d++){Y8V.fillText(this.arr[y_d],V$l + this.padding,g99 - L$R / 2 + this.fontSize / 2);i_g.R_O(24);var I6H=i_g.P_X(13,17,6,0,1324);g99+=this.fontSize + I6H;}}Y8V.textBaseline=\"alphabetic\";};C6.Drawing.annotation.prototype.onChange=function(r9Y){};C6.Drawing.annotation.prototype.edit=function(S5x,F1Z){var R6w,e4X,r1g,L30,B9o,k4A,Z_Q,u_r,R3C,q4v,s0T,H1Q,W8j,B5s,q7y,R_M,Y79,n0h;i_g.C8A();R6w=\"blo\";R6w+=\"ck\";function y0G(e21){return function(h2U){i_g.P3W();e21.stx.undo();};}e4X=\"p\";e4X+=\"x\";r1g=\"p\";r1g+=\"x\";L30=this.stx.panels[this.panelName];function b5F(m$_){i_g.P3W();return function(Z7g){if(m$_.manageTouchAndMouse && C6.ChartEngine.drawingLine){m$_.mouseup(Z7g);}};}if(!L30){return;}B9o=this.stx.controls.annotationSave;k4A=this.stx.controls.annotationCancel;if(!B9o || !k4A){return;}Z_Q=this.stx;u_r=this.ta;function y44(N5F){i_g.C8A();return function(t_v){var d0l,I$U,x8s,N$W,t6J,S49,b2f,O45,M2t,J1I,v_y,F3B,q8L,n06;if(t_v){d0l=t_v.keyCode;switch(d0l){case 27:N5F.stx.undo();return;}}I$U=N5F.stx;x8s=N5F.ta;N$W=x8s.value.split((4124,204.01) !== 552.18?\"\\n\":(+\"8120\",2333) <= (4559,1310)?(256.93,486.33):6415 < 6970?![]:!![]);t6J=0;I$U.chart.context.font=N5F.fontString;N5F.fontSize=C6.stripPX(N5F.fontDef.size);for(var u00=0;u00 < N$W.length;u00++){S49=I$U.chart.context.measureText(N$W[u00]).width;if(S49 > t6J){t6J=S49;}}i_g.R_O(23);var w_W=i_g.P_X(25,17,9);b2f=(N$W.length + w_W) * (N5F.fontSize + N5F.fontModifier);if(C6.touchDevice){b2f+=5;}t6J=Math.max(t6J,N5F.defaultWidth * 2);x8s.style.width=t6J + N5F.whitespace + \"px\";i_g.R_O(0);x8s.style.height=i_g.P_X(\"px\",b2f);O45=parseInt(C6.stripPX(x8s.style.top),10);i_g.U1h(34);M2t=Math.max(i_g.M8Y(\"0\",0),C6.stripPX(x8s.style.left));t6J=x8s.clientWidth;b2f=x8s.clientHeight;x8s.focus();i_g.C8A();if(N5F.border === !!0){x8s.style.border=\"none\";}if(M2t + t6J + 100 < N5F.stx.chart.canvasWidth){J1I=\"inline-bloc\";J1I+=\"k\";i_g.R_O(0);B9o.style.top=i_g.P_X(\"px\",O45);i_g.U1h(0);k4A.style.top=i_g.M8Y(\"px\",O45);i_g.U1h(59);B9o.style.left=i_g.P_X(\"px\",t6J,M2t,10);B9o.style.display=J1I;i_g.R_O(27);var K_F=i_g.P_X(6,24,13);k4A.style.left=M2t + t6J + B9o.clientWidth + K_F + \"px\";k4A.style.display=\"inline-block\";}else if(O45 + b2f + 30 < N5F.stx.chart.canvasHeight){v_y=\"i\";v_y+=\"nline-block\";F3B=\"i\";F3B+=\"nl\";F3B+=\"ine-bl\";F3B+=\"ock\";q8L=\"p\";q8L+=\"x\";i_g.R_O(59);B9o.style.top=i_g.P_X(\"px\",b2f,O45,10);i_g.U1h(59);k4A.style.top=i_g.M8Y(q8L,b2f,O45,10);i_g.R_O(0);B9o.style.left=i_g.M8Y(\"px\",M2t);B9o.style.display=F3B;i_g.R_O(60);var L9g=i_g.M8Y(6,0,1,2,12);k4A.style.left=M2t + B9o.clientWidth - L9g + \"px\";k4A.style.display=v_y;}else {n06=\"in\";n06+=\"line\";n06+=\"-bl\";n06+=\"ock\";i_g.R_O(7);B9o.style.top=i_g.M8Y(O45,\"px\",35);i_g.R_O(7);k4A.style.top=i_g.M8Y(O45,\"px\",35);i_g.R_O(0);B9o.style.left=i_g.P_X(\"px\",M2t);B9o.style.display=n06;i_g.R_O(28);var W3X=i_g.M8Y(472,9,8,45);k4A.style.left=M2t + B9o.clientWidth - W3X + \"px\";k4A.style.display=\"inline-block\";}};}function L1O(I5L){Z_Q.startClip(L30.name);R3C.render(I5L);i_g.C8A();Z_Q.endClip();}Z_Q.editingAnnotation=!!\"1\";Z_Q.undisplayCrosshairs();if(!Z_Q.openDialog){Z_Q.openDialog=[];}if(!Z_Q.openDialog.includes(\"annotation\")){Z_Q.openDialog.push(\"annotation\");}if(!u_r){u_r=this.ta=document.createElement(\"TEXTAREA\");u_r.className=\"stx_annotation\";u_r.onkeyup=y44(this);u_r.onmouseup=b5F(Z_Q);u_r.setAttribute(\"wrap\",\"hard\");if(C6.isIOS7or8){u_r.setAttribute(\"placeholder\",\"Enter Text\");}Z_Q.chart.container.appendChild(u_r);u_r.style.position=\"absolute\";u_r.style.paddingLeft=this.padding + \"px\";u_r.value=this.text;if(C6.touchDevice){u_r.ontouchstart=function(g6h){i_g.C8A();g6h.stopPropagation();};}}R3C=this;u_r.oninput=function(T58){var L8j;L8j=\"historyRe\";L8j+=\"do\";T58.target.value=Z_Q.emojify(T58.target.value);if(T58.inputType != \"historyUndo\" && T58.inputType != L8j){R3C.onChange(T58);}};u_r.style.font=this.fontString;if(this.color){if(this.color == \"transparent\" || this.color == \"auto\"){q4v=getComputedStyle(u_r);if(q4v && C6.isTransparent(q4v.backgroundColor)){u_r.style.color=this.getLineColor();}else {u_r.style.color=\"#000\";}}else {u_r.style.color=this.color;}}s0T=Z_Q.pixelFromTick(this.p0[0],L30.chart);H1Q=this.pixelFromValue(L30,this.p0[0],this.p0[1],Z_Q.getYAxisByField(L30,this.field));u_r.style.left=s0T + 140 < Z_Q.chart.canvasRight?s0T + \"px\":Z_Q.chart.canvasRight - 200 + \"px\";u_r.style.top=H1Q + 60 < Z_Q.chart.canvasHeight?H1Q - (!isNaN(this.h)?this.h / 2:this.defaultHeight) + r1g:H1Q - +\"60\" + e4X;if(this.repositionTextArea){this.repositionTextArea(u_r);}if(F1Z){this.w=u_r.clientWidth;this.h=u_r.clientHeight;}W8j=C6.stripPX(u_r.style.left);function t7$(F49){i_g.C8A();return function(o2e){var G7e;if(!F49.ta || !F49.ta.value){return;}F49.text=F49.ta.value;G7e=F49.stx;G7e.editingAnnotation=!({});F49.adjust();if(G7e.drawingSnapshot){G7e.undoStamp(C6.shallowClone(G7e.drawingSnapshot),G7e.exportDrawings());}else {C6.ChartEngine.completeDrawing(G7e);G7e.addDrawing(F49);}G7e.undo();G7e.changeOccurred(\"vector\");};}i_g.U1h(35);var w7X=i_g.M8Y(8,12,13,10,325);u_r.style.maxWidth=Math.min(W8j + this.w,Z_Q.chart.right) - W8j - w7X + \"px\";if(u_r !== B9o.ta){C6.safeClickTouch(B9o,t7$(this));B9o.ta=u_r;}if(u_r !== k4A.ta){C6.safeClickTouch(k4A,y0G(this));k4A.ta=u_r;}y44(this)();S5x=Z_Q.chart.tempCanvas.context;C6.clearCanvas(S5x.canvas,Z_Q);S5x.canvas.style.display=R6w;if(F1Z){Z_Q.drawingSnapshot=Z_Q.exportDrawings();this.hidden=!!1;Z_Q.draw();Z_Q.activeDrawing=this;C6.ChartEngine.drawingLine=!\"\";this.highlighted=![];L1O(S5x);this.edit(S5x);}else {L1O(S5x);}if(C6.isAndroid && !C6.is_chrome && !C6.isFF){this.priorBottom=Z_Q.container.style.bottom;B5s=400;i_g.U1h(8);var S$R=i_g.M8Y(15,115);q7y=Z_Q.resolveY(H1Q) + S$R;R_M=Z_Q.container.ownerDocument.defaultView;if(q7y > C6.pageHeight(R_M) - B5s){Y79=C6.pageHeight(R_M) - q7y;i_g.U1h(8);n0h=i_g.P_X(Y79,B5s);i_g.R_O(0);Z_Q.chart.container.style.bottom=i_g.P_X(\"px\",n0h);}}};C6.Drawing.annotation.prototype.click=function(L71,H8C,B3E){var d$Y;if(this.stx.overXAxis || this.stx.overYAxis){return;}d$Y=this.stx.panels[this.panelName];this.copyConfig();this.setPoint(0,H8C,B3E,d$Y.chart);this.adjust();this.edit(L71);i_g.P3W();return !!0;};C6.Drawing.annotation.prototype.reposition=function(S2w,U24,s6G,M5c){var v1C,s4p,X9I;if(!U24){return;}v1C=this.stx.panels[this.panelName];s4p=U24.tick - s6G;X9I=U24.value - M5c;this.setPoint(0,U24.p0[\"0\" ^ 0] - s4p,U24.p0[\"1\" | 0] - X9I,v1C.chart);this.render(S2w);};C6.Drawing.annotation.prototype.intersected=function(h77,M3x,o64){var b2W,v5x,P9k,B1z,N09,c3Q,t0p,Z5u,g4F;b2W=this.stx;v5x=b2W.panels[this.panelName];if(!this.p0){return null;}P9k=b2W.pixelFromTick(this.p0[0],v5x.chart);B1z=b2W.getYAxisByField(v5x,this.field);i_g.U1h(12);var W4h=i_g.P_X(3,16,4);i_g.U1h(25);var y9e=i_g.P_X(18,16);N09=this.pixelFromValue(v5x,this.p0[0],this.p0[W4h],B1z) - this.h / y9e;c3Q=P9k + this.w;t0p=N09 + this.h;if(this.stem && this.stem.x){P9k+=this.stem.x;c3Q+=this.stem.x;N09+=this.stem.y;t0p+=this.stem.y;}Z5u=b2W.pixelFromTick(h77,v5x.chart);g4F=b2W.pixelFromValueAdjusted(v5x,h77,M3x);if(Z5u + o64.r >= P9k && Z5u - o64.r <= c3Q && g4F + o64.r >= N09 && g4F - o64.r <= t0p){this.highlighted=!![];return {p0:C6.clone(this.p0),tick:h77,value:this.valueOnDrawingAxis(h77,M3x)};}return ![];};C6.Drawing.annotation.prototype.abort=function(){var o3w,L$F,h6B;o3w=this.stx;i_g.C8A();L$F=o3w.controls.annotationSave;h6B=o3w.controls.annotationCancel;if(L$F){L$F.style.display=\"none\";}if(h6B){h6B.style.display=\"none\";}if(this.ta){o3w.chart.container.removeChild(this.ta);}this.ta=null;if(o3w.openDialog){o3w.openDialog=o3w.openDialog.filter(N7h=>{var e8D;e8D=\"annot\";e8D+=\"ation\";i_g.U1h(61);return i_g.P_X(e8D,N7h);});}if(!o3w.openDialog.length){o3w.openDialog=\"\";}o3w.showCrosshairs();o3w.editingAnnotation=!!\"\";C6.clearCanvas(o3w.chart.tempCanvas,o3w);if(C6.isAndroid && !C6.is_chrome && !C6.isFF){o3w.chart.container.style.bottom=this.priorBottom;}C6.fixScreen();};C6.Drawing.annotation.prototype.reconstruct=function(Z6z,y5Z){var t4v;t4v=\"s\";t4v+=\"tyl\";t4v+=\"e\";this.stx=Z6z;this.color=y5Z.col;this.panelName=y5Z.pnl;this.d0=y5Z.d0;this.tzo0=y5Z.tzo0;this.v0=y5Z.v0;this.field=y5Z.fld;this.text=Z6z.escapeOnSerialize?decodeURIComponent(y5Z.text):y5Z.text;this.stem=y5Z.stem;this.borderColor=y5Z.bc;this.fillColor=y5Z.bg;this.lineWidth=y5Z.lw;this.pattern=y5Z.ptrn;this.font=C6.replaceFields(y5Z.fnt,{st:t4v,sz:\"size\",wt:\"weight\",fl:\"family\"});if(!this.font){this.font={};}this.hidden=y5Z.hdn?!0:!\"1\";this.permanent=y5Z.prm?!![]:!!\"\";this.adjust();};C6.Drawing.annotation.prototype.serialize=function(){var H9u,W6y,d4f,i8w;H9u={name:this.name,pnl:this.panelName,col:this.color,d0:this.d0,tzo0:this.tzo0,v0:this.v0,fld:this.field,text:this.stx.escapeOnSerialize?encodeURIComponent(this.text):this.text,hdn:this.hidden?1:0,prm:this.permanent?\"1\" << 32:0};if(this.font){W6y=\"w\";W6y+=\"t\";d4f=\"s\";d4f+=\"t\";i8w=C6.removeNullValues(C6.replaceFields(this.font,{style:d4f,size:\"sz\",weight:W6y,family:\"fl\"}));if(!C6.isEmpty(i8w)){H9u.fnt=i8w;}}if(this.stem){H9u.stem={d:this.stem.d,v:this.stem.v,x:this.stem.x,y:this.stem.y};}if(this.borderColor){H9u.bc=this.borderColor;}if(this.fillColor){H9u.bg=this.fillColor;}if(this.lineWidth){H9u.lw=this.lineWidth;}if(this.pattern){H9u.ptrn=this.pattern;}return H9u;};C6.Drawing.annotation.prototype.setTextareaProps=function(){var L60,T99,b21,W$D,D7w,M2J,n9k,n2C,T1q;this.getFontString();L60=this.stx;T99=L60.panels[this.panelName];if(!T99){return;}b21=this.ta?this.ta.value:this.text;this.arr=b21.split(\"\\n\");W$D=0;L60.chart.context.font=this.fontString;for(var L0z=0;L0z < this.arr.length;L0z++){D7w=L60.chart.context.measureText(this.arr[L0z]).width;if(D7w > W$D){W$D=D7w;}}i_g.P3W();if(W$D === +\"0\"){W$D=+\"2\" * this.defaultWidth;}if(L60.editingAnnotation){W$D=Math.max(W$D,2 * this.defaultWidth);}this.fontSize=C6.stripPX(this.fontDef.size);i_g.U1h(23);var M7g=i_g.P_X(18,8,11);M2J=(this.arr.length + M7g) * (this.fontSize + this.fontModifier);if(C6.touchDevice){M2J+=5;}this.w=W$D + this.whitespace + this.padding;this.h=M2J;n9k=L60.pixelFromTick(this.p0[0],T99.chart) + W$D;n2C=L60.getYAxisByField(T99,this.field);T1q=this.pixelFromValue(T99,this.p0[0],this.p0[+\"1\"],n2C) + M2J;if(this.stem && this.stem.d){this.stem.t=L60.tickFromDate(this.stem.d,T99.chart);}};C6.Drawing.annotation.prototype.adjust=function(){var b_l,F6K,m4l;b_l=this.stx;F6K=b_l.panels[this.panelName];if(!F6K){return;}i_g.U1h(46);this.setPoint(i_g.M8Y(\"0\",64),this.d0,this.v0,F6K.chart);this.setTextareaProps();i_g.P3W();if(this === b_l.activeDrawing && b_l.editingAnnotation){m4l=b_l.chart.tempCanvas.context;C6.clearCanvas(m4l.canvas,b_l);this.edit(m4l);}};C6.Drawing.segment=function(){this.name=\"segment\";};C6.inheritsFrom(C6.Drawing.segment,C6.Drawing.BaseTwoPoint);C6.Drawing.segment.prototype.getDateFromTick=function(N73){var s9s,q0Q,L8p;s9s=this.stx;i_g.C8A();q0Q=s9s.panels[this.panelName];L8p=s9s.dateFromTick(N73,q0Q.chart,!\"\");L8p=this.convertDate(L8p);return L8p;};C6.Drawing.segment.prototype.convertDate=function(c81){var H4B,K8H,W$W;H4B=this.stx;if(!C6.ChartEngine.isDailyInterval(H4B.layout.interval)){i_g.U1h(0);var n08=i_g.M8Y(937,63);K8H=c81.getSeconds() * n08 + c81.getMilliseconds();if(w1.Date && H4B.displayZone){W$W=new w1.Date(c81.getTime(),H4B.displayZone);c81=new Date(W$W.getFullYear(),W$W.getMonth(),W$W.getDate(),W$W.getHours(),W$W.getMinutes());c81=new Date(c81.getTime() + K8H);}}else {c81.setHours(0,0,0,0);}return c81;};C6.Drawing.segment.prototype.formatDate=function(u9K){var k7P,r75,V6W;k7P=this.stx;r75=k7P.panels[this.panelName];V6W=C6.mmddhhmm(C6.yyyymmddhhmm(u9K));if(r75.chart.xAxis.formatter){V6W=r75.chart.xAxis.formatter(u9K,this.name,null,null,V6W);}else if(this.stx.internationalizer){V6W=C6.displayableDate(k7P,k7P.chart,u9K);}i_g.P3W();return V6W;};C6.Drawing.segment.prototype.render=function(t3b){var f$E,F0p,K4H,K3P,b_t,T7f,M0u,U6c,U4X,n4I,i99,z7K,g91,Z4Y,q_Z,g$e,b9A,H7c,b2x;if(!this.p1){return;}f$E=this.stx;F0p=f$E.panels[this.panelName];K4H=f$E.getYAxisByField(F0p,this.field);if(!F0p || this.field && !K4H && !this.spanPanels){return;}K4H=K4H || F0p.yAxis;K3P=f$E.pixelFromTick(this.p0[0],F0p.chart);b_t=f$E.pixelFromTick(this.p1[0],F0p.chart);T7f=this.pixelFromValue(F0p,this.p0[\"0\" ^ 0],this.p0[1],K4H);M0u=this.pixelFromValue(F0p,this.p1[0],this.p1[1],K4H);i_g.R_O(42);U6c=i_g.P_X(\"1869926939\",0);U4X=-703711736;i_g.R_O(46);n4I=i_g.P_X(\"2\",64);for(var X$2=1;i_g.G33(X$2.toString(),X$2.toString().length,\"55329\" >> 0) !== U6c;X$2++){i99=this.lineWidth;n4I+=2;}if(i_g.G33(n4I.toString(),n4I.toString().length,80609) !== U4X){i99=this.lineWidth;}z7K=this.getLineColor();g91={pattern:this.pattern,lineWidth:i99};if(g91.pattern == \"none\"){g91.pattern=\"solid\";}f$E.plotLine(K3P,b_t,T7f,M0u,z7K,this.name,t3b,F0p,g91);if(this.axisLabel && !this.repositioner){Z4Y=\"v\";Z4Y+=\"erti\";Z4Y+=\"cal\";if(this.name == \"horizontal\"){f$E.endClip();q_Z=this.p0[1];if(F0p.chart.transformFunc){q_Z=F0p.chart.transformFunc(f$E,F0p.chart,q_Z);}if(K4H.priceFormatter){q_Z=K4H.priceFormatter(f$E,F0p,q_Z);}else {q_Z=f$E.formatYAxisPrice(q_Z,F0p,null,K4H);}f$E.createYAxisLabel(F0p,q_Z,T7f,z7K,null,null,K4H);f$E.startClip(F0p.name);}else if(this.name == Z4Y && this.p0[0] >= +\"0\" && !f$E.chart.xAxis.noDraw && (!this.spanPanels || F0p.yAxis.bottom !== F0p.bottom)){if(this.d0){g$e=C6.strToDateTime(this.d0);g$e=this.convertDate(g$e);}else {g$e=this.getDateFromTick(this.p0[0]);}f$E.endClip();f$E.createXAxisLabel({panel:F0p,txt:this.formatDate(g$e),x:K3P,backgroundColor:z7K,color:null,pointed:!\"\",padding:2});f$E.startClip(F0p.name);}}if(this.highlighted && this.name != \"horizontal\" && this.name != \"vertical\"){b9A=\"p\";b9A+=\"1\";H7c=this.highlighted == \"p0\"?!!({}):![];b2x=this.highlighted == b9A?!![]:!!\"\";this.littleCircle(t3b,K3P,T7f,H7c);this.littleCircle(t3b,b_t,M0u,b2x);}};C6.Drawing.segment.prototype.abort=function(){this.stx.setMeasure(null,null,null,null,![]);};C6.Drawing.segment.prototype.intersected=function(n2$,E3r,C6N){var K97,l6x,A0E,d91,E2k,W6q,u3L;K97=\"ve\";K97+=\"rtical\";l6x=\"gartl\";l6x+=\"ey\";A0E=\"ve\";A0E+=\"r\";A0E+=\"tical\";if(!this.p0 || !this.p1){return null;}d91=this.name;if(d91 != \"horizontal\" && d91 != A0E && d91 != l6x){E2k={0:this.p0,1:this.p1};for(var W_7 in E2k){if(this.pointIntersection(E2k[W_7][0],E2k[W_7][1],C6N)){W6q=\"dra\";W6q+=\"g\";i_g.U1h(0);this.highlighted=i_g.P_X(W_7,(+\"5000\",9230) <= (\"6830\" * 1,41.74)?(170.24,7.84e+3):\"p\");return {action:W6q,point:(669.99 !== 6798?+\"734\" == (265.93,5690)?(+\"9920\",7730) < 359?0x131a:161.00:\"p\":(\"P\",\"F\")) + W_7};}}}if(d91 == \"horizontal\" || d91 == K97){d91=\"line\";}u3L=this.lineIntersection(n2$,E3r,C6N,d91);if(u3L){this.highlighted=!![];return {action:\"move\",p0:C6.clone(this.p0),p1:C6.clone(this.p1),tick:n2$,value:this.valueOnDrawingAxis(n2$,E3r)};}return null;};C6.Drawing.segment.prototype.configs=[\"color\",\"lineWidth\",\"pattern\"];C6.Drawing.segment.prototype.copyConfig=function(a$1){var V3K;V3K=\"n\";V3K+=\"o\";V3K+=\"ne\";i_g.C8A();C6.Drawing.copyConfig(this,a$1);if(this.pattern == V3K && this.configs.indexOf(\"fillColor\") == -1){this.pattern=\"solid\";}};C6.Drawing.segment.prototype.reconstruct=function(y5K,Y2h){this.stx=y5K;this.color=Y2h.col;this.panelName=Y2h.pnl;this.pattern=Y2h.ptrn;this.lineWidth=Y2h.lw;this.d0=Y2h.d0;this.d1=Y2h.d1;this.tzo0=Y2h.tzo0;this.tzo1=Y2h.tzo1;this.v0=Y2h.v0;this.v1=Y2h.v1;this.field=Y2h.fld;this.adjust();};C6.Drawing.segment.prototype.serialize=function(){i_g.P3W();return {name:this.name,pnl:this.panelName,col:this.color,ptrn:this.pattern,lw:this.lineWidth,d0:this.d0,d1:this.d1,tzo0:this.tzo0,tzo1:this.tzo1,v0:this.v0,v1:this.v1,fld:this.field};};C6.Drawing.line=function(){i_g.C8A();this.name=\"line\";};C6.inheritsFrom(C6.Drawing.line,C6.Drawing.segment);C6.Drawing.line.prototype.dragToDraw=!({});C6.Drawing.line.prototype.click=function(F$o,F4n,z$E){var j5$;j5$=this.stx.panels[this.panelName];if(!j5$){return;}this.copyConfig();if(!this.penDown){this.setPoint(0,F4n,z$E,j5$.chart);this.penDown=!!({});return !1;}if(this.accidentalClick(F4n,z$E)){return !!\"1\";}this.setPoint(1,F4n,z$E,j5$.chart);this.penDown=!!0;return !!({});};C6.Drawing.line.prototype.reconstruct=function(S86,r2u){this.stx=S86;this.color=r2u.col;this.panelName=r2u.pnl;this.pattern=r2u.ptrn;this.lineWidth=r2u.lw;this.v0=r2u.v0;this.v1=r2u.v1;this.d0=r2u.d0;this.d1=r2u.d1;this.tzo0=r2u.tzo0;this.tzo1=r2u.tzo1;this.field=r2u.fld;this.hidden=r2u.hdn?!!1:!({});this.permanent=r2u.prm?!\"\":!({});this.adjust();};C6.Drawing.line.prototype.serialize=function(){i_g.P3W();return {name:this.name,pnl:this.panelName,col:this.color,ptrn:this.pattern,lw:this.lineWidth,d0:this.d0,d1:this.d1,tzo0:this.tzo0,tzo1:this.tzo1,v0:this.v0,v1:this.v1,fld:this.field,hdn:this.hidden?+\"1\":0,prm:this.permanent?+\"1\":0};};C6.Drawing.line.prototype.adjust=function(){var P12;P12=this.stx.panels[this.panelName];if(!P12){return;}i_g.U1h(46);this.setPoint(i_g.M8Y(\"0\",0),this.d0,this.v0,P12.chart);this.setPoint(1,this.d1,this.v1,P12.chart);if(C6.ChartEngine.isDailyInterval(this.stx.layout.interval) && this.d0B){this.setPoint(+\"0\",this.d0B,this.v0B,P12.chart);this.setPoint(1,this.d1B,this.v1B,P12.chart);}};C6.Drawing.horizontal=function(){this.name=\"horizontal\";};C6.inheritsFrom(C6.Drawing.horizontal,C6.Drawing.segment);C6.Drawing.horizontal.prototype.dragToDraw=!({});C6.Drawing.horizontal.prototype.measure=function(){};C6.Drawing.horizontal.prototype.click=function(t11,D$g,u7Z){var a9V;a9V=this.stx.panels[this.panelName];if(!a9V){return;}this.copyConfig();i_g.P3W();this.setPoint(0,D$g,u7Z,a9V.chart);return !!1;};C6.Drawing.horizontal.prototype.intersected=function(E07,k3$,h67){var A4K,S8T,u0p;if(this.lineIntersection(E07,k3$,h67,\"line\")){A4K=this.stx;S8T=A4K.chart.dataSet.length;i_g.U1h(42);u0p=this.p0[i_g.P_X(\"1\",0)];this.highlighted=!![];return {action:\"move\",p0:[S8T - 2,u0p],p1:[S8T - 1,u0p],tick:E07,value:this.valueOnDrawingAxis(E07,k3$)};}return null;};C6.Drawing.horizontal.prototype.reconstruct=function(A2G,u70){this.stx=A2G;this.color=u70.col;i_g.P3W();this.panelName=u70.pnl;this.pattern=u70.ptrn;this.lineWidth=u70.lw;this.v0=u70.v0;this.d0=u70.d0;this.tzo0=u70.tzo0;this.axisLabel=u70.al;this.field=u70.fld;this.adjust();};C6.Drawing.horizontal.prototype.serialize=function(){var Z62;Z62={name:this.name,pnl:this.panelName,col:this.color,ptrn:this.pattern,lw:this.lineWidth,v0:this.v0,d0:this.d0,tzo0:this.tzo0,al:this.axisLabel,fld:this.field};return Z62;};C6.Drawing.horizontal.prototype.adjust=function(){i_g.P3W();var S5s;S5s=this.stx.panels[this.panelName];if(!S5s){return;}this.setPoint(0,this.d0,this.v0,S5s.chart);i_g.U1h(8);var q$l=i_g.M8Y(1700,1800);this.p1=[this.p0[0] + q$l,this.p0[1]];};C6.Drawing.horizontal.prototype.configs=[\"color\",\"lineWidth\",\"pattern\",C06];C6.Drawing.vertical=function(){this.name=\"vertical\";this.spanPanels=!\"1\";};C6.inheritsFrom(C6.Drawing.vertical,C6.Drawing.horizontal);C6.Drawing.vertical.prototype.measure=function(){};C6.Drawing.vertical.prototype.configs=[\"color\",J2K,\"pattern\",\"axisLabel\",\"spanPanels\"];C6.Drawing.vertical.prototype.intersected=C6.Drawing.segment.prototype.intersected;C6.Drawing.vertical.prototype.adjust=function(){var Q_l;Q_l=this.stx.panels[this.panelName];if(!Q_l){return;}this.setPoint(0,this.d0,this.v0,Q_l.chart);i_g.R_O(0);var i0T=i_g.P_X(1,0);this.p1=[this.p0[0],this.p0[i0T] + +\"1\"];};var {reconstruct:f3, serialize:U2, reposition:j2}=C6.Drawing.vertical.prototype;C6.Drawing.vertical.prototype.reconstruct=function(V6M,Z66){f3.call(this,V6M,Z66);this.spanPanels=Z66.sp;};C6.Drawing.vertical.prototype.serialize=function(){var L40;L40=U2.call(this);L40.sp=this.spanPanels;i_g.C8A();return L40;};C6.Drawing.vertical.prototype.reposition=function(Q1l,D0$,z4z,P0e){if(this.spanPanels){this.originPanelName=this.panelName;Object.values(this.stx.panels).forEach(w3H=>{this.panelName=w3H.name;i_g.P3W();j2.call(this,Q1l,D0$,z4z,P0e);});this.panelName=this.originPanelName;}else {j2.call(this,Q1l,D0$,z4z,P0e);}};C6.Drawing.measure=function(){this.name=\"measure\";};C6.inheritsFrom(C6.Drawing.measure,C6.Drawing.segment);C6.Drawing.measure.prototype.click=function(c2J,J_4,l_T){var u5X,u7i,F72;u5X=-1215340911;u7i=1077306226;F72=2;for(var P72=1;i_g.G33(P72.toString(),P72.toString().length,45216) !== u5X;P72++){this.copyConfig();F72+=+\"2\";}if(i_g.I9N(F72.toString(),F72.toString().length,52637) !== u7i){this.copyConfig();}this.copyConfig();if(!this.penDown){this.p0=[J_4,l_T];this.penDown=!!1;return !({});}this.stx.undo();this.penDown=!!\"\";return !0;};C6.Drawing.rectangle=function(){var c7Y;i_g.P3W();c7Y=\"re\";c7Y+=\"c\";c7Y+=\"tangle\";this.name=c7Y;};C6.inheritsFrom(C6.Drawing.rectangle,C6.Drawing.BaseTwoPoint);C6.Drawing.rectangle.prototype.render=function(S5i){var Q$u,Y$I,a8D,S8k,D5c,Y_3,O$b,m4O,X3e,k5n,U$S,q5O,r$n,c4b,Z2_,K47,p1N,o_D,x_v,T2L,k0F,X$P,T$s;Q$u=\"s\";Q$u+=\"egmen\";Q$u+=\"t\";Y$I=\"segm\";Y$I+=\"en\";Y$I+=\"t\";a8D=\"seg\";a8D+=\"ment\";i_g.P3W();if(!this.p1){return;}S8k=this.stx;D5c=S8k.panels[this.panelName];Y_3=S8k.getYAxisByField(D5c,this.field);if(!D5c || this.field && !Y_3){return;}O$b=S8k.pixelFromTick(this.p0[0],D5c.chart);m4O=S8k.pixelFromTick(this.p1[0],D5c.chart);X3e=this.pixelFromValue(D5c,this.p0[0],this.p0[\"1\" - 0],Y_3);k5n=this.pixelFromValue(D5c,this.p1[0],this.p1[1],Y_3);U$S=Math.round(Math.min(O$b,m4O)) + 0.5;q5O=Math.min(X3e,k5n);r$n=Math.max(O$b,m4O) - U$S;c4b=Math.max(X3e,k5n) - q5O;Z2_=this.getLineColor();K47=-1171726928;i_g.U1h(2);p1N=i_g.P_X(\"1641393732\",1);o_D=+\"2\";for(var J7K=1;i_g.I9N(J7K.toString(),J7K.toString().length,56142) !== K47;J7K++){x_v=this.fillColor;o_D+=2;}if(i_g.I9N(o_D.toString(),o_D.toString().length,92016) !== p1N){x_v=this.fillColor;}if(x_v && !C6.isTransparent(x_v)){S5i.beginPath();S5i.rect(U$S,q5O,r$n,c4b);S5i.fillStyle=this.getLineColor(x_v,!!\"1\");S5i.globalAlpha=0.2;S5i.fill();S5i.closePath();i_g.R_O(42);S5i.globalAlpha=i_g.M8Y(\"1\",0);}T2L={pattern:this.pattern,lineWidth:this.lineWidth};if(this.highlighted && T2L.pattern == \"none\"){T2L.pattern=\"solid\";if(T2L.lineWidth == 0.1){T2L.lineWidth=1;}}S8k.plotLine(O$b,m4O,X3e,X3e,Z2_,\"segment\",S5i,D5c,T2L);i_g.R_O(8);S8k.plotLine(m4O,m4O,i_g.P_X(0.5,X3e),i_g.P_X(\"0.5\",k5n,i_g.U1h(44)),Z2_,a8D,S5i,D5c,T2L);S8k.plotLine(m4O,O$b,k5n,k5n,Z2_,Y$I,S5i,D5c,T2L);i_g.R_O(0);S8k.plotLine(O$b,O$b,i_g.M8Y(0.5,k5n),i_g.P_X(0.5,X3e,i_g.U1h(8)),Z2_,Q$u,S5i,D5c,T2L);if(this.highlighted){k0F=\"p\";k0F+=\"0\";X$P=this.highlighted == k0F?!!\"1\":!!0;T$s=this.highlighted == \"p1\"?!![]:!({});this.littleCircle(S5i,O$b,X3e,X$P);this.littleCircle(S5i,m4O,k5n,T$s);}};C6.Drawing.rectangle.prototype.intersected=function(m0e,U5z,r54){i_g.C8A();var c9L,k8k,w_Z;if(!this.p0 || !this.p1){return null;}c9L={0:this.p0,1:this.p1};for(var R_R in c9L){if(this.pointIntersection(c9L[R_R][0],c9L[R_R][\"1\" ^ 0],r54)){k8k=\"d\";k8k+=\"r\";k8k+=\"a\";k8k+=\"g\";i_g.U1h(0);this.highlighted=i_g.P_X(R_R,(844,471) < +\"1340\"?(233.29,+\"690.85\") >= 633.59?389.71 == 102.55?0x24ca:\"p\":7.56e+2:\"f\");return {action:k8k,point:((555.18,967) <= (5043,8840)?\"p\":2645 !== 2755?6900 !== (575.69,\"2607\" << 64)?6.50e+3:!!1:\"282.78\" - 0) + R_R};}}if(this.boxIntersection(m0e,U5z,r54)){w_Z=\"m\";w_Z+=\"o\";w_Z+=\"v\";w_Z+=\"e\";this.highlighted=!![];return {action:w_Z,p0:C6.clone(this.p0),p1:C6.clone(this.p1),tick:m0e,value:this.valueOnDrawingAxis(m0e,U5z)};}return null;};C6.Drawing.rectangle.prototype.configs=[\"color\",\"fillColor\",e6M,\"pattern\"];C6.Drawing.rectangle.prototype.reconstruct=function(z64,u06){this.stx=z64;this.color=u06.col;this.fillColor=u06.fc;this.panelName=u06.pnl;this.pattern=u06.ptrn;this.lineWidth=u06.lw;this.d0=u06.d0;this.d1=u06.d1;this.tzo0=u06.tzo0;this.tzo1=u06.tzo1;this.v0=u06.v0;this.v1=u06.v1;this.field=u06.fld;this.hidden=u06.hdn?!!({}):!({});this.permanent=u06.prm?!0:!1;this.adjust();};C6.Drawing.rectangle.prototype.serialize=function(){return {name:this.name,pnl:this.panelName,col:this.color,fc:this.fillColor,ptrn:this.pattern,lw:this.lineWidth,d0:this.d0,d1:this.d1,tzo0:this.tzo0,tzo1:this.tzo1,v0:this.v0,v1:this.v1,fld:this.field,hdn:this.hidden?1:0,prm:this.permanent?1:0};};C6.Drawing.shape=function(){var L95;L95=\"s\";L95+=\"hap\";L95+=\"e\";this.name=L95;this.radians=0;this.a=0;this.rotating=!({});this.textMeasure=!({});this.configurator=\"shape\";this.dimension=[0,0];this.points=[];};C6.inheritsFrom(C6.Drawing.shape,C6.Drawing.BaseTwoPoint);C6.Drawing.shape.prototype.setRotationOnInitialDraw=!({});C6.Drawing.shape.prototype.measure=function(){};C6.Drawing.shape.prototype.render=function(q$I){var f_M,i5O,p6X,Y52,C4M,c94,J27,y3v,f9m,X66,s98,q5e,u8N,S_M,o12,N$f,U0H,A$Z,z6y,j7O,v5W,x0w,R0T,f1V,A0c,G_2;f_M=\"n\";f_M+=\"on\";f_M+=\"e\";if(!this.points.length){return;}i5O=this.stx;p6X=i5O.panels[this.panelName];Y52=i5O.getYAxisByField(p6X,this.field);if(!p6X || this.field && !Y52){return;}C4M=i5O.pixelFromTick(this.p0[0],p6X.chart);c94=this.pixelFromValue(p6X,this.p0[+\"0\"],this.p0[1],Y52);if(this.p1){J27=i5O.pixelFromTick(this.p1[0],p6X.chart);y3v=this.pixelFromValue(p6X,this.p1[0],this.p1[1],Y52);q$I.globalAlpha=0.5;q$I.fillStyle=this.getLineColor();if(this.rotating){i_g.U1h(62);this.radians=Math.atan(i_g.M8Y(c94,J27,y3v,C4M));if(J27 < C4M){this.radians+=Math.PI;}else if(y3v < c94){i_g.R_O(26);var u1M=i_g.P_X(7,9,38,24);this.radians+=u1M * Math.PI;}i_g.U1h(27);var e7A=i_g.M8Y(7,24,7);i_g.R_O(23);var p7Q=i_g.M8Y(16,19,2);this.a=parseInt((this.radians * (\"36\" | 36) / Math.PI).toFixed(0),e7A) * p7Q;this.a%=360;i_g.U1h(63);var V4j=i_g.M8Y(177,2,5,30);this.radians=this.a * Math.PI / V4j;if(this.textMeasure){q$I.fillText(this.a + (3340 < (+\"5480\",6450)?\"\\u00b0\":702 <= (6308,801.33)?(453,3306) === (+\"736\",882.47)?\"8.74e+3\" | 32:(509.57,\"4.30e+3\" ^ 0):\"1.81e+3\" - 0),J27 + 10,y3v + 10);}}else if(this.penDown){this.sx=Math.max(1,parseFloat(Math.abs(2 * (J27 - C4M) / this.dimension[0]).toFixed(1)));if(J27 < C4M){this.sx*=-1;}this.sy=Math.max(1,parseFloat(Math.abs(2 * (y3v - c94) / this.dimension[1]).toFixed(1)));if(y3v < c94){this.sy*=-1;}if(this.textMeasure){q$I.fillText(this.sx + \"x,\" + this.sy + ((705.92,\"5358\" << 32) < 4521?(7490,\"7353\" ^ 0) <= 3976?(\"d\",0x1673):\"3.81e+2\" - 0:\"x\"),J27 + this.sx + 5,y3v + this.sy + +\"5\");}}q$I.globalAlpha=1;}if(typeof this.sx === \"undefined\"){this.sx=this.sy=1;}f9m=this.lineWidth;if(!f9m){f9m=1.1;}X66={pattern:this.pattern,lineWidth:f9m};if(this.highlighted && X66.pattern == f_M){X66.pattern=\"solid\";if(X66.lineWidth == \"0.1\" * 1){X66.lineWidth=1;}}s98=this.getLineColor();if(this.highlighted && f9m == 0.1){f9m=1.1;}q5e=this.fillColor;f9m/=Math.abs(this.sx * this.sy) * +\"2\" / (Math.abs(this.sx) + Math.abs(this.sy));q$I.save();q$I.translate(C4M,c94);q$I.rotate(this.radians);q$I.scale(this.sx,(Y52 || p6X.yAxis).flipped?-this.sy:this.sy);o12={x:(this.dimension[0] - 1) / 2,y:(this.dimension[1] - 1) / 2};for(u8N=0;u8N < this.points.length;u8N++){N$f=\"n\";N$f+=\"on\";N$f+=\"e\";q$I.beginPath();for(S_M=0;S_M < this.points[u8N].length;S_M++){R0T=this.points;if(R0T[u8N][S_M] == \"M\"){U0H=R0T[u8N][++S_M] - o12.x;A$Z=R0T[u8N][++S_M] - o12.y;q$I.moveTo(U0H,A$Z);}else if(R0T[u8N][S_M] == \"L\"){U0H=R0T[u8N][++S_M] - o12.x;A$Z=R0T[u8N][++S_M] - o12.y;q$I.lineTo(U0H,A$Z);}else if(R0T[u8N][S_M] == (4170 < 785?5350 <= (\"8384\" >> 0,4790)?(\"2.67e+3\" << 64,1.72e+3):(!({}),\"0x1939\" << 64):\"Q\")){z6y=R0T[u8N][++S_M] - o12.x;v5W=R0T[u8N][++S_M] - o12.y;U0H=R0T[u8N][++S_M] - o12.x;A$Z=R0T[u8N][++S_M] - o12.y;q$I.quadraticCurveTo(z6y,v5W,U0H,A$Z);}else if(R0T[u8N][S_M] == ((+\"3617\",149.6) !== (5241,764.92)?959.77 >= \"3307\" - 0?(+\"0x1a1a\",607.32):959.03 >= (2311,5940)?\"Q\":\"B\":\"P\")){z6y=R0T[u8N][++S_M] - o12.x;v5W=R0T[u8N][++S_M] - o12.y;j7O=R0T[u8N][++S_M] - o12.x;x0w=R0T[u8N][++S_M] - o12.y;U0H=R0T[u8N][++S_M] - o12.x;A$Z=R0T[u8N][++S_M] - o12.y;q$I.bezierCurveTo(z6y,v5W,j7O,x0w,U0H,A$Z);}}q$I.closePath();if(q5e && !C6.isTransparent(q5e)){q$I.fillStyle=this.getLineColor(q5e,!!({}));q$I.fill();}if(s98 && this.pattern != N$f){q$I.strokeStyle=s98;q$I.lineWidth=f9m;if(q$I.setLineDash){q$I.setLineDash(C6.borderPatternToArray(f9m,this.pattern));q$I.lineDashOffset=0;}q$I.stroke();}}q$I.restore();q$I.save();q$I.translate(C4M,c94);q$I.rotate(this.radians);if(this.highlighted){f1V=this.highlighted == \"p0\"?!![]:!\"1\";A0c=this.highlighted == \"p1\"?!!({}):!\"1\";G_2=this.highlighted == \"p2\"?!!({}):!\"1\";this.littleCircle(q$I,0,0,f1V);this.mover(q$I,0,0,f1V);this.littleCircle(q$I,this.sx * this.dimension[\"0\" | 0] / 2,this.sy * this.dimension[1] / 2,A0c);this.resizer(q$I,this.sx * this.dimension[0] / +\"2\",this.sy * this.dimension[1] / 2,A0c);this.littleCircle(q$I,this.sx * this.dimension[+\"0\"] / 2,0,G_2);this.rotator(q$I,this.sx * this.dimension[+\"0\"] / 2,0,G_2);i_g.R_O(8);q$I.globalAlpha=i_g.M8Y(0,\"0.5\");q$I.fillStyle=this.getLineColor(null,![]);if(this.textMeasure){q$I.fillText(this.sx + \"x,\" + this.sy + (+\"2760\" != \"9790\" - 0?\"x\":\"s\"),this.sx * this.dimension[0] / 2 + 12,this.sy * this.dimension[1] / 2 + 5);q$I.fillText(this.a + ((453.81,+\"295.62\") === 7184?(862.01,6020) !== (978,5911)?(\"i\",\"E\"):(+\"0x5c5\",\"F\"):\"\\u00b0\"),this.sx * this.dimension[0] / 2 + 12,5);}q$I.globalAlpha=1;}else if(this.penDown){if(this.rotating){this.rotator(q$I,this.sx * this.dimension[0] / 2,0,!![]);}else {this.resizer(q$I,this.sx * this.dimension[0] / 2,this.sy * this.dimension[+\"1\"] / 2,!![]);}}q$I.restore();};C6.Drawing.shape.prototype.reposition=function(P5J,n3C,e9D,h5k){var j2z,U8H,Q6h,O25,w2K,b7h,z7n,d27,F2S,W7J,K0w;j2z=\"mo\";j2z+=\"ve\";if(!n3C){return;}i_g.P3W();U8H=this.stx;Q6h=U8H.panels[this.panelName];if(n3C.action == j2z){O25=n3C.tick - e9D;w2K=n3C.value - h5k;i_g.R_O(1);this.setPoint(i_g.P_X(\"0\",0),n3C.p0[0] - O25,n3C.p0[1] - w2K,Q6h.chart);this.render(P5J);}else {b7h=\"sc\";b7h+=\"a\";b7h+=\"l\";b7h+=\"e\";z7n=U8H.getYAxisByField(Q6h,this.field);d27=U8H.pixelFromTick(this.p0[0],Q6h.chart);F2S=this.pixelFromValue(Q6h,this.p0[0],this.p0[+\"1\"],z7n);W7J=U8H.pixelFromTick(e9D,Q6h.chart);K0w=this.pixelFromValue(Q6h,e9D,h5k,z7n);if(n3C.action == b7h){this[n3C.point]=[e9D,h5k];this.sx=parseFloat((((W7J - d27) * Math.cos(this.radians) + (K0w - F2S) * Math.sin(this.radians)) / (this.dimension[0] / 2)).toFixed(+\"1\"));if(Math.abs(this.sx) < 1){this.sx/=Math.abs(this.sy);}this.sy=parseFloat((((K0w - F2S) * Math.cos(this.radians) - (W7J - d27) * Math.sin(this.radians)) / (this.dimension[+\"1\"] / 2)).toFixed(1));if(Math.abs(this.sy) < 1){this.sy/=Math.abs(this.sy);}this.render(P5J);}else if(n3C.action == \"rotate\"){this[n3C.point]=[e9D,h5k];i_g.U1h(62);this.radians=Math.atan(i_g.M8Y(F2S,W7J,K0w,d27));if(W7J < d27){this.radians+=Math.PI;}else if(K0w < F2S){i_g.R_O(12);var b3u=i_g.M8Y(38,40,1);this.radians+=b3u * Math.PI;}i_g.U1h(64);var T2y=i_g.M8Y(12,17,18,624230,170);this.a=parseInt((this.radians * 36 / Math.PI).toFixed(0),T2y) * (\"5\" << 0);if(this.sx < 0){i_g.R_O(0);var x9i=i_g.P_X(30,2);this.a=this.a + (\"180\" << x9i);}this.a%=360;i_g.U1h(65);var Z19=i_g.P_X(19,200,1035,4,6);this.radians=this.a * Math.PI / Z19;this.render(P5J);}}};C6.Drawing.shape.prototype.intersected=function(g0G,S_i,J6v){var d_o,k$y,w03,u59,K3h,o1Q,e7c,s2O,i27,I$u,v09,E5$,y50,c_o,q5S,j46,k2N,s6T,s_t,x4s,b9r;d_o=this.stx;if(!this.p0){return null;}if(d_o.repositioningDrawing == this && d_o.repositioningDrawing.repositioner){return d_o.repositioningDrawing.repositioner;}k$y=d_o.panels[this.panelName];w03=d_o.getYAxisByField(k$y,this.field);u59=d_o.pixelFromTick(this.p0[0],k$y.chart);K3h=this.pixelFromValue(k$y,this.p0[\"0\" << 32],this.p0[1],w03);o1Q=d_o.pixelFromTick(g0G,k$y.chart);e7c=d_o.pixelFromValueAdjusted(k$y,g0G,S_i);o1Q-=u59;e7c-=K3h;s2O=e7c;i27=o1Q;o1Q=Math.cos(this.radians) * i27 + Math.sin(this.radians) * s2O;e7c=Math.cos(this.radians) * s2O - Math.sin(this.radians) * i27;o1Q/=this.sx;e7c/=this.sy;this.padding=C6.ensureDefaults(this.padding || ({}),{left:0,right:\"0\" ^ 0,top:0,bottom:0});I$u=this.padding.right + this.padding.left;v09=this.padding.bottom + this.padding.top;E5$=Math.pow(C6.touchDevice?25:5 + this.littleCircleRadius(),2);y50=Math.abs(E5$ / (this.sx * this.sy));c_o=3;i_g.R_O(66);var e87=i_g.P_X(2,26,31,1,13);i_g.U1h(30);var A_s=i_g.P_X(3,40,24,17);i_g.U1h(67);var J9l=i_g.M8Y(21,1,20,20,18);i_g.R_O(8);var y2a=i_g.M8Y(2,4);i_g.U1h(0);var J7C=i_g.P_X(1,0);i_g.R_O(68);var E_Z=i_g.P_X(7,1,20,9,1);i_g.R_O(69);var h_Q=i_g.M8Y(1,18,349,19,5);i_g.R_O(70);var o$w=i_g.M8Y(20,5,3,98,13);i_g.R_O(71);var N50=i_g.P_X(1,3,0,6,1);q5S=Math.pow((this.dimension[0] - I$u + c_o) / (\"2\" << e87),A_s) + Math.pow((this.dimension[J9l] - v09 + c_o) / y2a,\"2\" * J7C) > Math.pow(o1Q - I$u / E_Z,h_Q) + Math.pow(e7c - v09 / o$w,N50);i_g.C8A();i_g.R_O(30);var Z2E=i_g.M8Y(2,12,7,5);i_g.R_O(21);var g6G=i_g.P_X(6,26,3,15);j46=(E5$ - (Math.pow(o1Q * this.sx,Z2E) + Math.pow(e7c * this.sy,g6G))) / Math.abs(this.sx * this.sy);i_g.R_O(26);var U8V=i_g.M8Y(2,18,34,16);i_g.R_O(72);var m_J=i_g.M8Y(15,212,14);i_g.R_O(73);var q5i=i_g.M8Y(17,146,2,2,10);i_g.R_O(74);var l8H=i_g.M8Y(1,20,15,3);k2N=y50 - Math.pow(o1Q - this.dimension[0] / U8V,m_J) - Math.pow(e7c - this.dimension[\"1\" >> 0] / q5i,l8H);i_g.R_O(12);var U73=i_g.M8Y(18,40,2);i_g.U1h(29);var Z8H=i_g.P_X(160,18,9);i_g.R_O(75);var r1J=i_g.M8Y(6,5,2,2,16);s6T=y50 - Math.pow(o1Q - this.dimension[+\"0\"] / U73,Z8H) - Math.pow(e7c,r1J);if(q5S){s_t=\"p\";s_t+=\"0\";if(k2N >= s6T && k2N >= j46 && k2N > -1){x4s=\"s\";x4s+=\"ca\";x4s+=\"l\";x4s+=\"e\";this.highlighted=\"p1\";return {action:x4s};}if(s6T >= k2N && s6T >= j46 && s6T > -1){b9r=\"r\";b9r+=\"ota\";b9r+=\"t\";b9r+=\"e\";this.highlighted=\"p2\";return {action:b9r};}this.highlighted=j46 > -1?s_t:!\"\";return {action:\"move\",p0:C6.clone(this.p0),tick:g0G,value:this.valueOnDrawingAxis(g0G,S_i)};}return null;};C6.Drawing.shape.prototype.configs=[\"color\",a$w,\"lineWidth\",\"pattern\"];C6.Drawing.shape.prototype.littleCircleRadius=function(){return 3;};C6.Drawing.shape.prototype.click=function(S9G,F6Y,q1Y){var N3a;if(!this.points.length){return !({});}this.copyConfig();N3a=this.stx.panels[this.panelName];if(!this.penDown){i_g.U1h(46);this.setPoint(i_g.P_X(\"0\",32),F6Y,q1Y,N3a.chart);this.penDown=!0;return !\"1\";}this.setPoint(1,F6Y,q1Y,N3a.chart);if(this.rotating || !this.setRotationOnInitialDraw){this.penDown=!!0;this.rotating=![];return !!({});}this.rotating=!\"\";return ![];};C6.Drawing.shape.prototype.adjust=function(){var g7Y,h05,f8D,D_J;g7Y=\"_\";g7Y+=\"v\";h05=this.stx.panels[this.panelName];i_g.C8A();if(!h05){return;}f8D=this.name + g7Y + (this.version || 0);if(C6.Drawing[f8D]){D_J=new C6.Drawing[f8D]();this.name=D_J.name;this.dimension=D_J.dimension;this.padding=D_J.padding;this.points=D_J.points;this.version=D_J.version;}this.setPoint(0,this.d0,this.v0,h05.chart);this.radians=Math.round(this.a / +\"5\") * Math.PI / +\"36\";};C6.Drawing.shape.prototype.reconstruct=function(C6O,P3d){this.stx=C6O;this.color=P3d.col;this.fillColor=P3d.fc;this.panelName=P3d.pnl;this.pattern=P3d.ptrn;this.lineWidth=P3d.lw;this.d0=P3d.d0;this.v0=P3d.v0;this.tzo0=P3d.tzo0;this.a=P3d.a;this.sx=P3d.sx;i_g.P3W();this.sy=P3d.sy;this.field=P3d.fld;this.version=P3d.ver;this.hdn=P3d.hdn?!![]:![];this.prm=P3d.prm?!!1:!\"1\";this.adjust();};C6.Drawing.shape.prototype.serialize=function(){i_g.C8A();return {name:this.name,pnl:this.panelName,col:this.color,fc:this.fillColor,ptrn:this.pattern,lw:this.lineWidth,d0:this.d0,v0:this.v0,tzo0:this.tzo0,a:this.a,sx:this.sx,sy:this.sy,fld:this.field,ver:this.version,hdn:this.hidden?1:+\"0\",prm:this.permanent?1:+\"0\"};};C6.Drawing.arrow=function(){i_g.P3W();this.name=\"arrow\";this.version=1;this.dimension=[11,22];this.padding={left:0,right:0,top:\"11\" ^ 0,bottom:0};this.points=[[\"M\",3,21,(8014,7850) < (\"1910\" | 34,+\"796.6\")?\"2738\" * 1 == +\"673.88\"?(8.27e+3,+\"778.20\"):9581 === +\"284.12\"?(5.66e+3,\"Q\"):\"t\":\"L\",7,21,(13,1710) > (9510,9380)?(2020,728.28) >= \"906.92\" * 1?(784.23,!!({})):9194 > 2324?(\"f\",!!\"1\"):(!!1,0xefb):\"L\",7,16,(495,\"929.99\" - 0) != 337?8920 == +\"4149\"?(0x1bf6,\"k\"):6610 > 8620?(2.23e+3,\"7.83e+3\" | 4):\"L\":5.98e+3,10,16,(7770,6450) === (473,121.63)?60 <= (\"4440\" * 1,4475)?(\"968\" - 0,0x18d4):(1.52e+3,![]):\"L\",5,11,1720 == (223,2071)?(!!\"1\",2.22e+3):303.68 != 476.92?\"L\":(!!({}),\"k\"),0,+\"16\",(701.86,888.96) !== 467.63?\"L\":\"s\",3,+\"16\",(112.85,3520) <= 149.46?\"8.94e+3\" * 1:\"L\",+\"3\",21]];};C6.inheritsFrom(C6.Drawing.arrow,C6.Drawing.shape);C6.Drawing.trendline=function(){this.name=\"trendline\";this.showCallout=!({});};C6.inheritsFrom(C6.Drawing.trendline,C6.Drawing.segment);C6.Drawing.trendline.prototype.copyConfig=function(K6W){if(C6.Drawing.callout && !C6.Drawing.trendline.prototype.configs.includes(\"showCallout\")){C6.Drawing.trendline.prototype.configs=C6.Drawing.trendline.prototype.configs.concat([\"fillColor\",\"showCallout\",\"font\"]);}i_g.P3W();C6.Drawing.copyConfig(this,K6W);};C6.Drawing.trendline.prototype.measure=function(){i_g.C8A();if(!this.showCallout || !C6.Drawing.callout){C6.Drawing.BaseTwoPoint.prototype.measure.call(this);}};C6.Drawing.trendline.prototype.reconstruct=function(I6f,h1e){C6.Drawing.segment.prototype.reconstruct.call(this,I6f,h1e);if(h1e.callout && C6.Drawing.callout){this.callout=new C6.Drawing.callout();this.callout.reconstruct(I6f,h1e.callout);this.showCallout=!!({});}};C6.Drawing.trendline.prototype.serialize=function(){var B3Q;B3Q=C6.Drawing.segment.prototype.serialize.call(this);i_g.C8A();if(this.showCallout && C6.Drawing.callout){B3Q.callout=this.callout.serialize();}return B3Q;};C6.Drawing.trendline.prototype.render=function(U9H){var g47,V5j,J9$,w3i,Y0T,c_5,n92,V_f,I79,p7C,u3v,I$P,g5o,K$c,j_e,A_M,H82,P7r,z6b,w0m,g28,Q1d,J$I;g47=\" \";g47+=\"Bars\";V5j=this.stx;J9$=V5j.panels[this.panelName];w3i=V5j.getYAxisByField(J9$,this.field);if(!J9$ || this.field && !w3i){return;}C6.Drawing.segment.prototype.render.call(this,U9H);if(!this.showCallout || !C6.Drawing.callout){this.callout=null;return;}if(!this.callout){this.callout=new C6.Drawing.callout();Y0T=C6.Drawing.segment.prototype.serialize.call(this);this.callout.reconstruct(V5j,Y0T);}this.callout.p0=C6.clone(this.p0);c_5=V5j.pixelFromTick(this.p0[0],J9$.chart);n92=V5j.pixelFromTick(this.p1[\"0\" - 0],J9$.chart);V_f=this.pixelFromValue(J9$,this.p0[0],this.p0[+\"1\"],w3i);I79=this.pixelFromValue(J9$,this.p1[0],this.p1[1],w3i);if(!isFinite(V_f) || !isFinite(I79)){return;}i_g.R_O(10);p7C=i_g.P_X(c_5,2,n92);i_g.R_O(10);u3v=i_g.M8Y(V_f,2,I79);this.fontSize=C6.stripPX(this.font && this.font.size || \"13\" ^ 0);i_g.R_O(0);var T6c=i_g.P_X(33,17);I$P=this.callout.w * 1.2 + (this.callout.stemEntry[\"0\" ^ 0] == \"c\"?0:T6c);g5o=Math.sqrt(Math.pow(n92 - c_5,2) + Math.pow(I79 - V_f,2));i_g.R_O(75);var c1D=i_g.P_X(3,13,3,2,16);i_g.U1h(23);var Z4Q=i_g.P_X(22,12,11);i_g.R_O(76);var b5E=i_g.P_X(16,37,4,9);i_g.R_O(77);var h$Z=i_g.P_X(4,0,18,15);K$c=I$P / (g5o || I$P) * (this.p1[c1D] < this.p0[Z4Q]?b5E:h$Z);i_g.U1h(78);j_e=i_g.M8Y(K$c,u3v,I79,p7C);i_g.U1h(79);A_M=i_g.M8Y(K$c,u3v,p7C,n92);i_g.U1h(1);this.callout.p0[i_g.P_X(\"0\",0)]=V5j.tickFromPixel(j_e,J9$.chart);this.callout.p0[1]=this.valueFromPixel(A_M,J9$,w3i);i_g.U1h(46);this.callout.v0=this.callout.p0[i_g.P_X(\"1\",32)];this.callout.p1=C6.clone(this.p0);this.callout.stx=V5j;this.callout.fillColor=this.fillColor || this.callout.fillColor;this.callout.borderColor=this.color;this.callout.font=this.font || this.callout.font;this.callout.noHandles=!![];i_g.U1h(8);var F6T=i_g.P_X(5,6);i_g.R_O(23);var j7f=i_g.P_X(37,18,20);H82=this.p1[F6T] - this.p0[j7f];i_g.R_O(73);i_g.P3W();var v0A=i_g.M8Y(38,423,9,10,15);i_g.R_O(30);var C9G=i_g.M8Y(13,0,9,3);i_g.U1h(80);var q9W=i_g.P_X(6,5,1,18);this.callout.text=\"\" + Number(H82).toFixed(v0A) + (this.p0[C9G] === 0?\"\":\" (\" + Number(100 * H82 / this.p0[+\"1\"]).toFixed(q9W) + \"%) \") + \"\" + Math.abs(this.p1[0] - this.p0[0]) + g47;P7r=Math.floor((this.p0[0] + this.p1[\"0\" << 64]) / +\"2\");if(Math.abs(this.p0[0] - this.p1[0]) > 1 && Math.abs(this.p0[0] - this.p1[0]) < 20){w0m=V5j.pixelFromTick(P7r,J9$.chart);i_g.R_O(81);g28=i_g.P_X(V_f,V_f,n92,w0m,I79,c_5,c_5);z6b=this.valueFromPixel(g28,J9$,w3i) || u3v;}else {z6b=this.valueFromPixel(u3v,J9$,w3i);}this.callout.stem={t:P7r,v:z6b};this.callout.setTextareaProps();this.callout.render(U9H);if(this.highlighted){Q1d=this.highlighted == \"p0\"?!0:![];J$I=this.highlighted == \"p1\"?!![]:!\"1\";this.littleCircle(U9H,c_5,V_f,Q1d);this.littleCircle(U9H,n92,I79,J$I);}};C6.Drawing.trendline.prototype.lineIntersection=function(v06,c0p,X5N,t$7){return C6.Drawing.BaseTwoPoint.prototype.lineIntersection.call(this,v06,c0p,X5N,\"segment\");};C6.Drawing.trendline.prototype.intersected=function(b9X,A$S,z5X){var M3u,y8t;if(!this.p0 || !this.p1){return null;}M3u=this.callout?this.callout.intersected(b9X,A$S,z5X):null;y8t=C6.Drawing.segment.prototype.intersected.call(this,b9X,A$S,z5X);if(this.callout){this.callout.highlighted=!!(M3u || y8t);}i_g.C8A();if(y8t){return y8t;}else if(M3u){return {action:\"move\",p0:C6.clone(this.p0),p1:C6.clone(this.p1),tick:b9X,value:this.valueOnDrawingAxis(b9X,A$S)};}return null;};C6.Drawing.getDrawingToolList=function(O_R){var z6I,G7z;z6I={};G7z={arrow_v0:!!({}),BaseTwoPoint:!0,fibonacci:!\"\",shape:!0};C6.extend(G7z,O_R);for(var m5$ in C6.Drawing){if(!G7z[m5$] && C6.Drawing[m5$].prototype.render){z6I[new C6.Drawing[m5$]().name]=m5$;}}return z6I;};};S6=f1Y=>{var A6G=q1l46;var V5k,X0g;V5k=\"e\";V5k+=\"aseOutCubic\";X0g=typeof _CIQ !== \"undefined\"?_CIQ:f1Y.CIQ;X0g.EaseMachine=function(i6A,Y3P,c$4,V5G){var b3g;b3g=\"str\";b3g+=\"ing\";if(typeof i6A === b3g){this.fc=X0g.EaseMachine[i6A];}else {this.fc=i6A;}this.ms=Y3P;A6G.C8A();if(c$4 || c$4 === 0){this.reset(c$4,V5G);}};X0g.EaseMachine.prototype.reset=function(D8R,l5q){var K2U;K2U=\"o\";K2U+=\"bj\";K2U+=\"ect\";if(!D8R && D8R !== 0){D8R=this.currentValues;}this.hasCompleted=!1;this.running=![];this.okayToRun=!!({});A6G.R_O(82);this.useNameValuePairs=A6G.M8Y(K2U,typeof l5q);this.startTime=Date.now();if(this.useNameValuePairs){this.startValues=D8R;this.endValues=l5q;}else {this.startValues={default:D8R};this.endValues={default:l5q};}this.changeValues={};this.currentValues={};for(var W$Q in this.startValues){this.changeValues[W$Q]=this.endValues[W$Q] - this.startValues[W$Q];}};X0g.EaseMachine.prototype.next=function(){var G2w;G2w=Date.now();if(G2w >= this.startTime + this.ms){G2w=this.startTime + this.ms;this.hasCompleted=!!1;this.running=![];}A6G.P3W();this.currentValues={};for(var k2$ in this.changeValues){this.currentValues[k2$]=this.fc(G2w - this.startTime,this.startValues[k2$],this.changeValues[k2$],this.ms);}if(!this.useNameValuePairs){return this.currentValues[\"default\"];}return this.currentValues;};X0g.EaseMachine.prototype.hasCompleted=!!1;X0g.EaseMachine.prototype.run=function(e$B,V1x,t3Y,G$c,A9s){var j3g;if(!A9s){A9s=window;}if(this.afid){A9s.cancelAnimationFrame(this.afid);}if(V1x || V1x === 0){this.reset(V1x,t3Y);}else if(t3Y || t3Y === 0){this.reset(this.currentValues,t3Y);}j3g=this;this.running=!\"\";function t8S(){var z$b;A6G.C8A();j3g.afid=null;if(!j3g.okayToRun){return;}z$b=j3g.next();e$B(z$b);if(j3g.hasCompleted){return;}j3g.afid=A9s.requestAnimationFrame(t8S);}if(G$c){this.afid=A9s.requestAnimationFrame(t8S);}else {t8S();}};X0g.EaseMachine.prototype.stop=function(d7w){var b15;b15=\"def\";b15+=\"ault\";if(!d7w){d7w=window;}if(this.afid){d7w.cancelAnimationFrame(this.afid);}this.afid=null;this.okayToRun=!({});this.hasCompleted=!![];this.running=!!\"\";if(typeof this.useNameValuePairs == \"undefined\"){return {};}if(!this.useNameValuePairs){return this.currentValues[b15];}return this.currentValues;};A6G.P3W();X0g.EaseMachine.easeInOutQuad=function(U_3,S$I,f5J,N_N){A6G.R_O(9);U_3/=A6G.P_X(N_N,2);if(U_3 < 1){A6G.U1h(83);return A6G.P_X(U_3,U_3,f5J,2,S$I);}U_3--;A6G.R_O(84);return A6G.M8Y(U_3,f5J,1,S$I,2,2,U_3);};X0g.EaseMachine.easeInOutCubic=function(o3f,h6f,W5g,L4y){A6G.R_O(20);o3f/=A6G.M8Y(0,\"2\",L4y);if(o3f < 1){A6G.R_O(85);return A6G.P_X(o3f,W5g,o3f,h6f,o3f,2);}A6G.C8A();o3f-=2;A6G.R_O(86);return A6G.P_X(h6f,W5g,o3f,o3f,2,o3f,\"2\");};X0g.EaseMachine.easeOutCubic=function(c_7,Y0V,W4a,k4p){c_7/=k4p;c_7--;A6G.U1h(87);A6G.P3W();return A6G.P_X(1,W4a,Y0V,c_7,c_7,c_7);};if(X0g.ChartEngine.prototype.animations.zoom.isStub){X0g.ChartEngine.prototype.animations.zoom=new X0g.EaseMachine(V5k,400);}};R0=J4j=>{var Q4z,v9Y,b_u;Q4z=\"unde\";Q4z+=\"fi\";Q4z+=\"ned\";v9Y=typeof _CIQ !== Q4z?_CIQ:J4j.CIQ;b_u=function(){var R3f=q1l46;var Y2T,L6c,X3_,D5v,W8Y,g$b,v34,r0E,W9s,V$X,a$$,d0w,K5J,d4v,z6D,i37,a$H;Y2T=0;function C_n(X6M){if(Math.asinh){return Math.asinh(X6M);}if(X6M === -Infinity){return X6M;}return Math.log(X6M + Math.sqrt(X6M * X6M + 1));}function D3K(q2K,F1X){R3f.R_O(88);return R3f.M8Y(q2K,F1X);}function F56(t32,L0M){R3f.P3W();return Boolean(t32 && L0M);}function o9P(d2y){return Math.acosh?Math.acosh(d2y):Math.log(d2y + Math.sqrt(d2y * d2y - \"1\" * 1));}function f4a(z8s,R8K){R3f.R_O(89);return R3f.P_X(z8s,R8K);}function c4P(l_s,L4E){R3f.R_O(90);return R3f.M8Y(L4E,l_s);}function H$p(x7n,x7T){var l0e;l0e=\"[obje\";l0e+=\"ct Array]\";if(Object.prototype.toString.call(x7n) != l0e){return [x7n,x7T];}x7n=x7n.slice();R3f.P3W();x7n.push(x7T);return x7n;}function J6k(q5X,d39){R3f.P3W();return Boolean(q5X || d39);}L6c=1;X3_=2;function L0s(V2a,z9b){R3f.U1h(91);return R3f.P_X(z9b,V2a);}D5v=3;function i8d(q4I){R3f.C8A();return Math.cosh?Math.cosh(q4I):(Math.exp(q4I) + Math.exp(-q4I)) / 2;}function e4C(p0u){R3f.C8A();return Math.atanh?Math.atanh(p0u):Math.log((1 + p0u) / (\"1\" - 0 - p0u)) / (\"2\" - 0);}function r7Y(R1i,i3d,J52){return R1i?i3d:J52;}function d7C(M_R,Q7Z,l06,A67){this.tokens=M_R;this.ops1=Q7Z;this.ops2=l06;this.functions=A67;}W8Y=4;function H$8(){var k2n,K5h;if(Math.hypot){return Math.hypot.apply(this,arguments);}k2n=0;K5h=arguments.length;for(var N$m=0;N$m < K5h;N$m++){if(arguments[N$m] === Infinity || arguments[N$m] === -Infinity){return Infinity;}k2n+=arguments[N$m] * arguments[N$m];}R3f.P3W();return Math.sqrt(k2n);}g$b=/[\\u00ad\\u0600-\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]|\\u070f|\\u17b4|\\u0604|\\u17b5/g;v34=/[\\\\'\\x7f-\\x9f\\u00ad\\u0600-\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]|\\u070f|\\u17b4|\\u0604|\\u17b5/g;r0E={\"\\b\":\"\\\\b\",\"\\t\":\"\\\\t\",\"\\n\":\"\\\\n\",\"\\f\":\"\\\\f\",\"\\r\":\"\\\\r\",\"'\":\"\\\\'\",\"\\\\\":\"\\\\\\\\\"};v9Y.extend(d7C.prototype,{simplify:function(e1J){var n_N,G6$,D2e,h1q,A6d,M9n,m9m,F5b,Z3j;e1J=e1J || ({});R3f.C8A();n_N=[];G6$=[];M9n=this.tokens.length;F5b=0;for(F5b=+\"0\";F5b < M9n;F5b++){m9m=this.tokens[F5b];Z3j=m9m.type_;if(Z3j === Y2T){n_N.push(m9m);}else if(Z3j === D5v && (m9m.index_ in e1J)){m9m=new W5$(Y2T,0,0,e1J[m9m.index_]);n_N.push(m9m);}else if(Z3j === X3_ && n_N.length > 1){h1q=n_N.pop();D2e=n_N.pop();A6d=this.ops2[m9m.index_];m9m=new W5$(Y2T,+\"0\",0,A6d(D2e.number_,h1q.number_));n_N.push(m9m);}else if(Z3j === L6c && n_N.length > 0){D2e=n_N.pop();A6d=this.ops1[m9m.index_];m9m=new W5$(Y2T,0,0,A6d(D2e.number_));n_N.push(m9m);}else {while(n_N.length > +\"0\"){G6$.push(n_N.shift());}G6$.push(m9m);}}while(n_N.length > 0){G6$.push(n_N.shift());}return new d7C(G6$,w1z(this.ops1),w1z(this.ops2),w1z(this.functions));},substitute:function(o0q,r3H){var n_O,t$V,A2w,H1A,W9C,F1N,I8M,j3G,y3V,X4b,Z7i;if(!(r3H instanceof d7C)){r3H=new Y8B().parse(String(r3H));}n_O=518305760;t$V=-+\"848390954\";R3f.U1h(46);A2w=R3f.P_X(\"2\",64);for(var J78=1;R3f.I9N(J78.toString(),J78.toString().length,72791) !== n_O;J78++){H1A=[];A2w+=2;}if(R3f.G33(A2w.toString(),A2w.toString().length,27577) !== t$V){H1A=[];}W9C=this.tokens.length;I8M=0;for(I8M=\"0\" ^ 0;I8M < W9C;I8M++){F1N=this.tokens[I8M];j3G=F1N.type_;if(j3G === D5v && F1N.index_ === o0q){for(var D0O=0;D0O < r3H.tokens.length;D0O++){y3V=r3H.tokens[D0O];X4b=new W5$(y3V.type_,y3V.index_,y3V.prio_,y3V.number_);H1A.push(X4b);}}else {H1A.push(F1N);}}Z7i=new d7C(H1A,w1z(this.ops1),w1z(this.ops2),w1z(this.functions));return Z7i;},evaluate:function(a5k){var V11,O_x,I9I,R$s,J7v,j6X,n_I,b9z,g2U;a5k=a5k || ({});V11=[];J7v=this.tokens.length;n_I=0;for(n_I=0;n_I < J7v;n_I++){j6X=this.tokens[n_I];b9z=j6X.type_;if(b9z === Y2T){V11.push(j6X.number_);}else if(b9z === X3_){I9I=V11.pop();O_x=V11.pop();R$s=this.ops2[j6X.index_];V11.push(R$s(O_x,I9I));}else if(b9z === D5v){if((j6X.index_ in a5k)){V11.push(a5k[j6X.index_]);}else if((j6X.index_ in this.functions)){V11.push(this.functions[j6X.index_]);}else {throw new Error(\"undefined variable: \" + j6X.index_);}}else if(b9z === L6c){O_x=V11.pop();R$s=this.ops1[j6X.index_];V11.push(R$s(O_x));}else if(b9z === W8Y){O_x=V11.pop();R$s=V11.pop();if(R$s.apply && R$s.call){if(Object.prototype.toString.call(O_x) == \"[object Array]\"){V11.push(R$s.apply(undefined,O_x));}else {V11.push(R$s.call(undefined,O_x));}}else {R3f.R_O(0);throw new Error(R3f.M8Y(\" is not a function\",R$s));}}else {throw new Error(\"invalid Expression\");}}if(V11.length > 1){g2U=\"invalid E\";g2U+=\"xpress\";g2U+=\"ion (\";g2U+=\"parity)\";throw new Error(g2U);}R3f.C8A();return V11[0];},toString:function(j8n){var A8m,s16,H3T,Q4v,v0m,R1y,h7L,d3S;A8m=[];v0m=this.tokens.length;R3f.U1h(42);h7L=R3f.P_X(\"0\",0);for(h7L=0;h7L < v0m;h7L++){R1y=this.tokens[h7L];d3S=R1y.type_;if(d3S === Y2T){A8m.push(s5s(R1y.number_));}else if(d3S === X3_){H3T=A8m.pop();s16=A8m.pop();Q4v=R1y.index_;if(j8n && Q4v == ((\"2361\" | 24) > (9084,6960)?8355 == (4913,\"72.95\" - 0)?774.81:(!1,489.19):\"^\")){R3f.R_O(92);A8m.push(R3f.M8Y(\")\",200.47 > (9415,+\"867.61\")?(\"j\",9.86e+3):+\"3863\" > (5331,6420)?(!0,0xf64):(+\"90.85\",2250) < (+\"2457\",733.54)?!1:\",\",s16,H3T,\"Math.pow(\"));}else {R3f.R_O(92);A8m.push(R3f.M8Y((779,5280) > (9039,+\"9570\")?(![],\"3.86e+3\" << 64):(5970,9630) < (943.21,330.9)?(!!({}),609.57):\")\",Q4v,s16,H3T,(908.49,3240) > (26,3658)?\"B\":\"(\"));}}else if(d3S === D5v){A8m.push(R1y.index_);}else if(d3S === L6c){s16=A8m.pop();Q4v=R1y.index_;if(Q4v === (652.29 === 10.54?608.88:\"-\")){R3f.R_O(59);A8m.push(R3f.P_X((+\"6659\",8930) > +\"274.77\"?9110 > (5344,7320)?(584.83,5822) < 9952?\")\":(7.40e+3,0x249a):228.04:(\"s\",0x22c7),Q4v,\"(\",s16));}else {R3f.U1h(59);A8m.push(R3f.M8Y(8090 < +\"6480\"?(6320,7690) >= 364.22?![]:\"u\":\")\",(\"784.19\" * 1,215.37) < 1782?3152 == (\"406.62\" * 1,858.27)?(0x899,\"t\"):\"(\":0x1576,Q4v,s16));}}else if(d3S === W8Y){s16=A8m.pop();Q4v=A8m.pop();R3f.U1h(59);A8m.push(R3f.P_X((6830,805.65) == (+\"958\",\"1530\" | 48)?(2.88e+2,!!({})):599.3 == 630.04?\"j\":\")\",(4380,\"4580\" * 1) === (2236,953)?\"u\":\"(\",Q4v,s16));}else {throw new Error(\"invalid Expression\");}}if(A8m.length > 1){throw new Error(\"invalid Expression (parity)\");}return A8m[0];},variables:function(){var H1Y,L6$,D7S;H1Y=this.tokens.length;L6$=[];for(var P2h=0;P2h < H1Y;P2h++){D7S=this.tokens[P2h];if(D7S.type_ === D5v && L6$.indexOf(D7S.index_) == -1){L6$.push(D7S.index_);}}return L6$;}},!!1);Y8B.parse=function(V5d){R3f.C8A();return new Y8B().parse(V5d);};function v9p(q33){var c$Y;q33=Math.floor(q33);R3f.C8A();c$Y=q33;while(q33 > 1){R3f.R_O(93);c$Y=R3f.P_X(c$Y,--q33);}return c$Y;}function N4F(j6h){return Math.log(j6h) * Math.LOG10E;}Y8B.evaluate=function(t9N,s_k){return Y8B.parse(t9N).evaluate(s_k);};function a_a(a8J){if(Math.trunc){return Math.trunc(a8J);}R3f.C8A();return a8J < 0?Math.ceil(a8J):Math.floor(a8J);}function w1z(P_d){S1H.prototype=P_d;function S1H(){}return new S1H();}function s5s(q2i){var z2K;R3f.C8A();z2K=\"str\";z2K+=\"ing\";if(typeof q2i === z2K){v34.lastIndex=+\"0\";return v34.test(q2i)?((519.48,166.92) == 5806?+\"0x5c6\":9620 > 6540?\"'\":!\"1\") + q2i.replace(v34,function(m3N){var z9U,C38,e6w,K0g;R3f.U1h(46);z9U=-R3f.P_X(\"1245437467\",32);C38=532719709;e6w=2;for(var J1$=1;R3f.I9N(J1$.toString(),J1$.toString().length,57629) !== z9U;J1$++){K0g=r0E[m3N];e6w+=2;}if(R3f.I9N(e6w.toString(),e6w.toString().length,\"76579\" ^ 0) !== C38){K0g=r0E[m3N];}K0g=r0E[m3N];return typeof K0g === \"string\"?K0g:\"\\\\u\" + (\"0000\" + m3N.charCodeAt(+\"0\").toString(\"16\" >> 32)).slice(-4);}) + (947.74 >= (7850,3195)?(!1,!!\"1\"):7530 === (+\"750.55\",611.12)?(!!1,\"0xe6d\" << 64):9710 === (852.55,\"4865\" * 1)?\"S\":\"'\"):\"'\" + q2i + ((7750,3015) === 575.22?6.48e+3:158.02 != 336.94?+\"8130\" < (797.76,3230)?\"5.20e+3\" - 0:\"'\":(21.25,!({})));}return q2i;}Y8B.Expression=d7C;function C23(i78,v1n){R3f.U1h(94);R3f.C8A();return R3f.M8Y(v1n,i78);}Y8B.values={sin:Math.sin,cos:Math.cos,tan:Math.tan,asin:Math.asin,acos:Math.acos,atan:Math.atan,sinh:h6Z,cosh:i8d,tanh:v$a,asinh:C_n,acosh:o9P,atanh:e4C,sqrt:Math.sqrt,log:Math.log,lg:N4F,log10:N4F,abs:Math.abs,ceil:Math.ceil,floor:Math.floor,round:Math.round,trunc:a_a,fac:v9p,exp:Math.exp,min:Math.min,max:Math.max,hypot:H$8,pyt:H$8,pow:Math.pow,atan2:Math.atan2,if:r7Y,E:Math.E,PI:Math.PI};R3f.R_O(46);W9s=R3f.P_X(1,0);function v4p(R9r,y5o){R3f.R_O(8);R3f.P3W();return R3f.M8Y(y5o,R9r);}function v$a(n68){if(Math.tanh){return Math.tanh(n68);}R3f.C8A();if(n68 === Infinity){return 1;}if(n68 === -Infinity){return -1;}return (Math.exp(n68) - Math.exp(-n68)) / (Math.exp(n68) + Math.exp(-n68));}function Q4V(I_Z,N$p){R3f.C8A();R3f.R_O(2);return R3f.P_X(I_Z,N$p);}R3f.U1h(46);V$X=R3f.P_X(1,1);R3f.U1h(95);a$$=R3f.P_X(2,\"1\");R3f.R_O(46);R3f.P3W();d0w=R3f.M8Y(1,3);R3f.U1h(46);K5J=R3f.P_X(1,4);R3f.U1h(46);d4v=R3f.P_X(1,5);function k8F(M83){R3f.C8A();return -M83;}function f9V(P_i,Q3D){R3f.C8A();R3f.U1h(9);return R3f.M8Y(P_i,Q3D);}function q7T(B$w,S6W){R3f.P3W();R3f.R_O(82);return R3f.P_X(S6W,B$w);}function j9u(l75,d6v){R3f.R_O(96);return R3f.M8Y(l75,d6v);}R3f.R_O(46);z6D=R3f.M8Y(1,6);R3f.R_O(46);i37=R3f.M8Y(1,7);R3f.R_O(95);a$H=R3f.P_X(8,\"1\");v9Y.extend(Y8B.prototype,{parse:function(U2i){var N_1,Y8U,z2m,Q10,z51,f0z,Z4e,I3o,N3$,F_J,z7p,Q2P,x9N,d1D,P6Y,f5N;this.errormsg=\"\";this.success=!!1;N_1=[];Y8U=[];this.tmpprio=0;R3f.U1h(97);z2m=R3f.M8Y(W9s,a$$,z6D,d0w);Q10=0;this.expression=U2i;this.pos=0;while(this.pos < this.expression.length){if(this.isOperator()){if(this.isSign() && z2m & z6D){if(this.isNegativeSign()){this.tokenprio=2;this.tokenindex=1160 != (769.65,586.09)?\"-\":(+\"7590\",\"807.26\" - 0) != (650.78,395.25)?\"885.94\" - 0 !== 5770?4.88e+3:0x1a38:\"T\";Q10++;this.addfunc(Y8U,N_1,L6c);}R3f.U1h(97);z2m=R3f.P_X(W9s,a$$,z6D,d0w);}else if(this.isComment()){}else {if((z2m & V$X) === +\"0\"){this.error_parsing(this.pos,\"unexpected operator\");}Q10+=2;this.addfunc(Y8U,N_1,X3_);R3f.R_O(97);z2m=R3f.M8Y(W9s,a$$,z6D,d0w);}}else if(this.isNumber()){if((z2m & W9s) === 0){this.error_parsing(this.pos,\"unexpected number\");}z51=new W5$(Y2T,0,0,this.tokennumber);Y8U.push(z51);R3f.R_O(98);z2m=R3f.P_X(K5J,V$X,d4v);}else if(this.isString()){if((z2m & W9s) === 0){this.error_parsing(this.pos,\"unexpected string\");}z51=new W5$(Y2T,0,+\"0\",this.tokennumber);Y8U.push(z51);R3f.U1h(98);z2m=R3f.P_X(K5J,V$X,d4v);}else if(this.isLeftParenth()){if((z2m & d0w) === 0){this.error_parsing(this.pos,'unexpected \"(\"');}if(z2m & i37){Q10+=2;this.tokenprio=-2;this.tokenindex=-1;this.addfunc(Y8U,N_1,W8Y);}R3f.U1h(99);z2m=R3f.M8Y(z6D,a$$,d0w,W9s,a$H);}else if(this.isRightParenth()){if(z2m & a$H){z51=new W5$(Y2T,0,0,[]);Y8U.push(z51);}else if((z2m & K5J) === +\"0\"){this.error_parsing(this.pos,'unexpected \")\"');}R3f.R_O(99);z2m=R3f.M8Y(d0w,d4v,K5J,V$X,i37);}else if(this.isComma()){if((z2m & d4v) === 0){f0z=\"unexpect\";f0z+=\"ed \\\"\";f0z+=\",\\\"\";this.error_parsing(this.pos,f0z);}this.addfunc(Y8U,N_1,X3_);Q10+=2;R3f.R_O(97);z2m=R3f.P_X(W9s,a$$,z6D,d0w);}else if(this.isConst()){if((z2m & W9s) === 0){Z4e=\"unexpect\";Z4e+=\"ed consta\";Z4e+=\"nt\";this.error_parsing(this.pos,Z4e);}I3o=new W5$(Y2T,0,+\"0\",this.tokennumber);Y8U.push(I3o);R3f.U1h(98);z2m=R3f.P_X(K5J,V$X,d4v);}else if(this.isOp2()){if((z2m & a$$) === 0){this.error_parsing(this.pos,\"unexpected function\");}this.addfunc(Y8U,N_1,X3_);Q10+=2;z2m=d0w;}else if(this.isOp1()){if((z2m & a$$) === 0){N3$=\"unexpec\";N3$+=\"ted functi\";N3$+=\"o\";N3$+=\"n\";this.error_parsing(this.pos,N3$);}this.addfunc(Y8U,N_1,L6c);Q10++;z2m=d0w;}else if(this.isVar()){if((z2m & W9s) === 0){this.error_parsing(this.pos,\"unexpected variable\");}R3f.U1h(46);F_J=new W5$(D5v,this.tokenindex,0,R3f.P_X(\"0\",64));Y8U.push(F_J);R3f.U1h(99);z2m=R3f.P_X(d0w,d4v,K5J,V$X,i37);}else if(this.isWhite()){}else {if(this.errormsg === \"\"){z7p=\"unknown c\";z7p+=\"har\";z7p+=\"acter\";this.error_parsing(this.pos,z7p);}else {this.error_parsing(this.pos,this.errormsg);}}}if(this.tmpprio < (\"0\" | 0) || this.tmpprio >= 10){Q2P=\"unmatched\";Q2P+=\" \\\"(\";Q2P+=\")\\\"\";this.error_parsing(this.pos,Q2P);}while(N_1.length > 0){x9N=N_1.pop();Y8U.push(x9N);}if(Q10 + 1 !== Y8U.length){this.error_parsing(this.pos,\"parity\");}d1D=2108492307;R3f.R_O(42);P6Y=-R3f.P_X(\"1635170846\",0);f5N=2;for(var G4l=1;R3f.I9N(G4l.toString(),G4l.toString().length,63433) !== d1D;G4l++){return new d7C(Y8U,w1z(this.ops1),w1z(this.ops2),w1z(this.functions));}if(R3f.I9N(f5N.toString(),f5N.toString().length,41360) !== P6Y){return new d7C(Y8U,w1z(this.ops1),w1z(this.ops2),w1z(this.functions));}return new d7C(Y8U,w1z(this.ops1),w1z(this.ops2),w1z(this.functions));},evaluate:function(V6g,n6m){return this.parse(V6g).evaluate(n6m);},error_parsing:function(D3f,S0c){var q_W;q_W=\"]\";q_W+=\": \";this.success=![];R3f.R_O(59);R3f.P3W();this.errormsg=R3f.P_X(S0c,D3f,\"parse error [column \",q_W);this.column=D3f;throw new Error(this.errormsg);},addfunc:function(Z2o,K8z,S$1){R3f.P3W();var P9S;P9S=new W5$(S$1,this.tokenindex,this.tokenprio + this.tmpprio,0);while(K8z.length > 0){if(P9S.prio_ <= K8z[K8z.length - 1].prio_){Z2o.push(K8z.pop());}else {break;}}K8z.push(P9S);},isNumber:function(){var K2T,D48,D5D;K2T=!({});D48=\"\";while(this.pos < this.expression.length){D5D=this.expression.charCodeAt(this.pos);if(D5D >= \"48\" * 1 && D5D <= 57 || D5D === 46){D48+=this.expression.charAt(this.pos);this.pos++;this.tokennumber=parseFloat(D48);K2T=!!1;}else {break;}}return K2T;},unescape:function(a7q,T07){var U_6,n5v,s9O,M6v,U$V;U_6=[];n5v=!!0;R3f.C8A();for(var A5e=0;A5e < a7q.length;A5e++){s9O=a7q.charAt(A5e);if(n5v){switch(s9O){case \"'\":U_6.push(919 === 4320?(3860,266.72) != (\"7300\" | 0,2)?!!({}):134.68:\"'\");break;case \"\\\\\":U_6.push(\"\\\\\");break;case (+\"1790\",344.46) < (8140,2440)?6070 !== (4010,122)?\"/\":(8700,+\"8518\") >= 8852?!![]:0xa24:(!![],\"1.66e+3\" >> 32):U_6.push(6690 == 3370?5820 != 6080?(\"s\",\"90.77\" - 0):(!!({}),\"0x13df\" - 0):\"/\");break;case +\"2041\" === 713.07?551.62:(986,4537) >= 9295?(676.04,!![]):\"b\":U_6.push((687.41,+\"4886\") != (+\"2995\",505)?(3680,847.33) <= 576.97?(2.99e+3,\"E\"):464.94 === 1845?(\"b\",\"M\"):\"\\b\":(!![],\"M\"));break;case (4220,737.67) <= (+\"5430\",6080)?\"f\":1.04e+3:U_6.push((2230,2004) > (8540,+\"9672\")?(7770,505.83) < (3380,2058)?(\"429\" >> 0,+\"7343\") >= (7751,36.09)?(!({}),541):(!!\"\",!!({})):(8.64e+3,0x139e):\"\\f\");break;case (92,\"326\" | 0) < 748.56?\"n\":!({}):U_6.push((667.01,3860) > (6176,7380)?2290 === 1012?370.59:330.49 === 359.44?(+\"856\",\"X\"):(!!\"\",!({})):\"\\n\");break;case (+\"888.28\",37) <= (853.45,1847)?564.63 >= (6950,166.71)?\"r\":0x3e7:![]:U_6.push((9180,629) === 755?(7.76e+3,0x11df):(342.57,7723) != (+\"7330\",8140)?\"\\r\":571 != 282.17?(0x10ab,+\"706.18\"):\"6.04e+3\" << 64);break;case 77.23 !== (7357,5154)?\"t\":(6231,4748) == (+\"8300\",459.25)?479.44:(3270,1060) === (6340,1186)?177.08:(237.76,0x134f):U_6.push(\"\\t\");break;case \"u\":M6v=parseInt(a7q.substring(A5e + 1,A5e + (\"5\" >> 32)),16);U_6.push(String.fromCharCode(M6v));R3f.U1h(46);A5e+=R3f.M8Y(\"4\",32);break;default:U$V=\"Illegal escape\";U$V+=\" sequence\";U$V+=\": \";U$V+=\"'\\\\\";R3f.R_O(0);throw this.error_parsing(R3f.M8Y(A5e,T07),R3f.M8Y(s9O,\"'\",U$V,R3f.R_O(14)));}n5v=!!\"\";}else {if(s9O == (411.66 > 7614?(0x1f4e,7.81e+3):4110 !== (7082,+\"389\")?+\"45\" !== 203.51?\"\\\\\":\"i\":(7.22e+3,!1))){n5v=!!({});}else {U_6.push(s9O);}}}return U_6.join(\"\");},isString:function(){var k8h,Q8z,V3f,j3X;k8h=!({});Q8z=\"\";V3f=this.pos;if(this.pos < this.expression.length && this.expression.charAt(this.pos) == \"'\"){this.pos++;while(this.pos < this.expression.length){j3X=this.expression.charAt(this.pos);if(j3X != ((879,208.94) === (4226,392.29)?\"e\":\"'\") || Q8z.slice(-1) == \"\\\\\"){Q8z+=this.expression.charAt(this.pos);this.pos++;}else {this.pos++;this.tokennumber=this.unescape(Q8z,V3f);k8h=!![];break;}}}R3f.P3W();return k8h;},isConst:function(){var S7s,k3X;for(var s1J in this.consts){if(!\"\"){k3X=s1J.length;S7s=this.expression.substr(this.pos,k3X);if(s1J === S7s){this.tokennumber=this.consts[s1J];this.pos+=k3X;return !0;}}}R3f.C8A();return !({});},isOperator:function(){var b0i,d3J;b0i=this.expression.charCodeAt(this.pos);if(b0i === 43){this.tokenprio=2;this.tokenindex=608.79 !== (4911,+\"4900\")?\"+\":\"F\";}else if(b0i === 45){R3f.U1h(34);this.tokenprio=R3f.P_X(\"2\",0);this.tokenindex=\"-\";}else if(b0i === 62){if(this.expression.charCodeAt(this.pos + 1) === (\"61\" ^ 0)){this.pos++;this.tokenprio=1;this.tokenindex=\">=\";}else {this.tokenprio=1;this.tokenindex=\">\";}}else if(b0i === 60){if(this.expression.charCodeAt(this.pos + 1) === +\"61\"){d3J=\"<\";d3J+=\"=\";this.pos++;this.tokenprio=1;this.tokenindex=d3J;}else {this.tokenprio=1;this.tokenindex=6970 != 962.38?1670 != (8380,+\"671\")?+\"6250\" !== 2930?\"<\":692.20:(3.14e+3,395.50):0x1c5;}}else if(b0i === 124){if(this.expression.charCodeAt(this.pos + 1) === 124){this.pos++;this.tokenprio=1;this.tokenindex=\"||\";}else {return !!\"\";}}else if(b0i === 61){if(this.expression.charCodeAt(this.pos + 1) === 61){this.pos++;this.tokenprio=1;this.tokenindex=\"==\";}else {return !!0;}}else if(b0i === 33){if(this.expression.charCodeAt(this.pos + 1) === 61){this.pos++;R3f.R_O(42);this.tokenprio=R3f.P_X(\"1\",32);this.tokenindex=\"!=\";}else {return !({});}}else if(b0i === 97){if(this.expression.charCodeAt(this.pos + 1) === 110 && this.expression.charCodeAt(this.pos + 2) === 100){this.pos++;this.pos++;this.tokenprio=0;this.tokenindex=\"and\";}else {return !\"1\";}}else if(b0i === 111){if(this.expression.charCodeAt(this.pos + 1) === 114){this.pos++;this.tokenprio=0;this.tokenindex=\"or\";}else {return !\"1\";}}else if(b0i === \"42\" << 0 || b0i === 8729 || b0i === \"8226\" - 0){this.tokenprio=3;this.tokenindex=4030 <= \"904.9\" - 0?\"0x141b\" * 1:\"*\";}else if(b0i === 47){this.tokenprio=4;this.tokenindex=(59,5020) >= 9590?(\"I\",2.49e+3):\"/\";}else if(b0i === +\"37\"){this.tokenprio=4;this.tokenindex=(7110,3559) === (515.59,608.57)?0x173:\"%\";}else if(b0i === 94){this.tokenprio=5;this.tokenindex=(+\"4260\",6590) != 1310?\"^\":(5280,938.87) <= +\"7341\"?(+\"0x1192\",\"k\"):(\"k\",!![]);}else {return !({});}this.pos++;return !\"\";},isSign:function(){var Q40;Q40=this.expression.charCodeAt(this.pos - 1);R3f.P3W();if(Q40 === 45 || Q40 === 43){return !!\"1\";}return !\"1\";},isPositiveSign:function(){var o6i;R3f.C8A();o6i=this.expression.charCodeAt(this.pos - 1);if(o6i === 43){return !![];}return ![];},isNegativeSign:function(){R3f.P3W();var e8h;e8h=this.expression.charCodeAt(this.pos - 1);if(e8h === 45){return !!({});}return ![];},isLeftParenth:function(){var W2W;R3f.P3W();W2W=this.expression.charCodeAt(this.pos);if(W2W === 40){this.pos++;this.tmpprio+=10;return !\"\";}return !\"1\";},isRightParenth:function(){var k5j;k5j=this.expression.charCodeAt(this.pos);R3f.C8A();if(k5j === 41){this.pos++;this.tmpprio-=10;return !!({});}return !({});},isComma:function(){var F0l;F0l=this.expression.charCodeAt(this.pos);if(F0l === 44){this.pos++;this.tokenprio=-1;this.tokenindex=\",\";return !!1;}return !1;},isWhite:function(){var l$2;l$2=this.expression.charCodeAt(this.pos);R3f.C8A();if(l$2 === 32 || l$2 === +\"9\" || l$2 === \"10\" >> 64 || l$2 === 13){this.pos++;return !!({});}return ![];},isOp1:function(){var Z0H,B0J;Z0H=\"\";R3f.P3W();for(var B9y=this.pos;B9y < this.expression.length;B9y++){B0J=this.expression.charAt(B9y);if(B0J.toUpperCase() === B0J.toLowerCase()){if(B9y === this.pos || B0J != (727.09 <= \"191.14\" * 1?0x8d0:(2840,5999) != (615,+\"854.41\")?\"_\":(+\"6.16e+3\",915.45)) && (B0J < \"0\" || B0J > ((749.97,5185) < 272.36?3907 == 149.88?(\"f\",\"X\"):\"Q\":\"9\"))){break;}}Z0H+=B0J;}if(Z0H.length > 0 && (Z0H in this.ops1)){this.tokenindex=Z0H;this.tokenprio=5;this.pos+=Z0H.length;return !![];}return !1;},isOp2:function(){R3f.P3W();var b8P,h$9;b8P=\"\";for(var B_n=this.pos;B_n < this.expression.length;B_n++){h$9=this.expression.charAt(B_n);if(h$9.toUpperCase() === h$9.toLowerCase()){if(B_n === this.pos || h$9 != (3707 == (2940,569.76)?(+\"0x1799\",7.38e+3):5674 != (31.22,6.48)?874 == (7910,\"892.15\" - 0)?(+\"9.99e+2\",4.40e+3):\"_\":(0xff2,\"I\")) && (h$9 < \"0\" || h$9 > ((+\"9480\",6320) == (8540,4631)?(3.05e+3,8.27e+3):3424 > 9097?(0x2410,2.94e+3):\"9\"))){break;}}b8P+=h$9;}if(b8P.length > 0 && (b8P in this.ops2)){this.tokenindex=b8P;this.tokenprio=5;this.pos+=b8P.length;return !\"\";}return !({});},isVar:function(){var D7b,z8y;D7b=\"\";for(var b8V=this.pos;b8V < this.expression.length;b8V++){z8y=this.expression.charAt(b8V);if(z8y.toUpperCase() === z8y.toLowerCase()){if(b8V === this.pos || z8y != ((5093,796) === 260.71?!!0:(869.71,\"221\" - 0) !== (837,978.38)?\"_\":(8.41e+3,!\"1\")) && (z8y < ((330.6,2982) >= (+\"5300\",5918)?(5.07e+3,72):\"0\") || z8y > \"9\")){break;}}D7b+=z8y;}if(D7b.length > 0){this.tokenindex=D7b;this.tokenprio=4;this.pos+=D7b.length;return !0;}return !1;},isComment:function(){var W2h,O2X;W2h=this.expression.charCodeAt(this.pos - 1);if(W2h === 47 && this.expression.charCodeAt(this.pos) === 42){O2X=\"*\";O2X+=\"/\";R3f.U1h(100);var m7z=R3f.P_X(0,13,2,39,15);this.pos=this.expression.indexOf(O2X,this.pos) + m7z;if(this.pos === 1){this.pos=this.expression.length;}return !!\"1\";}return !\"1\";}},!0);function r5v(z2U,w7p){R3f.P3W();R3f.U1h(14);return R3f.M8Y(z2U,w7p,\"\");}function Y8B(){this.success=!!\"\";this.errormsg=\"\";this.expression=\"\";this.pos=0;this.tokennumber=0;this.tokenprio=0;this.tokenindex=0;this.tmpprio=0;this.ops1={sin:Math.sin,cos:Math.cos,tan:Math.tan,asin:Math.asin,acos:Math.acos,atan:Math.atan,sinh:h6Z,cosh:i8d,tanh:v$a,asinh:C_n,acosh:o9P,atanh:e4C,sqrt:Math.sqrt,log:Math.log,lg:N4F,log10:N4F,abs:Math.abs,ceil:Math.ceil,floor:Math.floor,round:Math.round,trunc:a_a,\"-\":k8F,exp:Math.exp};R3f.P3W();this.ops2={\"+\":t1N,\"-\":v4p,\"*\":Q4V,\"/\":f9V,\"%\":f4a,\"^\":Math.pow,\",\":H$p,\"||\":r5v,\"==\":q7T,\"!=\":c4P,\">\":C23,\"<\":j9u,\">=\":L0s,\"<=\":D3K,and:F56,or:J6k};this.functions={fac:v9p,min:Math.min,max:Math.max,hypot:H$8,pyt:H$8,pow:Math.pow,atan2:Math.atan2,if:r7Y};this.consts={E:Math.E,PI:Math.PI};}function h6Z(G4U){return Math.sinh?Math.sinh(G4U):(Math.exp(G4U) - Math.exp(-G4U)) / 2;}function t1N(I5A,a4K){return Number(I5A) + Number(a4K);}function W5$(s5T,a0h,j_z,W4E){this.type_=s5T;this.index_=a0h || 0;this.prio_=j_z || 0;this.number_=W4E !== undefined && W4E !== null?W4E:\"0\" >> 32;this.toString=function(){var d1M;switch(this.type_){case Y2T:return this.number_;case L6c:case X3_:case D5v:return this.index_;case W8Y:d1M=\"CAL\";d1M+=\"L\";return d1M;default:return \"Invalid Token\";}};}return Y8B;};v9Y.computeEquationChart=function(F_T,K6C){var i$o=q1l46;var C5O,o05,v1U,N_t,z0_,y24,N04,n6e,Y1T,C$g,G9e,F7C,k44,Q1k,g$6,R$z,C7d,j$1,c4m,S0N,g_p,R4d,Y9t;F_T=F_T.replace(/[:]/,\"1781\" << 0 === (3462,\"747\" >> 32)?(127.18,8.70e+3):(3863,4471) == (2406,5120)?(8.77e+3,0x1285):\"/\");C5O=0;for(var V9b in K6C){o05=\"symb\";o05+=\"ol\";v1U=\"\\\\\";v1U+=\"[\";N_t=new RegExp(v1U + V9b.replace(/\\[/g,\"\\\\[\").replace(/\\]/g,\"\\\\]\").replace(/\\$/g,\"\\\\$\").replace(/\\^/g,\"\\\\^\").replace(/[+\\-*/%()]/g,\"\\\\$&\") + \"\\\\]\",\"g\");i$o.U1h(0);F_T=F_T.replace(N_t,i$o.M8Y(C5O,o05));C5O++;}function q65(){var Q7Q,x4B;Q7Q=null;x4B=null;for(var E8E in N04){if(!x4B){x4B=N04[E8E];}else if(N04[E8E].d.getTime() < x4B.d.getTime()){Q7Q=x4B=N04[E8E];}else if(N04[E8E].d.getTime() > x4B.d.getTime()){Q7Q=x4B;}}if(Q7Q){if(!V9I(Q7Q)){return 0;}return -1;}return 1;}z0_=b_u().parse(F_T);y24=[];N04={};n6e=0;C$g=null;G9e=![];function V9I(x7J){x7J.i++;if(K6C[x7J.s]){if(x7J.i >= K6C[x7J.s].length){return 0;}Y1T=K6C[x7J.s][x7J.i];}if(!Y1T.DT){Y1T.DT=v9Y.strToDateTime(Y1T.Date);}i$o.P3W();x7J.d=Y1T.DT;return 1;}F7C=[];for(V9b in K6C){k44={sym:V9b,map:K6C[V9b]};if(K6C[V9b]){F7C.unshift(k44);}else {F7C.push(k44);}}for(var e_n=+\"0\";e_n < F7C.length;e_n++){Q1k=F7C[e_n];N04[Q1k.sym]={i:+\"0\",s:Q1k.sym};if(Q1k.map){n6e++;Y1T=Q1k.map[0];}else if(n6e == 1){G9e=Q1k.sym;}if(!Y1T.DT){Y1T.DT=v9Y.strToDateTime(Y1T.Date);}N04[Q1k.sym].d=Y1T.DT;if(!C$g){C$g=N04[Q1k.sym];}}i$o.U1h(101);g$6=i$o.M8Y(n6e,0);R$z=n6e == (\"1\" ^ 0) && F_T.indexOf(\"%\") == -1;a:while(!![]){C7d=q65();if(!C7d)break;if(C7d == (\"1\" ^ 0)){if(G9e){c4m=K6C[C$g.s][C$g.i][G9e];if(c4m && (c4m.Close || c4m.Close === 0)){c4m=c4m.Close;}S0N=z0_.evaluate({symbol0:K6C[C$g.s][C$g.i].Close,symbol1:c4m});S0N=Number(S0N.toFixed(8));j$1={DT:C$g.d,Close:S0N,Adj_Close:S0N};j$1[C$g.s]=K6C[C$g.s][C$g.i].Close;if(!isNaN(S0N) && S0N != Infinity){y24.push(j$1);}}else if(g$6){g_p=z0_.evaluate({});i$o.U1h(14);v9Y.alert(i$o.M8Y(707.45 == 6690?+\"0x632\":+\"684.72\" == (+\"757.07\",5087)?(\"45.83\" - 0,\"V\"):(7870,2243) > +\"592.82\"?\"=\":(9.87e+3,!!0),g_p,F_T));throw {name:\"NoException\",message:\"\"};}else {C5O=0;R4d={Adj_Close:{},Close:{},Open:{},High:{},Low:{},Volume:{}};for(V9b in K6C){for(var X9k in R4d){Y9t=\"sy\";Y9t+=\"mbol\";i$o.R_O(0);R4d[X9k][i$o.P_X(C5O,Y9t)]=K6C[V9b][N04[V9b].i][X9k];}C5O++;}j$1={DT:C$g.d};j$1.Adj_Close=z0_.evaluate(R4d.Adj_Close);j$1.Close=z0_.evaluate(R4d.Close);j$1.Open=z0_.evaluate(R4d.Open);j$1.Volume=z0_.evaluate(R4d.Volume);if(isNaN(j$1.Volume)){j$1.Volume=+\"0\";}if(R$z){j$1.High=z0_.evaluate(R4d.High);j$1.Low=z0_.evaluate(R4d.Low);}else {j$1.High=Math.max(j$1.Open,j$1.Close);j$1.Low=Math.min(j$1.Open,j$1.Close);}if(!isNaN(j$1.Close) && j$1.Close != Infinity){y24.push(j$1);}if(!isNaN(j$1.High)){j$1.High=Number(j$1.High.toFixed(+\"8\"));}if(!isNaN(j$1.Low)){j$1.Low=Number(j$1.Low.toFixed(8));}if(!isNaN(j$1.Open)){j$1.Open=Number(j$1.Open.toFixed(8));}if(!isNaN(j$1.Close)){j$1.Close=Number(j$1.Close.toFixed(8));}if(!isNaN(j$1.Adj_Close)){j$1.Adj_Close=Number(j$1.Adj_Close.toFixed(8));}else {j$1.Adj_Close=j$1.Close;}}for(V9b in K6C){if(!V9I(N04[V9b]))break a;}}}return y24;};};j5=E9W=>{var S7p=q1l46;S7p.C8A();var L4W,l9y;L4W=\"u\";L4W+=\"ndefine\";L4W+=\"d\";l9y=typeof _CIQ !== L4W?_CIQ:E9W.CIQ;l9y.ChartEngine.prototype.addEvent=function(u_V,o7i,m6S){if(!u_V){return;}var {chart:h08}=this;o7i=o7i || ({});o7i.isEvent=!\"\";if(!o7i.processResults){o7i.processResults=this.processEventResults;}if(!o7i.takedownResults){o7i.takedownResults=this.takedownEventResults;}o7i.responseHandler=e86=>{S7p.C8A();return Y4n=>{S7p.C8A();var J5r,Y93;J5r=h08.series[u_V];var {quotes:Q3F}=Y4n;if(!Q3F || !Q3F.length){return;}if(!Y4n.error){J5r.loading=!1;J5r.moreAvailable=Y4n.moreAvailable;J5r.upToDate=Y4n.upToDate;}Y93=[Y4n.beginDate || Q3F[0].DT,Y4n.endDate || Q3F[Q3F.length - 1].DT];if(!J5r.endPoints.begin || J5r.endPoints.begin > Y93[0]){J5r.endPoints.begin=Y93[0];}if(!J5r.endPoints.end || J5r.endPoints.end < Y93[1]){J5r.endPoints.end=Y93[1];}if(J5r.parameters.processResults){J5r.parameters.processResults(this,Y4n.error,J5r,Q3F);}};};this.addSeries(u_V,o7i,m6S);};l9y.ChartEngine.prototype.processEventResults=function(d4E,s83,a18,R_s){if(!s83 && l9y.Marker){for(var S1k of R_s){if(S1k.data){S1k.data.type=a18.id;l9y.Marker({stx:d4E,label:a18.id,x:S1k.DT,node:new l9y.Marker.Simple(S1k.data)});}}}};l9y.ChartEngine.prototype.takedownEventResults=function(H6R,T8W){S7p.C8A();if(l9y.Marker){l9y.Marker.removeByLabel(H6R,T8W);}};l9y.ChartEngine.prototype.removeEvent=function(Y_g){this.removeSeries(Y_g);};l9y.ChartEngine.prototype.removeAllEvents=function(){var {series:b76}=this.chart;S7p.C8A();if(b76){for(var R$K in b76){if(b76[R$K].parameters.isEvent){this.removeEvent(R$K);}}}};};X5=K23=>{var A$1=q1l46;var n69,K0N;n69=\"e\";n69+=\"n\";K0N=typeof _CIQ !== \"undefined\"?_CIQ:K23.CIQ;K0N.ChartEngine.prototype.setLocale=function(D4n,N4R){var B4Q,C53,M12,F5t,r9X,J17,s6e,E5E,V87,c3J,X9q,H9Z,I_5,e1p,z4Y,J4q;B4Q=\"s\";B4Q+=\"hort\";C53=\"num\";C53+=\"eric\";M12=\"2-digi\";M12+=\"t\";F5t=\"2-d\";F5t+=\"igit\";r9X=\"2-\";r9X+=\"digit\";J17=\"2-di\";J17+=\"git\";s6e=\"num\";s6e+=\"e\";s6e+=\"ric\";E5E=\"num\";E5E+=\"eric\";V87=\"num\";V87+=\"eric\";c3J=\"nu\";c3J+=\"mer\";c3J+=\"ic\";X9q=\"n\";X9q+=\"um\";X9q+=\"e\";X9q+=\"ric\";if(typeof Intl == \"undefined\"){return;}if(this.locale != D4n){this.locale=D4n;}else {return;}I_5=this.internationalizer={};I_5.hourMinute=new Intl.DateTimeFormat(this.locale,{hour:X9q,minute:c3J,hourCycle:\"h23\"});I_5.hourMinuteSecond=new Intl.DateTimeFormat(this.locale,{hour:V87,minute:E5E,second:s6e,hourCycle:\"h23\"});I_5.mdhm=new Intl.DateTimeFormat(this.locale,{year:J17,month:r9X,day:F5t,hour:M12,minute:\"2-digit\"});I_5.monthDay=new Intl.DateTimeFormat(this.locale,{month:\"numeric\",day:\"numeric\"});I_5.yearMonthDay=new Intl.DateTimeFormat(this.locale,{year:\"numeric\",month:\"numeric\",day:\"numeric\"});I_5.yearMonth=new Intl.DateTimeFormat(this.locale,{year:\"numeric\",month:C53});I_5.month=new Intl.DateTimeFormat(this.locale,{month:B4Q});I_5.numbers=new Intl.NumberFormat(this.locale);I_5.priceFormatters=[];if(!N4R){A$1.U1h(46);N4R=A$1.M8Y(\"8\",32);}for(H9Z=0;H9Z < N4R + 1;H9Z++){I_5.priceFormatters.push(new Intl.NumberFormat(this.locale,{maximumFractionDigits:H9Z,minimumFractionDigits:H9Z}));}for(H9Z=0;H9Z < 5;H9Z++){e1p=\"p\";e1p+=\"e\";e1p+=\"rcent\";z4Y=H9Z;J4q=H9Z;if(!H9Z){z4Y=\"\";J4q=2;}A$1.U1h(0);I_5[A$1.P_X(z4Y,e1p)]=new Intl.NumberFormat(this.locale,{style:\"percent\",minimumFractionDigits:J4q,maximumFractionDigits:J4q,signDisplay:\"exceptZero\"});}if(K0N.I18N.createMonthArrays){K0N.I18N.createMonthArrays(this,I_5.month,this.locale);}};K0N.ChartEngine.prototype.translateUI=function(i34){if(K0N.I18N.localized){K0N.I18N.translateUI(this.preferences.language,i34);}};K0N.I18N=function(){};K0N.I18N.hereDoc=function(r3m){return r3m.toString().replace(/^[^/]+\\/\\*!?/,\"\").replace(/ {4,10}/g,\"\").replace(/\\*\\/[^/]+$/,\"\");};K0N.I18N.language=n69;A$1.C8A();K0N.I18N.longMonths={zh:!0};K0N.I18N.reverseColorsByLocale={};K0N.I18N.findAllTextNodes=function(h3Y){var u8O,G7E,E7X,Z1F,l5f,M7p,G_U,q1k,u8i,p5U,b9k,f6C,Z5i,B$R,Z41,N9b;u8O=\"^\";u8O+=\"\\\\s\";u8O+=\"*$\";if(!h3Y){h3Y=document.body;}G7E=h3Y.ownerDocument.createTreeWalker(h3Y,NodeFilter.SHOW_TEXT | NodeFilter.SHOW_ELEMENT,{acceptNode(e0F) {A$1.C8A();if(e0F.nodeType === Node.TEXT_NODE || e0F.shadowRoot || e0F.placeholder){return NodeFilter.FILTER_ACCEPT;}return NodeFilter.FILTER_SKIP;}});E7X=G7E.nextNode();Z1F=new RegExp(u8O);l5f=new RegExp(\"\\n|\\t|\\f\",(43.75,606.19) != (8990,976.76)?\"g\":(9090,1192) != (4750,5205)?(!!\"1\",698.52):(869.27,0x1e29));M7p={};G_U={SCRIPT:!!({}),STYLE:!![],TEXTAREA:!!\"1\",\"CQ-SYMBOL\":!\"\"};while(E7X){if(E7X.shadowRoot){u8i=K0N.I18N.findAllTextNodes(E7X.shadowRoot);for(var g8W in u8i){if(!M7p[g8W]){M7p[g8W]=[];}M7p[g8W]=M7p[g8W].concat(u8i[g8W]);}}p5U=E7X.nodeValue;if(p5U && !Z1F.test(p5U)){b9k=\"[no-tr\";b9k+=\"anslate]\";f6C=E7X.parentNode;if(!G_U[f6C.tagName] && !f6C.matches(b9k)){Z5i=\"cq-\";Z5i+=\"translate-original\";B$R=\"cq-tr\";B$R+=\"ansl\";B$R+=\"ate-original\";q1k=f6C.getAttribute(B$R);if(q1k){p5U=q1k;}else {f6C.setAttribute(Z5i,p5U);}if(l5f.test(p5U)){p5U=p5U.replace(l5f,\"\");}if(!M7p[p5U]){M7p[p5U]=[];}M7p[p5U].push(E7X);}}p5U=E7X.placeholder;if(p5U && !Z1F.test(p5U)){if(!G_U[E7X.tagName]){q1k=E7X.getAttribute(\"cq-translate-placeholder-original\");if(q1k){p5U=q1k;}else {E7X.setAttribute(\"cq-translate-placeholder-original\",p5U);}if(!M7p[p5U]){M7p[p5U]=[];}M7p[p5U].push(E7X);}}if(E7X.tagName && G_U[E7X.tagName]){E7X=G7E.nextSibling();}else {E7X=G7E.nextNode();}}if(h3Y == document.body){Z41=K0N.Studies?K0N.Studies.studyLibrary:null;if(Z41){for(var E8O in Z41){if(M7p[E8O] === null){M7p[E8O]=[];}N9b=Z41[E8O];if(N9b.inputs){for(var K7B in N9b.inputs){if(!M7p[K7B]){M7p[K7B]=[];}}}if(N9b.outputs){for(var c4x in N9b.outputs){if(!M7p[c4x]){M7p[c4x]=[];}}}}}}return M7p;};K0N.I18N.missingWordList=function(N71){var p_B,D1T,q3o,d19,W96,x3h,d24,E2v,Z3f,d7D,L46;p_B=\"Y-Axi\";p_B+=\"s\";D1T=\"P\";D1T+=\"anel\";q3o=\"Ov\";q3o+=\"erS\";q3o+=\"old\";if(!N71){N71=K0N.I18N.language;}d19=K0N.I18N.findAllTextNodes();W96={};x3h=K0N.I18N.wordLists[N71];if(!x3h){x3h={};}d24=function(j2x){A$1.C8A();if(typeof x3h[j2x] == \"undefined\"){W96[j2x]=\"\";}};A$1.C8A();for(var P9r in d19){d24(P9r);}if(!(K0N.Studies && K0N.Studies.studyLibrary)){return W96;}for(var o37 in K0N.Studies.studyLibrary){E2v=K0N.Studies.studyLibrary[o37];d24(E2v.name);for(var G2H in E2v.inputs){d7D=\"[objec\";d7D+=\"t \";d7D+=\"Ar\";d7D+=\"ray]\";L46=\"[\";L46+=\"object \";L46+=\"Stri\";L46+=\"ng]\";d24(G2H);Z3f=E2v.inputs[G2H];switch(Object.prototype.toString.call(Z3f)){case L46:d24(Z3f);break;case d7D:for(var n6X=0;n6X < Z3f.length;++n6X){d24(Z3f[n6X]);}break;}}for(var G$w in E2v.outputs){d24(G$w);}}d24(\"Show Zones\");d24(\"OverBought\");d24(q3o);d24(D1T);d24(\"Show as Underlay\");d24(p_B);d24(\"Invert Y-Axis\");return W96;};K0N.I18N.printableMissingWordList=function(h6i){var g2C;g2C=JSON.stringify(K0N.I18N.missingWordList(h6i));g2C=g2C.replace(/\",\"/g,'\",\\n\"');return g2C;};K0N.I18N.translateUI=function(A6V,C3S){var I8X,F69,u6n,P9l,n4K,s_h,c96,Z4k,K1n,C4f,H9$,C1O,X$x;if(A6V == \"pu\"){A6V=\"pt\";}if(!K0N.I18N.wordLists){return;}A$1.P3W();if(!A6V){A6V=K0N.I18N.language;}I8X=K0N.I18N.findAllTextNodes(C3S);F69=K0N.I18N.wordLists[A6V];function x5G(b8d){var c0E;c0E=\"[\";A$1.P3W();c0E+=\"aria-lab\";c0E+=\"el]\";return Array.from((b8d || document).querySelectorAll(c0E)).reduce((F6R,p1E)=>{var a66,D6y,l8o;a66=\"aria-label-ori\";a66+=\"ginal\";if(!p1E.getAttribute(a66)){D6y=\"a\";D6y+=\"ria-labe\";D6y+=\"l-original\";p1E.setAttribute(D6y,p1E.getAttribute(\"aria-label\"));}l8o=p1E.getAttribute(\"aria-label-original\");F6R[l8o]=(F6R[l8o] || []).concat(p1E);return F6R;},{});}if(!F69){return;}for(var f0G in I8X){u6n=K0N.I18N.translateSections(f0G,F69);P9l=I8X[f0G];for(var k9P=+\"0\";k9P < P9l.length;k9P++){n4K=\"cq-tra\";n4K+=\"nslate-placehol\";n4K+=\"der-origin\";n4K+=\"al\";s_h=P9l[k9P];c96=s_h.parentNode;Z4k=s_h.placeholder?s_h.getAttribute(n4K):c96.getAttribute(\"cq-translate-original\");if(u6n === ((2700,\"910.09\" * 1) === +\"3354\"?0x2076:\",\") || !u6n){u6n=Z4k;}if(s_h.placeholder){s_h.placeholder=u6n;}else {s_h.data=u6n;}}}K1n=x5G(C3S);for(var m7B in K1n){C4f=K0N.I18N.translateSections(m7B,F69);H9$=K1n[m7B];for(var Y$l of H9$){C1O=\"aria-label-origin\";C1O+=\"al\";X$x=Y$l.getAttribute(C1O);if(C4f === \",\" || !C4f){C4f=X$x;}Y$l.setAttribute(\"aria-label\",C4f);}}};K0N.I18N.translate=function(k9h,K6n){var d2C,O5W;if(!K6n){K6n=K0N.I18N.language;}if(!K0N.I18N.wordLists){console.log(\"Must include translations.js in order to use CIQ.I18N.translate()\");return k9h;}d2C=K0N.I18N.wordLists[K6n];O5W=null;if(d2C){O5W=K0N.I18N.translateSections(k9h,d2C) || k9h;}return O5W === (5750 < 6390?\",\":1.85e+2)?k9h:O5W;};K0N.I18N.translateSections=function(e3t,L8P){var I6i,a2I;I6i=(+\"370.69\",4100) >= (+\"286.65\",801.19)?\"\\u200c\":(\"0x10b3\" >> 0,\"N\");if(typeof e3t == \"string\" && e3t.indexOf(I6i) != -1){A$1.U1h(14);e3t=e3t.replace(/([(),])/g,A$1.M8Y(\"$1\",I6i,I6i));a2I=e3t.split(I6i);a2I.forEach(function(G1U,b2k,K5k){A$1.C8A();var c8b,r0V;c8b=G1U.match(/^(\\s*).{0,100}\\S(\\s*)$/);r0V=L8P[G1U.trim()];if(r0V){if(c8b){A$1.R_O(28);var n6Z=A$1.M8Y(287,9,15,17);A$1.R_O(12);var u19=A$1.P_X(2,8,2);r0V=c8b[n6Z] + r0V + c8b[u19];}K5k[b2k]=r0V;}});return a2I.join(\"\");}return L8P[e3t];};K0N.I18N.csv=K0N.I18N.csv || \"\";K0N.I18N.convertCSV=function(u7s){A$1.P3W();var q_p,o1o,X8F,E$5,s9d,M$o,H3m,N7X,Q8W,F3W,f_t;q_p=new RegExp(\"[\\u201C\\u201D]|[\\u2018\\u2019]\",\"870\" << 32 > (+\"6030\",+\"795.89\")?529.6 < 4790?\"g\":(\"u\",7.37e+3):541.86);o1o=K0N.I18N.wordLists;if(!u7s){u7s=K0N.I18N.csv;}if(!u7s){return;}X8F=u7s.split(6353 !== (8086,\"3037\" - 0)?\"\\n\":(![],0x21e9));E$5=X8F[0];s9d=E$5.split(8955 > 9300?754.54:(\"2270\" | 74) >= (\"9890\" >> 0,4782)?4.05e+3:\",\");for(var o$_=\"0\" ^ 0;o$_ < s9d.length;o$_++){M$o=s9d[o$_];if(!o1o[M$o]){o1o[M$o]={};}}for(var W11=1;W11 < X8F.length;W11++){H3m=X8F[W11].match(/(\".{0,1000}?\"|[^\",]{1,1000})(?=\\s{0,100},|\\s{0,100}$)|(,(?=,))/g) || [];N7X=H3m[0];Q8W=N7X.charAt(0);F3W=N7X.charAt(N7X.length - 1);if(Q8W === (939.64 <= 4550?'\"':8.90e+3) && F3W === '\"'){N7X=N7X.substring(1,N7X.length - 1);}if(q_p.test(N7X)){N7X=N7X.replace(q_p,682.35 >= 385.45?\"845.09\" - 0 === (210.23,4980)?(645,3013) < (5406,2430)?(\"a\",\"b\"):!\"\":'\"':(\"5.65e+2\" << 32,!!0));}for(var U0z=1;U0z < H3m.length;U0z++){f_t=H3m[U0z];A$1.R_O(2);Q8W=f_t.charAt(A$1.M8Y(\"0\",1));F3W=f_t.charAt(f_t.length - 1);if(Q8W === ((939,3100) > (7500,1530)?270.38 == 5115?86:4140 <= (99.12,\"3375\" * 1)?(!\"\",0x7ce):'\"':(571.06,!!({}))) && F3W === '\"'){f_t=f_t.substring(1,f_t.length - 1);}o1o[s9d[U0z]][N7X]=f_t;}}};K0N.I18N.setLanguage=function(u8Q,S50,G1V,b7n,X_Y){var b1n;b1n=\"p\";b1n+=\"u\";if(!X_Y){X_Y=(u8Q.uiContext || ({})).topNode || document.body;}if(S50 == b1n){S50=\"pt\";}K0N.I18N.convertCSV(b7n);A$1.C8A();K0N.I18N.language=S50;K0N.I18N.translateUI(S50,X_Y);if(!G1V){G1V=K0N.I18N.translate;}u8Q.translationCallback=G1V;};K0N.I18N.setLocale=function(y5B,a3l,H02,i22,t3r){var L4G,l1b,H2t;if(K0N.xor(this.reverseColorsByLocale[a3l],this.reverseColorsByLocale[y5B.locale])){this.reverseCandles(y5B);}if(typeof Intl == \"undefined\" || !Intl.__addLocaleData){y5B.setLocale(a3l,t3r);if(H02){H02(null);}return;}i22=typeof i22 == \"undefined\"?\"locale-data/jsonp\":i22;A$1.R_O(59);A$1.C8A();L4G=A$1.M8Y(\".js\",(104.52,4080) != 4572?\"/\":(\"748.25\" - 0,9460) >= 515.83?!!0:0x5e6,i22,a3l);l1b=document.createElement(\"SCRIPT\");l1b.async=!!({});l1b.src=L4G;H2t=document.getElementsByTagName(\"script\")[0];H2t.parentNode.insertBefore(l1b,H2t.nextSibling);l1b.onload=function(){A$1.P3W();y5B.setLocale(a3l,t3r);if(H02){H02(null);}};l1b.onerror=function(){A$1.P3W();if(H02){H02(\"cannot load script\");}};};K0N.I18N.createMonthArrays=function(c1G,D1o,X$Y){var K$6,j1M,P3t,P0U,D2F,R49;c1G.monthAbv=[];c1G.monthLetters=[];K$6=new Date();j1M=!\"\";if(K0N.I18N.longMonths && K0N.I18N.longMonths[X$Y]){j1M=!!0;}for(var J8F=0;J8F < 12;J8F++){K$6.setDate(1);K$6.setMonth(J8F);P3t=D1o.format(K$6);if(j1M){P0U=\"\";for(var J6Y=0;J6Y < P3t.length;J6Y++){D2F=P3t.charAt(J6Y);R49=D2F.charCodeAt(0);if(R49 < 65)continue;P0U+=D2F;}c1G.monthAbv[J8F]=P0U;c1G.monthLetters[J8F]=P0U[+\"0\"];}else {c1G.monthAbv[J8F]=P3t;c1G.monthLetters[J8F]=P3t;}}};K0N.I18N.localize=function(w6E,a9P){a9P=this.langConversionMap[a9P] || a9P;this.setLocale(w6E,a9P);this.setLanguage(w6E,a9P);K0N.I18N.localized=!\"\";};K0N.I18N.reverseCandles=function(s3q){var c9V,k5y,C5s;c9V=s3q.styles;k5y=s3q.cloneStyle(c9V.stx_candle_down);C5s=s3q.cloneStyle(c9V.stx_candle_up);c9V.stx_candle_up=k5y;c9V.stx_candle_down=C5s;};K0N.I18N.wordLists={en:{}};K0N.I18N.languages={en:\"English\"};K0N.I18N.langConversionMap={};K0N.I18N.localized=!!0;};p_=S36=>{var y4d,K14,E1r,X4Y,E9J,F5d;y4d=\"
        \";y4d+=\"
        \";K14=\"
        \";E1r=\"
        \";X4Y=\"c\";X4Y+=\"ontex\";X4Y+=\"t\";X4Y+=\"menu\";E9J=typeof _CIQ !== \"undefined\"?_CIQ:S36.CIQ;E9J.ChartEngine.prototype.pointerEvents={down:[],up:[]};E9J.ChartEngine.prototype.manageTouchAndMouse=!!({});E9J.ChartEngine.prototype.registerTouchAndMouseEvents=function(){var k0z,c2U,F6k,o$i,F6B,d0o,B2V,r9y,d7l,S9W,U0W,W5r,I2M,g0Q;k0z=\".\";k0z+=\"st\";k0z+=\"x-\";k0z+=\"zoom-out\";if(this.touchAndMouseEventsRegistered){return;}this.touchAndMouseEventsRegistered=!\"\";c2U=this.controls.chartControls || document;F6k=c2U.querySelector(\".stx-zoom-in\");o$i=c2U.querySelector(k0z);F6B=this.chart.container;d0o=this;B2V=function(R_D,N7R,w8H){d0o.addDomEventListener(F6B,R_D,g4v,w8H);q1l46.C8A();function g4v(p7$){if(d0o.mainSeriesRenderer.nonInteractive){return;}N7R(p7$);}};if(!E9J.touchDevice){r9y=\"mou\";r9y+=\"sedown\";B2V(\"mousemove\",function(c2D){q1l46.C8A();d0o.mousemove(c2D);});B2V(\"mouseenter\",function(P7P){d0o.mousemove(P7P);});B2V(r9y,function(x6w){d0o.mousedown(x6w);});B2V(\"mouseup\",function(x2J){d0o.mouseup(x2J);});}else {if(E9J.isSurface){d7l=\"mou\";d7l+=\"sedown\";B2V(\"mousemove\",function(A4Z){d0o.msMouseMoveProxy(A4Z);});B2V(\"mouseenter\",function(C6Y){d0o.msMouseMoveProxy(C6Y);});B2V(d7l,function(Z67){d0o.msMouseDownProxy(Z67);});B2V(\"mouseup\",function(x8X){q1l46.C8A();d0o.msMouseUpProxy(x8X);});B2V(\"pointerdown\",function(J82){q1l46.C8A();return d0o.startProxy(J82);});B2V(\"pointermove\",function(c9E){d0o.moveProxy(c9E);});B2V(\"pointerenter\",function(C0P){q1l46.P3W();return d0o.moveProxy(C0P);});B2V(\"pointerup\",function(s3Y){q1l46.C8A();return d0o.endProxy(s3Y);});}else {S9W=\"p\";S9W+=\"o\";S9W+=\"interdown\";if(!E9J.isMobile){U0W=\"mo\";U0W+=\"usedown\";W5r=\"mouse\";W5r+=\"e\";W5r+=\"nter\";I2M=\"mousemo\";I2M+=\"v\";I2M+=\"e\";B2V(I2M,function(Y8x){d0o.iosMouseMoveProxy(Y8x);});B2V(W5r,function(B2C){q1l46.C8A();d0o.iosMouseMoveProxy(B2C);});B2V(U0W,function(b3z){d0o.iosMouseDownProxy(b3z);});B2V(\"mouseup\",function(G6P){d0o.iosMouseUpProxy(G6P);});}B2V(\"touchstart\",function(L7c){d0o.touchstart(L7c);},{passive:!!\"\"});B2V(\"touchmove\",function(d3A){d0o.touchmove(d3A);},{passive:!({})});B2V(\"touchend\",function(y_p){d0o.touchend(y_p);});B2V(S9W,function(g2I){q1l46.C8A();d0o.touchPointerType=g2I.pointerType;});}}g0Q=E9J.wheelEvent;if(this.captureMouseWheelEvents){B2V(g0Q,function(a1P){q1l46.C8A();d0o.mouseWheel(a1P);},{passive:!\"1\"});}};E9J.ChartEngine.prototype.mousedown=function(U8w){var Y3f,B4s,n_7,Z23,P59,Q6Z;Y3f=\"mo\";Y3f+=\"usedo\";Y3f+=\"wn\";if(this.runPrepend(\"mousedown\",arguments)){return;}this.grabOverrideClick=!1;if(!this.displayInitialized){return;}if(!this.displayCrosshairs){return;}if(this.repositioningDrawing){return;}if(this.editingAnnotation){return;}if(U8w.target && U8w.target.closest(\"[draggable]\")){return;}if(U8w.button && U8w.button >= 2){return;}B4s=this.container.getBoundingClientRect();this.top=B4s.top;this.left=B4s.left;this.right=this.left + this.width;this.bottom=this.top + this.height;if(U8w.clientX >= this.left && U8w.clientX <= this.right && U8w.clientY >= this.top && U8w.clientY <= this.bottom){this.insideChart=!\"\";}else {this.insideChart=![];return;}if(!this.currentPanel){return;}if(this.manageTouchAndMouse && U8w && U8w.preventDefault && this.captureTouchEvents){U8w.preventDefault();}this.mouseTimer=Date.now();this.longHoldTookEffect=![];this.hasDragged=!!0;this.userPointerDown=!!({});if(this.openDialog === \"\"){this.registerPointerEvent({x:U8w.clientX,y:U8w.clientY,time:this.mouseTimer},\"down\");}var {chart:M97}=this.currentPanel;for(var h0M=0;h0M < this.drawingObjects.length;h0M++){n_7=this.drawingObjects[h0M];if(n_7.highlighted && !n_7.permanent){if(this.cloneDrawing){Z23=E9J.ChartEngine.drawingTools[n_7.name];P59=new Z23();P59.reconstruct(this,n_7.serialize());this.drawingObjects.push(P59);this.activateRepositioning(P59);P59.repositioner=n_7.repositioner;return;}Q6Z=this.currentVectorParameters.vectorType;if(!E9J.Drawing || !Q6Z || !E9J.Drawing[Q6Z] || !new E9J.Drawing[Q6Z]().dragToDraw){this.activateRepositioning(n_7);return;}}}var {anchorHandles:I5X}=this.controls;if(I5X){for(var l4e in I5X){var {handle:B06, sd:B$_, highlighted:k3M}=I5X[l4e];if(k3M){this.repositioningAnchorSelector={sd:B$_};B06.classList.add(\"stx-grab\");return;}}}if(this.drawingClick){if(this.currentPanel.subholder === U8w.target){this.drawingClick(this.currentPanel,this.cx,this.cy);}if(this.activeDrawing && this.activeDrawing.dragToDraw){return;}}this.grabbingScreen=!!1;M97.spanLock=!({});this.yToleranceBroken=![];this.grabStartX=U8w.clientX;this.grabStartY=U8w.clientY;this.grabStartMicropixels=this.micropixels;this.grabStartScrollX=M97.scroll;this.grabStartScrollY=this.currentPanel.yAxis.scroll;this.grabStartCandleWidth=this.layout.candleWidth;this.grabStartYAxis=this.whichYAxis(this.currentPanel);this.grabStartZoom=this.grabStartYAxis?this.grabStartYAxis.zoom:0;this.grabStartPanel=this.currentPanel;setTimeout((function(X7e){q1l46.P3W();return function(){X7e.grabbingHand();};})(this),+\"100\");if(this.swipeStart){this.swipeStart(M97);}if(this.longHoldTime || this.longHoldTime === 0){this.startLongHoldTimer();}this.runAppend(Y3f,arguments);};E9J.ChartEngine.prototype.mousemove=function(m0V){var B9a,s7l,v1z,o1w;q1l46.P3W();B9a=\"mo\";B9a+=\"us\";B9a+=\"em\";B9a+=\"ove\";s7l=\"mous\";s7l+=\"emove\";v1z=\"e\";v1z+=\"nter\";o1w=m0V;E9J.ChartEngine.crosshairX=o1w.clientX;E9J.ChartEngine.crosshairY=o1w.clientY;if(o1w.type.toLowerCase().indexOf(v1z) > -1){this.positionCrosshairsAtPointer();return;}if(this.runPrepend(s7l,arguments)){return;}if(!this.displayInitialized){return;}if(this.openDialog !== \"\"){return;}if(this.grabbingScreen && o1w.buttons !== 1){this.cancelLongHold=!![];this.displayDragOK();this.grabbingScreen=!({});this.findHighlights(!({}),!!\"1\");}this.mousemoveinner(o1w.clientX,o1w.clientY);this.runAppend(B9a,arguments);};E9J.ChartEngine.prototype.mouseup=function(B4v){var Y8m,B44,Z9L,D_e,P31,L54,k6r,f4x,C_H,t6U,M85;Y8m=\"stx\";Y8m+=\"-drag-chart\";if(this.runPrepend(\"mouseup\",arguments)){return;}this.swipe.end=!![];this.cancelLongHold=!!({});if(this.repositioningDrawing){if(!this.currentVectorParameters.vectorType || Date.now() - this.mouseTimer > 250){this.changeOccurred(\"vector\");E9J.clearCanvas(this.chart.tempCanvas,this);this.activateRepositioning(null);this.adjustDrawings();this.draw();return;}this.activateRepositioning(null);}if(this.repositioningAnchorSelector){var {sd:s2c}=this.repositioningAnchorSelector;E9J.Studies.repositionAnchor(this,s2c);if(this.controls.anchorHandles[s2c.uniqueId]){this.repositioningAnchorSelector=null;this.controls.anchorHandles[s2c.uniqueId].highlighted=!({});E9J.Studies.displayAnchorHandleAndLine(this,s2c,this.chart.dataSegment);Object.values(this.controls.anchorHandles || ({})).forEach(({handle:l01})=>{q1l46.P3W();return l01.classList.remove(\"stx-grab\");});this.findHighlights();}return;}B44=this.userPointerDown;this.userPointerDown=!({});if(!this.displayInitialized){return;}Z9L=this.backOutY(B4v.clientY);D_e=this.backOutX(B4v.clientX);P31=B4v.button && B4v.button >= +\"2\";L54=this.openDialog !== \"\";q1l46.C8A();if(!L54 && !P31){this.registerPointerEvent({x:B4v.clientX,y:B4v.clientY,time:Date.now()},\"up\");}this.grabbingScreen=!({});if(this.highlightedDraggable){if(this.dragPlotOrAxis){this.dragPlotOrAxis(D_e,Z9L);}this.currentPanel=this.whichPanel(Z9L);}k6r=this.currentPanel;this.grabStartYAxis=null;this.displayDragOK();if(this.openDialog !== \"\"){if(this.insideChart){this.container.classList.remove(\"stx-drag-chart\");}return;}if(this.grabOverrideClick){f4x=\"stx-drag-ch\";f4x+=\"art\";if(!this.overXAxis && !this.overYAxis && this.swipeRelease){this.swipeRelease();}this.container.classList.remove(f4x);this.grabOverrideClick=![];this.doDisplayCrosshairs();this.updateChartAccessories();return;}if(this.insideChart){this.container.classList.remove(Y8m);}if(E9J.ChartEngine.resizingPanel){this.releaseHandle();return;}if(P31 || B4v.ctrlKey){if(this.anyHighlighted && this.bypassRightClick !== !0){if(this.overYAxis){C_H=k6r.yaxisLHS.concat(k6r.yaxisRHS).find(w5P=>{return w5P.highlight === !!({});});if(C_H){C_H.showContextMenu(E9J.ChartEngine.crosshairX,E9J.ChartEngine.crosshairY);}}this.rightClickHighlighted();if(B4v.preventDefault && this.captureTouchEvents){B4v.preventDefault();}B4v.stopPropagation();return !\"1\";}this.dispatch(\"rightClick\",{stx:this,panel:k6r,x:D_e,y:Z9L});return !!({});}if(B4v.clientX < this.left || B4v.clientX > this.right){return;}if(B4v.clientY < this.top || B4v.clientY > this.bottom){return;}t6U=k6r && k6r.subholder === B4v.target;if(this.isDoubleClick() && (t6U || this.overYAxis || this.overXAxis)){this.doubleClick(B4v.button,D_e,Z9L);this.resetClickState();}else {if(B44 && t6U){if(!this.longHoldTookEffect || this.activeDrawing){this.drawingClick(k6r,D_e,Z9L);}if(!this.longHoldTookEffect && this.activeMarker && !this.activeMarker.params.noInteraction){this.activeMarker.click({cx:D_e,cy:Z9L,panel:k6r});}}if(!this.longHoldTookEffect && !this.activeDrawing){M85=!!1;if(this.anyHighlighted && this.leftClickPinTooltip && this.allowPinning && this.highlightedPlot && this.allowPinning(this.highlightedPlot.type)){M85=!this.leftClickPinTooltip({cx:D_e,cy:Z9L});}if(M85){this.dispatch(\"tap\",{stx:this,panel:k6r,x:D_e,y:Z9L});}}}this.runAppend(\"mouseup\",arguments);};E9J.ChartEngine.prototype.registerPointerEvent=function(l80,L7e){if(this.pointerEvents[L7e].length > 1){this.pointerEvents[L7e].pop();}this.pointerEvents[L7e].unshift(l80);};E9J.ChartEngine.prototype.resetPointerEvent=function(D3A){var L4x,g5d,c_a;L4x=-1037449826;g5d=268823673;c_a=2;for(var O4e=1;q1l46.I9N(O4e.toString(),O4e.toString().length,\"34204\" | 4) !== L4x;O4e++){this.pointerEvents[D3A].splice(4);c_a+=2;}if(q1l46.G33(c_a.toString(),c_a.toString().length,47193) !== g5d){this.pointerEvents[D3A].splice(0);}};E9J.ChartEngine.prototype.resetClickState=function(){this.resetPointerEvent(\"up\");this.resetPointerEvent(\"down\");q1l46.P3W();this.cancelTouchSingleClick=!\"\";};E9J.ChartEngine.prototype.isDoubleClick=function(W3T){var E9a,C8x;E9a=W3T?+\"35\":\"20\" - 0;var {up:[e$e,j59], down:[P43,Z2T]}=this.pointerEvents;C8x=j59 && Z2T && P43.time - j59.time < this.doubleClickTime && E9J.withinRadius(Z2T,P43,E9a) && E9J.withinRadius(j59,P43,E9a) && j59.time - Z2T.time < this.longHoldTime && e$e.time - P43.time < this.longHoldTime;this.cancelTouchSingleClick=C8x;q1l46.P3W();return C8x;};E9J.ChartEngine.prototype.doubleClick=function(q5d,t97,U2t){var O7V;if(this.runPrepend(\"doubleClick\",arguments)){return;}q1l46.C8A();if(this.editingAnnotation){return;}if(E9J.ChartEngine.drawingLine){if(this.currentVectorParameters.vectorType == \"continuous\"){E9J.ChartEngine.completeDrawing(this);}return this.undo();}if(this.activeDrawing){return;}O7V=this.activeMarker && this.activeMarker.doubleClick({cx:t97,cy:U2t,panel:this.currentPanel});if(!O7V){this.dispatch(\"doubleClick\",{stx:this,button:q5d,x:t97,y:U2t});}this.runAppend(\"doubleClick\",arguments);};E9J.ChartEngine.prototype.handleMouseOut=function(T0s){var E7U,r5a,d_T;T0s=T0s || window.event;if(!T0s.relatedTarget || !E9J.withinElement(this.chart.container,T0s.pageX,T0s.pageY)){if(this.runPrepend(\"handleMouseOut\",arguments)){return;}if(!this.grabbingScreen){this.findHighlights(null,!![]);}this.undisplayCrosshairs();this.touches=[];this.touching=![];if(this.activeDrawing && this.userPointerDown){this.userPointerDown=!!\"\";this.drawingLine=!!0;E7U=this.backOutY(T0s.pageY);r5a=this.backOutX(T0s.pageX);this.drawingClick(this.currentPanel,r5a,E7U);}var {sd:y9M, tapToAdd:e8Q}=this.repositioningAnchorSelector || ({});if(y9M && !e8Q){this.repositioningAnchorSelector=null;this.controls.anchorHandles[y9M.uniqueId].highlighted=!({});E9J.Studies.displayAnchorHandleAndLine(this,y9M,this.chart.dataSegment);this.draw();}this.insideChart=!!\"\";this.overYAxis=!!\"\";this.overXAxis=!({});this.displaySticky();d_T=this.controls.dragOk;if(d_T){d_T.style.display=\"none\";}this.runAppend(\"handleMouseOut\",arguments);}};E9J.ChartEngine.prototype.startLongHoldTimer=function(d0Q){var J$1,W9w;J$1=this;this.cancelLongHold=!!\"\";if(this.longHoldTimeout){clearTimeout(this.longHoldTimeout);}W9w=function(){var M8W;M8W=\"long\";M8W+=\"ho\";M8W+=\"l\";M8W+=\"d\";if(J$1.cancelLongHold){return;}J$1.longHoldTookEffect=!!({});if(d0Q){d0Q();}J$1.dispatch(M8W,{stx:J$1,panel:J$1.currentPanel,x:J$1.cx,y:J$1.cy});J$1.displayDragOK();};if(this.longHoldTime){this.longHoldTimeout=setTimeout(W9w,this.longHoldTime);}else if(this.longHoldTime === 0){W9w();}};E9J.ChartEngine.prototype.grabHandle=function(j2o){if(this.runPrepend(\"grabHandle\",arguments)){return;}if(!j2o){return;}q1l46.C8A();E9J.ChartEngine.crosshairY=this.resolveY(j2o.top);E9J.ChartEngine.resizingPanel=j2o;j2o.handle.classList.add(\"stx-grab\");this.runAppend(\"grabHandle\",arguments);};E9J.ChartEngine.prototype.grabbingHand=function(){if(!this.allowScroll){return;}if(!this.grabbingScreen){return;}if(E9J.touchDevice){return;}this.container.classList.add(\"stx-drag-chart\");};E9J.ChartEngine.prototype.releaseHandle=function(){if(this.runPrepend(\"releaseHandle\",arguments)){return !!\"1\";}E9J.clearCanvas(this.chart.tempCanvas,this);this.resizePanels();if(E9J.ChartEngine.resizingPanel){E9J.ChartEngine.resizingPanel.handle.classList.remove(\"stx-grab\");}E9J.ChartEngine.resizingPanel=null;this.runAppend(\"releaseHandle\",arguments);};E9J.ChartEngine.prototype.findHighlights=function(d$M,d22){var v92=q1l46;var O_w,x4S,t2l,s_y,C_u,k91,T2P,v$H,Y9X,R48,t0d,M$5,I$Z,V8l,p$H,R8D,u2b,u3k,R3S,Y8O,G_v,K$0,C$x,k3Z,H$U,l05,e6L,I7K,X1O,o59,g2X,t13,B7Q,s2K,j7W,k1b,T7u,k6Y,U_a,B6w,j5n,f5W,X8V,B$G,L3F,T6m,j_0,s72,w_y,A7B,E6K,C9P,K37;O_w=\"highli\";O_w+=\"ghtsRadius\";x4S=this.preferences[d$M?\"highlightsTapRadius\":O_w];this.highlightViaTap=d$M;var {cx:G66, cy:U3k}=this;this.anyHighlighted=![];if(!this.currentPanel){return;}var {chart:H_N}=this.currentPanel;if(this.activeDrawing){d22=!![];}t2l=!!\"\";s_y=null;C_u=d22?{}:{forceShow:!![],type:\"drawing\"};k91={x0:this.tickFromPixel(G66 - x4S,H_N),x1:this.tickFromPixel(G66 + x4S,H_N),y0:this.valueFromPixel(U3k - x4S,this.currentPanel),y1:this.valueFromPixel(U3k + x4S,this.currentPanel),cx0:G66 - x4S,cx1:G66 + x4S,cy0:U3k - x4S,cy1:U3k + x4S,r:x4S};if(this.repositioningDrawing && k91.x1 - k91.x0 < 2){k91.x1++;k91.x0--;}else if(k91.x1 == k91.x0){k91.x0-=0.5;k91.x1+=0.5;}if(!H_N.hideDrawings){for(var H5n=this.drawingObjects.length - 1;H5n >= 0;H5n--){T2P=this.drawingObjects[H5n];v$H=this.panels[T2P.panelName];if(T2P.hidden || !v$H || T2P.field && !this.getYAxisByField(v$H,T2P.field)){T2P.highlighted=!!\"\";continue;}if(this.repositioningDrawing && this.repositioningDrawing != T2P)continue;Y9X=T2P.highlighted;R48=T2P.panelName == this.currentPanel.name || T2P.spanPanels;if(R48){T2P.repositioner=T2P.intersected(this.crosshairTick,this.crosshairValue,k91);}R48=R48 && T2P.repositioner && !this.overXAxis && !this.overYAxis;if(!d22 && R48){if(Y9X){s_y=T2P;if(this.anyHighlighted && this.singleDrawingHighlight){T2P.highlighted=!1;}if(T2P.highlighted && T2P.highlighted != Y9X){t2l=!\"\";}}else if(Y9X != T2P.highlight(!!({}))){if(!s_y){s_y=T2P;}if(this.anyHighlighted && this.singleDrawingHighlight){T2P.highlighted=!1;}t2l=!!\"1\";}this.anyHighlighted=!![];}else {if(Y9X != T2P.highlight(!!0)){t2l=!!\"1\";}}if(T2P.highlighted){C_u.noDelete=T2P.permanent;C_u.noEdit=!this.callbackListeners.drawingEdit.length;C_u.noText=C_u.noEdit || !T2P.edit;C_u.message=this.translateIf(E9J.capitalize(T2P.name));}}}for(t0d in this.layout.studies){M$5=this.layout.studies[t0d];M$5.prev=M$5.highlight;M$5.highlight=this.yaxisMatches(M$5,this.grabStartYAxis);}for(t0d in H_N.seriesRenderers){R8D=H_N.seriesRenderers[t0d];R8D.params.highlight=this.yaxisMatches(R8D,this.grabStartYAxis);for(var G2b=0;G2b < R8D.seriesParams.length;G2b++){p$H=R8D.seriesParams[G2b];p$H.prev=p$H.highlight;p$H.highlight=R8D.params.highlight;}}var {anchorHandles:N9y}=this.controls;if(N9y){for(var M7X in N9y){N9y[M7X].highlighted=![];}}u2b=this.markerHelper && this.markerHelper.visibleCanvasMarkers;if(u2b){for(I$Z=+\"0\";I$Z < u2b.length;I$Z++){V8l=u2b[I$Z];this.activeMarker=null;V8l.prev=u2b[I$Z].highlight;V8l.highlight=!({});}}if(this.markerHelper){this.markerHelper.highlighted=[];}this.highlightedDataSetField=null;this.highlightedPlot={};this.highlightedDraggable=null;function d6w(Y7O,C6y){var Q3Z,P0m,P$O;if(Array.isArray(Y7O)){Q3Z=\"linear-gradient(to right, \";P0m=+\"0\";P$O=Math.min(+\"3\",Y7O.length);for(;P0m < P$O;P0m++){v92.R_O(8);var V1u=v92.M8Y(1200,1300);Q3Z+=Y7O[P0m] + \" \" + Math.round(V1u * P0m / P$O) + \"%, \";v92.U1h(23);var D6u=v92.M8Y(20,7,14);v92.R_O(102);var I6c=v92.M8Y(101829,10378725,17,6);v92.R_O(103);var i5M=v92.P_X(14,17,9553,20,152504);v92.R_O(8);var G2j=v92.P_X(18000,19200);v92.U1h(104);var T6n=v92.P_X(5,1436,1,234,6);v92.R_O(23);var n36=v92.P_X(4658,2,5044);v92.U1h(8);var Z_H=v92.M8Y(700,800);v92.R_O(105);var q4_=v92.M8Y(19,0,15,17,19);Q3Z+=Y7O[P0m] + (\"405.45\" * D6u >= 153.07?913.7 > (I6c,i5M)?G2j:+\"9370\" <= 262.79?(T6n,n36):\" \":(930.17,\"n\")) + Math.round(Z_H * (P0m + q4_) / P$O) + \"%, \";}Q3Z+=\"transparent)\";return Q3Z;}if(Y7O == \"auto\"){Y7O=this.defaultColor;}if(C6y && C6y !== 1){Y7O=E9J.hexToRgba(E9J.colorToHex(Y7O),parseFloat(C6y));}return Y7O;}if(!d22 && !this.anyHighlighted && N9y){for(var y2Q in N9y){u3k=N9y[y2Q];if(E9J.getFromNS(u3k,\"sd.signalData.reveal\") === ![])continue;if(!this.anyHighlighted){var {sd:G7u, currentPixel:K$R}=u3k;v92.R_O(8);R3S=v92.M8Y(x4S,K$R);v92.R_O(0);Y8O=v92.M8Y(x4S,K$R);G_v=this.panels[G7u.panel];var {top:c4Y, bottom:z2Y}=G_v.yAxis;K$0=E9J.boxIntersects(R3S,c4Y,Y8O,z2Y,G66,U3k,G66,U3k);if(K$0){this.anyHighlighted=!!1;u3k.highlighted=!![];t2l=!!1;C_u={message:G7u.name,type:\"anchorHandle\",noDelete:!\"\"};continue;}}if(u3k.highlighted === !\"\"){u3k.highlighted=!\"1\";t2l=!\"\";}}}if(!d22 && !this.anyHighlighted && H_N.dataSegment){C$x=this.barFromPixel(G66);if(C$x >= 0 && C$x < H_N.dataSegment.length){H$U=E9J.convertBoxToPixels(this,this.currentPanel.name,k91);l05=Number.MAX_VALUE;if(u2b){for(I$Z=+\"0\";I$Z < u2b.length;I$Z++){V8l=u2b[I$Z];e6L=V8l.params.box;if(!e6L)continue;if(V8l.params.panelName !== this.currentPanel.name)continue;if(E9J.boxIntersects(H$U.x0,H$U.y0,H$U.x1,H$U.y1,e6L.x0,e6L.y0,e6L.x1,e6L.y1)){v92.U1h(29);var I1I=v92.P_X(118,8,15);v92.U1h(106);var P0$=v92.M8Y(6,2,3,19,21);v92.U1h(107);var k19=v92.P_X(13,16,31);v92.U1h(73);var A0R=v92.P_X(57,458,4,8,10);I7K=Math.pow(U3k - (e6L.y1 + e6L.y0) / I1I,P0$) + Math.pow(G66 - (e6L.x1 + e6L.x0) / k19,\"2\" << A0R);if(I7K <= l05){l05=I7K;this.activeMarker=V8l;}this.anyHighlighted=!![];C_u={};V8l.highlight=!!({});this.markerHelper.highlighted.push(V8l);}if(V8l.prev != V8l.highlight){t2l=!!({});}}}if(!this.anyHighlighted){l05=Number.MAX_VALUE;X1O=null;for(t0d in this.overlays){o59=\"funct\";o59+=\"ion\";if(u2b && this.markerHelper.highlighted.length)break;M$5=this.overlays[t0d];if(M$5.signalData && !M$5.signalData.reveal)continue;if(M$5.disabled)continue;if(M$5.panel != this.currentPanel.name)continue;if(M$5.study.isHighlighted === ![])continue;else if(typeof M$5.study.isHighlighted == o59){g2X=M$5.study.isHighlighted(this,G66,U3k);if(g2X){t13=g2X === !![]?M$5.study.name:g2X;X1O={o:M$5,out:t13};l05=0;break;}continue;}B7Q=H_N.dataSegment[C$x];if(!B7Q)continue;for(var E5k in M$5.outputMap){s2K=c2H.call(this,C$x,k91,E5k,M$5.getYAxis(this));if(s2K !== !\"1\" && s2K <= l05){X1O={o:M$5,out:E5k};l05=s2K;}}}for(t0d in H_N.seriesRenderers){if(this.highlightedDataSetField)break;j7W=H_N.seriesRenderers[t0d];k1b=j7W.params.panel;if(!this.leftClickPinTooltip && j7W == this.mainSeriesRenderer)continue;if(!j7W.params.highlightable && !this.currentVectorParameters.vectorType)continue;if(k1b != this.currentPanel.name)continue;for(I$Z=0;I$Z < j7W.seriesParams.length;I$Z++){p$H=j7W.seriesParams[I$Z];if(p$H.disabled)continue;T7u=p$H.field || this.defaultPlotField || \"Close\";if(p$H.symbol && p$H.subField){T7u+=\"-->\" + p$H.subField;}k6Y=j7W.params.yAxis;if(!k6Y && k1b){k6Y=this.panels[k1b].yAxis;}if(j7W.params.step && C$x > 0){if(!j7W.caches[p$H.id])continue;k3Z=j7W.caches[p$H.id][C$x];if(!k3Z && k3Z !== 0)continue;v92.R_O(8);U_a=j7W.caches[p$H.id][v92.M8Y(1,C$x)];if((U_a || U_a === +\"0\") && U3k + x4S >= k3Z && U3k - x4S <= U_a || U3k - x4S <= k3Z && U3k + x4S >= U_a){X1O={s:p$H,fullField:T7u};break;}}else {B6w=c2H.call(this,C$x,k91,T7u,k6Y,j7W,p$H.id);if(B6w !== ![] && B6w <= l05){X1O={s:p$H,fullField:T7u};l05=B6w;}}}}if(X1O){this.highlightedPlot=X1O;M$5=X1O.o;if(M$5){X1O.type=\"study\";if(M$5.name != M$5.panel){this.anyHighlighted=!![];}M$5.highlight=X1O.out;this.highlightedDataSetField=X1O.out;}else {X1O.type=\"series\";this.anyHighlighted=!!1;X1O.s.highlight=!!({});this.highlightedDataSetField=X1O.fullField;}}}}}f5W=this.preferences.dragging;for(t0d in this.overlays){M$5=this.overlays[t0d];if(M$5.highlight){this.anyHighlighted=!!\"1\";B$G=M$5.inputs.display || M$5.name;B$G=this.translateIf(B$G);C_u={message:B$G,noDelete:M$5.permanent,noEdit:!M$5.editFunction,noText:!M$5.textFunction,noDrag:M$5.undraggable && M$5.undraggable(this),type:\"study\",backgroundColor:d6w(H_N.legendColorMap[M$5.name] && H_N.legendColorMap[M$5.name].color)};s_y=null;if(f5W === !!\"1\" || f5W && f5W.study){if(!M$5.undraggable(this)){j5n=M$5;}}X8V=M$5.getYAxis(this);}if(M$5.prev != M$5.highlight){t2l=!!({});}}for(t0d in H_N.seriesRenderers){L3F=H_N.seriesRenderers[t0d];T6m=L3F.params.yAxis?L3F.params.yAxis.textStyle:null;for(var p3e=0;p3e < L3F.seriesParams.length;p3e++){p$H=L3F.seriesParams[p3e];if(L3F.params.highlightable && p$H.highlight){this.anyHighlighted=!\"\";j_0=H_N.legendColorMap[t0d] && H_N.legendColorMap[t0d].color || p$H.color || T6m;j_0=d6w(j_0,p$H.opacity);C_u={message:p$H.display || p$H.symbol,backgroundColor:j_0,noDelete:L3F.params.permanent || p$H.permanent,noDrag:L3F.undraggable && L3F.undraggable(this),type:\"series\"};s_y=null;if(f5W === !!({}) || f5W && f5W.series){j5n=L3F;L3F.params.highlight=!!({});}X8V=L3F.getYAxis(this);}if(p$H.prev != p$H.highlight){t2l=!!1;}}}for(t0d in this.plugins){s72=this.plugins[t0d];w_y={};if(s72.findHighlights){w_y=s72.findHighlights(this,d$M,d22);if(w_y.somethingChanged){t2l=!!\"1\";}if(w_y.anyHighlighted){this.anyHighlighted=!0;C_u=w_y.stickyArgs || ({});}}}A7B=this.whichPanel(U3k);E6K=this.whichYAxis(A7B,G66);if(!X8V){X8V=E6K;}if(this.currentBaseline){X8V=this.currentBaseline.getYAxis(this);}if(X8V){if(!X8V.highlight){t2l=!![];}X8V.highlight=!!({});}function c2H(H5U,e0o,Z3C,J4_,o5u,h62){var G6i,S$o,v2e,S9q,V1o,d9V,b6J,l4f,R1B,p7V,Y4V,e38,l08,K_D,t8W,V6F,K0m,m51,f$u,f0x,J5E,m41,C6X;G6i=this;S$o=G6i.chart;v2e=G6i.currentPanel;if(!J4_){J4_=v2e.yAxis;}S9q=Z3C.split(\"-->\");V1o=S9q[0];d9V=S9q[1];if(!d9V){d9V=\"Close\";}b6J=S$o.dataSegment[C$x];l08=null;K_D=null;t8W=null;V6F=new Array(3);K0m=o5u && o5u.caches[h62];if(b6J && K0m){p7V=K0m[C$x];l08=b6J.tick;if(p7V || p7V === 0){V6F[0]=1;}for(m51=C$x - 1;m51 >= 0;m51--){if(K0m[m51] || K0m[m51] === 0){Y4V=K0m[m51];v92.U1h(51);K_D=v92.M8Y(l08,m51,C$x);V6F[1]=+\"1\";break;}}for(m51=C$x + 1;m51 < S$o.dataSegment.length;m51++){if(K0m[m51] || K0m[m51] === 0){e38=K0m[m51];v92.R_O(51);t8W=v92.M8Y(l08,m51,C$x);v92.U1h(34);V6F[v92.M8Y(\"2\",0)]=1;break;}}}if(K_D === null){l4f=G6i.getPreviousBar.call(G6i,S$o,Z3C,C$x);if(l4f){K_D=l4f.tick;Y4V=J8d(l4f);}}if(t8W === null){R1B=G6i.getNextBar.call(G6i,S$o,Z3C,C$x);if(R1B){t8W=R1B.tick;e38=J8d(R1B);}}if(K_D === null && t8W === null){return ![];}if(!K0m){p7V=J8d(b6J);Y4V=J8d(l4f);e38=J8d(R1B);l08=b6J.tick;if(l4f){K_D=l4f.tick;}if(R1B){t8W=R1B.tick;}}if(!Y4V && Y4V !== 0){Y4V=0;K_D=0;}if(!e38 && e38 !== 0){if(p7V || p7V === +\"0\"){e38=p7V;V6F[2]=V6F[0];}else {e38=Y4V;V6F[2]=V6F[1];}if(h62 && S$o.series[h62] && S$o.series[h62].parameters.extendToEndOfDataSet){v92.R_O(102);var T3D=v92.M8Y(11,2430,13,17);t8W=S$o.dataSet.length - T3D;}else {t8W=K_D;}}function J8d(e90){var h1G;if(!e90){return null;}h1G=e90[V1o];if(h1G && (h1G[d9V] || h1G[d9V] === 0)){h1G=h1G[d9V];}if(o5u && o5u.getBasis){h1G+=o5u.getBasis(e90,V1o,d9V);}if(!S$o.transformFunc || J4_ != S$o.yAxis){return h1G;}else if(e90.transform && (V1o in e90.transform)){h1G=e90.transform[V1o];if(h1G && (h1G[d9V] || h1G[d9V] === 0)){h1G=h1G[d9V];}return h1G;}return S$o.transformFunc(G6i,S$o,h1G);}if(!p7V && p7V !== 0){p7V=e38;l08=t8W;V6F[+\"0\"]=V6F[2];if(Y4V === 0 && K_D === 0){Y4V=p7V;K_D=l08;V6F[1]=V6F[0];}}f$u=G6i.pixelFromTransformedValue.bind(G6i);f0x=G6i.valueFromPixel.bind(G6i);p7V=f0x(V6F[0]?p7V:f$u(p7V,v2e,J4_),v2e);Y4V=f0x(V6F[1]?Y4V:f$u(Y4V,v2e,J4_),v2e);e38=f0x(V6F[+\"2\"]?e38:f$u(e38,v2e,J4_),v2e);J5E=E9J.convertBoxToPixels(G6i,v2e.name,e0o);m41=E9J.convertBoxToPixels(G6i,v2e.name,{x0:K_D,y0:Y4V,x1:l08,y1:p7V});C6X=E9J.convertBoxToPixels(G6i,v2e.name,{x0:l08,y0:p7V,x1:t8W,y1:e38});if(E9J.boxIntersects(J5E.x0,J5E.y0,J5E.x1,J5E.y1,m41.x0,m41.y0,m41.x1,m41.y1,\"segment\") || E9J.boxIntersects(J5E.x0,J5E.y0,J5E.x1,J5E.y1,C6X.x0,C6X.y0,C6X.x1,C6X.y1,\"segment\")){return Math.min(Math.pow(U3k - (m41.y1 + m41.y0) / 2,2) + Math.pow(G66 - (m41.x1 + m41.x0) / (\"2\" * 1),2),Math.pow(U3k - (C6X.y1 + C6X.y0) / 2,+\"2\") + Math.pow(G66 - (C6X.x1 + C6X.x0) / +\"2\",2));}return !1;}C9P=[];for(var d64 in this.panels){C9P=C9P.concat(this.panels[d64].yaxisLHS).concat(this.panels[d64].yaxisRHS);}for(t0d=0;t0d < C9P.length;t0d++){if(X8V == C9P[t0d] && !d22)continue;if(C9P[t0d].highlight){t2l=!![];}C9P[t0d].highlight=!!0;}if((f5W === !0 || f5W && f5W.yaxis) && E6K && !E6K.noDraw){this.anyHighlighted=!![];j5n=E6K;C_u={};}if(t2l){this.draw();C_u.panel=A7B;if(this.anyHighlighted && !this.grabStartYAxis){C_u.panel=A7B;}else {C_u={};}this.displaySticky(C_u);this.clearMeasure();if(s_y){s_y.measure();}}if(!this.anyHighlighted){this.setMeasure();}else if(this.controls.mSticky){if(C_u && C_u.positioner){C_u.positioner.call(this,this.controls.mSticky);}else {this.positionSticky(this.controls.mSticky);}}if(j5n && A7B && !A7B.noDrag){if(this.longHoldTookEffect && !this.cancelLongHold){if(j5n.params){if(j5n.params.dependentOf){j5n=H_N.seriesRenderers[j5n.params.dependentOf];j5n.params.highlight=!!\"1\";}for(t0d in H_N.seriesRenderers){if(H_N.seriesRenderers[t0d].params.dependentOf == j5n.params.name){H_N.seriesRenderers[t0d].params.highlight=!!\"1\";}}}this.highlightedDraggable=j5n;if(j5n.getDependents){K37=j5n.getDependents(this,!!({}));for(t0d in this.overlays){M$5=this.overlays[t0d];if(K37.indexOf(M$5) > -1){M$5.highlight=!\"\";}}}}if(!C_u.noDrag){this.container.classList.add(\"stx-draggable\");}}else {this.container.classList.remove(\"stx-draggable\");}this.highlightedDataSetField=this.adjustHighlightedDataSetField(this.highlightedDataSetField);this.displayDrawOK();};E9J.ChartEngine.prototype.rightClickHighlighted=function(){var r_0;r_0=\"rightClickHighlighte\";r_0+=\"d\";if(this.runPrepend(\"rightClickHighlighted\",arguments)){return;}this.deleteHighlighted(!0);this.runAppend(r_0,arguments);};E9J.ChartEngine.prototype.deleteHighlighted=function(F3s,X1r,n7H){var f6w,Y0$,w3r,j9G,p3p,R8$,y6p,z8c,c5l,K_b,E2l,P$w,p5s,l6O;f6w=\"dele\";f6w+=\"teHighl\";q1l46.P3W();f6w+=\"ighte\";f6w+=\"d\";if(this.runPrepend(f6w,arguments)){return;}this.cancelTouchSingleClick=!![];E9J.clearCanvas(this.chart.tempCanvas,this);Y0$=this.bypassRightClick === !({});if(Y0$ || !this.bypassRightClick.drawing){for(var I4Z=this.drawingObjects.length - 1;I4Z >= 0;I4Z--){w3r=this.drawingObjects[I4Z];if(!w3r.highlighted)continue;if(F3s){this.rightClickDrawing(w3r,X1r,n7H);}else if(!w3r.permanent){j9G=w3r.abort();if(!j9G){p3p=this.exportDrawings();this.drawingObjects.splice(I4Z,1);this.undoStamp(p3p,this.exportDrawings());}this.changeOccurred(\"vector\");}}}if(Y0$ || !this.bypassRightClick.study){for(var X9a in this.overlays){R8$=this.overlays[X9a];if((R8$.overlay || R8$.underlay) && R8$.highlight && !R8$.permanent){if(F3s || X1r){this.rightClickOverlay(X9a,X1r);}else {this.removeOverlay(X9a);}}}}y6p=this.currentPanel && this.currentPanel.chart;if(y6p && (Y0$ || !this.bypassRightClick.series)){for(var S_q in y6p.seriesRenderers){z8c=y6p.seriesRenderers[S_q];if(z8c.params.highlightable && !z8c.params.permanent){c5l=this.panels[z8c.params.panel];K_b=c5l && c5l.yAxis.name;for(var N5h=z8c.seriesParams.length - +\"1\";N5h >= 0;N5h--){E2l=z8c.seriesParams[N5h];if((z8c.params.highlight || E2l.highlight) && !E2l.permanent){z8c.removeSeries(E2l.id);if(z8c.seriesParams.length < 1){this.removeSeriesRenderer(z8c);if(z8c.params.name == K_b){this.electNewPanelOwner(z8c.params.panel);}else {this.checkForEmptyPanel(z8c.params.panel);P$w=this.getYAxisByName(c5l,z8c.params.name);if(P$w){P$w.name=P$w.studies[0] || P$w.renderers[1];}}}}}}}}this.draw();if(!F3s && !X1r){this.resizeChart();}this.clearMeasure();p5s=this.controls.mSticky;if(p5s){l6O=\"n\";l6O+=\"o\";l6O+=\"ne\";p5s.style.display=l6O;p5s.querySelector(\".mStickyInterior\").innerHTML=\"\";}this.runAppend(\"deleteHighlighted\",arguments);};E9J.ChartEngine.prototype.displayDragOK=function(D_T){var G$p=q1l46;var W9k,q6V,w3A,E5t,D2M,O3Y,i_Q,P0L,w8T,N$8,k3d,u8m,I8k,W$U,k$X,l4M;W9k=this;G$p.C8A();q6V=this.controls.dragOk;function g5L(C4o){var v1v,R2z,h5A,v5B;v1v=\"al\";v1v+=\"l\";R2z=\".f\";R2z+=\"ield\";G$p.C8A();h5A=W9k.translateIf(C4o.querySelector(R2z).getAttribute(\"text\"));v5B=W9k.whichYAxis(W9k.whichPanel(W9k.cy),W9k.cx,W9k.cy);if(v5B && v5B.dropzone == v1v){h5A+=\"-->\" + W9k.translateIf(v5B.name);}C4o.querySelector(\".field\").innerHTML=h5A;}if(q6V){if(!D_T){if(!this.tapForHighlighting || !this.touching || this.anyHighlighted){this.findHighlights(this.highlightViaTap);}}w3A=this.highlightedDraggable;E5t=w3A && w3A.undraggable && w3A.undraggable(this);D2M=this.cx;O3Y=this.cy;i_Q=w3A && !E5t && this.longHoldTookEffect;if(D_T){if(i_Q && this.insideChart){q6V.style.display=\"inline-block\";}}else {if(i_Q && !this.cancelLongHold){P0L=\"stx-drag\";P0L+=\"-series\";w8T=\"st\";w8T+=\"x-d\";w8T+=\"rag-chart\";N$8=\"i\";N$8+=\"nl\";N$8+=\"ine-block\";k3d=w3A.inputs && w3A.inputs.display || w3A.params && (w3A.params.display || w3A.params.name) || w3A.name;q6V.querySelector(\".field\").setAttribute(\"text\",k3d);g5L.call(this,q6V);q6V.style.display=N$8;this.draw();this.displaySticky();if(this.grabStartYAxis){this.container.classList.replace(w8T,\"stx-drag-axis\");}else {this.container.classList.replace(\"stx-drag-chart\",P0L);}}else {q6V.style.display=\"none\";this.draw();this.container.classList.remove(\"stx-drag-series\");this.container.classList.remove(\"stx-drag-axis\");for(var Z_5 in this.panels){u8m=this.panels[Z_5].subholder.classList;u8m.remove(\"dropzone\");u8m.remove(\"all\");u8m.remove(\"left\");u8m.remove(\"right\");u8m.remove(\"top\");u8m.remove(\"bottom\");for(I8k=0;I8k < this.panels[Z_5].yaxisLHS.length;I8k++){this.panels[Z_5].yaxisLHS[I8k].dropzone=null;}for(I8k=0;I8k < this.panels[Z_5].yaxisRHS.length;I8k++){this.panels[Z_5].yaxisRHS[I8k].dropzone=null;}}}this.draw();}if(w3A){W$U=\"p\";W$U+=\"x\";k$X=O3Y + q6V.offsetHeight;l4M=Math.max(0,D2M - q6V.offsetWidth);G$p.R_O(0);q6V.style.top=G$p.M8Y(W$U,k$X);G$p.U1h(0);q6V.style.left=G$p.P_X(\"px\",l4M);g5L.call(this,q6V);}}};E9J.ChartEngine.prototype.displayDrawOK=function(){var n2Y=q1l46;var E5V,q1y,N5p,s1V,j52,p96,P2Y,D3T;E5V=this.controls.drawOk;if(E5V && E9J.Drawing){q1y=\"n\";q1y+=\"o\";q1y+=\"n\";q1y+=\"e\";N5p=E9J.Drawing[this.currentVectorParameters.vectorType];if(N5p){N5p=new N5p();}if(this.highlightedDataSetField && N5p && N5p.isAllowed(this,this.highlightedDataSetField)){s1V=\".\";s1V+=\"f\";s1V+=\"ie\";s1V+=\"ld\";j52=\"p\";j52+=\"x\";p96=\"p\";p96+=\"x\";E5V.style.display=\"inline-block\";P2Y=this.cy + E5V.offsetHeight;D3T=this.cx - E5V.offsetWidth;n2Y.U1h(0);E5V.style.top=n2Y.M8Y(p96,P2Y);n2Y.U1h(0);E5V.style.left=n2Y.M8Y(j52,D3T);E5V.querySelector(s1V).innerHTML=this.translateIf(this.highlightedDataSetField);}else {E5V.style.display=q1y;}}};E9J.ChartEngine.prototype.mouseWheel=function(U8K){var k_f=q1l46;var G2G,j5c,I2J,X2H,T$v,a1f,w6Y;if(this.runPrepend(\"mouseWheel\",arguments)){return;}if(U8K.preventDefault){U8K.preventDefault();}if(this.openDialog !== \"\"){return;}G2G=U8K.deltaX;j5c=U8K.deltaY;if(Math.abs(j5c) > Math.abs(G2G)){G2G=0;}else {k_f.R_O(42);j5c=k_f.M8Y(\"0\",32);}this.lastMouseWheelEvent=Date.now();k_f.C8A();if(Math.abs(G2G) === 0 && Math.abs(j5c) === 0){return;}if(U8K.shiftKey && j5c){G2G=j5c;j5c=0;}if(this.allowSideswipe && G2G !== 0){this.lastMove=\"horizontal\";X2H=G2G;this.grabbingScreen=!!({});if(!this.currentPanel){this.currentPanel=this.chart.panel;}this.grabStartX=E9J.ChartEngine.crosshairX;this.grabStartY=E9J.ChartEngine.crosshairY;this.grabStartScrollX=this.chart.scroll;this.grabStartScrollY=this.currentPanel.yAxis.scroll;this.grabStartMicropixels=this.micropixels;this.grabStartPanel=this.currentPanel;if(this.mouseWheelAcceleration){I2J=Math.max(Math.pow(Math.abs(X2H),0.3),1);X2H*=I2J;}this.mousemoveinner(E9J.ChartEngine.crosshairX - X2H,E9J.ChartEngine.crosshairY);E9J.ChartEngine.crosshairX=this.crosshairX=U8K.clientX;this.updateChartAccessories();this.grabbingScreen=!!\"\";return;}this.lastMove=\"vertical\";if(!this.allowZoom || this.activeDrawing && !this.allowDrawingZoom){return;}if(!this.displayInitialized){return;}if(!j5c){if(E9J.wheelEvent == \"mousewheel\"){j5c=-(\"1\" - 0) / +\"40\" * U8K.wheelDelta;if(U8K.wheelDeltaX){k_f.U1h(8);var e3b=k_f.M8Y(1,0);k_f.R_O(108);var g_v=k_f.M8Y(11,38,2,11);G2G=e3b / g_v * U8K.wheelDeltaX;}}else {j5c=U8K.detail;}}if(typeof U8K.deltaMode == \"undefined\"){U8K.deltaMode=U8K.type == \"MozMousePixelScroll\"?0:1;}T$v=-j5c;if(U8K.deltaMode == +\"1\"){k_f.U1h(46);T$v*=k_f.P_X(\"33\",0);}a1f=null;w6Y=null;if(this.mouseWheelAcceleration){I2J=Math.max(Math.pow(Math.abs(T$v),\"0.3\" * 1),1);a1f=Math.max(Number.MIN_VALUE,\"1\" - 0 - +\"0.1\" * I2J);k_f.U1h(9);w6Y=k_f.P_X(1,a1f);}this.zoomInitiatedByMouseWheel=!!({});if(T$v > \"0\" >> 64){if(this.reverseMouseWheel){this.zoomOut(null,w6Y);}else {this.zoomIn(null,a1f);}}else if(T$v < 0){if(this.reverseMouseWheel){this.zoomIn(null,a1f);}else {this.zoomOut(null,w6Y);}}if(this.runAppend(\"mouseWheel\",arguments)){return;}return ![];};E9J.ChartEngine.handleContextMenu=function(l_B){q1l46.C8A();var u5t,e9f;u5t=E9J.ChartEngine.registeredContainers;for(var J8K=+\"0\";J8K < u5t.length;J8K++){if(l_B.target.ownerDocument !== u5t[J8K].ownerDocument)continue;e9f=u5t[J8K].stx;if(e9f){if(e9f.anyHighlighted){if(l_B.preventDefault){l_B.preventDefault();}return !({});}}}};E9J.ChartEngine.registerGlobalEvent(X4Y,E9J.ChartEngine.handleContextMenu);E9J.ChartEngine.htmlControls={annotationSave:'',annotationCancel:'',mSticky:`\n${\"\t\t
        \"}\n${\"\t\t\t\"}\n${\"\t\t\t\t\"}\n${\"\t\t\t\t\"}\n${\"\t\t\t<\" + \"/s\" + \"pa\" + \"n>\"}\n${\"\t\t\t(left-click \" + \"to pin toolt\" + \"ip)\"}\n${\"\t\t\t\"}\n${\"\t\t\t\t\"}\n${\"\t\" + \"\t\t\t\t&n\" + \"bsp;\"}\n${\"\t\t\t\" + \"\t<\" + \"/spa\" + \"n>\"}\n${\"\t\t\t\t\"}\n${\"\t\t\t\t\t<\" + \"span> \"}\n${\"\t\t\" + \"\t\t\" + \"\"}\n${\"\t\t\t\t\"}\n${\"\t\t\t\t\t&n\" + \"bsp;\"}\n${\"\t\t\" + \"\t\" + \"\t\"}\n${\"\t\t\t\t\"}\n${\"\t\t\t\t\t(\"}\n${\"\t\t\t\t\tright-click to delete\"}\n${\"\t\t\t\t\tright-cl\" + \"ick to manage\"}\n${\"\t\" + \"\t\" + \"\t\t\t)\"}\n${\"\t\" + \"\t\t\t\"}\n${\"\t\t\t\"}\n${\"\t\t\t(long-press\" + \" to drag)\"}\n${\"\t\t\t\"}\n${\"\t\t\t\t(\"}\n${\"\t\t\t\t<\" + \"span cla\" + \"ss=\\\"dragAnchorText\\\" type=\\\"anchorHandle\\\">\"}\n${\"\t\t\t\t\tdrag to\" + \" ch\" + \"ange anchor time\"}\n${\"\t\t\t\t\"}\n${\"\t\t\t\t)\"}\n${\"\t\t\t\"}\n${\"\t\t\"}\n${\"\t\"}`,drawOk:'
        ',dragOk:E1r,crossX:K14,crossY:'
        ',chartControls:`
        \n\t\t
        \n\t\t\t\n\t\t\t\n\t\t
        `,home:'
        ',floatDate:'
        ',handleTemplate:'
        ',iconsTemplate:y4d,baselineHandle:'
        ',notificationTray:'
        '};E9J.ChartEngine.prototype.registerChartControl=function(U76,f89,y$D){var f3a=q1l46;var X5x,F4t,z0K,v9i,N$g,j_R,n1v;X5x=\".s\";X5x+=\"tx-\";X5x+=\"zoom-in\";F4t=this.controls;if(!F4t || !F4t.chartControls){return;}if(F4t.chartControls.querySelector((9203 >= 281?\".\":\"a\") + U76)){return;}z0K=null;f3a.C8A();v9i=F4t.chartControls.querySelector(X5x);if(v9i){N$g=\"
        \";j_R=\"bu\";j_R+=\"tto\";j_R+=\"n\";n1v=\"spa\";n1v+=\"n\";z0K=document.createElement(n1v);z0K.ariaLabel=f89;z0K.role=j_R;f3a.R_O(14);z0K.innerHTML=f3a.P_X(f89,\"
        \",N$g);f3a.R_O(0);z0K.className=f3a.M8Y(U76,\"stx-chart-control-button \");v9i.parentNode.appendChild(z0K);if(y$D){E9J.safeClickTouch(z0K,y$D,{keyboardClick:!!({})});}return z0K;}};E9J.ChartEngine.prototype.zoomOut=function(g13,R36){var m2q,n3L,C5g,u9A,D7_;m2q=\"zoo\";m2q+=\"m\";m2q+=\"Ou\";m2q+=\"t\";if(this.runPrepend(m2q,arguments)){return;}if(this.preferences.zoomOutSpeed){R36=this.preferences.zoomOutSpeed;}else if(!R36){q1l46.R_O(109);R36=q1l46.M8Y(0,\"1\",\"0.7\");}if(g13 && g13.preventDefault){g13.preventDefault();}this.cancelTouchSingleClick=!![];n3L=this;for(var y1E in this.charts){C5g=this.charts[y1E];u9A=C5g.width * R36 / this.layout.candleWidth;if(C5g.allowScrollFuture === !\"1\" && C5g.allowScrollPast === ![] && u9A > C5g.dataSet.length){u9A=C5g.dataSet.length;}D7_=this.chart.width / u9A;this.layout.setSpan=null;this.layout.range=null;this.animations.zoom.run(e$1(C5g),this.layout.candleWidth,D7_,!!\"\",this.ownerWindow);}function e$1(t82){return function(q1A){n3L.zoomSet(q1A,t82);if(n3L.animations.zoom.hasCompleted){if(n3L.runAppend(\"zoomOut\",arguments)){return;}n3L.changeOccurred(\"layout\");if(n3L.continuousZoom){n3L.continuousZoom.execute(!!({}));}}};}};E9J.ChartEngine.prototype.zoomIn=function(y3l,o2_){var s9g=q1l46;s9g.C8A();var y57,D57,H54,u6$,O9k;y57=\"zo\";function e0_(J4J){s9g.C8A();return function(b3W){var P6E;D57.zoomSet(b3W,J4J);s9g.P3W();if(D57.animations.zoom.hasCompleted){P6E=\"zoo\";P6E+=\"mIn\";if(D57.runAppend(P6E,arguments)){return;}D57.changeOccurred(\"layout\");if(D57.continuousZoom){D57.continuousZoom.execute();}}};}y57+=\"omIn\";if(this.runPrepend(y57,arguments)){return;}if(this.preferences.zoomInSpeed){o2_=this.preferences.zoomInSpeed;}else if(!o2_){o2_=0.7;}if(y3l && y3l.preventDefault){y3l.preventDefault();}this.cancelTouchSingleClick=!!1;D57=this;for(var E7A in this.charts){H54=this.charts[E7A];u6$=H54.width * o2_ / this.layout.candleWidth;if(H54.maxTicks - u6$ < 1){s9g.U1h(8);var e3n=s9g.P_X(4,5);u6$=H54.maxTicks - e3n;}if(u6$ < this.minimumZoomTicks){u6$=this.minimumZoomTicks;}O9k=this.chart.width / u6$;this.layout.setSpan=null;this.layout.range=null;this.animations.zoom.run(e0_(H54),this.layout.candleWidth,O9k,!({}),this.ownerWindow);}};E9J.ChartEngine.prototype.createCrosshairs=function(){var m0F,j4n,M8s,l$g;m0F=\"cre\";m0F+=\"ateCros\";m0F+=\"s\";m0F+=\"hairs\";j4n=\"cre\";j4n+=\"ateC\";j4n+=\"rosshairs\";q1l46.C8A();if(this.runPrepend(j4n,arguments)){return;}if(!this.manageTouchAndMouse || this.mainSeriesRenderer.nonInteractive){return;}M8s=this.controls.crossX;l$g=this.controls.crossY;if(M8s){if(!M8s.onmousedown){M8s.onmousedown=function(c0j){if(c0j.preventDefault){c0j.preventDefault();}return !({});};}}if(l$g){if(!l$g.onmousedown){l$g.onmousedown=function(n0Z){if(n0Z.preventDefault){n0Z.preventDefault();}return !({});};}}this.runAppend(m0F,arguments);};F5d=!({});E9J.ChartEngine.prototype.mousemoveinner=E9J.ChartEngine.prototype.mousemoveinner || (function(r$_,X1o){q1l46.P3W();var t3o;t3o=\"interaction feature requires a\";t3o+=\"c\";t3o+=\"tivating movement feature.\";if(!F5d){console.error(t3o);}F5d=!!\"1\";});};A6=m5p=>{var f6R=q1l46;var K64,L6t;K64=\"undef\";K64+=\"in\";f6R.C8A();K64+=\"ed\";L6t=typeof _CIQ !== K64?_CIQ:m5p.CIQ;if(!L6t.Marker){L6t.ChartEngine.helpersToRegister.push(function(x4U){x4U.markerHelper={classMap:{},domMarkers:[],visibleCanvasMarkers:[],highlighted:[],placementMap:{},groupMap:{},fieldPanelMap:{}};});L6t.ChartEngine.prototype.addToMarkerMapping=function(x3H){var L2b,H55;this.removeFromHolder(x3H);L2b=this.panels[x3H.params.panelName];f6R.P3W();if(!L2b){return;}x3H.chart=L2b.chart;H55=this.markerHelper.classMap[x3H.className];if(!H55){H55=this.markerHelper.classMap[x3H.className]={};}if(!H55[x3H.params.panelName]){H55[x3H.params.panelName]=[];}H55[x3H.params.panelName].push(x3H);this.markerHelper.classMap[x3H.className]=H55;var {label:W2K}=x3H.params;if(!this.markers[W2K]){this.markers[W2K]=[];}this.markers[W2K].push(x3H);};L6t.ChartEngine.prototype.addToHolder=function(n2c){var u6V,A5I,r7R,U6S;u6V=this.panels[n2c.params.panelName];if(!u6V){return;}A5I=n2c.params;r7R=n2c.node;U6S=n2c.stxNodeCreator;if(U6S && U6S.prepareForHolder){r7R=U6S.prepareForHolder(n2c);}if(A5I.chartContainer){this.container.appendChild(n2c.node);}else if(A5I.includeAxis){u6V.holder.appendChild(n2c.node);}else {u6V.subholder.appendChild(r7R);}n2c.chart=u6V.chart;if(U6S && U6S.addToHolder){U6S.addToHolder(n2c);}if(U6S && U6S.expand){if(U6S.node.params.pinnable && n2c.makePinnable){n2c.makePinnable();}L6t.Marker.initializeScrollBehavior(U6S);if(U6S.expansionHolder){L6t.Marker.initializeScrollBehavior({expand:U6S.expansionHolder});}}f6R.C8A();if(n2c.className !== \"CIQ.Marker.Group\"){this.updateGroupMap();}};L6t.ChartEngine.prototype.getMarkerArray=function(s8m,h0A){var t88,E3j,G7L,M6D;t88=[];for(var g8b in this.markers){for(var I8K=+\"0\";I8K < this.markers[g8b].length;I8K++){E3j=\"a\";E3j+=\"l\";E3j+=\"l\";G7L=\"fie\";G7L+=\"l\";G7L+=\"d\";M6D=this.markers[g8b][I8K];if(s8m == \"panelName\"){if(M6D.params.panelName == h0A){t88.push(M6D);}}else if(s8m == \"label\"){if(g8b == h0A){t88.push(M6D);}}else if(s8m == G7L){if(M6D.params.field === h0A){t88.push(M6D);}}else if(s8m == E3j){t88.push(M6D);}}}return t88;};L6t.ChartEngine.prototype.removeFromHolder=function(f8d){var W$y,z46;f8d.node.remove();W$y=this.markers[f8d.params.label];if(!W$y){return;}for(var H1s=+\"0\";H1s < W$y.length;H1s++){if(W$y[H1s] === f8d){W$y.splice(H1s,1);break;}}z46=this.markerHelper.classMap[f8d.className];if(z46){Object.entries(z46).forEach(([r4$,C0f])=>{var l_O,T6$,F5S,Z5Z;l_O=-1914874400;T6$=-580681551;f6R.U1h(42);F5S=f6R.M8Y(\"2\",32);for(var M9L=+\"1\";f6R.G33(M9L.toString(),M9L.toString().length,82311) !== l_O;M9L++){Z5Z=C0f.indexOf(f8d);F5S+=2;}if(f6R.I9N(F5S.toString(),F5S.toString().length,+\"42200\") !== T6$){Z5Z=C0f.indexOf(f8d);}if(Z5Z > -1){C0f.splice(Z5Z,1);}f6R.C8A();if(!C0f.length){delete z46[r4$];}});}if(f8d.className !== \"CIQ.Marker.Group\"){this.updateGroupMap();}};L6t.ChartEngine.prototype.moveMarkers=function(G7m,s$O,m12){var W1K,G72,d$C;W1K=m12 || this.getMarkerArray(\"panelName\",G7m);W1K.forEach(W7f=>{if(W7f instanceof L6t.Marker.Group){return;}W7f.params.panelName=s$O;if(m12){this.addToMarkerMapping(W7f);if(!W7f.stxNodeCreator || !W7f.stxNodeCreator.isCanvasMarker || !W7f.stxNodeCreator.deferAttach){this.addToHolder(W7f);}}});if(m12){return;}for(var f8S in this.markerHelper.classMap){G72=this.markerHelper.classMap[f8S];d$C=G72[G7m];if(d$C){G72[s$O]=d$C;delete G72[G7m];}}this.updateGroupMap();};L6t.ChartEngine.prototype.establishMarkerTicks=function(){this.getMarkerArray(\"all\").forEach(i1d=>{f6R.C8A();return this.setMarkerTick(i1d);});this.updateGroupMap();};L6t.ChartEngine.prototype.futureTickIfDisplayed=function(j3m){var G7d,X9i,i1b,q2T,O5l,B28,H4N,k__,w27;G7d=j3m.chart;if(G7d.dataSet.length < 1){return;}X9i=G7d.xaxis[G7d.xaxis.length - 1].DT;f6R.R_O(0);var g1y=f6R.M8Y(20,59980);X9i=new Date(X9i.getTime() - this.timeZoneOffset * g1y);if(j3m.params.x > X9i){return;}i1b=G7d.maxTicks - G7d.dataSegment.length;q2T=G7d.dataSet.length + i1b;H4N=new Date(+G7d.dataSet[G7d.dataSet.length - 1].DT);k__=this.standardMarketIterator(H4N,null,G7d);w27=j3m.params.x.getTime();for(var s68=G7d.dataSet.length;s68 < q2T;s68++){O5l=H4N.getTime();H4N=k__.next();B28=H4N.getTime();if(B28 == w27){j3m.tick=s68;return;}else if(B28 > w27 && O5l < w27){f6R.U1h(8);j3m.tick=Math.max(f6R.M8Y(1,s68),0);return;}}};L6t.ChartEngine.prototype.setMarkerTick=function(R$Z){var U$I,b$v,A3A,p36,y$w,Y7I,c4n;U$I=\"t\";U$I+=\"i\";U$I+=\"ck\";b$v=R$Z.chart || this.chart;f6R.P3W();if(R$Z.params.xPositioner == \"master\" && R$Z.params.x){R$Z.tick=Math.floor(R$Z.params.x / this.layout.periodicity);}else if(R$Z.params.xPositioner == U$I && R$Z.params.x){R$Z.tick=R$Z.params.x;}else if(R$Z.params.xPositioner == \"date\" && R$Z.params.x){y$w=R$Z.params.x.getTime();for(var w1x=0;w1x < b$v.dataSet.length;w1x++){Y7I=b$v.dataSet[w1x];p36=Y7I.DT.getTime();A3A=p36;if(w1x > 0){A3A=b$v.dataSet[w1x - 1].DT.getTime();}if(p36 == y$w){R$Z.tick=w1x;return;}else if(p36 > y$w && A3A < y$w){f6R.U1h(110);R$Z.tick=Math.max(f6R.M8Y(\"1\",w1x),+\"0\");return;}else if(y$w < p36){R$Z.tick=null;return;}}if(b$v.dataSet.length < (\"1\" ^ 0)){return;}c4n=new Date(+b$v.dataSet[w1x - 1].DT);if(c4n.getTime() < y$w){R$Z.params.future=!!({});}R$Z.tick=null;}};L6t.ChartEngine.prototype.updateGroupMap=function(){var w9P,Z0O,w7e,c4V,K18,R0h,v4R,I8d,j89,r2m,Y_s;w9P=this.getMarkerArray(\"all\");var {groupMap:Z6i}=this.markerHelper;Object.values(Z6i).forEach(w8D=>{w8D.markers=[];});for(var x8z in w9P){Z0O=\"_l\";Z0O+=\"an\";Z0O+=\"e\";w7e=\"CIQ.\";w7e+=\"Mark\";w7e+=\"er.Sign\";w7e+=\"alIQ\";c4V=w9P[x8z];var {className:B0y, tick:R0B}=c4V;var {yPositioner:n6B, xPositioner:n40, panelName:X6I, x:C0G, label:R6r, datum:X7M, groupable:P_1, field:h4k}=c4V.params;if(P_1 === !!\"\")continue;if(B0y == \"CIQ.Marker.Group\")continue;if(B0y == w7e)continue;if(!C0G && X7M && X7M.startDate){C0G=X7M.startDate;}var {node:Z3b}=c4V.stxNodeCreator || ({});K18=L6t.Marker.TimeSpanEvent && c4V instanceof L6t.Marker.TimeSpanEvent;if(!Z3b || !Z3b.params || !Z3b.params.type || !this.groupableMarkerTypes.includes(Z3b.params.type) || Z3b.params.category == \"trade\" && !K18){continue;}if(!X6I || !n6B || !R0B || !C0G || c4V instanceof L6t.Marker.Group)continue;R0h=n6B.includes(Z0O) || L6t.Marker.TimeSpanEvent && c4V instanceof L6t.Marker.TimeSpanEvent;f6R.U1h(92);v4R=f6R.P_X(h4k?(6098 <= +\"4321\"?(0x843,\"7.80e+2\" * 1):\"-\") + h4k:\"\",X6I,\"|\",R0h?\"-\" + R6r:\"\",n6B);f6R.U1h(14);I8d=f6R.M8Y((3770,72.68) > (4580,+\"912.69\")?(0x20e1,3.22e+3):5139 >= (868.9,35.45)?\"-\":(4.71e+3,\"u\"),R0B,v4R);if(typeof Z6i[I8d] == \"undefined\"){Z6i[I8d]={yPositioner:n6B,xPositioner:n40,panelName:X6I,className:B0y,field:h4k,x:C0G,tick:R0B,groupKey:I8d,groupMarker:null,markers:[]};}c4V.groupKey=I8d;c4V.hidden=!({});Z6i[I8d].markers.push(c4V);}for(var J6f in Z6i){j89=Z6i[J6f];if(j89.markers.length > 1){j89.markers.forEach(w6s=>{f6R.P3W();return w6s.hidden=!!1;});if(!j89.groupMarker){r2m={stx:this,panelName:j89.panelName,yPositioner:j89.yPositioner,xPositioner:j89.xPositioner,x:j89.x,field:j89.field,groupKey:J6f,displayStem:!!({})};j89.groupMarker=j89.className == \"CIQ.Marker.TimeSpanEvent\"?new L6t.Marker.TimeSpanEvent.Group({...r2m,y:j89.markers[0].params.datum.spacingModifier,displayStem:!!\"\"}):new L6t.Marker.Group(r2m);}else {j89.groupMarker.groupKey=J6f;}var {stxNodeCreator:i7m}=j89.groupMarker;Y_s=this.panels[i7m.panelName] || this.chart;i7m.node.chartHeight=Y_s.yAxis.height;i7m.updateVisual();}else {if(j89.groupMarker){var {groupMarker:q8B}=j89;if(q8B.stxNodeCreator.groupMarker){q8B.stxNodeCreator.groupMarker.remove();q8B.stxNodeCreator.groupMarker=null;}q8B.remove();q8B=null;}delete Z6i[J6f];}}this.markerHelper.groupMap=Z6i;};L6t.ChartEngine.prototype.positionMarkers=function(){var W7e,o1E,D2H,P60,y_n,D6_,h70,Y0i,j67,s3e,p38,c$8,X1T,A1l,y6N;W7e=\"t\";W7e+=\"i\";W7e+=\"c\";W7e+=\"k\";o1E=\"t\";o1E+=\"i\";o1E+=\"c\";o1E+=\"k\";D2H=this;P60=this.chart;if(!D2H.markerHelper){return;}y_n=-442108575;D6_=1953593117;h70=2;for(var b3N=1;f6R.G33(b3N.toString(),b3N.toString().length,+\"90638\") !== y_n;b3N++){this.markerHelper.placementMap={};h70+=2;}f6R.C8A();if(f6R.G33(h70.toString(),h70.toString().length,+\"72363\") !== D6_){this.markerHelper.placementMap={};}this.markerHelper.fieldPanelMap={};if(this.markerDelay || this.markerDelay === 0){Y0i=1098649944;j67=2000897527;s3e=2;for(var I3Z=1;f6R.G33(I3Z.toString(),I3Z.toString().length,50713) !== Y0i;I3Z++){if(+this.markerTimeout){this.markerTimeout=setTimeout(v9K,this.markerDelay);}s3e+=2;}if(f6R.G33(s3e.toString(),s3e.toString().length,10377) !== j67){if(!this.markerTimeout){this.markerTimeout=setTimeout(v9K,this.markerDelay);}}}else {v9K();}p38=this.getFirstLastDataRecord(P60.dataSegment,o1E);c$8=this.getFirstLastDataRecord(P60.dataSegment,W7e,!!({}));if(!p38 || !c$8){return;}X1T=this.getMarkerArray(\"all\");this.markerHelper.visibleCanvasMarkers=[];function v9K(){var F3b,E8j,E1F,y7U;if(D2H.runPrepend(\"positionMarkers\",arguments)){return;}D2H.markerTimeout=null;for(var w3d in D2H.markerHelper.classMap){for(var F3f in D2H.markerHelper.classMap[w3d]){F3b=D2H.markerHelper.classMap[w3d][F3f];F3b=F3b.filter(A12=>{f6R.P3W();return !A12.hidden;});E8j=D2H.panels[F3f];if(!E8j)continue;if(F3b.length){E1F={stx:D2H,arr:F3b,panel:E8j};E1F.firstTick=E8j.chart.dataSet.length - E8j.chart.scroll;E1F.lastTick=E1F.firstTick + E8j.chart.dataSegment.length;y7U=F3b[0].constructor.placementFunction;if(y7U){y7U(E1F);}else {D2H.defaultMarkerPlacement(E1F);}}}}D2H.runAppend(\"positionMarkers\",arguments);}for(var T3U=0;T3U < X1T.length;T3U++){A1l=X1T[T3U];y6N=A1l.stxNodeCreator;if(p38.tick <= A1l.tick && A1l.tick <= c$8.tick){this.markerHelper.visibleCanvasMarkers.push(A1l);if(y6N && y6N.drawMarker){y6N.drawMarker(A1l);}}else {A1l.highlight=!1;A1l.params.box=null;if(A1l.attached && y6N && y6N.expand && !A1l.params.pinnedPosition){y6N.expand.style.visibility=\"hidden\";}}if(A1l.node){A1l.node.style.visibility=A1l.hidden?\"hidden\":\"\";}if(A1l.chartMarker && A1l.hidden){A1l.chartMarker.remove();A1l.chartMarker=null;}}};L6t.Marker=L6t.Marker || (function(a72){var J5D,x0e,c59;J5D=this instanceof L6t.Marker?this:Object.create(L6t.Marker.prototype);var {stx:r4k}=a72;if(!r4k){console.log(\"Marker created without specifying stx\");return;}if(!J5D.className){J5D.className=\"CIQ.Marker\";}J5D.params={xPositioner:\"date\",yPositioner:a72.y || a72.y === 0?\"value\":\"above_candle\",permanent:!({}),label:\"generic\",includeAxis:!\"1\"};L6t.extend(J5D.params,a72);f6R.C8A();if(!J5D.params.panelName){x0e=\"p\";x0e+=\"a\";x0e+=\"nelN\";x0e+=\"ame\";Object.defineProperty(J5D.params,x0e,{enumerable:!![],get:()=>{var t5Z,l2n;var {field:l6p}=J5D.params;if(!l6p){return r4k.chart.panel.name;}t5Z=r4k.markerHelper.fieldPanelMap[l6p];f6R.C8A();if(!t5Z){t5Z=(r4k.getPanelByField(l6p) || r4k.chart.panel).name;r4k.markerHelper.fieldPanelMap[l6p]=t5Z;}if(t5Z !== J5D.params._panelName){l2n=r4k.markerHelper.classMap[J5D.className];if(l2n){l2n=l2n[J5D.params._panelName];if(l2n && l2n.includes(J5D)){var {isConnected:z4G}=J5D.node;r4k.addToMarkerMapping(J5D);if(z4G || J5D.attached){r4k.addToHolder(J5D);}}}J5D.params._panelName=t5Z;}return t5Z;},set:P7e=>{return r4k.markerHelper.fieldPanelMap[J5D.params.field]=P7e;}});}if(!J5D.params.node){J5D.params.node=document.createElement(\"DIV\");}if(L6t.derivedFrom(J5D.params.node,L6t.Marker.NodeCreator)){J5D.stxNodeCreator=J5D.params.node;J5D.node=J5D.stxNodeCreator.node;}else {J5D.node=J5D.params.node;}r4k.setMarkerTick(J5D);r4k.addToMarkerMapping(J5D);c59=J5D.stxNodeCreator && J5D.stxNodeCreator.deferAttach;if(!c59){r4k.addToHolder(J5D);}if(J5D.stxNodeCreator && J5D.stxNodeCreator.drawMarker){J5D.stxNodeCreator.drawMarker(J5D);}return J5D;});L6t.Marker.prototype.remove=function(){this.params.stx.removeFromHolder(this);if(this.stxNodeCreator && this.stxNodeCreator.remove){this.stxNodeCreator.remove(this);}};L6t.Marker.prototype.click=function(c6j){var R15;if(this.hidden){return;}if(typeof arguments[0] === \"number\"){c6j={cx:arguments[\"0\" - 0],cy:arguments[\"1\" ^ 0],panel:arguments[3]};}var {cx:s7Z, cy:r9R, panel:z1R}=c6j;if(!this.params.stx){return;}R15=this.params.node;if(R15.click){R15.click({cx:s7Z,cy:r9R,marker:this,panel:z1R});}};L6t.Marker.prototype.doubleClick=function({cx:O_6, cy:H4s, panel:Y2D}){f6R.P3W();return ![];};L6t.Marker.prototype.render=function(){var f04,l_0;f04=[this];l_0={stx:this.params.stx,arr:f04,panel:this.params.stx.panels[this.params.panelName],showClass:this.showClass};this.constructor.placementFunction(l_0);};L6t.Marker.prototype.getMarkerGroup=function(){var R2X;if(!this.groupKey || !this.params.stx.markerHelper.groupMap){return;}R2X=this.params.stx.markerHelper.groupMap[this.groupKey];if(R2X){return R2X.groupMarker;}};L6t.Marker.prototype.makeDraggable=function(y0l){var H2Q,l$X,j8H,I5z,C9k,O$g,f_U,d3j,k22;H2Q=\"g\";H2Q+=\"r\";H2Q+=\"a\";H2Q+=\"b\";f6R.P3W();var {stx:n4n}=this.params;l$X=n4n.panels[this.params.panelName];if(!y0l && y0l !== !!0){y0l=!![];}if(y0l === !!({})){y0l=l$X.subholder;}j8H=this.stxNodeCreator?this.stxNodeCreator.expand || this.stxNodeCreator.node:this.node;j8H.draggable=!!y0l;j8H.removeEventListener(\"dragstart\",this.dragListener);if(!y0l){n4n.undoModal(j8H);j8H.style.cursor=\"\";return;}n4n.makeModal(j8H);j8H.style.cursor=H2Q;I5z=p_f=>{if(p_f.target !== j8H){return;}L6t.Marker.beingDragged={marker:this,offset:{x:p_f.offsetX,y:p_f.offsetY},node:p_f.target,dropzone:y0l};j8H.classList.add(\"being-dragged\");n4n.draw();p_f.dataTransfer.effectAllowed=\"move\";};C9k=h_9=>{var G0n,Y8d;f6R.P3W();var {beingDragged:u3b}=L6t.Marker;if(!u3b){return;}var {dropzone:a56, marker:R6_, offset:d0U}=u3b;if(a56 !== y0l){h_9.dataTransfer.dropEffect=\"none\";return;}h_9.preventDefault();G0n=n4n.backOutX(h_9.pageX - d0U.x);Y8d=n4n.backOutY(h_9.pageY - d0U.y);var {dragOrigin:P_Y}=R6_;R6_.dragOrigin={x:G0n,y:Y8d};if(!P_Y || P_Y.x !== G0n || P_Y.y !== Y8d){n4n.draw();}h_9.dataTransfer.dropEffect=\"move\";};O$g=W$P=>{f6R.P3W();var {beingDragged:y9d}=L6t.Marker;if(!y9d){return;}var {dropzone:U7c, marker:q0v, node:F67}=y9d;if(U7c !== y0l){return;}F67.classList.remove(\"being-dragged\");delete q0v.dragOrigin;if(q0v.store){q0v.store();}L6t.Marker.beingDragged=null;n4n.draw();};f_U=S8i=>{var v1T,T7H,b9j,q3s,t1G,M3h,g1e,a5E,x19;v1T=\"n\";v1T+=\"o\";v1T+=\"n\";v1T+=\"e\";var {beingDragged:B$5}=L6t.Marker;if(!B$5){return;}var {dropzone:B$g, marker:W7y, node:E0c}=B$5;if(B$g !== y0l){return;}var {field:k1S, xPositioner:u2k, yPositioner:E8Y}=W7y.params;T7H=W7y.params.yAxis || n4n.getYAxisByField(l$X,k1S) || l$X.yAxis;b9j=L6t.elementDimensions(E0c,{margin:!![],border:!![],padding:!!({})});q3s=n4n.backOutX(S8i.pageX) - B$5.offset.x;t1G=n4n.backOutY(S8i.pageY) - B$5.offset.y;M3h={};g1e=E0c === W7y.node || !W7y.node.parentElement;if(u2k === v1T || !u2k && W7y.params.x === undefined){a5E=\"p\";a5E+=\"x\";E0c.style.left=q3s - n4n.chart.left + a5E;}else {x19=g1e?b9j:L6t.elementDimensions(W7y.node,{margin:!![],border:!![],padding:!0});f6R.U1h(63);var H_E=f6R.M8Y(63,1,7,7);f6R.U1h(111);var C1C=f6R.P_X(1,0,17,17);f6R.U1h(112);var w1e=f6R.P_X(17,13,26,226,12);M3h.candleOffset=(q3s + (g1e?\"1\" << H_E:C1C) * x19.width / w1e - n4n.pixelFromTick(W7y.tick)) / n4n.layout.candleWidth;}if(E8Y === \"none\" || !E8Y && W7y.params.y === undefined){E0c.style.bottom=T7H.height - t1G - b9j.height + \"px\";}else {M3h.y=n4n.valueFromPixel(t1G + b9j.height / 2,l$X,T7H);}W7y.params.pinnedPosition=M3h;};this.dragListener=I5z;j8H.addEventListener(\"dragstart\",I5z);if(!y0l.dropzoneForPinnedMarkers){d3j=\"d\";d3j+=\"r\";d3j+=\"op\";k22=\"dr\";k22+=\"a\";k22+=\"gover\";y0l.addEventListener(k22,C9k);y0l.addEventListener(\"dragend\",O$g);y0l.addEventListener(d3j,f_U);y0l.dropzoneForPinnedMarkers=!![];}};L6t.Marker.removeByLabel=function(L3D,P5a){f6R.C8A();var C31,M4H;C31=L3D.getMarkerArray(\"label\",P5a);for(var n2b=0;n2b < C31.length;n2b++){M4H=C31[n2b];L3D.removeFromHolder(M4H);if(M4H.stxNodeCreator && M4H.stxNodeCreator.remove){M4H.stxNodeCreator.remove(M4H);}}L3D.draw();};L6t.Marker.positionContentVerticalAndHorizontal=function(s0c,z9I){var L0i,z6o,n0k,z14,e$k,H5l,w0s;L0i=\".stx\";L0i+=\"-subholder\";z6o=s0c.querySelector(\".stx-marker-expand\");n0k=s0c.querySelector(\".ciq-expansion-holder\");z14=(Z3L,M4g)=>{var t1o,d7s,p40,u7O,M_E,z61;if(!M4g.parentNode){return;}var {offsetHeight:P1r, style:z9l}=Z3L;z9l.bottom=z9l.top=\"\";t1o=getComputedStyle(Z3L);var {bottom:X9u}=t1o;d7s=parseInt(X9u,10);p40=M4g.offsetTop;if(!M4g.classList.contains(\"callout\")){p40-=d7s + P1r - M4g.offsetHeight;}u7O=M4g.parentNode.offsetHeight;f6R.P3W();if(M4g.offsetTop <= u7O){if(p40 > u7O - P1r){M_E=\"au\";M_E+=\"to\";z9l.top=u7O - M4g.offsetTop - P1r + \"px\";z9l.bottom=M_E;}}else {f6R.U1h(0);z9l.top=f6R.M8Y(\"px\",u7O);}if(M4g.offsetTop + M4g.offsetHeight >= 0){if(p40 < 0){z61=\"p\";z61+=\"x\";z9l.top=-M4g.offsetTop + z61;z9l.bottom=\"auto\";}}else {z9l.bottom=\"0px\";}};e$k=(g2N,A_Z,G$Y)=>{var h1N,b44,V_D,I58,m5b,j_J,l9W,i0J;if(!A_Z.parentNode){return;}h1N=g2N.style;h1N.left=h1N.right=\"\";if(G$Y){G$Y.style.left=G$Y.style.right=\"\";}b44=getComputedStyle(g2N);V_D=b44.left;f6R.R_O(7);var P58=f6R.M8Y(1,15,6);I58=A_Z.offsetLeft + parseInt(V_D,P58);m5b=A_Z.offsetLeft - parseInt(V_D,+\"10\");j_J=A_Z.parentNode.offsetWidth;if(I58 + g2N.offsetWidth > j_J){h1N.right=V_D;h1N.left=\"auto\";if(G$Y){f6R.U1h(0);var f00=f6R.P_X(9,1);G$Y.style.right=g2N.offsetWidth + parseInt(V_D,f00) + \"px\";}}else if(G$Y && m5b < G$Y.offsetWidth){l9W=\"p\";l9W+=\"x\";i0J=\"aut\";i0J+=\"o\";G$Y.style.right=i0J;f6R.R_O(25);var W5d=f6R.M8Y(20,10);G$Y.style.left=g2N.offsetWidth + parseInt(V_D,W5d) + l9W;}else if(G$Y){G$Y.style.right=V_D;}};if(!z6o || !z6o.isConnected){return;}z6o.style.bottom=z6o.style.top=\"\";H5l=s0c.classList.contains(\"highlight\") && z6o.style.visibility !== \"hidden\" || n0k && n0k.style.visibility !== \"hidden\";f6R.C8A();if(!H5l && !z9I){return;}z14(z6o,s0c);if(n0k){if(s0c.chartHeight){f6R.U1h(65);var n$7=f6R.P_X(2,4,54,6,17);n0k.style.maxHeight=s0c.chartHeight - n$7 + \"px\";}if(n0k.__ps){n0k.__ps.update();}z14(n0k,s0c);}e$k(z6o,s0c,n0k);w0s=z6o?z6o.closest(L0i):null;if(s0c.classList.contains(\"group\") && w0s && w0s.offsetHeight < 200){f6R.U1h(29);var J1j=f6R.P_X(162,14,13);z6o.style.maxHeight=w0s.offsetHeight - J1j + \"px\";}};L6t.Marker.initializeScrollBehavior=function(g3e){var R4H,k7l;R4H=\".marke\";R4H+=\"r_content\";var {expand:W7u}=g3e;if(!W7u || W7u.scrollInitialized){return;}if(!W7u.querySelector(R4H)){k7l=document.createElement(\"div\");k7l.className=\"marker_content\";[...W7u.children].forEach(W99=>{return k7l.appendChild(W99);});W7u.appendChild(k7l);}W7u.addEventListener(L6t.wheelEvent,t2I=>{f6R.P3W();return t2I.stopPropagation();},{passive:![]});W7u.addEventListener(\"touchmove\",y_C=>{f6R.C8A();return y_C.stopPropagation();},{passive:![]});var {scrollbarStyling:H4F}=L6t.UI || ({});if(H4F){H4F.refresh(W7u);}else {W7u.style.overflowY=\"scroll\";}W7u.scrollInitialized=!![];};L6t.ChartEngine.prototype.getBarBounds=function(a1y,d5U){var a6R,H9Y,s_I,F_L,A62;a6R=this.layout.aggregationType;if(!d5U && a6R == \"pandf\"){H9Y={high:Math.max(a1y.pfOpen,a1y.pfClose),low:Math.min(a1y.pfOpen,a1y.pfClose)};}else {H9Y={high:a1y.High,low:a1y.Low};}if(a1y.markerHigh){H9Y.high=a1y.markerHigh;}f6R.C8A();if(a1y.markerLow){H9Y.low=a1y.markerLow;}if(a1y.Open === undefined){s_I=a1y.Close;}if(a1y.High === undefined){F_L=Math.max(a1y.Open || s_I,a1y.Close);}if(a1y.Low === undefined){A62=Math.min(a1y.Open || s_I,a1y.Close);}if(!H9Y.high && H9Y.high !== 0){H9Y.high=F_L;}if(!H9Y.low && H9Y.low !== 0){H9Y.low=A62;}return H9Y;};L6t.ChartEngine.prototype.defaultMarkerPlacement=function(Q41){f6R.P3W();var z34,T0o,o8q,t5A,R_e,W$T,r5l,p_Q,S9h,Y2j,w7F,J2X,R_2,T9a,x$C,Y2i,U3A,w8J,N3i,T_e,l0d,e4F,q1P,p1q,B03,I8z,u41,F2t,M0p,i5_,A2P,F9x,O0p,c8K,a6Y,z2M,H3S,J0g,r0J,O_P,C13,F8Q,R7d,V2L,c1w,x8x,c6g,N8v,K4T,j30,b0J,D98,v4c,B6W,c7H,X7Q,o3a,U3T;z34=Q41.panel;T0o=z34.chart;o8q=Q41.stx;t5A={};Object.values(o8q.chart.series).forEach(function(m15){f6R.P3W();t5A[m15.parameters.symbol]=L6t.Renderer.produce(m15.parameters.chartType,{}).highLowBars;});for(var P3f=0;P3f < Q41.arr.length;P3f++){R_e=\"n\";R_e+=\"o\";R_e+=\"n\";R_e+=\"e\";W$T=\"ca\";W$T+=\"ndle\";r5l=\"Cl\";r5l+=\"o\";r5l+=\"se\";p_Q=Q41.arr[P3f];S9h=p_Q.params;if(!S9h.pinnedPosition && S9h.box)continue;Y2j=p_Q.node;w7F=p_Q.stxNodeCreator?p_Q.stxNodeCreator.expand:Y2j.querySelector(\".stx-marker-expand\");if(!p_Q.clientWidth){p_Q.clientWidth=Y2j.clientWidth;}if(!p_Q.clientHeight){p_Q.clientHeight=Y2j.clientHeight;}J2X=null;R_2=S9h.xPositioner;T9a=S9h.yPositioner;x$C=S9h.pinnedPosition || ({});Y2i=w7F && S9h.pinnedPosition || S9h.expandPosition;U3A=!w7F && x$C.candleOffset || S9h.candleOffset;w8J=S9h.field;N3i=S9h.yAxis || this.getYAxisByField(z34,w8J) || z34.yAxis;T_e=p_Q.tick;l0d=T0o.dataSet;e4F=p_Q.clientWidth;q1P=w8J?t5A[w8J]:o8q.chart.highLowBars;p1q=T0o.defaultPlotField;if(!p1q || q1P){p1q=r5l;}if(R_2 != \"none\"){B03=\"b\";B03+=\"a\";B03+=\"r\";if(R_2 == B03 && S9h.x){I8z=\"p\";I8z+=\"x\";if(S9h.x < T0o.xaxis.length){u41=T0o.xaxis[S9h.x];if(u41){J2X=u41.data;}}L6t.efficientDOMUpdate(Y2j.style,\"left\",Math.round(o8q.pixelFromBar(S9h.x,T0o) - e4F / 2) + 1 + I8z);}else {F2t=\"p\";F2t+=\"x\";if(!T_e && T_e !== 0){if(S9h.future && T0o.scroll < T0o.maxTicks){o8q.futureTickIfDisplayed(p_Q);T_e=p_Q.tick;if(!T_e && T_e !== 0){Y2j.style.left=\"-1000px\";continue;}}else {M0p=\"-1\";M0p+=\"00\";M0p+=\"0p\";M0p+=\"x\";Y2j.style.left=M0p;continue;}}if(T_e < l0d.length){J2X=l0d[T_e];}i5_=Math.round(o8q.pixelFromTick(T_e,T0o) - T0o.left - e4F / 2);L6t.efficientDOMUpdate(Y2j.style,\"left\",i5_ + F2t);p_Q.leftpx=i5_;f6R.R_O(0);A2P=f6R.P_X(e4F,i5_);F9x=+\"50\";f6R.R_O(42);O0p=f6R.P_X(\"50\",0);if(w7F && !w7F.style.visibility && Y2j.classList.contains(\"highlight\")){c8K=w7F.getBoundingClientRect();i5_=Math.min(i5_,c8K.left);A2P=Math.max(A2P,c8K.right);if(Y2i){a6Y=(Y2i.candleOffset || 0) * this.layout.candleWidth;if(Y2i.candleOffset < 0){O0p=-a6Y;}else {O0p=a6Y;}}}if(i5_ > T0o.right + O0p || A2P < T0o.left - F9x)continue;}if(!J2X){f6R.R_O(113);var x3L=f6R.P_X(17,3,9,4);J2X=l0d[l0d.length - x3L];}}else if(T9a.indexOf(W$T) > -1){z2M=getComputedStyle(Y2j).left;if(z2M){H3S=o8q.barFromPixel(parseInt(z2M,10),T0o);if(H3S >= 0){J2X=T0o.xaxis[H3S].data;if(!J2X){f6R.U1h(114);var o4f=f6R.P_X(11,6,0,3,7);J2X=l0d[l0d.length - o4f];}}}}J0g=[U3A,(Y2i || ({})).candleOffset];for(var k_i=0;k_i < J0g.length;k_i++){r0J=\"le\";r0J+=\"ft\";O_P=J0g[k_i];if(O_P || O_P === \"0\" * 1){L6t.efficientDOMUpdate((k_i?w7F:Y2j).style,\"left\",(Y2j.isConnected?L6t.stripPX(getComputedStyle(Y2j)[k_i?\"width\":r0J]):o8q.pixelFromTick(T_e) - (w7F || Y2j).offsetWidth / 2) + O_P * this.layout.candleWidth + \"px\");}}L6t.efficientDOMUpdate(Y2j.style,\"top\",\"auto\");C13=!w7F && x$C.y || S9h.y;F8Q=p_Q.clientHeight;V2L=0;if(T9a != R_e){c1w=\"bo\";c1w+=\"tt\";c1w+=\"o\";c1w+=\"m\";x8x=\"b\";x8x+=\"o\";x8x+=\"tto\";x8x+=\"m\";c6g=\"_\";c6g+=\"l\";c6g+=\"a\";c6g+=\"ne\";f6R.U1h(115);var W4n=f6R.M8Y(8,17,245,14);N8v=T9a.indexOf(c6g) > W4n;K4T=o8q.markerHelper.placementMap;f6R.R_O(116);var p4o=f6R.M8Y(5041,11,12,1,4);f6R.U1h(8);var a$G=f6R.P_X(19,5319);f6R.U1h(14);var x0j=f6R.M8Y(17,1959,110);f6R.U1h(77);var T96=f6R.M8Y(15,8306,5,10);f6R.R_O(77);var Z_k=f6R.M8Y(5,240,732,7);f6R.U1h(0);var m7J=f6R.M8Y(6092,358);f6R.R_O(117);var S93=f6R.P_X(16461,15,5509,4);j30=T9a + (789.54 > p4o?a$G <= x0j?(658.61,!0):(T96,Z_k) === m7J?392.21:(\"m\",S93):\"|\") + z34.name + \"|\" + w8J;if(N8v && K4T[j30] === undefined){K4T[j30]=2;}f6R.U1h(118);var u85=f6R.M8Y(330,5299,9,15,9);f6R.U1h(8);var o9w=f6R.M8Y(2,6834);f6R.U1h(117);var q6F=f6R.M8Y(2482,7,2481,2);f6R.R_O(119);var v12=f6R.M8Y(7361,6,7374,1232,18);f6R.R_O(0);var l3D=f6R.M8Y(8,1722);f6R.R_O(120);var l2Q=f6R.P_X(4505,4,19,32,9);f6R.U1h(14);var f0F=f6R.M8Y(11,3684,528);f6R.R_O(8);var a_K=f6R.P_X(123680,131410);f6R.U1h(117);var n8K=f6R.M8Y(1308668,6,87668,15);b0J=j30 + ((u85,o9w) == (q6F,v12)?218.32 >= (l3D,143.38)?l2Q < f0F?(!!\"1\",a_K):n8K:!1:\"-\") + (N8v?p_Q.params.label:T_e);D98=S9h.chartContainer?o8q.height:N3i.bottom;v4c=0;if(K4T[b0J] === undefined){K4T[b0J]=N8v?K4T[j30]:0;if(N8v){f6R.R_O(44);K4T[j30]+=f6R.P_X(\"2\",F8Q);}}V2L=K4T[b0J];if(!N8v){K4T[b0J]+=F8Q;}B6W=o8q.pixelFromPrice.bind(o8q);c7H=T9a == \"value\" && (C13 || C13 === +\"0\");if(!c7H && N3i === o8q.chart.yAxis && J2X.transform && (w8J in J2X.transform)){J2X=J2X.transform;B6W=o8q.pixelFromTransformedValue.bind(o8q);}if(J2X && w8J){J2X=J2X[w8J];}if(typeof J2X === \"number\"){J2X={Close:J2X};J2X[p1q]=J2X.Close;q1P=!!\"\";}if(c7H){f6R.U1h(38);var q8Q=f6R.M8Y(6,4,17,102,15);v4c=Math.round(D98 - B6W(C13,z34,N3i) - F8Q / q8Q) + \"px\";}else if((T9a == \"below_candle\" || T9a == \"under_candle\") && J2X){R7d=J2X[p1q];if(q1P){R7d=o8q.getBarBounds(J2X,!!w8J)[N3i.flipped?\"high\":\"low\"];}v4c=Math.round(D98 - B6W(R7d,z34,N3i) - F8Q - V2L) + \"px\";}else if(T9a == \"on_candle\" && J2X){R7d=J2X[p1q];if(q1P){R7d=o8q.getBarBounds(J2X,!!w8J);f6R.R_O(12);var a4q=f6R.M8Y(14,32,2);R7d=(R7d.high + R7d.low) / a4q;}f6R.R_O(121);var w_I=f6R.M8Y(10,1,14,10,17);v4c=Math.round(D98 - B6W(R7d,z34,N3i) - F8Q / w_I - V2L) + \"px\";}else if(T9a == \"top\" || T9a == \"top_lane\"){v4c=Math.round(D98 - F8Q - V2L - z34.top) + \"px\";}else if(T9a == x8x || T9a == \"bottom_lane\"){X7Q=\"p\";X7Q+=\"x\";v4c=Math.round(V2L) + X7Q;}else if(J2X){R7d=J2X[p1q];if(q1P){R7d=o8q.getBarBounds(J2X,!!w8J)[N3i.flipped?\"low\":\"high\"];}v4c=(Math.round(D98 - B6W(R7d,z34,N3i) + V2L) || 0) + \"px\";}L6t.efficientDOMUpdate(Y2j.style,c1w,v4c);if(Y2i && (Y2i.y || Y2i.y === 0)){o3a=\"p\";o3a+=\"x\";f6R.U1h(38);var A4_=f6R.P_X(6,20,17,778,28);U3T=Math.round(D98 - o8q.pixelFromPrice(Y2i.y,z34,N3i) - w7F.clientHeight / A4_ - (Y2j.isConnected?L6t.stripPX(Y2j.style.bottom):0)) + o3a;L6t.efficientDOMUpdate(w7F.style,\"top\",\"auto\");L6t.efficientDOMUpdate(w7F.style,\"bottom\",U3T);}else {L6t.Marker.positionContentVerticalAndHorizontal(Y2j);}}if(p_Q.position){p_Q.position();}}};L6t.Marker.NodeCreator=function(){};L6t.Marker.NodeCreator.toNode=function(){return this.node;};L6t.Marker.Simple=function(K9v){var C$N,Z7o,x1l,K0b,P07,M7H,x3g,g9k,H58,v3a;C$N=\"cal\";C$N+=\"l\";C$N+=\"out\";Z7o=\"d\";Z7o+=\"i\";Z7o+=\"v\";x1l=this.node=document.createElement(\"div\");x1l.params=K9v;x1l.className=\"stx-marker\";x1l.classList.add(K9v.type);if(K9v.category){x1l.classList.add(K9v.category);}K0b=L6t.newChild(x1l,\"div\",\"stx-visual\");L6t.newChild(x1l,Z7o,\"stx-stem\");L6t.ensureDefaults(x1l.params,{pinnable:this.pinnable});if(K9v.type == C$N){M7H=\"stx-marker-con\";M7H+=\"t\";M7H+=\"en\";M7H+=\"t\";x3g=\"d\";x3g+=\"i\";x3g+=\"v\";x1l.params.pinnable=!!0;P07=document.createElement(x3g);P07.classList.add(\"stx-marker-expand\");K0b.appendChild(P07);g9k=L6t.newChild(P07,\"div\",M7H);L6t.newChild(g9k,\"h4\",null,K9v.headline);H58=L6t.newChild(g9k,\"div\");H58.classList.add(\"pwrap\");L6t.newChild(H58,(6280,592.69) === 9450?(!0,+\"5.73e+3\"):74.07 == (4511,1365)?\"a\":\"p\",null,K9v.story);}else {v3a=\"stx-\";v3a+=\"marker-expand\";P07=L6t.newChild(x1l,\"div\",v3a);L6t.newChild(P07,\"h4\",null,K9v.headline);L6t.newChild(P07,+\"8218\" == 1880?(0x18a6,\"592.43\" * 1):\"p\",null,K9v.story);if(!x1l.params.pinnable){L6t.safeClickTouch(P07,()=>{this.remove({node:x1l});});}}L6t.safeClickTouch(K0b,()=>{f6R.P3W();return this.click({marker:{node:x1l}});});this.nodeType=\"Simple\";this.expand=P07;};L6t.inheritsFrom(L6t.Marker.Simple,L6t.Marker.NodeCreator,!({}));L6t.Marker.Simple.prototype.click=function(q0u){var d3F,B_i;var {node:j9T}=q0u.marker;j9T.classList.toggle(\"highlight\");d3F=0;B_i=setInterval(()=>{L6t.Marker.positionContentVerticalAndHorizontal(j9T,!!1);d3F++;if(d3F > 50){clearInterval(B_i);}},10);j9T.addEventListener(\"transitionend\",()=>{f6R.C8A();var M4c,O7U;M4c=\".p\";M4c+=\"s\";O7U=j9T.querySelector(M4c);if(O7U && L6t.UI.scrollbarStyling){L6t.UI.scrollbarStyling.refresh(O7U);}clearInterval(B_i);});};L6t.Marker.Simple.prototype.remove=function(X4n){var y0b;y0b=\"h\";f6R.P3W();y0b+=\"ighlight\";X4n.node.classList.remove(y0b);};L6t.Marker.Group=function(O65){var y$E,H7G;y$E=\"g\";y$E+=\"r\";f6R.P3W();y$E+=\"ou\";y$E+=\"p\";H7G=\"CIQ\";H7G+=\".Marker.Group\";this.stx=O65.stx;this.className=H7G;this.groupKey=O65.groupKey;L6t.Marker.call(this,{...O65,label:y$E,node:this.createNode({stx:this.stx,groupMap:this.stx.markerHelper.groupMap[this.groupKey],type:\"circle\",category:\"group\",displayLabel:\"#\",displayCategory:!\"1\",displayStem:O65.displayStem,noInteraction:O65.noInteraction,panelName:O65.panelName,color:\"#003399\"})});};L6t.inheritsFrom(L6t.Marker.Group,L6t.Marker,!!0);L6t.Marker.Group.prototype.getMarkersInGroup=function(){var O1w;O1w=this.stx.markerHelper.groupMap[this.groupKey] || ({});return O1w.markers || [];};L6t.Marker.Group.prototype.createNode=function(n1F){f6R.C8A();return new L6t.Marker.GroupNode(n1F);};L6t.Marker.Group.prototype.remove=function(){this.getMarkersInGroup().forEach(r1q=>{r1q.groupExpansionEl=null;});L6t.Marker.prototype.remove.call(this);};L6t.Marker.GroupNode=function(y20){var E$O,b8c,O3U,Y7X,Z6W,m_S;E$O=\"G\";E$O+=\"roup\";b8c=\"d\";b8c+=\"i\";b8c+=\"v\";O3U=\"s\";O3U+=\"tx\";O3U+=\"-\";O3U+=\"stem\";Y7X=this.node=document.createElement(\"div\");Y7X.params=y20;Y7X.className=\"stx-marker\";Y7X.classList.add(y20.type);Y7X.classList.add(\"group\");Z6W=L6t.newChild(Y7X,\"div\",\"stx-visual\");if(y20.displayStem){L6t.newChild(Y7X,\"div\",O3U);}m_S=L6t.newChild(Y7X,\"div\",\"stx-marker-expand\");L6t.newChild(m_S,\"ul\",\"ciq-marker-list\");L6t.safeClickTouch(m_S,function(F9J){f6R.P3W();Y7X.classList.toggle(\"highlight\");});L6t.safeClickTouch(Z6W,this.handleClick.bind(this));this.expansionHolder=L6t.newChild(Y7X,b8c,\"ciq-expansion-holder\");this.nodeType=E$O;this.visual=Z6W;this.expand=m_S;this.groupMap=y20.groupMap;this.noInteraction=y20.noInteraction;this.stx=y20.stx;};L6t.inheritsFrom(L6t.Marker.GroupNode,L6t.Marker.NodeCreator,!({}));L6t.Marker.GroupNode.prototype.handleClick=function(S__){f6R.P3W();if(this.noInteraction){return;}var {node:g6O}=this;this.updateMarkerList();g6O.classList.toggle(\"highlight\");L6t.Marker.positionContentVerticalAndHorizontal(g6O,!!({}));};L6t.Marker.GroupNode.prototype.updateVisual=function(){var I6a;var {markers:T3O}=this.groupMap;I6a=this.getGroupMarkerBackgroundColor();this.visual.style.backgroundColor=I6a;this.visual.style.color=L6t.chooseForegroundColor(I6a);this.visual.innerHTML=T3O.length;};L6t.Marker.GroupNode.prototype.getGroupMarkerBackgroundColor=function(){var W2I,o3v,p3i,V$v;var {stx:v3j, groupMap:W6Y}=this;W2I=\"\";o3v={};W6Y.markers.sort(this.markerSortFunction).forEach(a_8=>{var R3x,n50,j57,x5v;R3x={};var {type:p$w, category:p48, color:n1z}=a_8.stxNodeCreator.node.params;if(a_8.stxNodeCreator instanceof (L6t.Marker.Performance || (function(){}))){f6R.R_O(59);n50=f6R.P_X(p48,p$w,\"stx_marker_\",(\"9970\" | 96) != +\"419.86\"?\"_\":2021 === +\"863\"?(0x1324,5.81e+3):1100 != 7148?\"K\":0xdb3);if(!v3j.styles[n50]){L6t.Marker.Performance.calculateMarkerStyles(v3j,a_8,n50);}R3x=v3j.styles[n50];}else {j57=a_8.node.querySelector(\".stx-visual\");if(j57){R3x=getComputedStyle(j57);}}x5v=n1z || R3x.backgroundColor || \"#828382\";o3v[x5v]=++o3v[x5v] || 1;});p3i=Object.values(o3v);V$v=Math.max.apply(Math,p3i);for(var f5C in o3v){if(o3v[f5C] === V$v){W2I=f5C;break;}}return W2I;};L6t.Marker.GroupNode.prototype.markerSortFunction=function(I4G,o$W){f6R.C8A();if(I4G.params.x instanceof Date && o$W.params.x instanceof Date){return o$W.params.x - I4G.params.x;}};L6t.Marker.GroupNode.prototype.updateMarkerList=function(){var e17;var {stx:S7o}=this;var {markers:l6F}=this.groupMap;e17=this.expand.querySelector(\".ciq-marker-list\");if(!e17){return;}e17.innerHTML=\"\";l6F.sort(this.markerSortFunction).forEach(G9h=>{var l9A,E6$,F5w,y1K,o8b,e4Y,J6p,z04,T6d,l8v,C3z,J4S;l9A=\"l\";l9A+=\"i\";E6$=\"t\";E6$+=\"e\";E6$+=\"x\";E6$+=\"t\";F5w=\"#828\";F5w+=\"382\";var {datum:H5M}=G9h.params;var {headline:s4e, story:t3n, type:p9t, category:x6o, color:Q5v, displayLabel:R6P}=G9h.stxNodeCreator.node.params;y1K=p9t || \"\";o8b=x6o || \"\";e4Y=\"\";f6R.P3W();if(R6P){e4Y=S7o.emojify(R6P);}if(H5M && H5M.img){e4Y=H5M.img.outerHTML;}J6p={};if(G9h.stxNodeCreator instanceof (L6t.Marker.Performance || (function(){}))){f6R.R_O(59);z04=f6R.P_X(x6o,p9t,\"stx_marker_\",493 == (+\"451.9\",1845)?196.51:(780.39,+\"9158\") === (760.26,865.79)?\"n\":\"_\");if(!S7o.styles[z04]){L6t.Marker.Performance.calculateMarkerStyles(S7o,G9h,z04);}J6p=S7o.styles[z04];}else {T6d=G9h.node.querySelector(\".stx-visual\");if(T6d){J6p=getComputedStyle(T6d);}}l8v=Q5v || J6p.backgroundColor || F5w;if(p9t == E6$ || H5M && H5M.img){l8v=\"transparent\";}C3z=this.getDateLabel(G9h);C3z+=C3z?\"
        \":\"\";J4S=document.createElement(l9A);if(t3n && t3n.length){J4S.title=t3n.length > 160?t3n.slice(0,160) + \"...\":t3n;}J4S.innerHTML=`\n\t\t\t\t\t
        \n\t\t\t\t\t\t
        \n\t\t\t\t\t\t\t${e4Y}\n\t\t\t\t\t\t
        \n\t\t\t\t\t
        \n\t\t\t\t\t${C3z}\n\t\t\t\t\t${s4e}\n\t\t\t\t`;if(G9h.groupExpansionEl && S7o.uiContext.topNode.contains(G9h.groupExpansionEl)){J4S.className=\"active\";}else {G9h.groupExpansionEl=null;}G9h.groupListEl=J4S;L6t.safeClickTouch(J4S,this.handleMenuClick.bind(this,G9h));e17.appendChild(J4S);});};L6t.Marker.GroupNode.prototype.getDateLabel=function(S5H){var c7L,h8j,D3q,i05;c7L=\"Y\";c7L+=\"YYY/MM/dd hh:m\";c7L+=\"m:ss\";h8j=\"t\";h8j+=\"i\";h8j+=\"ck\";var {stx:g3I}=this;var {xPositioner:L6E, x:X3t}=S5H.params;if(!X3t || isNaN(X3t)){return \"\";}D3q=L6E == h8j?g3I.dateFromTick(X3t,g3I.chart,!\"\"):X3t;i05=Object.prototype.toString.call(D3q) === \"[object Date]\"?L6t.dateToStr(D3q,c7L):\"\";return i05;};L6t.Marker.GroupNode.prototype.handleMenuClick=function(x1c,I38){var t29,J30,N2V,n9E,i4W;if(x1c.groupExpansionEl){x1c.groupExpansionEl.remove();x1c.groupExpansionEl=null;this.setExpansionHolderVisibility();}else {t29=\"stx-m\";t29+=\"arker \";J30=\"\";var {expand:d1G, node:u4q}=x1c.stxNodeCreator;if(d1G){N2V=\".marker_conte\";N2V+=\"n\";N2V+=\"t\";n9E=d1G.querySelector(N2V);J30=n9E?n9E.innerHTML:d1G.innerHTML;}else if(u4q.params && u4q.params.story){J30=`\n\t\t\t\t\t

        ${u4q.params.headline}

        \n\t\t\t\t\t

        ${u4q.params.story}

        \n\t\t\t\t`;}if(!J30){return;}i4W=L6t.newChild(this.expansionHolder.querySelector(\".marker_content\"),\"div\",t29 + (u4q.params.category || \"\"));i4W.innerHTML=`\n\t\t\t\t
        \n\t\t\t\t${J30}\n\t\t\t\t
        \n\t\t\t`;L6t.safeClickTouch(i4W,()=>{f6R.C8A();i4W.remove();x1c.groupExpansionEl=null;this.setExpansionHolderVisibility();this.node.classList.remove(\"highlight\");});x1c.groupExpansionEl=i4W;this.setExpansionHolderVisibility();x1c.groupListEl.classList.add(\"active\");L6t.Marker.initializeScrollBehavior({expand:i4W.querySelector(\".stx-marker-expand\")});}if(!this.noInteraction){this.node.classList.toggle(\"highlight\");}};L6t.Marker.GroupNode.prototype.setExpansionHolderVisibility=function(){var {markers:J$f}=this.groupMap;if(!J$f.find(w$I=>{return !!w$I.groupExpansionEl;})){this.expansionHolder.style.visibility=\"hidden\";}else {this.expansionHolder.style.visibility=\"visible\";}};}};G7=q_n=>{var v$Z=q1l46;var b3h,X6s,n8t,k49,m4W,X9x,a9z,Z52,v5u;b3h=\"unde\";b3h+=\"fined\";X6s=typeof _CIQ !== b3h?_CIQ:q_n.CIQ;n8t=typeof _timezoneJS !== \"undefined\"?_timezoneJS:q_n.timezoneJS;k49=60000 * 60;m4W=k49 * 24;X9x=!!({});a9z=X6s.Market;X6s.Market=function(B3u){var U67,G4L,T5d;U67=\"Ma\";U67+=\"rket\";this.market_def=![];this.rules=!!\"\";this.normalHours=[];this.extraHours=[];this.class_name=U67;if(!n8t.Date){this.tz_lib=Date;}else {this.tz_lib=n8t.Date;}this.market_tz=\"\";this.hour_aligned=!({});this.convertOnDaily=!!0;this.enabled_by_default=![];if(typeof B3u != \"undefined\" && B3u && !X6s.isEmpty(B3u)){G4L=\"un\";G4L+=\"defi\";G4L+=\"ned\";T5d=\"unde\";T5d+=\"fined\";if(B3u.market_definition){B3u=B3u.market_definition;}if(B3u.rules){this.rules=B3u.rules;}if(B3u.market_tz){this.market_tz=B3u.market_tz;}if(B3u.convertOnDaily){this.convertOnDaily=B3u.convertOnDaily;}if(typeof B3u.hour_aligned){this.hour_aligned=B3u.hour_aligned;}if(typeof B3u.beginningDayOfWeek !== \"undefined\"){this.beginningDayOfWeek=B3u.beginningDayOfWeek;}if(typeof B3u.minimum_session_length !== T5d){this.minimumSessionLength=B3u.minimum_session_length;}if(typeof B3u.enabled_by_default !== G4L){if(B3u.enabled_by_default instanceof Array){this.enabled_by_default=B3u.enabled_by_default;}}this.market_def=B3u;if(this.market_def.name === undefined){this.market_def.name=\"no market name specified\";}}else {this.hour_aligned=!!({});return;}X6s.Market._createTimeSegments(this);this.getSessionNames();};X6s.Market.Symbology=function(){};X6s.Market.Symbology.isForeignSymbol=function(o6u){v$Z.C8A();return !!0;};X6s.Market.Symbology.isFuturesSymbol=function(M0n){v$Z.C8A();return !({});};X6s.Market.Symbology.isRateSymbol=function(N9S){v$Z.C8A();return ![];};X6s.Market.Symbology.isForexSymbol=function(P9x){v$Z.C8A();return !({});};X6s.Market.Symbology.isForexMetal=function(I1i,h4K){return !({});};X6s.Market.Symbology.isForexCrypto=function(a59){return !!\"\";};X6s.Market.Symbology.isForexFuturesSymbol=function(S7j){if(X6s.Market.Symbology.isForexSymbol(S7j))return !\"\";if(X6s.Market.Symbology.isFuturesSymbol(S7j))return !![];return !!\"\";};X6s.Market.Symbology.factory=function(W1I){return null;};X6s.Market.Symbology.encodeTermStructureInstrumentSymbol=function(X5M,T7J){var m4A;m4A=\"You are trying to call `CIQ.\";m4A+=\"Market.Symbology.encodeTermStructureInstrumentSymbol` but have not implemented it.\";console.warn(m4A);};if(a9z)X6s.extend(X6s.Market,a9z);X6s.Market.prototype.sessions=null;X6s.Market.prototype.beginningDayOfWeek=0;X6s.Market.prototype.minimumSessionLength=30;X6s.Market.prototype.tradingDays=function(){var z5o;if((\"_tradingDays\" in this))return this._tradingDays;z5o=[];if(this.rules){for(var Y8l of this.rules){if(Y8l.dayofweek >= 0)z5o.push(Y8l.dayofweek);}}else {z5o=[0,1,2,3,4,5,6];}this._tradingDays=[...new Set(z5o)];this._tradingDays.sort();return this._tradingDays;};X6s.Market.prototype.getSessionNames=function(){var C0o,w3Y,B6s,q2P,C4x;v$Z.P3W();if(!this.rules){C0o=197832271;w3Y=1598030130;B6s=2;for(var X88=1;v$Z.G33(X88.toString(),X88.toString().length,63041) !== C0o;X88++){this.sessions=[];B6s+=2;}if(v$Z.I9N(B6s.toString(),B6s.toString().length,32349) !== w3Y){this.sessions=[];}this.sessions=[];}else if(!this.sessions){q2P=[];C4x=[];this.rules.map(function(c0g){v$Z.P3W();if(c0g.name && q2P.indexOf(c0g.name) === -1){q2P.push(c0g.name);C4x.push({name:c0g.name,enabled:c0g.enabled?c0g.enabled:!!\"\"});}});this.sessions=C4x;}return this.sessions.slice();};X6s.Market.prototype._find_next_segment=function(z4d,A3f){var B$d,I$J,x5E,X93;if(!this.market_def)return null;if(!this.rules)return null;B$d=new Date(+z4d);I$J=this.newIterator({begin:B$d,interval:1,inZone:this.market_tz,outZone:this.market_tz});if(this._wasOpenIntraDay(B$d)){x5E=this.zseg_match.close_parts.hours;X93=this.zseg_match.close_parts.minutes;B$d.setHours(x5E);B$d.setMinutes(X93);I$J=this.newIterator({begin:B$d,interval:1,inZone:this.market_tz,outZone:this.market_tz});}v$Z.C8A();return I$J.next();};X6s.Market.prototype._find_prev_segment=function(m9E,z0H){var m8u,k12,z0Q,X0$,u0k;v$Z.C8A();if(!this.market_def)return null;if(!this.rules)return null;m8u=new Date(+m9E);k12=this.newIterator({begin:m8u,interval:1,inZone:this.market_tz,outZone:this.market_tz});z0Q=this._wasOpenIntraDay(m8u);if(z0Q === null){m8u=new Date(m8u - 60000);z0Q=this._wasOpenIntraDay(m8u);}else {if(z0H && m8u.getHours() === this.zseg_match.open_parts.hours && m8u.getMinutes() === this.zseg_match.open_parts.minutes || !z0H && m8u.getHours() === this.zseg_match.close_parts.hours && m8u.getMinutes() === this.zseg_match.close_parts.minutes){m8u=k12.previous();}}if(z0Q){X0$=this.zseg_match.open_parts.hours;u0k=this.zseg_match.open_parts.minutes;m8u.setHours(X0$);m8u.setMinutes(u0k);k12=this.newIterator({begin:m8u,interval:1,inZone:this.market_tz,outZone:this.market_tz});m8u=k12.previous();if(this.zseg_match.close_parts.hours === X0$){if(this.zseg_match.close_parts.minutes === u0k){if(z0H){return k12.next();}return m8u;}}if(this.zseg_match.adjacent_child){return m8u;}if(z0H){return k12.next();}return m8u;}return k12.previous();};X6s.Market.prototype.disableSession=function(V_3,W5B){var e58,S3L;e58=\"un\";e58+=\"defined\";S3L=!1;if(typeof W5B !== e58 && W5B){S3L=!![];}if(V_3){for(var o_p=\"0\" ^ 0;o_p < this.normalHours.length;o_p++){delete this.normalHours[o_p]._refid;if(this.normalHours[o_p].name === V_3){this.normalHours[o_p].enabled=S3L;}}for(o_p=0;o_p < this.extraHours.length;o_p++){delete this.extraHours[o_p]._refid;if(this.extraHours[o_p].name === V_3){this.extraHours[o_p].enabled=S3L;}}}if(this._zseg_matches)this._zseg_matches.clear();};X6s.Market.prototype.enableSession=function(u3G){var l6c;l6c=\"ena\";l6c+=\"ble_in\";l6c+=\"stead\";this.disableSession(u3G,l6c);};X6s.Market.prototype.enableAllAvailableSessions=function(){v$Z.P3W();var X1S;X1S=this.getSessionNames();for(var C4X=0;C4X < X1S.length;C4X++){this.enableSession(X1S[C4X].name);}};X6s.Market.prototype.getClose=function(T9l,M_r,Y7T,s89){var B3V,g6g,U1_;B3V=\"unde\";B3V+=\"fin\";B3V+=\"ed\";if(!this.market_def)return null;if(!this.rules)return null;g6g=T9l;if(!T9l){g6g=new Date();Y7T=null;}g6g=this._convertToMarketTZ(g6g,Y7T);if(typeof M_r !== B3V){if(this._wasOpenIntraDay(g6g)){if(this.zseg_match.name === M_r){g6g.setHours(this.zseg_match.close_parts.hours,this.zseg_match.close_parts.minutes,0,\"0\" * 1);g6g=this._convertFromMarketTZ(g6g,s89);return g6g;}}}else {if(this._wasOpenDaily(g6g)){U1_=this.zseg_match;while(U1_.child_){U1_=U1_.child_;}while(!U1_.enabled){U1_=U1_.parent_;}g6g.setHours(U1_.close_parts.hours,U1_.close_parts.minutes,0,\"0\" << 64);g6g=this._convertFromMarketTZ(g6g,s89);return g6g;}}return null;};X6s.Market.prototype.getNextClose=function(V_F,M9h,L7X){var W$H,s6l,G_4,W7m;if(!this.market_def)return null;if(!this.rules)return null;W$H=V_F;if(!V_F){W$H=new Date();M9h=null;}W$H=this._convertToMarketTZ(W$H,M9h);if(!this._wasOpenIntraDay(W$H)){s6l=this.newIterator({begin:W$H,interval:1,inZone:this.market_tz,outZone:this.market_tz});W$H=s6l.next();}G_4=W$H.getDate();W7m=this.zseg_match;while(W7m.adjacent_child){W7m=W7m.adjacent_child;G_4+=1;}W$H.setDate(G_4);W$H.setHours(W7m.close_parts.hours,W7m.close_parts.minutes,0,0);W$H=this._convertFromMarketTZ(W$H,L7X);return W$H;};X6s.Market.prototype.getNextOpen=function(Y5S,q8p,L$t){var b3v;if(!this.market_def)return null;if(!this.rules)return null;b3v=Y5S;if(!Y5S){b3v=new Date();q8p=null;}b3v=this._convertToMarketTZ(b3v,q8p);b3v=this._find_next_segment(b3v);if(this.zseg_match.adjacent_parent){b3v=this.getNextOpen(b3v,this.market_tz,this.market_tz);b3v=this._convertFromMarketTZ(b3v,L$t);return b3v;}b3v.setHours(this.zseg_match.open_parts.hours);b3v.setMinutes(this.zseg_match.open_parts.minutes);b3v=this._convertFromMarketTZ(b3v,L$t);return b3v;};X6s.Market.prototype.getOpen=function(X56,Q0O,h4B,J7J){var X7D,D7Z;if(!this.market_def)return null;if(!this.rules)return null;X7D=X56;if(!X56){X7D=new Date();h4B=null;}X7D=this._convertToMarketTZ(X7D,h4B);if(typeof Q0O !== \"undefined\"){if(this._wasOpenIntraDay(X7D)){if(this.zseg_match.name == Q0O){X7D.setHours(this.zseg_match.open_parts.hours,this.zseg_match.open_parts.minutes,0,0);X7D=this._convertFromMarketTZ(X7D,J7J);return X7D;}}}else {if(this._wasOpenDaily(X7D)){D7Z=this.zseg_match;while(D7Z.parent_){D7Z=D7Z.parent_;}while(!D7Z.enabled){D7Z=D7Z.child_;}X7D.setHours(D7Z.open_parts.hours,D7Z.open_parts.minutes,0,+\"0\");X7D=this._convertFromMarketTZ(X7D,J7J);return X7D;}}return null;};X6s.Market.prototype.getNormalOpen=function(){var y06,F06,D9$,r0Q;y06=\"F\";y06+=\"ORE\";y06+=\"X\";var {market_def:I36, rules:D$4}=this;if(!(I36 && D$4))return \"00:00\";if(I36.normal_daily_open)return I36.normal_daily_open;if(I36.name === y06)return \"17:00\";F06=-1884341055;D9$=1301823044;r0Q=\"2\" ^ 0;for(var O1z=+\"1\";v$Z.I9N(O1z.toString(),O1z.toString().length,22767) !== F06;O1z++){return D$4.find(({name:f9H})=>~f9H && f9H != \"\").open;}if(v$Z.G33(r0Q.toString(),r0Q.toString().length,67511) !== D9$){return D$4.find(({name:f9H})=>!f9H || f9H === \"\").open;}};X6s.Market.prototype.getNormalClose=function(){var B9R;B9R=\"2\";B9R+=\"4:\";B9R+=\"0\";B9R+=\"0\";var {market_def:r0r, rules:h2T}=this;if(!(r0r && h2T))return B9R;if(r0r.normal_daily_close)return r0r.normal_daily_close;if(r0r.name === \"FOREX\")return \"17:00\";return h2T.filter(({dayofweek:W8F, name:e48})=>W8F && (!e48 || e48 === \"\")).pop().close;};X6s.Market.prototype.getPreviousClose=function(C2L,y8F,T9R){var N0a;if(!this.market_def)return null;if(!this.rules)return null;N0a=C2L;if(!C2L){N0a=new Date();y8F=null;}N0a=this._convertToMarketTZ(N0a,y8F);v$Z.P3W();N0a=this._find_prev_segment(N0a,!\"1\");if(this.zseg_match.adjacent_child){return this.getPreviousClose(N0a,this.market_tz,this.market_tz);}N0a.setHours(this.zseg_match.close_parts.hours);N0a.setMinutes(this.zseg_match.close_parts.minutes);N0a=this._convertFromMarketTZ(N0a,T9R);return N0a;};X6s.Market.prototype.getPreviousOpen=function(v4f,R09,Z_S){var G2C;if(!this.market_def)return null;if(!this.rules)return null;G2C=v4f;if(!v4f){G2C=new Date();R09=null;}G2C=this._convertToMarketTZ(G2C,R09);G2C=this._find_prev_segment(G2C,!!({}));if(this.zseg_match.adjacent_parent){return this.getPreviousOpen(G2C,this.market_tz,this.market_tz);}v$Z.C8A();G2C.setHours(this.zseg_match.open_parts.hours);G2C.setMinutes(this.zseg_match.open_parts.minutes);G2C=this._convertFromMarketTZ(G2C,Z_S);return G2C;};X6s.Market.prototype.getSession=function(J1R,F4L){var U1g,W6s,O4S;J1R=this._convertToMarketTZ(J1R,F4L);if(this._wasOpenIntraDay(J1R) && this.zseg_match){return this.zseg_match.name;}U1g=-1662312966;W6s=1497376822;v$Z.C8A();O4S=2;for(var l$_=1;v$Z.I9N(l$_.toString(),l$_.toString().length,\"18927\" << 0) !== U1g;l$_++){return 1;}if(v$Z.G33(O4S.toString(),O4S.toString().length,+\"16338\") !== W6s){return null;}};X6s.Market.prototype.marketZoneNow=function(){return this._convertToMarketTZ(new Date());};X6s.Market.prototype.isHourAligned=function(){return this.hour_aligned;};X6s.Market.prototype.isOpen=function(){var k$p;k$p=new Date();if(this.market_tz){k$p=new this.tz_lib(k$p.getTime(),this.market_tz);}return this._wasOpenIntraDay(k$p);};X6s.Market.prototype.isMarketDay=function(){var a0O;a0O=new Date();if(this.market_tz){a0O=new this.tz_lib(a0O.getTime(),this.market_tz);}return this._wasOpenDaily(a0O);};X6s.Market.prototype.isMarketDate=function(d81){v$Z.P3W();return this._wasOpenDaily(d81);};X6s.Market.prototype.isFirstMarketDayOfMonth=function(x4T){var H_O,q_3;if(!this.isMarketDate(x4T))return ![];H_O=new Date(+x4T);q_3=x4T.getDate();for(var m4j=1;m4j < q_3;m4j++){H_O.setDate(m4j);if(this.isMarketDate(H_O))return ![];}return !![];};X6s.Market.prototype.isFirstMarketDayOfWeek=function(E6I){var s4t,h99,n5R;if(!this.isMarketDate(E6I))return !({});s4t=this.tradingDays();h99=Math.max(this.beginningDayOfWeek,s4t[0]) || 0;n5R=new Date(+E6I);while(n5R.getDay() !== h99){n5R.setDate(n5R.getDate() - 1);if(this.isMarketDate(n5R))return !1;}return !!({});};X6s.Market.prototype.newIterator=function(M21){var N1D,s$4,F87,k9x,Q0b;N1D=!({});if(M21.periodicity){N1D=M21.periodicity;}else if(M21.multiple){N1D=M21.multiple;}s$4=M21.interval;if(!s$4){s$4=\"minute\";}if(s$4 == \"hour\")s$4=\"60\" | 12;if(!N1D){N1D=1;}if(!M21.begin){M21.begin=new Date();M21.inZone=null;}if(s$4 == parseInt(s$4,10)){s$4=parseInt(s$4,10);if(M21.periodicity < 1 / 60){N1D=N1D * s$4 * 60000;s$4=\"millisecond\";}else if(M21.periodicity < 1){F87=\"s\";F87+=\"e\";F87+=\"co\";F87+=\"nd\";N1D=N1D * s$4 * 60;s$4=F87;}else {N1D=N1D * s$4;s$4=\"minute\";}}if(M21.timeUnit){k9x=\"ti\";k9x+=\"ck\";Q0b=\"sec\";Q0b+=\"ond\";if(M21.timeUnit === \"millisecond\"){s$4=M21.timeUnit;}else if(M21.timeUnit === Q0b){s$4=M21.timeUnit;}else if(M21.timeUnit === k9x){s$4=\"second\";}}if(s$4 == \"tick\")s$4=\"second\";M21.interval=s$4;M21.multiple=N1D;M21.market=this;return new X6s.Market.Iterator(M21);};X6s.Market.prototype._wasOpenDaily=function(Y2t){return this._was_open(Y2t,!1);};X6s.Market.prototype._wasOpenIntraDay=function(p$V){var Y4p,E4T,Y7g;Y4p=-1928980816;E4T=\"827130722\" - 0;Y7g=2;for(var c1p=1;v$Z.G33(c1p.toString(),c1p.toString().length,68321) !== Y4p;c1p++){return this._was_open(p$V,!({}));}if(v$Z.I9N(Y7g.toString(),Y7g.toString().length,97817) !== E4T){return this._was_open(p$V,!({}));}return this._was_open(p$V,!\"\");};X6s.Market.prototype._was_open=function(D_b,G1j){var t$s,t7q,M7q,Y9o,m4w,O03,q2q,c71,B0Q,v9O,Z4a,u6v,H2k,b9o,z5_,T1G;if(typeof G1j === \"undefined\"){G1j=!!\"1\";}t$s=this.zseg_match;this.zopen_hour=0;this.zopen_minute=0;this.zclose_hour=0;this.zclose_minute=0;this.zmatch_open=!!\"\";this.zseg_match=null;if(!this.market_def || !this.rules){this.zclose_hour=24;return !!({});}if(this.tradingDays().indexOf(D_b.getDay()) < \"0\" * 1)return null;if(X9x){if(!this._zseg_matches)this._zseg_matches=new Map();t7q=this._zseg_matches.get(+D_b * (G1j?1:-1));if(t7q === null)return null;if(t7q){t7q=this._zseg_matches.get(t7q);Object.assign(this,t7q);return this.zseg_match;}}M7q=!!0;Y9o=!\"1\";m4w=D_b.getFullYear();O03=D_b.getMonth() + 1;q2q=D_b.getDay();c71=D_b.getDate();B0Q=D_b.getHours();v9O=D_b.getMinutes();Z4a=D_b.getSeconds();b9o=B0Q * (\"60\" * 1) * 60 + v9O * 60 + Z4a;for(z5_=0;z5_ < this.normalHours.length;z5_++){u6v=this.normalHours[z5_];if(!u6v.enabled){continue;}M7q=u6v.dayofweek === q2q;if(M7q && G1j){M7q=b9o >= u6v.open && b9o < u6v.close;}if(M7q){if(!G1j && this.zseg_match){if(u6v.open_parts.hours > this.zopen_hour || u6v.open_parts.hours == this.zopen_hour && u6v.open_parts.minutes > this.zopen_minute){continue;}}if(u6v !== t$s && !u6v.adjacent_parent && !u6v.adjacent_child){this.shouldResetToBeginningOfSegment=!![];}H2k=z5_ + 1;this.zopen_hour=u6v.open_parts.hours;this.zopen_minute=u6v.open_parts.minutes;this.zclose_hour=u6v.close_parts.hours;this.zclose_minute=u6v.close_parts.minutes;this.zmatch_open=b9o === u6v.open;this.zseg_match=u6v;if(G1j)break;}}for(z5_=0;z5_ < this.extraHours.length;z5_++){u6v=this.extraHours[z5_];if(!u6v.enabled){continue;}if(\"*\" === u6v.year || m4w === u6v.year){if(O03 === u6v.month && c71 === u6v.day){Y9o=!G1j && u6v.open || b9o >= u6v.open && b9o < u6v.close;if(!Y9o && this.zseg_match){M7q=!!\"\";this.zopen_hour=0;this.zopen_minute=\"0\" | 0;this.zclose_hour=0;this.zclose_minute=0;this.zmatch_open=!!\"\";this.zseg_match=null;}if(Y9o){if(!G1j && this.zseg_match){if(u6v.open_parts.hours > this.zopen_hour || u6v.open_parts.hours == this.zopen_hour && u6v.open_parts.minutes > this.zopen_minute){continue;}}H2k=-(z5_ + 1);this.zopen_hour=u6v.open_parts.hours;this.zopen_minute=u6v.open_parts.minutes;this.zclose_hour=u6v.close_parts.hours;this.zclose_minute=u6v.close_parts.minutes;this.zmatch_open=b9o === u6v.open;this.zseg_match=u6v;if(G1j)break;}}}}if(X9x){T1G=null;if(this.zseg_match){if(!this.zseg_match._refid){this.zseg_match._refid=H2k;this._zseg_matches.set(this.zseg_match._refid,{zopen_hour:this.zopen_hour,zopen_minute:this.zopen_minute,zclose_hour:this.zclose_hour,zclose_minute:this.zclose_minute,zmatch_open:this.zmatch_open,zseg_match:this.zseg_match});}T1G=this.zseg_match._refid;}this._zseg_matches.set(+D_b * (G1j?1:-1),T1G);}return this.zseg_match;};X6s.Market.prototype._wasClosed=function(e6q){v$Z.C8A();return !this._was_open(e6q,!!1);};X6s.Market.prototype._wasOpen=function(I15){return this._was_open(I15,!0);};X6s.Market.prototype._tzDifferenceMillis=function(P4W,p56,l7m){var E5X,k4a,n7h,A9l;E5X=\"0\" ^ 0;k4a=P4W;n7h=P4W;A9l=k4a.getTimezoneOffset() - n7h.getTimezoneOffset();E5X=A9l * 60 * 1000;return E5X;};X6s.Market._createTimeSegments=function(j8Z){var G0b,w_5,L0n,y9m,E4B,e1w,h_2,S7f;v$Z.C8A();G0b=function(u5S,k_$){v$Z.C8A();if(u5S.close_parts.hours === 24 && k_$.open_parts.hours === +\"0\"){if(k_$.open_parts.minutes === 0){if(w_5.dayofweek === h_2.dayofweek - 1){return !!({});}if(w_5.dayofweek === 6 && h_2.dayofweek === +\"0\"){return !\"\";}}}return ![];};for(var L8R=0;L8R < j8Z.rules.length;L8R++){L0n=\"n\";L0n+=\"ame\";y9m=\"un\";y9m+=\"def\";y9m+=\"i\";y9m+=\"ned\";E4B=JSON.parse(JSON.stringify(j8Z.rules[L8R]));if(typeof E4B.open === y9m && typeof E4B.close === \"undefined\"){E4B.open=\"00:00\";E4B.close=\"00:00\";}if(!E4B.hasOwnProperty(L0n)){E4B.name=\"\";}try{e1w=\"undef\";e1w+=\"ine\";e1w+=\"d\";if(typeof E4B.dayofweek !== e1w){E4B.year=931.78 <= 9110?340.7 > (7980,\"643\" * 1)?(0xcb2,0x1abc):\"*\":846.12;h_2=Z52._createDayOfWeekSegment(j8Z,E4B);if(w_5){if(w_5.dayofweek === h_2.dayofweek){w_5.child_=h_2;h_2.parent_=w_5;}else {if(G0b(w_5,h_2)){w_5.adjacent_child=h_2;h_2.adjacent_parent=w_5;}}}w_5=h_2;}else if(typeof E4B.date !== \"undefined\"){E4B.isDayOfWeek=!!0;E4B.dayofweek=-1;h_2=Z52._createDateTimeSegment(j8Z,E4B);}else {console.log(\"Error, unknown rule type \" + E4B);}if(j8Z.enabled_by_default){for(var f7A=0;f7A < j8Z.enabled_by_default.length;f7A++){S7f=j8Z.enabled_by_default[f7A];if(h_2.name === S7f){h_2.enabled=!!({});break;}}}else {}}catch(R72){var l0c;l0c=\"Error, crea\";l0c+=\"ting marke\";l0c+=\"t\";l0c+=\" rules \";console.log(l0c + R72);}}};X6s.Market._timeSegment={};Z52=X6s.Market._timeSegment;Z52.re_wild_card_iso=/^(\\*)-(\\d\\d)-(\\d\\d)$/;Z52.re_regular_iso=/^(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)$/;Z52.re_split_hours_minutes=/^(\\d\\d):(\\d\\d)$/;Z52.re_split_hour_minutes=/^(\\d):(\\d\\d)$/;Z52._hashCode=function(c3T){var q7f,x6z,G2N,X4u;q7f=0;if(c3T.length === 0)return q7f;for((x6z=0,X4u=c3T.length);x6z < X4u;x6z++){G2N=c3T.charCodeAt(x6z);q7f=(q7f << 5) - q7f + G2N;q7f|=0;}v$Z.P3W();return q7f;};Z52._splitHoursMinutes=function(X$p){var V5b,T9F;V5b=Z52.re_split_hour_minutes.exec(X$p);T9F={hours:NaN,minutes:NaN};if(V5b === null){V5b=Z52.re_split_hours_minutes.exec(X$p);if(V5b === null){return T9F;}}T9F.hours=parseInt(V5b[1],10);T9F.minutes=parseInt(V5b[2],10);return T9F;};Z52._createDayOfWeekSegment=function(V2_,m6d){var c1I;c1I={name:m6d.name,isDayOfWeek:!!({}),dayofweek:m6d.dayofweek,date_str:889.36 <= (2414,2752)?(3004,983.28) < (2282,7900)?\"*\":(!![],954.49):(5.23e+3,0x22dd),open_parts:Z52._splitHoursMinutes(m6d.open),close_parts:Z52._splitHoursMinutes(m6d.close),open:Z52._secSinceMidnight(V2_,m6d.open,!!\"1\"),close:Z52._secSinceMidnight(V2_,m6d.close,![]),child_:![],parent_:!!\"\",adjacent_child:!!0,adjacent_parent:!!\"\",enabled:!!\"\"};if(c1I.name === \"\"){c1I.enabled=!\"\";}c1I.hash_code=this._hashCode((c1I.open + c1I.close).toString());V2_.normalHours.push(c1I);return c1I;};Z52._createDateTimeSegment=function(I3H,N_$){var c8l,Q8O,d7$;c8l=this.re_regular_iso.exec(N_$.date);if(c8l === null){c8l=this.re_wild_card_iso.exec(N_$.date);if(c8l === null){console.log(\"Warning: invalid date format on rule -> \" + N_$.date);return;}Q8O=(2012,7712) > (2320,+\"3860\")?1182 !== (266,4020)?(767.7,6120) <= (\"6916\" ^ 0)?\"*\":(+\"0x1de8\",3.24e+3):2.43e+3:(0xdaf,!!({}));}else {Q8O=parseInt(c8l[1],10);}v$Z.P3W();d7$={name:N_$.name,isDayOfWeek:!1,dayofweek:-1,year:Q8O,month:parseInt(c8l[2],+\"10\"),day:parseInt(c8l[3],10),date_str:N_$.date,open_parts:Z52._splitHoursMinutes(N_$.open),close_parts:Z52._splitHoursMinutes(N_$.close),open:Z52._secSinceMidnight(I3H,N_$.open,!!({})),close:Z52._secSinceMidnight(I3H,N_$.close,!({})),enabled:!\"1\"};if(d7$.name === \"\"){d7$.enabled=!!1;}d7$.hash_key=this._hashCode(d7$.date_str + d7$.open + d7$.close);I3H.extraHours.push(d7$);return d7$;};Z52._secSinceMidnight=function(w7a,Z1I,i_5){var w9t,e1z,C2H,s8T;v$Z.C8A();w9t=Z1I.split((+\"769.23\",132.91) == 428.64?(312.65,480.85):\"7390\" << 32 != 594.42?\":\":![]);e1z=parseInt(w9t[+\"0\"],10);C2H=parseInt(w9t[1],10);s8T=e1z * 60 * (\"60\" >> 64) + C2H * 60;if(!i_5){if(e1z === 24){s8T=e1z * 60 * 60 + 1;}}return s8T;};X6s.Market.prototype._convertToMarketTZ=function(t4m,Z5K){var I2o;if(Z5K){I2o=new this.tz_lib(t4m.getFullYear(),t4m.getMonth(),t4m.getDate(),t4m.getHours(),t4m.getMinutes(),t4m.getSeconds(),t4m.getMilliseconds(),Z5K);}else {I2o=new this.tz_lib(t4m.getFullYear(),t4m.getMonth(),t4m.getDate(),t4m.getHours(),t4m.getMinutes(),t4m.getSeconds(),t4m.getMilliseconds());}if(I2o.setTimezone)I2o.setTimezone(this.market_tz);return new Date(I2o.getFullYear(),I2o.getMonth(),I2o.getDate(),I2o.getHours(),I2o.getMinutes(),I2o.getSeconds(),I2o.getMilliseconds());};X6s.Market.prototype._convertFromMarketTZ=function(P6l,D0A){var R_x;R_x=new this.tz_lib(P6l.getFullYear(),P6l.getMonth(),P6l.getDate(),P6l.getHours(),P6l.getMinutes(),P6l.getSeconds(),P6l.getMilliseconds(),this.market_tz);if(D0A){if(R_x.setTimezone)R_x.setTimezone(D0A);}else {return new Date(R_x.getTime());}return new Date(R_x.getFullYear(),R_x.getMonth(),R_x.getDate(),R_x.getHours(),R_x.getMinutes(),R_x.getSeconds(),R_x.getMilliseconds());};X6s.Market.Iterator=function(W37){this.market=W37.market;this.begin=W37.begin;this.interval=W37.interval;this.multiple=W37.multiple;this.inZone=W37.inZone;this.outZone=W37.outZone;this.clock=new X6s.Market.Iterator._Clock(W37.market,W37.interval,W37.multiple);this.intraDay=this.clock.intra_day;if(this.intraDay)this.begin=this.market._convertToMarketTZ(this.begin,W37.inZone);this.clock._setStart(this.begin);this.clock.minutes_aligned=![];this.clock.minimumScanMS=W37.market.minimumSessionLength * 60000;};X6s.Market.Iterator.prototype.date=function(){return this.clock._date();};X6s.Market.Iterator.prototype.futureTick=function(r_S){var c8Y,i4m,k$j,d9L,i4y,W7n,R97,s_B,U1O;this.clock.skip=1;c8Y=0;if(this.intraDay)i4m=this.market._convertToMarketTZ(r_S.end,this.inZone).getTime();else i4m=r_S.end.getTime();k$j=this.clock.ctime;if(i4m === k$j){return c8Y;}d9L=2;v$Z.C8A();i4y=\"1000\" - 0;W7n=0;if(r_S.sample_size){d9L=r_S.sample_size;}R97=new Date().getTime();if(i4m > k$j){this.clock.forward=!0;while(this.clock.ctime < i4m){c8Y+=1;W7n+=1;this.clock._findNext();if(W7n === i4y){W7n=0;s_B=new Date().getTime();if(s_B - R97 >= d9L){U1O=(this.clock.ctime - k$j) / c8Y;c8Y=Math.floor((i4m - k$j) / U1O);break;}}}if(this.clock.ctime > i4m){c8Y--;}}else {this.clock.forward=!!\"\";while(this.clock.ctime > i4m){c8Y+=1;W7n+=1;this.clock._findPrevious();if(W7n === i4y){W7n=0;s_B=new Date().getTime();if(s_B - R97 >= d9L){U1O=(k$j - this.clock.ctime) / c8Y;c8Y=Math.floor((k$j - i4m) / U1O);break;}}}}return c8Y;};X6s.Market.Iterator.prototype.isHourAligned=function(){return !this.intraDay || this.market.isHourAligned();};X6s.Market.Iterator.prototype.isOpen=function(){return this.market.isOpen();};X6s.Market.Iterator.prototype.next=function(u1W){this.clock.skip=1;if(u1W){this.clock.skip=u1W;}this.clock.forward=!![];for(var K2y=0;K2y < this.clock.skip;K2y++)this.begin=this.clock._findNext();if(this.intraDay || this.market.convertOnDaily){return this.market._convertFromMarketTZ(this.clock.display_date,this.outZone);}v$Z.C8A();return this.clock.display_date;};X6s.Market.Iterator.prototype.peek=function(){v$Z.P3W();return this.clock._peek();};X6s.Market.Iterator.prototype.previous=function(f9S){this.clock.skip=+\"1\";if(f9S){this.clock.skip=f9S;}this.clock.forward=!\"1\";for(var Y_9=0;Y_9 < this.clock.skip;Y_9++)this.begin=this.clock._findPrevious();if(this.intraDay || this.market.convertOnDaily){return this.market._convertFromMarketTZ(this.clock.display_date,this.outZone);}return this.clock.display_date;};X6s.Market.Iterator._Clock=function(I3e,K_a,v7D){var W4B,O9Y,p$o,O8g,Y_8,O5B;W4B=\"h\";W4B+=\"ou\";W4B+=\"r\";O9Y=\"mi\";O9Y+=\"nute\";p$o=\"millisec\";p$o+=\"o\";p$o+=\"nd\";if(v7D % (\"60\" << 32) === 0 && K_a === \"second\"){O8g=\"m\";O8g+=\"i\";O8g+=\"nu\";O8g+=\"te\";K_a=O8g;v7D=v7D / 60;}this.market=I3e;this.interval=K_a;this.multiple=v7D;this.intra_day=!({});this.intervals=[];this.max_iters=10080;Y_8=m4W;O5B=this._dayImpl;if(K_a === p$o){O5B=this._millisImpl;Y_8=1;}else if(K_a === \"second\"){O5B=this._secondImpl;Y_8=1000;}else if(K_a === O9Y){O5B=this._minuteImpl;Y_8=60000;}else if(K_a === W4B){O5B=this._hourImpl;Y_8=k49;}else if(K_a === \"day\"){O5B=this._dayImpl;Y_8=m4W;}else if(K_a === \"week\"){O5B=this._weekImpl;Y_8=m4W * 7;}else if(K_a === \"month\"){O5B=this._monthImpl;Y_8=m4W * 30;}else {console.log('Periodicity ERROR: \"' + K_a + '\" is not a valid interval. Please see setPeriodicity() for details.');}this.tick_time=Y_8 * v7D;this.intra_day=this.tick_time < m4W;this._findPrevious=this._findNext=O5B;};v5u=X6s.Market.Iterator._Clock.prototype;v5u._total_minutes=function(F9B,I_0,i5c,g7Z){return (i5c - F9B) * 60 - I_0 + g7Z;};v5u._alignMinutes=function(){v$Z.P3W();var R$y,P8E,F7B,z_H,V7y,O2y;R$y=this.market.isHourAligned();if(!this.market.market_def && !R$y || this.market.zopen_minute === undefined){return [];}P8E=this.market.zopen_minute;F7B=this.market.zseg_match;if(F7B && F7B.adjacent_parent){P8E=F7B.adjacent_parent.open / 60 - 1440;}else {if(R$y && this.multiple % 60 === 0)P8E=0;}z_H=this._total_minutes(this.market.zopen_hour,P8E,this.market.zclose_hour,this.market.zclose_minute);V7y=[];O2y=0;while(O2y < z_H){V7y.push(P8E + O2y);O2y+=this.multiple;}return V7y;};v5u._alignBaseZero=function(p90){v$Z.C8A();var U12,b_7;U12=0;b_7=[U12];while(!!({})){U12+=this.multiple;if(U12 >= p90){break;}b_7.push(U12);}return b_7;};v5u._date=function(){var w2C,n4f;v$Z.P3W();w2C=Math.round(this.ctime);n4f=new Date(w2C);if(this.intra_day){this.display_date=new Date(w2C + this.shift_millis);}else {this.display_date=n4f;}return n4f;};v5u._alignToBoundary=function(T_k,O$7){var O0D,s__,Y9j;O0D=0;s__=0;Y9j=O$7;for(var G7M=0;G7M < T_k.length - \"1\" * 1;G7M++){O0D=T_k[G7M];s__=T_k[G7M + 1];if(O$7 === O0D || O$7 === s__){break;}if(O$7 > O0D && O$7 < s__){Y9j=O0D;break;}else if(G7M + 1 === T_k.length - 1){Y9j=s__;}}return Y9j;};v5u._peek=function(){return this._date().toString();};v5u._seekHr=function(){if(this.forward){this.ctime-=k49;}else {this.ctime+=k49;}};v5u._setStart=function(C9I){var w$K,e$G;w$K=this.market._tzDifferenceMillis(C9I);e$G=new Date(C9I.getTime() + w$K);this.shift_millis=w$K;this.ctime=e$G.getTime();this.shift_millis=0;this.ctime=C9I.getTime();};v5u._tickTock=function(){if(this.forward){this.ctime+=this.tick_time;}else {this.ctime-=this.tick_time;}};v5u._tockTick=function(){if(this.forward){this.ctime-=this.tick_time;}else {this.ctime+=this.tick_time;}};v5u._tickTock24=function(){v$Z.C8A();this.ctime+=m4W;};v$Z.P3W();v5u._tockTick24=function(){v$Z.C8A();this.ctime-=m4W;};v5u._windMaybe=function(P9T,A7K){var J1N,Q7z,D37,O_8;J1N=+\"0\";v$Z.C8A();Q7z=new Date(this.ctime);D37=!\"1\";while(!P9T.call(this.market,Q7z)){A7K.call(this);D37=!!({});Q7z=new Date(this.ctime);J1N+=1;if(J1N > this.max_iters){O_8=\"Warning! max iterations (\" + this.max_iters;O_8+=\") reached with no rule match.\";console.log(O_8);break;}}return D37;};v5u._millisImpl=function(){var n$j,p4y,t_D,U$C,g2V,E56,Y0a,R$G,f0P,y4x;n$j=![];if(!this.mperiods_aligned){p4y=this._alignBaseZero(\"1000\" ^ 0);t_D=new Date(this.ctime);U$C=t_D.getMilliseconds();U$C=this._alignToBoundary(p4y,U$C);t_D.setMilliseconds(0);this.ctime=t_D.getTime() + U$C;this.mperiods_aligned=!![];n$j=!!1;}v$Z.C8A();g2V=this._date().getMinutes();this._tickTock();E56=this._date().getMinutes();if((n$j || g2V != E56) && !this.market._wasOpenIntraDay(this._date())){Y0a=this._date().getSeconds();R$G=this._date().getMilliseconds();f0P=this.tick_time;this.tick_time=60000;y4x=this.multiple;this.multiple=1;this._minuteImpl();this.tick_time=f0P;this.multiple=y4x;this.ctime+=+\"1000\" * Y0a + R$G;}return this._date();};v5u._secondImpl=function(){v$Z.C8A();var a8x,U63,B95,v9r,j_Z,n8X,O0e,M5P,D__;a8x=![];if(!this.speriod_aligned){U63=this._alignBaseZero(60);B95=new Date(this.ctime);v9r=B95.getSeconds();v9r=this._alignToBoundary(U63,v9r);B95.setSeconds(v9r);B95.setMilliseconds(0);this.ctime=B95.getTime();this.speriod_aligned=!![];a8x=!!1;}j_Z=this._date().getMinutes();this._tickTock();n8X=this._date().getMinutes();if((a8x || j_Z != n8X) && !this.market._wasOpenIntraDay(this._date())){O0e=this._date().getSeconds();M5P=this.tick_time;this.tick_time=60000;D__=this.multiple;this.multiple=\"1\" - 0;this._minuteImpl();this.tick_time=M5P;this.multiple=D__;this.ctime+=1000 * O0e;}return this._date();};v5u._minuteImpl=function(){var M$C,x3R,C_E,B1O,s0s,k7q,d_w,E_b,t7L,f7q,r9v,g8H,I5s,Y$v;M$C=this._windMaybe(this.market._wasOpenIntraDay,this._tockTick);x3R=new Date(this.ctime);C_E=x3R.getTimezoneOffset();B1O=x3R.getMinutes();s0s=x3R.getHours();k7q=this._alignMinutes();d_w=this._total_minutes(this.market.zopen_hour,this.market.zopen_minute,s0s,B1O) + this.market.zopen_minute;if(M$C){if(this.forward){d_w=k7q[k7q.length - 1];}else {d_w=k7q[0];}}else {d_w=this._alignToBoundary(k7q,d_w);}s0s=Math.floor(d_w / +\"60\") + this.market.zopen_hour;x3R.setHours(s0s,d_w % +\"60\",0,0);E_b=x3R.getTimezoneOffset() - C_E;if(this.forward && E_b < 0 || !this.forward && E_b > +\"0\"){x3R.setTime(x3R.getTime() - E_b * 60000);}this.ctime=x3R.getTime();t7L=this.market.zseg_match;this._tickTock();f7q=this.market.hour_aligned && this.multiple % 60 === 0;M$C=this._scanForNextSession();r9v=t7L !== this.market.zseg_match;g8H=t7L && t7L.adjacent_child;I5s=this.shouldResetToBeginningOfSegment || r9v && !g8H;if(M$C || I5s && !f7q){x3R=new Date(this.ctime);if(this.forward){x3R.setMinutes(this.market.zopen_minute);x3R.setHours(this.market.zopen_hour);}else {k7q=this._alignMinutes();Y$v=k7q[k7q.length - 1];x3R.setMinutes(Y$v % (\"60\" * 1));x3R.setHours(Math.floor(Y$v / 60) + this.market.zopen_hour);}this.ctime=x3R.getTime();}return this._date();};v5u._hourImpl=function(){var k0w,o1p,G7w,B7o,P5E,F3i,t2f,E1X;this._windMaybe(this.market._wasOpenIntraDay,this._tockTick);k0w=new Date(this.ctime);if(this.market.isHourAligned()){o1p=1368654786;G7w=1592179692;B7o=2;for(var Q47=1;v$Z.G33(Q47.toString(),Q47.toString().length,47358) !== o1p;Q47++){k0w.setMinutes(3);B7o+=+\"2\";}if(v$Z.G33(B7o.toString(),B7o.toString().length,64277) !== G7w){k0w.setMinutes(0);}}else {k0w.setMinutes(this.market.zopen_minute);}k0w.setSeconds(0);k0w.setMilliseconds(+\"0\");this.ctime=k0w.getTime();this._tickTock();P5E=this.market.zseg_match;if(this._scanForNextSession() || !this.market.hour_aligned && P5E != this.market.zseg_match){F3i=new Date(this.ctime);if(this.forward){F3i.setMinutes(this.market.zopen_minute);F3i.setHours(this.market.zopen_hour);}else {t2f=this._alignMinutes();E1X=t2f[t2f.length - (\"1\" ^ 0)];F3i.setMinutes(E1X % +\"60\");F3i.setHours(Math.floor(E1X / 60) + this.market.zopen_hour);}this.ctime=F3i.getTime();}return this._date();};v5u._dayImpl=function(){v$Z.C8A();var J8S,i9R;this._windMaybe(this.market._wasOpenDaily,this._seekHr);J8S=new Date(this.ctime);J8S.setHours(12,0,0,0);this.ctime=J8S.getTime();i9R=0;while(i9R < this.multiple){if(this.forward){this._tickTock24();}else {this._tockTick24();}if(!this.market._wasOpenDaily(this._date())){continue;}i9R+=1;}J8S=new Date(this.ctime);J8S.setHours(0);this.ctime=J8S.getTime();return this._date();};v5u._weekImpl=function(){var Q6v,I5e;Q6v=this.market;I5e=new Date(this.ctime);I5e.setHours(12);this.ctime=I5e.getTime();this._tickTock();I5e=new Date(this.ctime);while(I5e.getDay() !== Q6v.beginningDayOfWeek){this._tockTick24();I5e=new Date(this.ctime);}this._windMaybe(Q6v._wasOpenDaily,this._tickTock24);I5e=new Date(this.ctime);I5e.setHours(+\"0\",0,0,\"0\" | 0);this.ctime=I5e.getTime();return this._date();};v5u._monthImpl=function(){var O97;O97=new Date(this.ctime);O97.setDate(15);this.ctime=O97.getTime();this._tickTock();O97=new Date(this.ctime);O97.setDate(1);O97.setHours(12);this.ctime=O97.getTime();this._windMaybe(this.market._wasOpenDaily,this._tickTock24);O97=new Date(this.ctime);O97.setHours(0,\"0\" * 1,0,0);this.ctime=O97.getTime();return this._date();};v5u._findNext=null;v5u._findPrevious=null;v5u._scanForNextSession=function(){return this._windMaybe(this.market._wasOpenIntraDay,(function(){v$Z.C8A();this.ctime+=this.forward?this.minimumScanMS:-this.minimumScanMS;}).bind(this));};};J3=r5r=>{var D0q,m0L,n$Z,h1E,y_4,l69,x0U;D0q=\"\\x6d\";D0q+=\"\\u006f\\u0075\";D0q+=\"\\x73\\x65\\x6d\\u006f\\x76\\x65\\u0069\\x6e\\u006e\";D0q+=\"\\x65\\u0072\";m0L=\"\\x43\\u0068\\x61\\x72\";m0L+=\"\\x74\\x45\\x6e\\u0067\";m0L+=\"\\u0069\\u006e\\x65\";n$Z=\"undef\";n$Z+=\"ined\";h1E=typeof _CIQ !== n$Z?_CIQ:r5r.CIQ;y_4=\"valid\";h1E.valid=0;l69=\"C\";l69+=\"P\";l69+=\"E1704TKS\";h1E[m0L]['\\u0070\\u0072\\u006f\\x74\\x6f\\x74\\u0079\\x70\\x65'][D0q]=function(S6M,b7P){var R5J=q1l46;var T5M,Q7g,D3R,g4y,i_a,r$q,p$M,B5v,E6g,Q2e,O$3,A_8,E9_,t7e,F04,A6t,T9P,a2O,t3L,s$r,r4o,n_J,U$o,R4Z,d5O,X3G,E7p,i1S,c9$,V4k,J7q,L2a,K0V,r7X,L2y,U4v,q92,n1e,m4q,q2n,J6G,u17,v9H,K44,x2t,T5L,V2m,o_w,l$7,s1M,r1p,u9Z,f0e,n_R,x_R,g4M,I0e,u$q,h7S,L8A,p5y,E3v,g7b,F0Z,A_S,E1H,Z50,s99,R5b,S$V,l1d,w5X,r_Y,Z$X,e89,R50,B4E,L8H,b6S,i7P,o_5,R4m,f2V,S7J,n9I,g9m,s$R,w_B,u1d,n0z,n0P,r4F,m$z,K66,b_W,G8c,X8z,b8Y,P71,Y$P,C5Q,U7T,y9u,U_C,V33,g3m,t$A,S7q,Q39,X_l,D6Q,O3i,q7k,y0j,e9P,v5r,E9G,m_f,R_V,L2Z,U9_,M71,r3O,q52,O9x,F3A,N6q,W0q,y7R,T00,C58,w1q,w9N,X3L,A_e,S6o,J6F,s8C,w3O,i76,a_H,E7t,q7D,t24,x9o,D58,A4L,g$W,C4q,C7e,b2R,J0V,t3H,w0V,u2$,A95,D79;T5M=\"\\x72\\u0065\";T5M+=\"\\x73\\x69\\x7a\";T5M+=\"\\u0069\\u006e\\u0067\";T5M+=\"\\x50\\x61\\x6e\\u0065\\x6c\";Q7g=\"\\x6d\\x61\";Q7g+=\"\\u0067\\x6e\";Q7g+=\"\\u0065\\u0074\\u0069\\u007a\";Q7g+=\"\\x65\";D3R=\"\\u0070\";D3R+=\"\\x78\";g4y=\"\\x63\\x6f\\x6e\\u0074\\x72\\u006f\";g4y+=\"\\u006c\\u0073\";i_a=\"\\x70\";i_a+=\"\\x78\";r$q=\"\\x63\\x6f\\x6e\\x74\";r$q+=\"\\x72\\u006f\";r$q+=\"\\u006c\\u0073\";p$M=\"\\u006f\";p$M+=\"\\u0076\\x65\\u0072\\u0059\\x41\\x78\\u0069\\x73\";B5v=\"\\x6f\\u0076\\x65\";B5v+=\"\\u0072\\u0058\\u0041\";B5v+=\"\\x78\\u0069\\u0073\";E6g=\"\\x43\";E6g+=\"\\x68\\u0061\\u0072\\x74\\x45\\x6e\\x67\\x69\\u006e\";E6g+=\"\\u0065\";Q2e=\"\\x72\\u0065\\u0070\\u006f\\x73\\x69\\x74\\u0069\\u006f\\u006e\\u0069\\x6e\\u0067\\x42\\x61\\x73\\x65\\x6c\";Q2e+=\"\\u0069\\u006e\\x65\";O$3=\"\\x43\";O$3+=\"\\x68\\x61\\u0072\\x74\\x45\";O$3+=\"\\x6e\\u0067\\u0069\\u006e\\u0065\";A_8=\"\\x6f\\x76\\u0065\\u0072\\x59\";A_8+=\"\\x41\";A_8+=\"\\x78\\x69\";A_8+=\"\\u0073\";E9_=\"\\u0069\\x6e\\u0073\\u0069\\x64\\u0065\\x43\\u0068\\x61\";E9_+=\"\\u0072\\u0074\";t7e=\"\\x63\\x75\\x72\\u0072\\u0065\";t7e+=\"\\u006e\\u0074\\u0050\\x61\\x6e\\u0065\";t7e+=\"\\u006c\";F04=\"\\x63\";F04+=\"\\x78\";A6t=\"\\x72\";A6t+=\"\\u0069\";A6t+=\"\\x67\\x68\";A6t+=\"\\u0074\";T9P=\"\\x63\\u0075\\x72\";T9P+=\"\\u0072\\u0065\\u006e\\x74\";T9P+=\"\\x50\\u0061\\x6e\\x65\\x6c\";a2O=\"\\u0063\";a2O+=\"\\x78\";t3L=\"\\x63\";t3L+=\"\\u0079\";s$r=\"\\u0062\\u006f\";s$r+=\"\\x74\\x74\\x6f\\x6d\";r4o=\"\\x74\";r4o+=\"\\u006f\";r4o+=\"\\u0070\";n_J=\"\\x6c\\u0065\";n_J+=\"\\u0066\\x74\";U$o=\"\\u0064\\u0061\\x74\\x61\";U$o+=\"\\u0053\";U$o+=\"\\u0065\\u0074\";R4Z=\"\\u0063\\u0075\\u0072\";R4Z+=\"\\u0072\\u0065\\x6e\";R4Z+=\"\\u0074\\x50\\x61\";R4Z+=\"\\x6e\\x65\\u006c\";d5O=\"\\x63\";d5O+=\"\\x72\\x6f\";d5O+=\"\\x73\\x73\\x58\\u0041\\x63\\u0074\\u0075\\x61\\u006c\";d5O+=\"\\x50\\u006f\\x73\";X3G=\"\\x63\";X3G+=\"\\u0078\";E7p=\"\\u0043\\x68\";E7p+=\"\\u0061\\x72\\u0074\\u0045\";E7p+=\"\\u006e\\x67\\u0069\";E7p+=\"\\x6e\\u0065\";i1S=\"\\u0062\\u0061\\u0063\\x6b\";i1S+=\"\\u004f\\x75\\x74\\u0059\";c9$=\"\\x63\";c9$+=\"\\x72\";c9$+=\"\\u006f\\x73\\x73\\x68\";c9$+=\"\\u0061\\x69\\u0072\\u0058\";V4k=\"\\x68\\u0061\\x73\";V4k+=\"\\u0044\\x72\\x61\\x67\\x67\\u0065\\u0064\";J7q=\"\\u0068\";J7q+=\"\\u0065\\u0069\\u0067\\u0068\\u0074\";L2a=\"\\x77\";L2a+=\"\\u0069\";L2a+=\"\\x64\\x74\";L2a+=\"\\x68\";K0V=\"\\u006c\";K0V+=\"\\x65\";K0V+=\"\\u0066\\x74\";r7X=\"\\u0074\";r7X+=\"\\x6f\\u0070\";L2y=\"\\x74\";L2y+=\"\\x6f\";L2y+=\"\\u0070\";U4v=\"\\u0072\\u0075\\x6e\\x50\";U4v+=\"\\x72\\x65\\x70\\x65\\u006e\\u0064\";q92=\"\\x63\\u0068\\u0061\";q92+=\"\\x72\";function R4r(J9_){var Z9p;Z9p=\"\\u0063\\u0075\\x72\\x72\\x65\\u006e\\x74\";Z9p+=\"\\x42\\x61\\u0073\\u0065\\u006c\";R5J.P3W();Z9p+=\"\\x69\\x6e\";Z9p+=\"\\u0065\";J9_[Z9p]=null;J9_['\\x72\\u0075\\u006e\\x41\\u0070\\u0070\\u0065\\u006e\\x64']('\\u006d\\x6f\\u0075\\x73\\x65\\x6d\\x6f\\u0076\\u0065\\u0069\\x6e\\u006e\\x65\\x72',T5L);}q92+=\"\\x74\";if(!this[q92]['\\u0063\\u0061\\x6e\\x76\\x61\\u0073']){return;}if(!this['\\x64\\u0069\\x73\\x61\\x62\\x6c\\x65\\u0042\\u0061\\u0063\\x6b\\u0069\\x6e\\x67\\u0053\\x74\\u006f\\u0072\\u0065\\x44\\x75\\u0072\\u0069\\u006e\\x67\\u0054\\x6f\\u0075\\u0063\\u0068']){n1e=\"\\x63\\x6f\\u006e\";n1e+=\"\\x74\\u0061\";n1e+=\"\\u0069\";n1e+=\"\\u006e\\u0065\\u0072\";m4q=\"\\u0066\";m4q+=\"\\u006c\\x6f\\x6f\\x72\";q2n=\"\\x63\\x61\\x6e\";q2n+=\"\\x76\\x61\\u0073\";J6G=\"\\x63\";J6G+=\"\\x6f\\x6e\\u0074\\x61\";J6G+=\"\\u0069\\u006e\";J6G+=\"\\x65\\u0072\";u17=\"\\u0066\\u006c\\u006f\";u17+=\"\\u006f\\x72\";v9H=\"\\u0063\";v9H+=\"\\x61\\u006e\\x76\\x61\\u0073\";if(this['\\x63\\u0068\\x61\\u0072\\x74'][v9H]['\\x68\\x65\\x69\\x67\\x68\\u0074'] != Math[u17](this['\\u0064\\x65\\u0076\\u0069\\x63\\u0065\\u0050\\x69\\x78\\x65\\x6c\\u0052\\x61\\u0074\\u0069\\u006f'] * this['\\u0063\\x68\\x61\\x72\\u0074'][J6G]['\\u0063\\x6c\\u0069\\x65\\u006e\\u0074\\x48\\u0065\\u0069\\x67\\u0068\\u0074']) || this['\\x63\\x68\\x61\\u0072\\u0074'][q2n]['\\u0077\\u0069\\x64\\x74\\x68'] != Math[m4q](this['\\x64\\x65\\x76\\x69\\u0063\\x65\\x50\\x69\\u0078\\x65\\x6c\\x52\\u0061\\x74\\x69\\u006f'] * this['\\x63\\x68\\u0061\\u0072\\u0074'][n1e]['\\x63\\u006c\\u0069\\u0065\\u006e\\u0074\\x57\\u0069\\u0064\\u0074\\x68'])){K44=\"\\x72\\u0065\\u0073\\u0069\\u007a\\u0065\";K44+=\"\\x43\\u0068\";K44+=\"\\x61\\x72\";K44+=\"\\u0074\";this[K44]();return;}}if(this[U4v]('\\x6d\\u006f\\u0075\\u0073\\x65\\x6d\\u006f\\x76\\u0065\\x69\\u006e\\x6e\\x65\\x72',arguments)){return;}T5L=arguments;v6x();if(!v6x[l69]){R5J.s5();;}V2m=this['\\u0063\\x6f\\x6e\\u0074\\u0061\\u0069\\x6e\\x65\\x72']['\\u0067\\x65\\u0074\\u0042\\x6f\\x75\\u006e\\u0064\\x69\\x6e\\u0067\\u0043\\u006c\\x69\\x65\\x6e\\u0074\\x52\\u0065\\u0063\\u0074']();this[L2y]=V2m[r7X];this[K0V]=V2m['\\u006c\\x65\\u0066\\x74'];this['\\u0072\\u0069\\u0067\\u0068\\u0074']=this['\\x6c\\x65\\x66\\x74'] + this[L2a];this['\\x62\\u006f\\x74\\u0074\\x6f\\x6d']=this['\\x74\\x6f\\u0070'] + this[J7q];this[V4k]=!!({});h1E['\\x43\\u0068\\u0061\\x72\\x74\\x45\\x6e\\x67\\u0069\\u006e\\u0065']['\\x63\\x72\\x6f\\x73\\u0073\\u0068\\u0061\\u0069\\x72\\x58']=S6M;h1E['\\x43\\u0068\\x61\\x72\\u0074\\u0045\\x6e\\x67\\x69\\u006e\\u0065']['\\u0063\\x72\\x6f\\x73\\x73\\x68\\u0061\\x69\\x72\\x59']=b7P;this[c9$]=S6M;this['\\x63\\x72\\u006f\\u0073\\u0073\\x68\\u0061\\x69\\u0072\\u0059']=b7P;o_w=this['\\x63\\x79']=this['\\u0063\\u0072\\x6f\\x73\\x73\\x59\\x41\\x63\\u0074\\x75\\u0061\\x6c\\x50\\u006f\\u0073']=this[i1S](h1E[E7p]['\\x63\\x72\\x6f\\x73\\u0073\\u0068\\x61\\x69\\u0072\\x59']);l$7=this[X3G]=this[d5O]=this['\\x62\\x61\\u0063\\x6b\\x4f\\x75\\u0074\\u0058'](h1E['\\x43\\x68\\u0061\\x72\\u0074\\u0045\\u006e\\u0067\\u0069\\u006e\\u0065']['\\x63\\x72\\x6f\\x73\\u0073\\x68\\u0061\\x69\\u0072\\u0058']);if(this['\\u0067\\x72\\x61\\u0062\\u0062\\u0069\\x6e\\u0067\\x53\\u0063\\x72\\x65\\u0065\\x6e'] && this['\\u0061\\x6e\\u0079\\u0048\\u0069\\u0067\\x68\\u006c\\x69\\u0067\\x68\\u0074\\u0065\\x64']){s1M=\"\\x70\";s1M+=\"\\x6f\\x77\";r1p=\"\\u0070\";r1p+=\"\\x6f\";r1p+=\"\\u0077\";R5J.U1h(8);var r$o=R5J.P_X(22,24);u9Z=Math[r1p](this['\\x67\\u0072\\u0061\\x62\\u0053\\u0074\\x61\\u0072\\x74\\u0058'] - S6M,r$o) + Math[s1M](this['\\x67\\u0072\\u0061\\u0062\\x53\\x74\\u0061\\x72\\u0074\\x59'] - b7P,+\"2\");if(u9Z < (\"36\" ^ 0)){return;}}this['\\x63\\u0061\\u006e\\u0063\\x65\\x6c\\u004c\\x6f\\u006e\\x67\\u0048\\x6f\\x6c\\u0064']=!\"\";f0e=function(H4i,J$e){var G6c;if(h1E[y_4] === 0){G6c=\"\\x63\\x68\\u0061\";G6c+=\"\\u0072\";G6c+=\"\\x74\";return H4i['\\x77\\u0068\\x69\\u0063\\u0068\\u0050\\x61\\u006e\\x65\\x6c'](J$e) || H4i[G6c]['\\u0070\\x61\\u006e\\x65\\u006c'];}if(!H4i['\\u0064\\x72\\x61\\u0077'][y_4]){H4i['\\x64\\u0072\\x61\\x77']=function(){R5J.P3W();var G6j;G6j=\"\\x63\\u0061\";G6j+=\"\\u006e\";G6j+=\"\\x76\\x61\";G6j+=\"\\u0073\";h1E['\\x63\\x6c\\x65\\x61\\u0072\\u0043\\u0061\\u006e\\u0076\\x61\\x73'](this['\\u0063\\u0068\\x61\\x72\\x74'][G6j],this);};H4i['\\u0064\\u0072\\u0061\\x77'][y_4]=!![];}};this['\\x63\\u0075\\x72\\x72\\u0065\\u006e\\u0074\\x50\\u0061\\u006e\\x65\\x6c']=f0e(this,o_w);if(!this[R4Z]){return;}n_R=this['\\u0063\\x75\\x72\\u0072\\u0065\\x6e\\u0074\\x50\\x61\\x6e\\u0065\\u006c']['\\x63\\u0068\\u0061\\x72\\u0074'];if(n_R[U$o]){x_R=\"\\u0063\\x72\\u006f\\u0073\\x73\\u0068\\x61\\x69\";x_R+=\"\\u0072\";x_R+=\"\\u0054\\u0069\";x_R+=\"\\x63\\u006b\";g4M=\"\\u0063\\x75\\x72\\u0072\\u0065\";g4M+=\"\\x6e\";g4M+=\"\\x74\\x50\\x61\\x6e\\x65\\u006c\";I0e=\"\\x63\\u0072\\u006f\\u0073\";I0e+=\"\\u0073\\x68\\x61\\u0069\\u0072\";I0e+=\"\\x54\\u0069\\x63\";I0e+=\"\\u006b\";u$q=\"\\u0063\\u0075\\x72\\u0072\\x65\\u006e\\u0074\";u$q+=\"\\x50\";u$q+=\"\\u0061\\x6e\";u$q+=\"\\u0065\\x6c\";h7S=\"\\u0061\\u0064\\x6a\";h7S+=\"\\u0075\\u0073\";h7S+=\"\\x74\\u0049\\x66\\x4e\\u0065\\x63\\x65\\x73\\u0073\\x61\";h7S+=\"\\x72\\x79\";L8A=\"\\x63\\x75\\x72\";L8A+=\"\\u0072\";L8A+=\"\\u0065\\u006e\\x74\\x50\\u0061\\u006e\\u0065\";L8A+=\"\\u006c\";p5y=\"\\u0063\\u0072\\u006f\\u0073\\x73\\x68\";p5y+=\"\\u0061\\x69\\u0072\\u0054\\u0069\\u0063\\u006b\";this[p5y]=this['\\x74\\u0069\\x63\\u006b\\x46\\u0072\\x6f\\u006d\\u0050\\u0069\\x78\\u0065\\x6c'](l$7,n_R);x2t=this['\\x76\\x61\\u006c\\u0075\\x65\\u0046\\x72\\u006f\\u006d\\u0050\\u0069\\x78\\x65\\u006c'](o_w,this[L8A]);this['\\x63\\x72\\u006f\\x73\\u0073\\x68\\u0061\\x69\\x72\\x56\\x61\\u006c\\x75\\u0065']=this[h7S](this[u$q],this[I0e],x2t);E3v=this['\\x63\\u0075\\u0072\\u0072\\x65\\u006e\\u0074\\x50\\x61\\u006e\\u0065\\x6c']['\\x6e\\u0061\\x6d\\u0065'] == '\\x63\\u0068\\x61\\u0072\\u0074'?this['\\u0070\\x72\\u0065\\x66\\x65\\x72\\x65\\u006e\\x63\\u0065\\x73']['\\x68\\u006f\\x72\\u0069\\u007a\\x6f\\u006e\\x74\\x61\\u006c\\x43\\u0072\\x6f\\u0073\\u0073\\x68\\x61\\u0069\\u0072\\u0046\\x69\\u0065\\x6c\\u0064']:this[g4M]['\\x68\\x6f\\u0072\\x69\\x7a\\u006f\\x6e\\u0074\\x61\\x6c\\x43\\x72\\x6f\\u0073\\x73\\x68\\u0061\\u0069\\x72\\u0046\\u0069\\x65\\u006c\\x64'];if(E3v && this['\\u0063\\x72\\x6f\\u0073\\x73\\x68\\u0061\\u0069\\u0072\\x54\\u0069\\u0063\\x6b'] < n_R['\\u0064\\x61\\x74\\x61\\x53\\x65\\u0074']['\\x6c\\x65\\x6e\\u0067\\x74\\x68'] && this[x_R] > -+\"1\"){g7b=\"\\x63\\x72\\u006f\\u0073\";g7b+=\"\\u0073\\x59\\x41\\x63\\x74\\u0075\\u0061\\u006c\\u0050\\u006f\\u0073\";F0Z=\"\\u0063\\x72\\x6f\\u0073\";F0Z+=\"\\x73\\x68\";F0Z+=\"\\x61\\x69\\x72\\u0054\\u0069\\x63\\x6b\";x2t=n_R['\\x64\\u0061\\u0074\\u0061\\x53\\u0065\\u0074'][this[F0Z]][E3v];this[g7b]=this['\\u0070\\u0069\\x78\\x65\\x6c\\u0046\\u0072\\x6f\\u006d\\u0050\\u0072\\u0069\\x63\\u0065'](x2t,this['\\u0063\\x75\\u0072\\u0072\\x65\\x6e\\u0074\\x50\\u0061\\u006e\\x65\\u006c']);}}if(h1E['\\u0043\\u0068\\x61\\u0072\\x74\\u0045\\x6e\\x67\\u0069\\x6e\\x65']['\\u0063\\x72\\x6f\\u0073\\x73\\x68\\x61\\u0069\\u0072\\u0058'] >= this[n_J] && h1E['\\x43\\u0068\\x61\\u0072\\x74\\u0045\\u006e\\u0067\\x69\\u006e\\u0065']['\\x63\\x72\\u006f\\x73\\x73\\u0068\\u0061\\x69\\x72\\u0058'] <= this['\\u0072\\u0069\\x67\\x68\\u0074'] && h1E['\\x43\\x68\\u0061\\x72\\x74\\x45\\x6e\\x67\\x69\\x6e\\x65']['\\u0063\\x72\\x6f\\x73\\u0073\\u0068\\x61\\x69\\u0072\\u0059'] >= this[r4o] && h1E['\\x43\\x68\\x61\\u0072\\x74\\x45\\x6e\\x67\\x69\\u006e\\u0065']['\\u0063\\x72\\u006f\\x73\\x73\\u0068\\u0061\\u0069\\u0072\\x59'] <= this['\\x62\\x6f\\u0074\\x74\\x6f\\u006d']){A_S=\"\\u0069\";A_S+=\"\\x6e\\x73\\x69\";A_S+=\"\\x64\\u0065\\u0043\\u0068\\x61\\u0072\";A_S+=\"\\u0074\";this[A_S]=!!({});}else {this['\\u0069\\u006e\\u0073\\x69\\x64\\x65\\x43\\u0068\\x61\\u0072\\x74']=![];}E1H=this['\\u0078\\x41\\x78\\x69\\x73\\x41\\u0073\\x46\\x6f\\x6f\\x74\\u0065\\x72'] === !!\"1\"?this['\\x63\\u0068\\x61\\u0072\\x74']['\\x63\\x61\\u006e\\u0076\\u0061\\x73\\x48\\u0065\\u0069\\x67\\u0068\\u0074']:this['\\x63\\x68\\u0061\\x72\\x74']['\\u0070\\u0061\\u006e\\x65\\u006c'][s$r];this['\\u006f\\x76\\u0065\\u0072\\x58\\x41\\u0078\\u0069\\x73']=this['\\x69\\u006e\\x73\\x69\\x64\\x65\\x43\\x68\\u0061\\u0072\\u0074'] && this['\\x63\\x79'] <= E1H && this[t3L] > E1H - this['\\x78\\x61\\u0078\\u0069\\u0073\\x48\\x65\\u0069\\x67\\x68\\x74'];this['\\x6f\\u0076\\x65\\x72\\u0059\\u0041\\u0078\\u0069\\x73']=(this[a2O] >= this[T9P][A6t] || this[F04] <= this[t7e]['\\u006c\\u0065\\u0066\\x74']) && this[E9_];if(this['\\x6f\\x76\\u0065\\x72\\x58\\x41\\x78\\u0069\\x73'] || this[A_8] || !this['\\u0069\\u006e\\x73\\x69\\u0064\\u0065\\x43\\u0068\\x61\\u0072\\x74'] && !this['\\u0067\\u0072\\x61\\u0062\\x62\\x69\\x6e\\u0067\\u0053\\x63\\u0072\\u0065\\x65\\u006e']){Z50=\"\\x6f\";Z50+=\"\\u0076\\x65\\x72\\u0059\\x41\";Z50+=\"\\x78\\u0069\\u0073\";s99=\"\\x6f\";s99+=\"\\x76\\x65\";s99+=\"\\u0072\\x58\\x41\\x78\\u0069\\u0073\";this['\\u0075\\x6e\\u0064\\x69\\u0073\\u0070\\u006c\\u0061\\x79\\x43\\x72\\x6f\\x73\\x73\\x68\\u0061\\u0069\\u0072\\u0073']();if(!this[s99] && !this[Z50]){return;}}if(!this['\\u0064\\u0069\\u0073\\u0070\\x6c\\u0061\\u0079\\x43\\u0072\\x6f\\u0073\\u0073\\u0068\\u0061\\u0069\\u0072\\x73'] && !h1E[O$3]['\\x72\\u0065\\x73\\x69\\x7a\\x69\\u006e\\u0067\\u0050\\x61\\u006e\\x65\\u006c']){R5b=\"\\u0075\\u006e\\x64\\u0069\\u0073\";R5b+=\"\\x70\\u006c\\x61\\u0079\\x43\\x72\";R5b+=\"\\x6f\\x73\\u0073\\u0068\\u0061\\x69\\x72\\x73\";this[R5b]();return;}if(this[Q2e]){this['\\x73\\u0065\\u0074\\u0042\\x61\\x73\\u0065\\u006c\\u0069\\u006e\\x65\\u0055\\x73\\u0065\\u0072\\u004c\\u0065\\u0076\\x65\\u006c']();return R4r(this);}if(this['\\u0072\\u0065\\x70\\u006f\\x73\\x69\\u0074\\x69\\u006f\\u006e\\u0069\\u006e\\x67\\x41\\u006e\\x63\\u0068\\x6f\\x72\\u0053\\x65\\u006c\\u0065\\u0063\\x74\\x6f\\x72']){S$V=\"\\x6c\\x65\\u006e\";S$V+=\"\\x67\\x74\\u0068\";l1d=this['\\u0072\\x65\\x70\\x6f\\x73\\x69\\x74\\x69\\u006f\\u006e\\x69\\x6e\\x67\\u0041\\u006e\\x63\\u0068\\u006f\\x72\\u0053\\x65\\x6c\\u0065\\x63\\u0074\\x6f\\x72']['\\x68\\x6f\\x76\\u0065\\u0072\\u0054\\u0069\\x63\\u006b'];w5X=this['\\x74\\x69\\u0063\\u006b\\u0046\\x72\\u006f\\u006d\\x50\\u0069\\u0078\\u0065\\x6c'](this['\\u0063\\x78'],this['\\u0063\\x68\\u0061\\x72\\u0074']);if(w5X >= 0 && w5X < this['\\u0063\\u0068\\u0061\\x72\\u0074']['\\u0064\\u0061\\x74\\x61\\x53\\u0065\\x74'][S$V] && (!(l1d && l1d !== \"0\" << 32) || w5X !== l1d)){this['\\u0072\\u0065\\x70\\u006f\\x73\\x69\\u0074\\x69\\x6f\\x6e\\x69\\x6e\\u0067\\u0041\\u006e\\u0063\\x68\\x6f\\u0072\\u0053\\x65\\x6c\\u0065\\x63\\u0074\\u006f\\x72']['\\x68\\u006f\\x76\\u0065\\x72\\x54\\x69\\x63\\u006b']=w5X;this['\\x64\\x72\\x61\\x77']();}return R4r(this);}if(this['\\x67\\u0072\\x61\\x62\\u0062\\u0069\\u006e\\u0067\\u0053\\x63\\u0072\\x65\\u0065\\u006e'] && !h1E[E6g]['\\u0072\\u0065\\x73\\x69\\x7a\\x69\\x6e\\x67\\x50\\u0061\\x6e\\x65\\u006c'] && !this['\\u0063\\u0068\\x61\\u0072\\u0074']['\\x64\\x72\\u0061\\u0067\\u0067\\u0069\\x6e\\u0067\\x43\\u006f\\x6e\\x74\\u0072\\x6f\\u006c\\x73']){r_Y=\"\\u006f\\u0076\";r_Y+=\"\\u0065\\x72\";r_Y+=\"\\u0059\\u0041\";r_Y+=\"\\x78\\u0069\\x73\";Z$X=\"\\x7a\";Z$X+=\"\\u006f\";Z$X+=\"\\u006f\";Z$X+=\"\\u006d\";e89=\"\\u0067\\u0072\";e89+=\"\\u0061\";e89+=\"\\x62\";e89+=\"\\u004d\\x6f\\x64\\x65\";R50=\"\\x70\";R50+=\"\\x61\\x6e\";B4E=\"\\u0067\\x72\\u0061\\u0062\";B4E+=\"\\x4d\\x6f\";B4E+=\"\\x64\";B4E+=\"\\x65\";L8H=\"\\x67\\x72\";L8H+=\"\\x61\\u0062\\u004f\\u0076\\u0065\\x72\\u0072\\x69\\u0064\\x65\\u0043\\x6c\\x69\\u0063\\x6b\";b6S=\"\\u0061\";b6S+=\"\\x62\";b6S+=\"\\x73\";i7P=\"\\x67\\x72\\u0061\\x62\";i7P+=\"\\u0053\\u0074\";i7P+=\"\\x61\";i7P+=\"\\x72\\u0074\\u0059\";o_5=\"\\u0067\\u0072\\u0061\\x62\";o_5+=\"\\u0053\\u0074\\x61\";o_5+=\"\\x72\";o_5+=\"\\u0074\\u0058\";R4m=\"\\u0062\";R4m+=\"\\u006f\\u0074\";R4m+=\"\\u0074\\x6f\\u006d\";f2V=\"\\u006d\";f2V+=\"\\u0069\";f2V+=\"\\x6e\";S7J=\"\\x74\";S7J+=\"\\u006f\\x70\";n9I=\"\\x6d\";n9I+=\"\\u0061\";n9I+=\"\\u0078\";g9m=\"\\u0063\\x72\";g9m+=\"\\u006f\";g9m+=\"\\u0073\\u0073\\x68\\u0061\\x69\";g9m+=\"\\u0072\\u0059\";s$R=\"\\u0076\";s$R+=\"\\x65\\u0072\\u0074\\u0069\";s$R+=\"\\x63\";s$R+=\"\\x61\\u006c\";w_B=\"\\u0043\\u0068\\x61\\x72\\u0074\";w_B+=\"\\x45\";w_B+=\"\\x6e\\x67\";w_B+=\"\\u0069\\u006e\\x65\";u1d=\"\\x6c\";u1d+=\"\\x65\";u1d+=\"\\x66\";u1d+=\"\\x74\";n0z=\"\\u006d\";n0z+=\"\\u0061\";n0z+=\"\\x78\";if(this['\\u0068\\x69\\u0067\\u0068\\x6c\\u0069\\u0067\\x68\\x74\\x65\\u0064\\x44\\x72\\u0061\\x67\\x67\\u0061\\u0062\\x6c\\u0065']){this['\\u0064\\u0069\\x73\\u0070\\x6c\\u0061\\x79\\u0044\\x72\\x61\\x67\\x4f\\x4b'](!![]);this['\\x64\\u0072\\u0061\\u0067\\u0050\\u006c\\u006f\\x74\\x4f\\x72\\x41\\u0078\\x69\\u0073'](l$7,o_w);return R4r(this);}if(this['\\x61\\x6e\\x79\\u0048\\x69\\u0067\\u0068\\x6c\\x69\\x67\\x68\\u0074\\x65\\u0064']){n0P=\"\\u0064\\u0069\\u0073\\u0070\\x6c\\x61\\x79\";n0P+=\"\\u0053\\u0074\\u0069\\x63\\x6b\\x79\";r4F=\"\\u0073\\x65\";r4F+=\"\\u0072\";r4F+=\"\\u0069\";r4F+=\"\\u0065\\x73\";m$z=\"\\x6f\\x76\\u0065\\x72\";m$z+=\"\\u006c\\x61\\u0079\\x73\";K66=\"\\u0074\";K66+=\"\\u0065\";K66+=\"\\x6d\\u0070\";K66+=\"\\u0043\\x61\\x6e\\u0076\\x61\\x73\";h1E['\\x63\\u006c\\u0065\\u0061\\u0072\\x43\\u0061\\x6e\\u0076\\u0061\\x73'](this['\\x63\\u0068\\x61\\x72\\x74'][K66],this);this['\\x61\\u006e\\x79\\x48\\u0069\\x67\\u0068\\u006c\\u0069\\u0067\\u0068\\u0074\\u0065\\u0064']=!1;for(b_W in this[m$z]){G8c=\"\\u006f\\u0076\";G8c+=\"\\u0065\\x72\";G8c+=\"\\u006c\";G8c+=\"\\u0061\\u0079\\u0073\";this[G8c][b_W]['\\x68\\x69\\x67\\u0068\\x6c\\u0069\\x67\\x68\\x74']=![];}for(b_W in n_R[r4F]){X8z=\"\\u0068\\x69\\x67\";X8z+=\"\\u0068\\u006c\\x69\\u0067\\x68\\u0074\";b8Y=\"\\u0073\\u0065\";b8Y+=\"\\x72\\x69\\x65\";b8Y+=\"\\x73\";n_R[b8Y][b_W][X8z]=![];}this[n0P]();}if(this['\\u0067\\x72\\u0061\\x62\\u0053\\x74\\u0061\\u0072\\u0074\\x58'] == -(\"1\" * 1)){P71=\"\\x73\";P71+=\"\\x63\\u0072\\x6f\\x6c\\u006c\";this['\\x67\\x72\\u0061\\u0062\\x53\\x74\\u0061\\u0072\\u0074\\u0058']=h1E['\\x43\\u0068\\x61\\u0072\\u0074\\x45\\u006e\\u0067\\u0069\\x6e\\u0065']['\\x63\\u0072\\x6f\\x73\\u0073\\x68\\u0061\\x69\\x72\\x58'];this['\\x67\\x72\\x61\\u0062\\x53\\x74\\x61\\u0072\\x74\\u0053\\u0063\\u0072\\x6f\\x6c\\x6c\\u0058']=n_R[P71];}if(this['\\u0067\\u0072\\x61\\x62\\x53\\u0074\\x61\\u0072\\x74\\x59'] == -+\"1\"){Y$P=\"\\x67\\u0072\\x61\\u0062\\u0053\";Y$P+=\"\\u0074\";Y$P+=\"\\u0061\\u0072\\u0074\\x59\";this[Y$P]=h1E['\\x43\\u0068\\x61\\u0072\\u0074\\u0045\\u006e\\u0067\\u0069\\x6e\\x65']['\\x63\\u0072\\x6f\\u0073\\u0073\\x68\\u0061\\u0069\\x72\\x59'];this['\\u0067\\x72\\u0061\\u0062\\x53\\x74\\x61\\x72\\u0074\\x53\\x63\\u0072\\u006f\\u006c\\u006c\\x59']=this['\\x63\\u0075\\u0072\\u0072\\u0065\\u006e\\u0074\\x50\\u0061\\x6e\\u0065\\u006c']['\\u0079\\u0041\\x78\\x69\\x73']['\\x73\\x63\\u0072\\u006f\\u006c\\u006c'];}C5Q=this['\\x6c\\u0061\\x73\\x74\\x4d\\x6f\\u0076\\u0065'] === '\\u0068\\x6f\\u0072\\x69\\u007a\\u006f\\x6e\\x74\\u0061\\u006c'?h1E['\\u0043\\x68\\x61\\x72\\u0074\\u0045\\x6e\\u0067\\x69\\u006e\\u0065']['\\u0063\\x72\\u006f\\x73\\x73\\u0068\\u0061\\x69\\x72\\x58']:Math[n0z](this[u1d],Math['\\x6d\\u0069\\u006e'](this['\\u0072\\x69\\x67\\x68\\x74'],h1E[w_B]['\\x63\\u0072\\u006f\\x73\\u0073\\u0068\\x61\\x69\\x72\\u0058']));U7T=this['\\u006c\\x61\\x73\\u0074\\u004d\\x6f\\x76\\u0065'] === s$R?h1E['\\u0043\\x68\\u0061\\u0072\\x74\\u0045\\u006e\\u0067\\u0069\\x6e\\u0065'][g9m]:Math[n9I](this[S7J],Math[f2V](this[R4m],h1E['\\u0043\\u0068\\x61\\u0072\\u0074\\x45\\x6e\\u0067\\u0069\\x6e\\x65']['\\u0063\\u0072\\u006f\\x73\\u0073\\x68\\x61\\x69\\x72\\x59']));y9u=C5Q - this[o_5];U_C=U7T - this[i7P];if(y9u === 0 && U_C === 0){return;}if(Math['\\x61\\u0062\\x73'](y9u) + Math[b6S](U_C) > 5){this[L8H]=!![];}g3m=this['\\x6c\\x61\\u0079\\x6f\\u0075\\u0074']['\\x63\\u0061\\x6e\\u0064\\x6c\\u0065\\x57\\u0069\\x64\\u0074\\u0068'];if(this['\\x61\\x6c\\u006c\\x6f\\u0077\\x5a\\u006f\\u006f\\x6d'] && this[B4E] != R50 && (this[e89]['\\x69\\u006e\\x64\\x65\\x78\\u004f\\x66'](Z$X) === 0 || this['\\x6f\\x76\\x65\\x72\\x58\\u0041\\u0078\\u0069\\u0073'] || this['\\x67\\u0072\\u0061\\x62\\x53\\u0074\\x61\\x72\\x74\\x59\\x41\\u0078\\u0069\\u0073'])){t$A=\"\\u006c\\x61\\u0079\";t$A+=\"\\u006f\\x75\\x74\";S7q=\"\\u007a\\u006f\\x6f\";S7q+=\"\\x6d\";S7q+=\"\\u002d\\x78\";Q39=\"\\x67\\u0072\\x61\\x62\\x4d\\x6f\";Q39+=\"\\u0064\\u0065\";if(this[Q39] === \"\"){if(this['\\u006f\\u0076\\x65\\u0072\\x58\\x41\\u0078\\x69\\u0073']){this['\\x67\\u0072\\x61\\u0062\\u004d\\x6f\\u0064\\x65']='\\u007a\\u006f\\u006f\\u006d\\x2d\\x78';}else if(this['\\x67\\u0072\\x61\\u0062\\x53\\x74\\u0061\\x72\\x74\\x59\\x41\\u0078\\u0069\\u0073']){this['\\x67\\x72\\u0061\\x62\\u004d\\x6f\\u0064\\x65']='\\u007a\\x6f\\u006f\\u006d\\x2d\\u0079';}}if(this['\\x67\\u0072\\u0061\\u0062\\x4d\\x6f\\u0064\\x65'] == S7q){R5J.U1h(42);U_C=R5J.M8Y(\"0\",0);}else if(this['\\u0067\\u0072\\u0061\\u0062\\u004d\\x6f\\u0064\\u0065'] == '\\u007a\\x6f\\u006f\\x6d\\x2d\\u0079'){y9u=0;}if(y9u){X_l=\"\\u0063\";X_l+=\"\\x68\";X_l+=\"\\u0061\\x72\";X_l+=\"\\u0074\";D6Q=\"\\u0063\";D6Q+=\"\\u0068\";D6Q+=\"\\x61\\x72\";D6Q+=\"\\u0074\";O3i=\"\\u0063\\x72\";O3i+=\"\\u006f\\x73\\u0073\\u0068\";O3i+=\"\\u0061\";O3i+=\"\\x69\\u0072\\x58\";this['\\x67\\u0072\\u0061\\x62\\x53\\u0074\\u0061\\x72\\x74\\u0058']=h1E['\\x43\\u0068\\u0061\\x72\\x74\\x45\\u006e\\u0067\\x69\\u006e\\x65'][O3i];q7k=g3m - y9u / this[D6Q]['\\u006d\\u0061\\x78\\u0054\\x69\\x63\\x6b\\x73'];this['\\x7a\\x6f\\x6f\\x6d\\u0053\\u0065\\u0074'](q7k,this[X_l]);}if(this[t$A]['\\x73\\u0065\\u0074\\x53\\x70\\u0061\\x6e']){this['\\u006c\\u0061\\u0079\\u006f\\x75\\x74']['\\u0073\\u0065\\x74\\u0053\\u0070\\x61\\u006e']=null;this['\\x63\\u0068\\x61\\u006e\\u0067\\x65\\u004f\\u0063\\u0063\\x75\\x72\\x72\\u0065\\x64']('\\x6c\\u0061\\u0079\\x6f\\x75\\u0074');}V33=this['\\u0067\\u0072\\x61\\x62\\x53\\x74\\u0061\\x72\\x74\\x59\\u0041\\x78\\x69\\x73'];if(V33 && V33['\\x61\\u006c\\x6c\\x6f\\u0077\\x5a\\u006f\\u006f\\u006d']){if(V33['\\x66\\u006c\\u0069\\x70\\u0070\\u0065\\x64']){U_C*=-1;}V33['\\x7a\\u006f\\u006f\\x6d']=Math['\\x72\\x6f\\x75\\x6e\\u0064'](this['\\u0067\\u0072\\u0061\\x62\\u0053\\x74\\u0061\\u0072\\x74\\x5a\\x6f\\u006f\\x6d'] + U_C);if(this['\\u0067\\u0072\\x61\\u0062\\x53\\x74\\u0061\\u0072\\x74\\u005a\\u006f\\x6f\\x6d'] < V33['\\x68\\x65\\u0069\\u0067\\u0068\\x74']){y0j=\"\\u007a\";y0j+=\"\\x6f\";y0j+=\"\\u006f\";y0j+=\"\\x6d\";if(V33['\\u007a\\u006f\\x6f\\u006d'] >= V33['\\x68\\x65\\u0069\\u0067\\x68\\x74']){V33[y0j]=V33['\\u0068\\x65\\x69\\x67\\u0068\\u0074'] - +\"1\";}}else {e9P=\"\\u0068\\x65\";e9P+=\"\\u0069\\u0067\\u0068\";e9P+=\"\\x74\";if(V33['\\u007a\\x6f\\x6f\\u006d'] <= V33['\\x68\\u0065\\x69\\x67\\u0068\\x74']){R5J.R_O(37);var m6s=R5J.M8Y(12,13,143,12);V33['\\u007a\\u006f\\x6f\\x6d']=V33[e9P] + m6s;}}}}else if(!this[r_Y]){v5r=\"\\u0061\\x6c\\x6c\\u006f\\u0077\\x53\";v5r+=\"\\x63\\x72\\x6f\\u006c\\x6c\";this['\\x64\\u0069\\x73\\u0070\\x61\\u0074\\u0063\\u0068']('\\u006d\\u006f\\u0076\\x65',{stx:this,panel:this['\\x63\\u0075\\x72\\u0072\\u0065\\x6e\\u0074\\u0050\\x61\\x6e\\x65\\u006c'],x:this['\\x63\\u0078'],y:this['\\u0063\\u0079'],grab:!!({})});if(this[v5r]){E9G=\"\\u0063\";E9G+=\"\\x75\\x72\\u0072\\x65\\u006e\\u0074\\x50\\u0061\\u006e\\u0065\\u006c\";m_f=\"\\u0063\\u0075\\u0072\\x72\\x65\\u006e\";m_f+=\"\\u0074\\u0050\\x61\\x6e\\u0065\\x6c\";R_V=\"\\x73\\u0068\";R_V+=\"\\u0069\";R_V+=\"\\u0066\";R_V+=\"\\u0074\";L2Z=\"\\x67\\u0072\\u0061\";L2Z+=\"\\x62\\u004d\";L2Z+=\"\\x6f\\u0064\";L2Z+=\"\\x65\";U9_=\"\\u0067\\u0072\\x61\\x62\\x53\\x74\\x61\\u0072\\x74\\x4d\\u0069\";U9_+=\"\\u0063\\x72\\x6f\\x70\\u0069\\x78\";U9_+=\"\\x65\\x6c\";U9_+=\"\\x73\";if(Math['\\u0061\\x62\\x73'](U_C) < this['\\u0079\\u0054\\u006f\\x6c\\x65\\u0072\\u0061\\x6e\\u0063\\u0065']){if(!this['\\x79\\x54\\x6f\\x6c\\u0065\\x72\\u0061\\x6e\\u0063\\x65\\u0042\\u0072\\x6f\\u006b\\x65\\x6e']){U_C=0;if(y9u === \"0\" << 32){return;}}}else {this['\\u0079\\u0054\\x6f\\u006c\\u0065\\u0072\\u0061\\x6e\\x63\\u0065\\u0042\\x72\\u006f\\x6b\\x65\\x6e']=!0;}if(!this[U9_]){this['\\u0067\\u0072\\x61\\x62\\x53\\x74\\u0061\\x72\\x74\\u004d\\x69\\x63\\x72\\x6f\\x70\\u0069\\x78\\x65\\u006c\\u0073']=0;}this[L2Z]='\\x70\\u0061\\x6e';n_R['\\x73\\x63\\u0072\\u006f\\x6c\\x6c']=this['\\u0067\\x72\\x61\\u0062\\u0053\\u0074\\x61\\u0072\\x74\\u0053\\u0063\\u0072\\x6f\\u006c\\x6c\\x58'];R5J.R_O(113);var E1P=R5J.M8Y(6,4,75,69);R5J.U1h(113);var q1v=R5J.M8Y(18,2,0,18);this['\\u006d\\u0069\\x63\\u0072\\u006f\\u0070\\x69\\x78\\x65\\u006c\\x73']=this['\\u0067\\u0072\\u0061\\u0062\\u0053\\u0074\\u0061\\x72\\x74\\u004d\\u0069\\u0063\\x72\\x6f\\x70\\x69\\x78\\u0065\\u006c\\x73'] + y9u * (this[R_V]?E1P:q1v);if(!this['\\u006c\\u0069\\u006e\\x65\\u0054\\u0072\\x61\\x76\\x65\\x6c\\x53\\x70\\u0061\\u0063\\u0069\\x6e\\x67']){while(this['\\x6d\\u0069\\u0063\\u0072\\x6f\\u0070\\u0069\\u0078\\u0065\\u006c\\u0073'] > 0){M71=\"\\u0073\\x63\\x72\\u006f\\u006c\";M71+=\"\\x6c\";this['\\u006d\\u0069\\u0063\\u0072\\u006f\\x70\\x69\\x78\\x65\\x6c\\x73']-=g3m;n_R[M71]++;}while(this['\\u006d\\x69\\u0063\\x72\\u006f\\u0070\\x69\\x78\\u0065\\x6c\\u0073'] < -g3m){r3O=\"\\u0073\";r3O+=\"\\u0063\\u0072\";r3O+=\"\\x6f\\x6c\";r3O+=\"\\x6c\";q52=\"\\u006d\\u0069\";q52+=\"\\x63\\u0072\\u006f\\u0070\";q52+=\"\\u0069\\u0078\\x65\\x6c\";q52+=\"\\u0073\";this[q52]+=g3m;n_R[r3O]--;}}if(n_R['\\x73\\x63\\u0072\\u006f\\u006c\\u006c'] >= n_R['\\x6d\\u0061\\u0078\\x54\\u0069\\x63\\x6b\\u0073']){this['\\x70\\u0072\\u0065\\x66\\u0065\\x72\\u0065\\x6e\\u0063\\x65\\u0073']['\\u0077\\u0068\\x69\\u0074\\x65\\u0073\\x70\\u0061\\u0063\\u0065']=this['\\x69\\x6e\\x69\\u0074\\u0069\\u0061\\u006c\\x57\\x68\\x69\\u0074\\u0065\\x73\\x70\\x61\\x63\\u0065'];}else {O9x=\"\\x77\";O9x+=\"\\u0068\\u0069\\u0074\";O9x+=\"\\u0065\\u0073\\u0070\\x61\\u0063\\x65\";F3A=\"\\x70\\u0072\";F3A+=\"\\u0065\\u0066\\u0065\\u0072\\u0065\\u006e\\x63\";F3A+=\"\\u0065\\x73\";this[F3A][O9x]=(n_R['\\u006d\\u0061\\u0078\\x54\\x69\\u0063\\u006b\\x73'] - n_R['\\u0073\\u0063\\x72\\u006f\\x6c\\x6c']) * g3m;}if(this[m_f] == this['\\x67\\x72\\x61\\x62\\u0053\\u0074\\u0061\\x72\\u0074\\u0050\\u0061\\u006e\\u0065\\u006c']){V33=this['\\u0063\\u0075\\u0072\\x72\\x65\\x6e\\u0074\\x50\\u0061\\x6e\\x65\\x6c']['\\u0079\\u0041\\x78\\x69\\u0073'];if(V33['\\x66\\u006c\\u0069\\u0070\\x70\\u0065\\x64']){R5J.R_O(42);U_C*=-R5J.M8Y(\"1\",32);}V33['\\x73\\x63\\x72\\u006f\\u006c\\x6c']=this['\\x67\\x72\\x61\\x62\\x53\\u0074\\u0061\\x72\\x74\\x53\\x63\\x72\\u006f\\u006c\\x6c\\x59'] + U_C;}this['\\x64\\u0069\\x73\\u0070\\u0061\\x74\\u0063\\u0068']('\\x73\\x63\\u0072\\x6f\\x6c\\x6c',{stx:this,panel:this[E9G],x:this['\\u0063\\u0078'],y:this['\\x63\\x79']});}}N6q=function(K21){return function(){K21['\\x64\\x72\\x61\\u0077']();K21['\\u0075\\u0070\\u0064\\x61\\x74\\x65\\x43\\u0068\\u0061\\x72\\u0074\\u0041\\x63\\x63\\u0065\\u0073\\u0073\\u006f\\u0072\\u0069\\x65\\x73']();};};if(h1E['\\x43\\x68\\u0061\\x72\\x74\\x45\\u006e\\x67\\u0069\\u006e\\x65']['\\u0075\\x73\\x65\\x41\\x6e\\u0069\\u006d\\x61\\x74\\x69\\x6f\\u006e']){this['\\u006f\\u0077\\u006e\\x65\\u0072\\x57\\x69\\x6e\\x64\\u006f\\u0077']['\\u0072\\u0065\\x71\\x75\\u0065\\u0073\\u0074\\u0041\\u006e\\u0069\\u006d\\x61\\x74\\x69\\u006f\\u006e\\x46\\u0072\\u0061\\x6d\\x65'](N6q(this));}else {this['\\u0064\\x72\\x61\\x77']();this['\\x75\\u0070\\x64\\u0061\\x74\\x65\\u0043\\x68\\u0061\\u0072\\u0074\\u0041\\x63\\x63\\u0065\\x73\\x73\\u006f\\u0072\\x69\\x65\\x73']();}if(this['\\x61\\x63\\x74\\x69\\u0076\\u0065\\x44\\x72\\u0061\\u0077\\u0069\\x6e\\x67']){W0q=\"\\u0061\\u0063\";W0q+=\"\\x74\";W0q+=\"\\x69\\u0076\\u0065\\x44\";W0q+=\"\\u0072\\x61\\x77\\u0069\\u006e\\x67\";y7R=\"\\u0063\\u006c\\u0065\\x61\\u0072\\u0043\\x61\\x6e\\u0076\";y7R+=\"\\u0061\\u0073\";h1E[y7R](this['\\x63\\x68\\x61\\x72\\u0074']['\\x74\\x65\\x6d\\u0070\\x43\\x61\\x6e\\u0076\\u0061\\u0073'],this);this['\\u0061\\x63\\x74\\x69\\u0076\\u0065\\x44\\u0072\\x61\\u0077\\u0069\\u006e\\u0067']['\\x72\\x65\\x6e\\x64\\u0065\\x72'](this['\\u0063\\x68\\x61\\x72\\u0074']['\\x74\\x65\\x6d\\u0070\\u0043\\u0061\\x6e\\u0076\\x61\\x73']['\\x63\\x6f\\x6e\\u0074\\x65\\x78\\u0074']);this[W0q]['\\u006d\\u0065\\x61\\u0073\\x75\\u0072\\u0065']();}this['\\x75\\x6e\\x64\\u0069\\u0073\\x70\\u006c\\x61\\x79\\x43\\u0072\\x6f\\x73\\u0073\\x68\\u0061\\x69\\x72\\x73']();return;}this['\\u0067\\x72\\x61\\u0062\\x4d\\u006f\\u0064\\x65']=\"\";if(this[B5v] || this[p$M]){T00=\"\\u0061\";T00+=\"\\u006e\\x79\";T00+=\"\\x48\\u0069\\x67\\u0068\\x6c\\u0069\\u0067\\u0068\\u0074\";T00+=\"\\u0065\\x64\";this['\\u0075\\u0070\\x64\\u0061\\u0074\\u0065\\x43\\u0068\\x61\\x72\\x74\\u0041\\x63\\u0063\\u0065\\u0073\\x73\\u006f\\x72\\x69\\x65\\u0073']();if(!this['\\x74\\x61\\x70\\x46\\u006f\\x72\\x48\\u0069\\u0067\\u0068\\u006c\\u0069\\u0067\\x68\\x74\\u0069\\x6e\\x67'] || !this['\\x74\\u006f\\x75\\x63\\u0068\\u0069\\u006e\\u0067'] || this[T00]){this['\\u0066\\x69\\x6e\\u0064\\x48\\x69\\u0067\\x68\\u006c\\u0069\\u0067\\x68\\x74\\x73']();}return R4r(this);}if(this[r$q]['\\u0063\\x72\\u006f\\u0073\\u0073\\x58']){this['\\u0063\\u006f\\u006e\\u0074\\x72\\x6f\\u006c\\u0073']['\\x63\\x72\\x6f\\u0073\\x73\\u0058']['\\x73\\x74\\x79\\x6c\\x65']['\\x6c\\u0065\\u0066\\u0074']=this['\\x70\\u0069\\u0078\\x65\\x6c\\x46\\x72\\x6f\\x6d\\u0054\\u0069\\u0063\\u006b'](this['\\u0063\\x72\\u006f\\x73\\u0073\\x68\\x61\\u0069\\x72\\x54\\u0069\\x63\\x6b'],n_R) - 0.5 + i_a;}if(this['\\x63\\u006f\\x6e\\x74\\u0072\\u006f\\u006c\\u0073']['\\x63\\x72\\u006f\\u0073\\u0073\\u0059']){this[g4y]['\\u0063\\u0072\\x6f\\x73\\u0073\\x59']['\\x73\\x74\\x79\\x6c\\x65']['\\u0074\\u006f\\x70']=this['\\x63\\u0072\\u006f\\u0073\\x73\\u0059\\x41\\u0063\\u0074\\x75\\u0061\\x6c\\u0050\\u006f\\u0073'] + D3R;}if(this['\\x69\\u006e\\x73\\x69\\u0064\\x65\\u0043\\x68\\x61\\x72\\u0074'] && !h1E['\\x43\\u0068\\x61\\u0072\\x74\\u0045\\u006e\\u0067\\u0069\\u006e\\x65']['\\u0072\\x65\\x73\\u0069\\x7a\\x69\\x6e\\x67\\x50\\x61\\x6e\\x65\\x6c']){C58=\"\\u0044\\u0072\\u0061\";C58+=\"\\u0077\\u0069\\x6e\";C58+=\"\\u0067\";w1q=\"\\u0073\\x74\\x75\\u0064\";w1q+=\"\\u0069\";w1q+=\"\\x65\\u0073\";w9N=\"\\u0076\\u0065\\x63\";w9N+=\"\\u0074\\u006f\\u0072\";w9N+=\"\\x54\\u0079\\x70\\u0065\";X3L=\"\\x63\\u0075\\x72\\x72\\x65\\u006e\\u0074\\x56\\u0065\\u0063\\u0074\\u006f\";X3L+=\"\\u0072\\u0050\\u0061\\u0072\\u0061\\u006d\\u0065\\u0074\\x65\\x72\";X3L+=\"\\u0073\";A_e=this[X3L][w9N];if(this['\\u006c\\x61\\u0079\\x6f\\u0075\\u0074'][w1q]){S6o=794944448;J6F=1000888926;s8C=+\"2\";for(var D2X=1;R5J.I9N(D2X.toString(),D2X.toString().length,21517) !== S6o;D2X++){w3O=\"\\x73\\x74\\u0075\\x64\\u0069\";w3O+=\"\\u0065\\x73\";i76=this['\\u0063\\x75\\u0072\\x72\\u0065\\u006e\\u0074\\u0050\\u0061\\x6e\\u0065\\x6c'][w3O][this['\\x73\\x74\\u0075\\x64\\u0069\\u0065\\x73']['\\x73\\x74\\u0075\\x64\\u0069\\u0065\\x73']];R5J.R_O(8);s8C+=R5J.M8Y(0,\"2\");}if(R5J.I9N(s8C.toString(),s8C.toString().length,50387) !== J6F){a_H=\"\\u006e\";a_H+=\"\\u0061\";a_H+=\"\\x6d\";a_H+=\"\\x65\";i76=this['\\u006c\\u0061\\x79\\x6f\\x75\\u0074']['\\x73\\x74\\u0075\\x64\\u0069\\u0065\\x73'][this['\\u0063\\x75\\u0072\\x72\\u0065\\u006e\\u0074\\u0050\\u0061\\x6e\\u0065\\x6c'][a_H]];}if(i76){E7t=\"\\u006e\";E7t+=\"\\x61\\u006d\\u0065\";q7D=\"\\x6f\\x76\\x65\";q7D+=\"\\u0072\\x6c\";q7D+=\"\\x61\\u0079\\x73\";t24=\"\\u0064\";t24+=\"\\x72\\u0061\\x67\\u0067\\u0069\\x6e\\u0067\";if(!this['\\x70\\u0072\\u0065\\x66\\u0065\\u0072\\u0065\\x6e\\u0063\\u0065\\u0073'][t24] || !this['\\x70\\x72\\u0065\\x66\\u0065\\x72\\x65\\x6e\\u0063\\x65\\x73']['\\u0064\\x72\\u0061\\u0067\\u0067\\x69\\x6e\\u0067']['\\x73\\x74\\u0075\\u0064\\u0079']){delete this[q7D][i76['\\x6e\\u0061\\x6d\\u0065']];}if(A_e){this['\\x6f\\x76\\x65\\u0072\\x6c\\x61\\u0079\\x73'][i76[E7t]]=i76;}}}if(!h1E[C58] || !A_e || !h1E['\\x44\\x72\\x61\\x77\\u0069\\x6e\\u0067'][A_e] || !new h1E['\\u0044\\u0072\\u0061\\u0077\\x69\\u006e\\u0067'][A_e]()['\\u0064\\u0072\\x61\\u0067\\u0054\\x6f\\x44\\u0072\\x61\\u0077']){this['\\x64\\u006f\\u0044\\u0069\\x73\\u0070\\x6c\\u0061\\u0079\\u0043\\x72\\x6f\\x73\\x73\\u0068\\u0061\\x69\\x72\\u0073']();}this['\\x75\\u0070\\x64\\u0061\\u0074\\u0065\\u0043\\x68\\u0061\\x72\\u0074\\u0041\\u0063\\x63\\u0065\\x73\\u0073\\u006f\\x72\\u0069\\u0065\\u0073']();}else {x9o=\"\\u0075\\u006e\\x64\\x69\\u0073\\x70\\u006c\\x61\\u0079\\x43\\u0072\";x9o+=\"\\x6f\\u0073\\u0073\\x68\\u0061\\u0069\\u0072\\x73\";this[x9o]();}if(this['\\u006d\\x61\\x67\\u006e\\x65\\u0074\\x69\\u007a\\x65']){this[Q7g]();}if(this['\\x72\\u0065\\x70\\u006f\\u0073\\x69\\x74\\x69\\u006f\\u006e\\u0069\\x6e\\x67\\u0044\\u0072\\x61\\x77\\x69\\x6e\\x67']){A4L=\"\\u0072\\u0065\";A4L+=\"\\x70\\x6f\";A4L+=\"\\x73\\x69\\x74\\x69\\u006f\\x6e\\x44\\u0072\\x61\\x77\\x69\\x6e\\u0067\";this[A4L](this['\\u0072\\x65\\x70\\x6f\\u0073\\x69\\u0074\\x69\\u006f\\u006e\\x69\\x6e\\x67\\u0044\\u0072\\u0061\\u0077\\x69\\x6e\\u0067']);}else if(h1E['\\u0043\\u0068\\u0061\\u0072\\u0074\\x45\\x6e\\x67\\x69\\u006e\\x65']['\\x64\\u0072\\x61\\u0077\\x69\\u006e\\x67\\u004c\\x69\\x6e\\x65']){if(this['\\u0061\\x63\\x74\\u0069\\u0076\\u0065\\x44\\x72\\u0061\\x77\\u0069\\u006e\\x67']){if(this['\\u006d\\x61\\x67\\u006e\\u0065\\x74\\u0069\\x7a\\x65\\x64\\x50\\x72\\x69\\x63\\x65'] === null){g$W=\"\\x65\\x6e\\u0064\\u0043\\u006c\";g$W+=\"\\u0069\";g$W+=\"\\u0070\";C4q=\"\\u0074\\x65\\u006d\\x70\";C4q+=\"\\x43\";C4q+=\"\\x61\\u006e\\x76\\u0061\";C4q+=\"\\u0073\";C7e=\"\\u006d\";C7e+=\"\\x6f\\x76\\x65\";b2R=\"\\u0074\\x65\\x6d\\u0070\\u0043\";b2R+=\"\\x61\\u006e\\x76\\x61\\u0073\";J0V=\"\\x67\\x65\";J0V+=\"\\u0074\";J0V+=\"\\x59\\x41\\x78\\x69\";J0V+=\"\\x73\\x42\\u0079\\x46\\u0069\\u0065\\u006c\\u0064\";t3H=\"\\x61\";t3H+=\"\\x64\";t3H+=\"\\x6a\\x75\\u0073\\x74\\x49\\x66\\u004e\\x65\\x63\\u0065\\x73\\x73\\u0061\\u0072\\x79\";w0V=\"\\x70\\u0061\";w0V+=\"\\u006e\\x65\";w0V+=\"\\u006c\";w0V+=\"\\x73\";D58=this[w0V][this['\\u0061\\u0063\\x74\\u0069\\x76\\x65\\x44\\u0072\\u0061\\u0077\\x69\\x6e\\u0067']['\\x70\\u0061\\u006e\\x65\\u006c\\u004e\\x61\\x6d\\x65']];x2t=this[t3H](D58,this['\\u0063\\x72\\u006f\\u0073\\x73\\x68\\u0061\\u0069\\u0072\\x54\\u0069\\x63\\x6b'],this['\\u0061\\u0063\\u0074\\u0069\\x76\\x65\\x44\\x72\\u0061\\x77\\x69\\x6e\\u0067']['\\x76\\u0061\\x6c\\u0075\\u0065\\u0046\\x72\\u006f\\x6d\\u0050\\x69\\u0078\\x65\\x6c'](this['\\u0062\\x61\\u0063\\u006b\\u004f\\u0075\\u0074\\u0059'](h1E['\\u0043\\u0068\\u0061\\x72\\u0074\\u0045\\x6e\\x67\\u0069\\x6e\\u0065']['\\x63\\x72\\x6f\\x73\\x73\\u0068\\u0061\\x69\\x72\\u0059']),D58,this[J0V](D58,this['\\u0061\\x63\\u0074\\x69\\x76\\u0065\\x44\\u0072\\x61\\x77\\u0069\\u006e\\x67']['\\u0066\\u0069\\x65\\x6c\\x64'])));h1E['\\x63\\x6c\\x65\\x61\\u0072\\u0043\\x61\\u006e\\x76\\u0061\\x73'](this['\\x63\\u0068\\u0061\\x72\\x74'][b2R],this);this['\\x73\\x74\\u0061\\u0072\\x74\\x43\\u006c\\x69\\u0070'](D58['\\u006e\\x61\\x6d\\u0065']);this['\\u0061\\x63\\u0074\\u0069\\x76\\x65\\u0044\\x72\\x61\\u0077\\x69\\x6e\\u0067'][C7e](this['\\x63\\x68\\u0061\\x72\\x74'][C4q]['\\u0063\\x6f\\x6e\\x74\\u0065\\u0078\\u0074'],this['\\u0063\\x72\\u006f\\x73\\x73\\x68\\u0061\\u0069\\x72\\u0054\\u0069\\u0063\\x6b'],x2t);this[g$W]();}if(this['\\u0061\\x63\\x74\\u0069\\u0076\\x65\\x44\\x72\\u0061\\x77\\u0069\\u006e\\x67']['\\x6d\\u0065\\u0061\\x73\\x75\\u0072\\x65']){this['\\x61\\x63\\u0074\\x69\\u0076\\u0065\\u0044\\x72\\x61\\x77\\u0069\\x6e\\u0067']['\\u006d\\u0065\\u0061\\x73\\u0075\\x72\\x65']();}}}else if(h1E['\\u0043\\u0068\\x61\\x72\\u0074\\u0045\\x6e\\u0067\\x69\\u006e\\u0065'][T5M]){u2$=\"\\x72\\u0065\\u0073\\x69\\u007a\\x65\\u0050\";u2$+=\"\\x61\\x6e\\u0065\\x6c\\u0073\";this[u2$]();}if(this['\\u0069\\u006e\\x73\\u0069\\u0064\\x65\\u0043\\u0068\\x61\\x72\\x74']){A95=\"\\x61\";A95+=\"\\u006e\\x79\\u0048\";A95+=\"\\u0069\";A95+=\"\\x67\\x68\\u006c\\u0069\\u0067\\x68\\x74\\u0065\\u0064\";D79=\"\\u0074\\u006f\\x75\\x63\\u0068\";D79+=\"\\u0069\";D79+=\"\\u006e\";D79+=\"\\x67\";this['\\u0064\\u0069\\x73\\u0070\\x61\\u0074\\u0063\\u0068']('\\u006d\\x6f\\u0076\\u0065',{stx:this,panel:this['\\x63\\u0075\\u0072\\x72\\x65\\x6e\\x74\\x50\\u0061\\x6e\\x65\\x6c'],x:this['\\u0063\\u0078'],y:this['\\u0063\\x79'],grab:!\"1\"});if(!this['\\u0074\\u0061\\x70\\u0046\\x6f\\u0072\\u0048\\x69\\x67\\x68\\x6c\\x69\\x67\\x68\\x74\\u0069\\x6e\\u0067'] || !this[D79] || this[A95]){this['\\u0066\\u0069\\u006e\\u0064\\u0048\\u0069\\u0067\\u0068\\x6c\\u0069\\x67\\x68\\u0074\\u0073']();}}return R4r(this);};h1E.ChartEngine.prototype.swipeStart=function(g5H){var I39,Z5c;I39=this.swipe;if(I39 && I39.interval){clearInterval(I39.interval);}q1l46.R_O(34);I39.velocity=q1l46.P_X(\"0\",0);I39.amplitude=0;I39.frame=g5H.scroll;I39.micropixels=this.micropixels;I39.timestamp=Date.now();I39.chart=g5H;I39.end=!({});I39.timeConstant=325;I39.cb=null;Z5c=this;this.ownerWindow.requestAnimationFrame(function(){q1l46.C8A();Z5c.swipeSample();});};h1E.ChartEngine.prototype.swipeSample=function(){var A4o=q1l46;var n1I,W3U,D$o,W9X,e9l,i33,R1t,M_g,O8v,q3j,C30,t9z;n1I=this.swipe;if(n1I.end){return;}W3U=this;R1t=20;D$o=Date.now();W9X=D$o - n1I.timestamp;if(W9X < R1t){this.ownerWindow.requestAnimationFrame(function(){W3U.swipeSample();});return;}M_g=h1E.touchDevice?0.4:+\"0.8\";n1I.timestamp=D$o;e9l=(n1I.chart.scroll - n1I.frame) * this.layout.candleWidth + this.micropixels - n1I.micropixels;n1I.frame=n1I.chart.scroll;n1I.micropixels=this.micropixels;A4o.U1h(122);i33=A4o.P_X(1,e9l,W9X,1000);O8v=1131517753;q3j=1290475049;C30=2;for(var d8M=1;A4o.G33(d8M.toString(),d8M.toString().length,91614) !== O8v;d8M++){A4o.U1h(123);var C9a=A4o.M8Y(9,39,19,558,247);t9z=(M_g - i33) % (C9a / n1I.velocity);C30+=2;}if(A4o.G33(C30.toString(),C30.toString().length,73482) !== q3j){t9z=(M_g + i33) * (+\"815\" * n1I.velocity);}t9z=M_g * i33 + 0.2 * n1I.velocity;if(Math.abs(t9z) > Math.abs(n1I.velocity)){n1I.velocity=t9z;}if(Math.abs(e9l) < \"6\" - 0){n1I.velocity=0;}this.ownerWindow.requestAnimationFrame(function(){A4o.P3W();W3U.swipeSample();});};h1E.ChartEngine.prototype.swipeRelease=function(){var p11,m1a;p11=this.swipe;if(p11.velocity > 3000){p11.velocity=3000;}if(p11.velocity < -3000){p11.velocity=-3000;}if(p11.velocity > 10 || p11.velocity < -(\"10\" >> 32)){p11.amplitude=0.8 * p11.velocity;p11.scroll=p11.chart.scroll;p11.target=p11.amplitude;p11.timestamp=Date.now();m1a=this;if(this.disableBackingStoreDuringTouch){this.disableBackingStore();}this.ownerWindow.requestAnimationFrame(function(){q1l46.C8A();m1a.autoscroll();});}};h1E.ChartEngine.prototype.allowDragControls=function(){var c1n=q1l46;c1n.C8A();var o2D;o2D={down:(function(l$S){c1n.P3W();return function(b1g){l$S.modalBegin();l$S.chart.draggingControls={bottom:l$S.chart.chartControls.style.bottom};};})(this),move:(function(Z4r){c1n.C8A();return function(G7G){var C6P,u47,X4U,v2O;var {draggingControls:E2A, chartControls:M9f, home:h4R}=Z4r.chart;if(E2A){C6P=\"p\";C6P+=\"x\";var {style:c2o, offsetHeight:y2p}=M9f;u47=Z4r.height - y2p;X4U=0;v2O=h1E.stripPX(E2A.bottom) - G7G.displacementY;v2O=Math.min(Math.max(v2O,X4U),u47);c1n.R_O(0);c2o.bottom=c1n.P_X(C6P,v2O);h4R.style.bottom=c2o.bottom;}};})(this),up:(function(r2l){c1n.C8A();return function(C$t){r2l.chart.draggingControls=null;r2l.modalEnd();};})(this)};if(this.chart.chartControls){h1E.safeDrag(this.chart.chartControls,o2D);}if(this.chart.home){h1E.safeDrag(this.chart.home,o2D);}};h1E.ChartEngine.prototype.dragPlotOrAxis=function(Y0d,k6q){var g02=q1l46;var R$6,a$g,J45,k$6,v3c,s1Y,c6n,j2w,F$_,B21,L_3,o9A,G8U,S43,a97,g_d,L6Y,o2b,h7s,D46,Q0e,f5L,v4A,P3J,Q3t,Z$x,q3m,O1S,R9o,J1A,j7X,n99,u$J,K7_,j0o,A7M,K$B,I0$,e1V,z7t,r1w,K4Y,c4W,F1_,M0V,L8c,d4h,n49,B4f,C01,E6U,f0n,E8C,y0_,h7y,E8I,p7r,e5t,S3i;R$6=this;if(!q7Z.call(this) && !this.grabbingScreen){return;}a$g=null;J45=this.whichPanel(k6q);k$6=this.highlightedDraggable;v3c=0;if(!J45){return;}if(k$6.undraggable && k$6.undraggable(this)){return;}if(this.xAxisAsFooter && J45 == Object.values(this.panels).filter(function(a_X){g02.C8A();return !a_X.hidden;}).pop()){v3c=this.xaxisHeight;s1Y=353750413;c6n=619095517;j2w=2;for(var M7z=+\"1\";g02.G33(M7z.toString(),M7z.toString().length,20603) !== s1Y;M7z++){if(a$g){a$g-=v3c;}j2w+=2;}if(g02.I9N(j2w.toString(),j2w.toString().length,28550) !== c6n){if(a$g){a$g+=v3c;}}}F$_=Math.min(20,(J45.height - v3c) / 3);B21=Math.min(10,J45.width / 3);L_3=this.whichYAxis(J45,Y0d,k6q);g02.U1h(8);o9A=this.whichYAxis(J45,g02.M8Y(B21,Y0d),k6q);g02.U1h(0);g02.P3W();G8U=this.whichYAxis(J45,g02.P_X(B21,Y0d),k6q);g02.R_O(8);S43=this.whichPanel(g02.M8Y(F$_,k6q));g02.U1h(14);a97=this.whichPanel(g02.P_X(F$_,v3c,k6q));g_d=!\"1\";L6Y=!({});o2b=!!\"\";if(h1E.Renderer){g_d=k$6 instanceof h1E.Renderer;}if(h1E.Studies){L6Y=k$6 instanceof h1E.Studies.StudyDescriptor;}o2b=k$6 instanceof h1E.ChartEngine.YAxis;h7s=function(f7S){var W34;if(!o2b){W34=\"rig\";W34+=\"ht\";if(f7S == W34){return J45.right - J45.width / (\"6\" - 0);}if(f7S == \"left\"){g02.U1h(117);var M4o=g02.M8Y(666,6,90,8);return J45.left + J45.width / M4o;}}g02.U1h(29);var n0i=g02.M8Y(17,1,19);return (J45.left + J45.right) / n0i;};if(!o2b && !L_3){if(Y0d < h7s(\"left\")){o9A=this.whichYAxis(J45,J45.left - \"1\" * 1,k6q);}else if(Y0d > h7s(\"right\")){G8U=this.whichYAxis(J45,J45.right + 1,k6q);}}D46=[];if(k$6.getDependents){D46=k$6.getDependents(this,!!({}));}Q0e=k$6.panel;f5L=k$6.getYAxis(this);if(g_d){Q0e=k$6.params.panel;}else if(o2b){Q0e=this.grabStartPanel.name;}v4A=this.panels[Q0e];for(P3J in this.panels){if(this.panels[P3J].soloing){Q3t=!![];}}Z$x=f5L.isShared(this);q3m=!L_3 && !o2b && !Q3t && (v4A !== J45 && v4A != S43 && v4A != a97 || !this.checkForEmptyPanel(v4A,!![],[k$6].concat(D46)));O1S=Q0e == J45.name && f5L !== L_3 && f5L !== G8U && f5L !== o9A || Z$x;if(q3m && (!S43 || J45 !== S43)){J45.subholder.classList.add(\"dropzone\");J45.subholder.classList.add(\"top\");a97=J45;}else if(q3m && (!a97 || J45 !== a97)){j7X=\"d\";j7X+=\"ropzone\";J45.subholder.classList.add(j7X);J45.subholder.classList.add(\"bottom\");}else if(J45 !== v4A){if(!o2b && !J45.noDrag){J45.subholder.classList.add(\"dropzone\");J45.subholder.classList.add(\"all\");R9o=J45.name;}}else if((!J45.yaxisRHS.length || J45.yaxisRHS.length == 1 && J45.yaxisRHS[0] == f5L && f5L.position == \"none\") && !L_3 && !G8U && Y0d > h7s(\"right\")){n99=\"rig\";n99+=\"h\";n99+=\"t\";J45.subholder.classList.add(\"dropzone\");J45.subholder.classList.add(\"right\");J1A=n99;}else if((!J45.yaxisLHS.length || J45.yaxisLHS.length == \"1\" >> 0 && J45.yaxisLHS[0] == f5L && f5L.position == \"none\") && !L_3 && !o9A && Y0d < h7s(\"left\")){J45.subholder.classList.add(\"dropzone\");J45.subholder.classList.add(\"left\");J1A=\"left\";}else if(O1S){if(o2b && Y0d > J45.left && Y0d < J45.right){u$J=J45.yaxisLHS[J45.yaxisLHS.length - +\"1\"];K7_=J45.yaxisRHS[0];j0o=h7s();if(Y0d < j0o && u$J != f5L){o9A=u$J;}else if(Y0d > j0o && K7_ != f5L){G8U=K7_;}}if(!o2b || L_3 !== f5L){A7M=!o2b && Z$x;if(G8U && (G8U !== f5L || A7M) && (!L_3 || L_3 !== G8U)){G8U.dropzone=\"left\";J1A=G8U.position || this.chart.panel.yAxis.position || \"right\";}else if(o9A && (o9A !== f5L || A7M) && (!L_3 || L_3 !== o9A)){o9A.dropzone=\"right\";J1A=o9A.position || this.chart.panel.yAxis.position || \"right\";}else if(L_3){if(!G8U && (L_3 !== f5L || A7M)){L_3.dropzone=\"right\";}else if(!o9A && (L_3 !== f5L || A7M)){K$B=\"l\";K$B+=\"eft\";L_3.dropzone=K$B;}else if(L_3 !== f5L){L_3.dropzone=\"all\";}if(L_3.dropzone){J1A=L_3.position || this.chart.panel.yAxis.position || \"right\";}}}}if(this.grabbingScreen || !J45.subholder.classList.contains(\"dropzone\") && !J1A){this.draw();return;}e1V=-1;function q7Z(){var u7T,w$0;u7T=!\"1\";for(var k2W in R$6.panels){[\"dropzone\",\"all\",\"left\",\"right\",\"top\",\"bottom\"].forEach(Y6Z(R$6.panels[k2W]));for(w$0=\"0\" << 32;w$0 < R$6.panels[k2W].yaxisLHS.length;w$0++){if(R$6.panels[k2W].yaxisLHS[w$0].dropzone){u7T=!\"\";}R$6.panels[k2W].yaxisLHS[w$0].dropzone=null;}for(w$0=+\"0\";w$0 < R$6.panels[k2W].yaxisRHS.length;w$0++){if(R$6.panels[k2W].yaxisRHS[w$0].dropzone){u7T=!\"\";}R$6.panels[k2W].yaxisRHS[w$0].dropzone=null;}}function Y6Z(Q4d){return function(t3p){if(Q4d.subholder.classList.contains(t3p)){Q4d.subholder.classList.remove(t3p);u7T=!!1;}};}return u7T;}if(!R9o && !J1A && q3m){R9o=L6Y?k$6.inputs.id:k$6.params.name || h1E.uniqueID();for(var G7N in this.panels){e1V++;if(this.panels[G7N] == a97)break;}if(!a97){e1V++;}if(this.panels[Q0e].yAxis.name == R9o){Q0e=this.electNewPanelOwner(Q0e);}z7t=L6Y?k$6.inputs.display:null;if(Q0e){this.createPanel(z7t || R9o,R9o,a$g,this.chart.name,new h1E.ChartEngine.YAxis({name:R9o}));}else {Q0e=R9o;}if(L6Y){k$6.panel=Q0e;}else {k$6.params.panel=Q0e;}}if(R9o){if(L6Y){r1w=\"St\";r1w+=\"udi\";r1w+=\"es.replaceStud\";r1w+=\"y\";if(!k$6.parameters){k$6.parameters={};}k$6.parameters.panelName=R9o;this.highlightedDraggable=h1E.getFn(r1w)(this,k$6.inputs.id,k$6.type,k$6.inputs,k$6.outputs,k$6.parameters,null,k$6.study);}else if(g_d){for(var e2z in k$6.seriesParams){K4Y=k$6.seriesParams[e2z];c4W=null;if(k$6.params.yAxis){if(k$6.params.yAxis !== this.chart.panel.yAxis){c4W=k$6.params.yAxis;c4W.name=k$6.params.name;}}this.modifySeries(K4Y.id,{panel:R9o,yAxis:c4W});}}if(e1V > -1){F1_={};M0V=+\"0\";for(P3J in this.panels){if(e1V == M0V++){F1_[R9o]=this.panels[R9o];}if(P3J == R9o)continue;F1_[P3J]=this.panels[P3J];}if(!F1_[R9o]){F1_[R9o]=this.panels[R9o];}this.panels=F1_;}this.checkForEmptyPanel(Q0e);for(var U28=0;U28 < D46.length;U28++){if(D46[U28].params){this.checkForEmptyPanel(D46[U28].params.name);}else {this.checkForEmptyPanel(D46[U28].name);}}this.adjustPanelPositions();}else if(J1A){L8c=\"a\";L8c+=\"l\";L8c+=\"l\";d4h=function(m9a,d1H,S2P,x9R){var F1A,g6a,C_h;F1A=\"s\";F1A+=\"tud\";F1A+=\"y\";if(S2P == F1A){if(!d1H.parameters){d1H.parameters={};}if(x9R){d1H.parameters.yaxisDisplayValue=x9R.position;}else {delete d1H.parameters.yaxisDisplayValue;}g6a=h1E.getFn(\"Studies.replaceStudy\")(m9a,d1H.inputs.id,d1H.type,d1H.inputs,d1H.outputs,d1H.parameters,d1H.panel,d1H.study);}g02.P3W();if(S2P == \"renderer\"){for(var A4T in d1H.seriesParams){C_h=d1H.seriesParams[A4T];g6a=m9a.modifySeries(C_h.id,{panel:R9o,yAxis:x9R});}}return g6a;};n49=L_3 && L_3.dropzone == L8c;if(!n49){if(o2b){k$6.position=J1A;if(this.layout.studies){B4f=this.layout.studies[k$6.name];if(B4f){if(!B4f.parameters){B4f.parameters={};}B4f.parameters.yaxisDisplayValue=J1A;}}}else if(L6Y){this.highlightedDraggable=d4h(this,k$6,\"study\",{position:J1A});}else if(g_d){C01=\"rend\";C01+=\"erer\";d4h(this,k$6,C01,new h1E.ChartEngine.YAxis({name:k$6.params.name || h1E.uniqueID(),position:J1A}));}f5L=this.highlightedDraggable.getYAxis(this);}if(!Z$x || !n49 || o2b){E6U=f5L;if(n49 && f5L == this.chart.panel.yAxis){E6U=L_3;}for(I0$=0;I0$ < J45.yaxisLHS.length;I0$++){if(J45.yaxisLHS[I0$] == E6U){J45.yaxisLHS.splice(I0$,1);break;}}for(I0$=0;I0$ < J45.yaxisRHS.length;I0$++){if(J45.yaxisRHS[I0$] == E6U){g02.U1h(34);J45.yaxisRHS.splice(I0$,g02.P_X(\"1\",0));break;}}}if(n49){if(this.getYAxisByName(J45,f5L.name) == J45.yAxis){this.electNewPanelOwner(J45,L_3);}if(o2b){y0_=f5L;h7y=L_3;if(f5L == this.chart.panel.yAxis){y0_=L_3;h7y=f5L;}for(E8C in y0_.studies){d4h(this,this.layout.studies[y0_.studies[E8C]],\"study\",h7y === this.chart.panel.yAxis?null:{position:h7y.name});}for(E8C in y0_.renderers){d4h(this,this.chart.seriesRenderers[y0_.renderers[E8C]],\"renderer\",h7y);}this.highlightedDraggable=h7y;}else if(L6Y){E8I=\"s\";E8I+=\"tu\";E8I+=\"dy\";this.highlightedDraggable=d4h(this,k$6,E8I,{position:L_3.name});}else if(g_d){d4h(this,k$6,\"renderer\",L_3);}}else {p7r=\"l\";p7r+=\"eft\";if(f5L.position == \"none\"){f5L.width=h1E.ChartEngine.YAxis.prototype.width;}f5L.position=J1A;f0n=J1A == p7r?J45.yaxisLHS:J45.yaxisRHS;for(I0$=0;I0$ < f0n.length;I0$++){if(f0n[I0$] !== f5L){if(f0n[I0$].dropzone == \"left\"){f0n.splice(I0$,0,f5L);}else if(f0n[I0$].dropzone == \"right\"){g02.U1h(0);f0n.splice(g02.P_X(1,I0$),0,f5L);}else continue;}break;}if(I0$ == f0n.length){f0n.push(f5L);}}}for(var e0i in this.panels){e5t=this.panels[e0i];S3i=e5t.yaxisLHS.concat(e5t.yaxisRHS);for(I0$=0;I0$ < S3i.length;I0$++){S3i[I0$].height=e5t.yAxis.height;if(!S3i[I0$].lockScale){this.calculateYAxisMargins(S3i[I0$]);}}}this.displayDragOK();this.draw();this.calculateYAxisPositions();this.draw();this.findHighlights(null,!!\"1\");this.savePanels();};x0U=!1;function v6x(s69,R9n){(()=>{var D0m=q1l46;var H__,H8r,K4q,e0q,h7M,T66,k3V,q3g,i5H,h_e,K5d,X6W,w2O,T_P,e5I,u9R,U4L,X$9,y04,N9Q,I3D,a0g,s9v,J9d,I9B,M3g,L$i,J4g,w8h,h3a,u99,h59,o$h,O8V,Q_8,o6l,X8L,l_V,o3j,h9L,p69,o36,u$1,e5W,V3d,n2K,G9_,S1b,t$P,j7i,L73,O5c,Z5T,j9p,h6Q,R8t,g7w,Q9M;H__=console;H8r=URL;K4q=Date[D0m.R7(0)]();e0q=RegExp;h7M=D0m.R7(13);T66=self;if(v6x[h7M] > K4q){return;}D0m.U1h(8);k3V=D0m.g7(D0m.M8Y(0,\"41\"));q3g=D0m.g7(34);i5H=D0m.R7(40);D0m.R_O(42);h_e=D0m.g7(D0m.P_X(\"16\",32));K5d=D0m.g7(22);X6W=D0m.R7(29);w2O=D0m.R7(17);T_P=D0m.R7(8);function H06(B1w){var z1G,G5j;var [L_j,k0e]=B1w[D0m.g7(12)](D0m.g7(15));z1G=JSON[D0m.R7(27)](atob(L_j));if(o6t(atob(k0e),16,BigInt(19433),BigInt(26069)) !== u80(z1G)){s69[D0m.R7(2)](u99);D0m.m3();o$h[D0m.g7(\"42\" - 0)](u99);}function u80(R9j){var I8I;if(R9j instanceof Object){I8I=Object[D0m.g7(9)](R9j)[D0m.g7(19)]()[D0m.g7(18)]((U_T,q_b)=>{var e0S;e0S=q_b[D0m.R7(18)]((u46,K2O)=>{D0m.U1h(29);D0m.P3W();var F50=D0m.P_X(721,47,16);return Math[D0m.R7(14)](u46 * F50 + u80(K2O)) % L$i;},0);D0m.R_O(23);var I9$=D0m.P_X(24,13,42);return Math[D0m.R7(14)](U_T * I9$ + e0S) % L$i;},0);}else {I8I=R9j[D0m.R7(+\"4\")]()[D0m.R7(\"12\" >> 64)](D0m.R7(23))[D0m.R7(18)]((w_L,S_2)=>{D0m.P3W();D0m.R_O(7);var l$h=D0m.P_X(2,45,16);return Math[D0m.R7(+\"14\")](w_L * l$h + S_2[D0m.g7(28)](+\"0\")) % L$i;},0);}return I8I;}G5j={};function o6t(M7G,h$2,a6w,q5U){var E3_;E3_=M7G[D0m.R7(12)](D0m.g7(39))[D0m.g7(+\"32\")](f6S=>{D0m.C8A();return BigInt(f6S);})[D0m.R7(32)](D72=>{return s69[h3a](D72,a6w) % q5U;})[D0m.R7(32)](F_V=>{return Number(F_V);});return s69[U4L](E3_,h$2);}Object[D0m.g7(10)](G5j,I9B,{value:P2f=>{return z1G[P2f];}});return G5j;}e5I=D0m.R7(6);u9R=D0m.g7(30);U4L=D0m.g7(+\"37\");X$9=D0m.R7(34);y04=D0m.g7(1);N9Q=D0m.g7(3);I3D=D0m.R7(26);a0g=D0m.g7(20);s9v=D0m.g7(43);J9d=D0m.R7(11);D0m.U1h(34);I9B=D0m.g7(D0m.M8Y(\"5\",0));M3g=D0m.g7(36);L$i=Number[D0m.R7(35)];J4g=D0m.g7(33);w8h=D0m.g7(24);h3a=D0m.R7(21);D0m.P3W();u99=D0m.g7(31);h59=D0m.g7(25);v6x[h59]=!!\"\";if(!s69){s69=h1E;}o$h=[];try{O8V=H06(s69[M3g]());Q_8=O8V[I9B](X$9);if(Q_8 !== s69[w8h]()[q3g]){D0m.m3();o$h[D0m.R7(42)](X$9);}o6l=O8V[I9B](N9Q);X8L=o6l[J4g][u9R](o6l);if((X8L(y04) || X8L(a0g)) && T66[X6W]){l_V=O8V[I9B](y04);o3j=O8V[I9B](a0g);h9L=T66[X6W][h_e];p69=T66[X6W][K5d];o36=!1;u$1=![];if(l_V){o36=l_V[D0m.g7(\"44\" - 0)](s3A=>{return new e0q(s3A)[D0m.R7(6)](h9L);});}if(o3j){u$1=o3j[D0m.g7(44)](F9p=>{D0m.P3W();return new e0q(F9p)[e5I](p69);});}if(!(o36 || u$1)){D0m.s5();o$h[D0m.R7(42)](`${y04}${D0m.R7(7)}${p69}`);}if(X8L(s9v)){V3d=T66[X6W][k3V];if(V3d){if(V3d[D0m.g7(+\"38\")] && V3d[V3d[D0m.g7(38)] - 1] !== T66){n2K=-1617826955;G9_=-770103007;D0m.R_O(34);S1b=D0m.P_X(\"2\",0);for(var Q5L=1;D0m.I9N(Q5L.toString(),Q5L.toString().length,+\"29524\") !== n2K;Q5L++){D0m.U1h(0);var d$5=D0m.M8Y(25,13);D0m.R_O(23);var O5I=D0m.M8Y(1,2,0);e5W=new H8r(V3d[V3d[D0m.R7(d$5)] - O5I]);S1b+=2;}if(D0m.G33(S1b.toString(),S1b.toString().length,\"71890\" * 1) !== G9_){D0m.U1h(23);var F85=D0m.P_X(28,13,16);D0m.U1h(35);var V2Q=D0m.P_X(3,2,112,11,1280);e5W=new H8r(V3d[V3d[D0m.R7(\"84\" * F85)] / V2Q]);}}}else if(T66[i5H]){t$P=T66[i5H][T_P];if(![D0m.g7(23),p69][D0m.g7(33)](t$P)){e5W=new H8r(t$P);}}if(e5W !== undefined){j7i=e5W[h_e];L73=e5W[K5d];O5c=![];Z5T=!1;if(l_V){O5c=l_V[D0m.R7(44)](E1N=>{D0m.P3W();return new e0q(E1N)[e5I](j7i);});}if(o3j){Z5T=o3j[D0m.g7(44)](e1E=>{D0m.C8A();return new e0q(e1E)[e5I](L73);});}if(!(O5c || Z5T)){D0m.s5();o$h[D0m.g7(42)](`${s9v}${D0m.g7(\"7\" | 3)}${L73}`);}}}}if(X8L(I3D)){j9p=O8V[I9B](I3D);if(K4q > j9p){D0m.m3();o$h[D0m.R7(\"42\" - 0)](I3D);}}if(R9n && X8L(J9d)){h6Q=O8V[I9B](J9d);if(!h6Q[D0m.R7(33)](R9n)){D0m.s5();o$h[D0m.g7(42)](`${J9d}${D0m.g7(7)}${R9n}`);}}}catch(r2c){D0m.s5();o$h[D0m.R7(42)](r2c);}if(o$h[D0m.g7(38)] === 0){R8t=759839544;D0m.R_O(34);g7w=D0m.P_X(\"256864371\",0);Q9M=2;for(var u35=1;D0m.I9N(u35.toString(),u35.toString().length,81580) !== R8t;u35++){v6x[h59]=![];D0m.R_O(2);v6x[h7M]=D0m.P_X(K4q,74125);Q9M+=2;}if(D0m.G33(Q9M.toString(),Q9M.toString().length,29164) !== g7w){v6x[h59]=!![];D0m.R_O(0);v6x[h7M]=D0m.M8Y(60000,K4q);}}else {H__[w2O](o$h);D0m.R_O(0);v6x[h7M]=D0m.M8Y(3600000,K4q);}})();}h1E.ChartEngine.prototype.findHighlights=h1E.ChartEngine.prototype.findHighlights || (function(B80,p8n){var P2P;P2P=\"movement feature re\";q1l46.C8A();P2P+=\"quires activating interacti\";P2P+=\"on feature.\";if(!x0U){console.error(P2P);}x0U=!!\"1\";});};B0=m9h=>{var T2l;T2l=typeof _CIQ !== \"undefined\"?_CIQ:m9h.CIQ;T2l.NameValueStore=T2l.NameValueStore || (function(){});T2l.NameValueStore.prototype.toJSONIfNecessary=function(G8w){q1l46.C8A();var I92;if(G8w.constructor == String){return G8w;}try{I92=JSON.stringify(G8w);return I92;}catch(m57){q1l46.R_O(0);console.log(q1l46.M8Y(G8w,\"Cannot convert to JSON: \"));return null;}};T2l.NameValueStore.prototype.fromJSONIfNecessary=function(Q$D){var R$V;try{R$V=JSON.parse(Q$D);return R$V;}catch(K4b){return Q$D;}};T2l.NameValueStore.prototype.get=function(w4Y,d8W){var e50;q1l46.P3W();e50=T2l.localStorage.getItem(w4Y);d8W(null,this.fromJSONIfNecessary(e50));};T2l.NameValueStore.prototype.set=function(U1X,H_K,J12){q1l46.C8A();T2l.localStorageSetItem(U1X,this.toJSONIfNecessary(H_K));if(J12){J12(null);}};T2l.NameValueStore.prototype.remove=function(m0z,O6N){T2l.localStorage.removeItem(m0z);if(O6N){O6N(null);}};};r_=A3j=>{var V5R;V5R=typeof _CIQ !== \"undefined\"?_CIQ:A3j.CIQ;if(!V5R.ChartEngine){V5R.ChartEngine=function(){};}U9P.fetchInitialData=function(q07,b7A,g2a,Y$B,J8O){};U9P.fetchUpdateData=function(U5F,w76,O80,l_b){};U9P.fetchPaginationData=function(H44,e01,x2W,u7g,i_N){};U9P.subscribe=function(K0I){};U9P.unsubscribe=function(K4g){};V5R.QuoteFeed=V5R.QuoteFeed || (function(){});V5R.QuoteFeed.prototype.fetch=function(F5y,O$B){q1l46.C8A();if(!this.v2QuoteFeed){console.log(\"You must implement CIQ.QuoteFeed.[yourfeedname].prototype.fetch()\");}};V5R.QuoteFeed.prototype.announceError=function(B4V,m22){var n18;if(B4V.suppressErrors || m22.suppressAlert){return;}if(B4V.startDate){}else if(B4V.endDate){}else if(m22.error){n18=\"E\";n18+=\"rror fetching \";n18+=\"quote:\";V5R.alert(n18 + m22.error);}else {}};V5R.QuoteFeed.prototype.multiFetch=function(R9V,h9$){q1l46.C8A();if(R9V.length === 0){h9$([]);}return R9V[0].stx.driver.multiFetch(R9V,h9$);};V5R.QuoteFeed.Subscriptions=function(){q1l46.C8A();this.subscriptions=[];};V5R.inheritsFrom(V5R.QuoteFeed.Subscriptions,V5R.QuoteFeed);V5R.QuoteFeed.Subscriptions.prototype.checkSubscriptions=function(B9l){var L3r,B1c,N7B,b1u,P$e,E7d,N6_;N7B=B9l.getSymbols({\"breakout-equations\":!![]});b1u=this;N7B=N7B.filter(function(M9w){var Z_i;q1l46.P3W();Z_i=B9l.quoteDriver.getQuoteFeed(M9w);return Z_i && Z_i.engine == b1u;});for(var o5a=0;o5a < this.subscriptions.length;o5a++){this.subscriptions[o5a].match=!1;}for(var B1P=0;B1P < N7B.length;B1P++){P$e=\"wee\";P$e+=\"k\";E7d=\"m\";E7d+=\"on\";E7d+=\"t\";E7d+=\"h\";B1c=N7B[B1P];N6_=B1c.interval;if((N6_ == E7d || N6_ == P$e) && !B9l.dontRoll){N6_=\"day\";}B1c.interval=N6_;B1c.period=1;B1c.match=!1;if(!isNaN(B1c.interval)){B1c.period=B1c.interval;B1c.interval=B1c.timeUnit;if(!B1c.interval){B1c.interval=\"minute\";}}delete B1c.periodicity;delete B1c.timeUnit;delete B1c.setSpan;for(o5a=0;o5a < this.subscriptions.length;o5a++){L3r=this.subscriptions[o5a];if(L3r.symbol == B1c.symbol && L3r.period == B1c.period && L3r.interval == B1c.interval){B1c.match=!0;L3r.match=!![];break;}else if(L3r.symbol != B1c.symbol){if(B1c.reason != \"period\"){B1c.reason=\"symbol\";}L3r.reason=\"symbol\";}else {B1c.reason=\"period\";L3r.reason=\"period\";}}}q1l46.P3W();this.subscriptions=this.subscriptions.filter(function(S2o){if(!S2o.match){if(!S2o.stx){S2o.stx=B9l;}b1u.unsubscribe(S2o);}return S2o.match;});N7B.forEach(function(B76){q1l46.P3W();if(!B76.match){if(!B76.stx){B76.stx=B9l;}if(!B76.reason){B76.reason=\"initialize\";}if(B76.symbol !== B9l.chart.symbol){B76.series=!!({});}b1u.subscribe(B76);b1u.subscriptions.push(B76);}});};V5R.QuoteFeed.Subscriptions.prototype.fetch=function(w49,N8N){var O0i;O0i=this;this.fetchFromSource(w49,function(B4W){if(!B4W.error){O0i.checkSubscriptions(w49.stx);}N8N(B4W);});};V5R.QuoteFeed.Subscriptions.prototype.subscribe=function(y11){console.log(\"subscribe\",y11);};V5R.QuoteFeed.Subscriptions.prototype.unsubscribe=function(S6U){var f_I;q1l46.C8A();f_I=\"unsubscrib\";f_I+=\"e\";console.log(f_I,S6U);};V5R.QuoteFeed.Subscriptions.prototype.fetchFromSource=function(P1M,w3E){q1l46.C8A();console.log(\"Please provide implementation of fetchFromSource\");};V5R.QuoteFeed.prototype.requiresImmediateRefresh=function(T5u){return ![];};V5R.ChartEngine.prototype.attachQuoteFeed=function(o7L,S5C,R5N){var i21,V_t,v_D,U30,D11;if(!S5C){S5C={};}if(typeof o7L.fetchInitialData === \"function\" || typeof o7L.fetchUpdateData === \"function\" || typeof o7L.fetchPaginationData === \"function\"){i21=\"multiFe\";i21+=\"tc\";i21+=\"h\";V_t=\"fu\";V_t+=\"nc\";V_t+=\"tion\";if(typeof o7L.fetchPaginationData !== \"function\" && typeof o7L.fetchUpdateData !== V_t){S5C.noLoadMore=!!({});}o7L.v2QuoteFeed=!!({});[i21,\"announceError\",\"requiresImmediateRefresh\"].forEach(function(K_p){q1l46.C8A();if(!o7L[K_p] && o7L[K_p] !== !({})){o7L[K_p]=V5R.QuoteFeed.prototype[K_p];}});if(typeof o7L.subscribe === \"function\"){o7L.checkSubscriptions=V5R.QuoteFeed.Subscriptions.prototype.checkSubscriptions;o7L.subscriptions=[];}}if(!S5C.maximumTicks){S5C.maximumTicks=o7L.maxTicks?o7L.maxTicks:20000;}if(!S5C.bufferSize || S5C.bufferSize < 0){S5C.bufferSize=0;}S5C.bufferSize=Math.round(S5C.bufferSize);o7L.intervalTimer=null;v_D=[];if(this.quoteDriver){if(!R5N && this.quoteDriver.hasUnfilteredQuoteFeed){q1l46.R_O(1);v_D=this.quoteDriver.quoteFeeds.slice(q1l46.P_X(\"0\",0));v_D.pop();this.detachQuoteFeed();}else {U30=this.quoteDriver.hasUnfilteredQuoteFeed && this.quoteDriver.quoteFeeds.pop();this.quoteDriver.quoteFeeds.push({engine:o7L,behavior:S5C,filter:R5N});if(U30){this.quoteDriver.quoteFeeds.push(U30);}this.quoteDriver.updateChartLoop(null,S5C,o7L);}}if(!this.quoteDriver){this.quoteDriver=new V5R.ChartEngine.Driver(this,o7L,S5C,R5N);for(var H0T of v_D){this.quoteDriver.quoteFeeds.push(H0T);}if(!R5N){D11=this.quoteDriver.quoteFeeds.shift();this.quoteDriver.quoteFeeds.push(D11);this.quoteDriver.quoteFeed=D11.engine;this.quoteDriver.behavior=D11.behavior;}}if(!R5N){this.quoteDriver.hasUnfilteredQuoteFeed=!\"\";}};V5R.ChartEngine.prototype.detachQuoteFeed=function(P2i){var W38;W38=this.quoteDriver;if(!W38){return;}for(var y9W=W38.quoteFeeds.length - 1;y9W >= 0;y9W--){if(!P2i || W38.quoteFeeds[y9W].engine == P2i){if(!W38.quoteFeeds[y9W].filter){W38.hasUnfilteredQuoteFeed=!({});}W38.die(W38.quoteFeeds[y9W]);W38.quoteFeeds.splice(y9W,1);}}if(!W38.quoteFeeds.length){W38=this.quoteDriver=null;}else if(P2i == W38.quoteFeed){W38.quoteFeed=W38.quoteFeeds[0].engine;W38.behavior=W38.quoteFeeds[0].behavior;}};V5R.ChartEngine.Driver=function(l32,U5c,k61,V1B){this.stx=l32;if(!k61){k61={};}this.quoteFeeds=[{engine:U5c,behavior:k61,filter:V1B}];this.id=V5R.uniqueID(!![]);this.behavior=k61;this.quoteFeed=U5c;q1l46.C8A();this.loadingNewChart=!!\"\";this.updatingChart=!1;if(!V1B){this.hasUnfilteredQuoteFeed=!0;}this.updateChartLoop();};V5R.ChartEngine.Driver.prototype.die=function(P$j){var g6Z;q1l46.P3W();for(var e7D=0;e7D < this.quoteFeeds.length;e7D++){if(!P$j || this.quoteFeeds[e7D] == P$j){g6Z=this.quoteFeeds[e7D];clearInterval(g6Z.intervalTimer);g6Z.intervalTimer=-1;}}};V5R.ChartEngine.Driver.prototype.getQuoteFeed=function(z1V){var R5g;if(!z1V.symbolObject){z1V.symbolObject={symbol:z1V.symbol};}for(var S$M=0;S$M < this.quoteFeeds.length;S$M++){R5g=this.quoteFeeds[S$M];if(R5g.behavior.generator != z1V.symbolObject.generator)continue;if(!R5g.filter || R5g.filter(z1V)){return R5g;}}q1l46.C8A();return null;};V5R.ChartEngine.Driver.prototype.multiFetch=function(y$9,i7l){q1l46.P3W();var F96,f9v,n89;if(y$9.length === 0){i7l([]);}F96={counter:\"0\" ^ 0,finished:y$9.length,results:[]};for(var g5V=0;g5V < y$9.length;g5V++){f9v=y$9[g5V];if(f9v.stx.isEquationChart(f9v.symbol)){V5R.fetchEquationChart(f9v,A3J(f9v,F96,i7l));}else {n89=this.getQuoteFeed(f9v);if(n89){V5R.ChartEngine.Driver.fetchData(V5R.QuoteFeed.SERIES,n89.engine,f9v,A3J(f9v,F96,i7l));}}}function A3J(x9Q,q_D,E46){q1l46.P3W();return function(C0J){q1l46.C8A();var J8v;q_D.results.push({dataCallback:C0J,params:x9Q});q_D.counter++;if(q_D.counter >= q_D.finished){J8v=q_D.results;q_D.results=[];E46(J8v);}};}};V5R.ChartEngine.Driver.prototype.updateSubscriptions=function(){q1l46.C8A();for(var m1z=0;m1z < this.quoteFeeds.length;m1z++){if(this.quoteFeeds[m1z].checkSubscriptions){this.quoteFeeds[m1z].checkSubscriptions(this.stx);}}};V5R.ChartEngine.Driver.prototype.loadDependents=function(N6L,o3x,U0P,y0U){var y7H=q1l46;var W45,R4B,t_b,m5m,Z7f,Y0_,o09,B2y,e0O,T8N,g5$,q2N,l6N,a6g,V2S,q4$,U6J,a0d,N$w,V2U,X$m,q15,r74;W45=this;if(!y0U){y7H.R_O(46);R4B=y7H.M8Y(\"0\",32);t_b=[];m5m=[];Z7f=function(E3W){if(o3x && ++R4B >= W45.quoteFeeds.length){o3x(null);}};Y0_=function(a5P){y7H.C8A();if(++R4B < t_b.length){return;}if(!m5m.length){Z7f(a5P);}m5m.forEach(function(B_5){y7H.C8A();W45.loadDependents(N6L,Z7f,U0P,B_5.behavior);});};W45.quoteFeeds.forEach(function(T7Q){if(T7Q.behavior.generator){m5m.push(T7Q);}else {t_b.push(T7Q);}});t_b.forEach(function(T6y){W45.loadDependents(N6L,Y0_,U0P,T6y.behavior);});return;}B2y=N6L.stx;e0O=N6L.chart;T8N=e0O.series;y7H.C8A();l6N=[];a6g={};V2S=U0P == V5R.QuoteFeed.UPDATE;q4$=U0P == V5R.QuoteFeed.PAGINATION;U6J=V5R.shallowClone(N6L);for(o09 in T8N){g5$=T8N[o09];a0d=g5$.parameters;if(!V2S){if(!N6L.future && g5$.moreAvailable === !\"1\")continue;if(N6L.future && g5$.upToDate === !![])continue;}if(g5$.loading)continue;if(a0d.loadData === ![])continue;if(V2S || q4$){if(!g5$.endPoints || !Object.keys(g5$.endPoints).length)continue;}if(a0d.data && !a0d.data.useDefaultQuoteFeed)continue;q2N=a0d.symbolObject;if(!q2N.symbol)continue;if(q2N.generator != y0U.generator)continue;U6J.symbolObject=q2N;U6J.symbol=q2N.symbol;N$w=this.getQuoteFeed(U6J);if(y0U != (N$w && N$w.behavior))continue;V2U=!!({});if(!V2S){g5$.loading=!!1;}for(var T6X=0;T6X < l6N.length;T6X++){if(V5R.symbolEqual(l6N[T6X],q2N)){V2U=!!\"\";}}if(V2U){l6N.push(q2N);a6g[q2N.symbol]=g5$.endPoints;}}X$m=[];function g97(p3N){y7H.C8A();return function(i4O){var J7u,M1j,p$2,J9q,W6J,K6c,O1F,s1e,K83,E0m,A_T,D1I;J7u=null;for(var b07=\"0\" ^ 0;b07 < i4O.length;b07++){M1j=i4O[b07];p$2=M1j.dataCallback.error;if(!p$2 && p$2 !== 0){J9q=M1j.params.symbolObject;W6J=M1j.dataCallback;K6c=W6J.quotes;O1F=W6J.moreAvailable;s1e=W6J.upToDate;K83=W6J.beginDate;E0m=W6J.endDate;A_T=[];if(B2y.getSeries){A_T=B2y.getSeries({symbolObject:J9q});}D1I=![];for(var l$6=0;l$6 < A_T.length;l$6++){g5$=A_T[l$6];if(!p3N){if(!N6L.future){g5$.moreAvailable=O1F === !1?!\"1\":O1F || K6c.length > (M1j.params.endDate?1:0);}else {g5$.upToDate=s1e === !!({})?!!1:s1e || K6c.length <= (M1j.params.startDate?1:\"0\" * 1);if(B2y.isHistoricalModeSet && K6c.length < 2){g5$.mostRecentForwardAttempt=new Date();}}if(!g5$.endPoints.begin || g5$.endPoints.begin > K83){g5$.endPoints.begin=K83;}if(!g5$.endPoints.end || g5$.endPoints.end < E0m){g5$.endPoints.end=E0m;}g5$.loading=!({});}D1I=g5$.parameters.fillGaps || D1I;}K6c=W45.cleanup(B2y,g5$,K6c,U0P,N6L,D1I);B2y.updateChartData(K6c,e0O,{secondarySeries:J9q.symbol,noCreateDataSet:!![],noCleanupDates:!!({}),allowReplaceOHL:!\"\"});if(K6c && K6c.length && (!J7u || J7u > K6c[0].DT)){J7u=K6c[\"0\" | 0].DT;}}}y7H.C8A();if(i4O.length && J7u){B2y.createDataSet(null,null,{appending:N6L.originalState.update || N6L.future,appendToDate:J7u});if(!N6L.nodraw){B2y.drawWithRange();}if(U0P == V5R.QuoteFeed.INITIAL){W45.resetRefreshInterval(y0U.refreshInterval,y0U);}}if(o3x){o3x(null);}};}for(var H5x=0;H5x < l6N.length;H5x++){q2N=l6N[H5x];q15=V5R.shallowClone(N6L.originalState);q15.symbol=q2N.symbol;q15.symbolObject=q2N;if(q15.update || q15.future){if(!q15.endDate){q15.endDate=N6L.endDate;}q15.startDate=a6g[q2N.symbol].end;}else {if(!q15.startDate){q15.startDate=N6L.startDate;}q15.endDate=q4$ && !N6L.future?a6g[q2N.symbol].begin:N6L.endDate;q15.ticks=N6L.ticks;}X$m.push(q15);}if(!X$m.length && V2S){r74={appending:N6L.appending || N6L.originalState.update};if(r74.appending){r74.appendToDate=N6L.startDate;}B2y.createDataSet(null,null,r74);if(!N6L.nodraw){B2y.draw();}if(o3x){o3x(null);}return;}this.multiFetch(X$m,g97(V2S));};V5R.ChartEngine.Driver.prototype.cleanup=function(V1P,x4p,i4a,U21,l$P,w48){var M$E,t_M,l1i,H6V,p7Y,n5J,v6h,K6b;V1P.doCleanupDates(i4a,V1P.layout.interval);if(!l$P.missingBarsCreated && i4a && i4a.length && V1P.cleanupGaps && w48 !== ![]){l1i=l$P.chart;if(!x4p){t_M=l1i.defaultPlotField;}else {l1i=x4p;t_M=x4p.parameters.symbol || x4p.id;}if(U21 == V5R.QuoteFeed.PAGINATION && !l$P.loadMoreReplace){if(l1i.endPoints.begin && l1i.endPoints.begin > i4a[i4a.length - 1].DT){H6V=V1P.getFirstLastDataRecord(V1P.masterData,t_M,!1);if(x4p){H6V=H6V[t_M];}i4a.push(H6V);M$E=\"pop\";}}else if(U21 == V5R.QuoteFeed.UPDATE){if(l1i.endPoints.end && l1i.endPoints.end < i4a[0].DT){p7Y=V1P.getFirstLastDataRecord(V1P.masterData,t_M,!0);if(x4p){p7Y=p7Y[t_M];}n5J=-1808890927;v6h=275477115;K6b=2;for(var k6d=1;q1l46.I9N(k6d.toString(),k6d.toString().length,41554) !== n5J;k6d++){i4a.unshift(p7Y);M$E=\"shift\";K6b+=2;}if(q1l46.G33(K6b.toString(),K6b.toString().length,\"89561\" ^ 0) !== v6h){i4a.unshift(p7Y);M$E=\"\";}}}i4a=V1P.doCleanupGaps(i4a,l$P.chart,{cleanupGaps:w48,noCleanupDates:!!({})});if(M$E){i4a[M$E]();}}return i4a;};V5R.ChartEngine.Driver.prototype.updateChart=function(e$Z){var n2H,S4I,z3u,p2r,a91,q_V,H5a,w5D,J8W;function m0f(K1u,Y_W,f3u,v3G){if(Y_W.behavior.prefetchAction){Y_W.behavior.prefetchAction(\"updateChart\");}return function(R6q){q1l46.P3W();var p7e,E78;S4I++;p7e=Y_W.chart;if(f3u == p7e.symbol && p2r == z3u.layout.interval && a91 == z3u.layout.timeUnit && !z3u.isHistoricalMode()){if(v3G === K1u.getQuoteFeed(Y_W) && !R6q.error){E78=R6q.quotes;E78=K1u.cleanup(z3u,null,E78,V5R.QuoteFeed.UPDATE,Y_W);z3u.updateChartData(E78,p7e,{noCreateDataSet:!!({}),noCleanupDates:!!({})});p7e.attribution=R6q.attribution;}else if(v3G){v3G.engine.announceError(Y_W.originalState,R6q);}}else {K1u.updatingChart=![];return;}if(S4I == n2H){K1u.updatingChart=!1;}if(Y_W.behavior.callback){Y_W.behavior.callback(Y_W);}K1u.loadDependents(Y_W,null,V5R.QuoteFeed.UPDATE,Y_W.behavior);};}if(this.updatingChart){return;}if(this.loadingNewChart){return;}n2H=Object.keys(this.stx.charts).length;S4I=0;z3u=this.stx;p2r=z3u.layout.interval;a91=z3u.layout.timeUnit;q1l46.P3W();for(var r3U in z3u.charts){q_V=z3u.charts[r3U];if(!q_V.symbol)continue;H5a=this.makeParams(q_V.symbol,q_V.symbolObject,q_V);w5D=this.getQuoteFeed(H5a);if(q_V.masterData && q_V.masterData.length){H5a.startDate=q_V.endPoints.end;}H5a.update=!![];H5a.originalState=V5R.shallowClone(H5a);if(e$Z && e$Z != H5a.behavior){this.loadDependents(H5a,null,V5R.QuoteFeed.UPDATE,e$Z);continue;}this.updatingChart=!!\"1\";J8W=m0f(this,H5a,q_V.symbol,w5D);if(z3u.isEquationChart(H5a.symbol)){V5R.fetchEquationChart(H5a,J8W);}else if(w5D){V5R.ChartEngine.Driver.fetchData(V5R.QuoteFeed.UPDATE,w5D.engine,H5a,J8W);}}};V5R.ChartEngine.Driver.prototype.updateChartLoop=function(e2Y,V8h,I2W){var Z2G,C9r;if(!V8h){V8h=this.behavior;}if(!I2W){this.quoteFeeds.forEach(function(I$L){q1l46.P3W();if(I$L.behavior === V8h){I2W=I$L;}});if(!I2W){I2W=this.quoteFeed;}}if(I2W.intervalTimer === -(\"1\" * 1)){return;}clearInterval(I2W.intervalTimer);I2W.intervalTimer=null;Z2G=function(K7n,a5S){q1l46.P3W();return function(){if(a5S.noUpdate){return;}K7n.updateChart(a5S);};};for(var u_C=0;u_C < this.quoteFeeds.length;u_C++){C9r=this.quoteFeeds[u_C].behavior;if(V8h == C9r && !C9r.noUpdate){if(!e2Y && e2Y !== +\"0\"){e2Y=C9r.refreshInterval;}if(e2Y){I2W.intervalTimer=setInterval(Z2G(this,C9r),e2Y * 1000);}}}};V5R.ChartEngine.Driver.prototype.resetRefreshInterval=function(T5y,i3b){(i3b || this.behavior).refreshInterval=T5y;this.updateChartLoop(null,i3b);};V5R.ChartEngine.Driver.prototype.pause=function(k0q){this.paused={symbol:k0q,interval:this.behavior.refreshInterval};this.resetRefreshInterval(0);};V5R.ChartEngine.Driver.prototype.resume=function(){var {interval:S_B, symbol:A55}=this.paused;if(V5R.symbolEqual(A55,this.stx.chart.symbol)){return;}this.resetRefreshInterval(S_B);this.paused=null;};V5R.ChartEngine.Driver.prototype.loadAll=function(D$w,w9A){var l4s,D0f;l4s=this;q1l46.P3W();function b_Y(){return function(i1A){q1l46.P3W();if(i1A){w9A(i1A);}else if(l4s.stx.currentlyImporting || !D$w.moreAvailable && D$w.upToDate){w9A(null);}else if(++D0f > 20){console.warn(\"moreAvailable and upToDate not implemented correctly in quotefeed\");w9A();}else {D$w.loadingMore=![];l4s.checkLoadMore(D$w,!!1,!0,b_Y(),!!({}));}};}D0f=+\"0\";b_Y()();};V5R.ChartEngine.Driver.prototype.checkLoadMore=function(v6m,c$C,H$y,P2N,u9P){var f_Y=q1l46;var L9l,a2c,b84,s2r,d21,k_u,Y_T,I8e,t2p,s7A,j5P,c5E,a$3,s4w,c$_,Z0d,w7S,j5I,E$d,H4z,B6a,r6f;L9l=this.stx;a2c=this;if(v6m.loadingMore || this.loadingNewChart){v6m.initialScroll=v6m.scroll;if(P2N){P2N(null);}return;}b84=L9l.isHistoricalMode();if(!b84){L9l.isHistoricalModeSet=!\"1\";}s2r=this.makeParams(v6m.symbol,v6m.symbolObject,v6m);function k_n(O6h){if(a2c.paused){return !1;}f_Y.P3W();return !O6h.endPoints.end || v6m.scroll - v6m.maxTicks + 1 < d21.bufferSize || L9l.tickFromDate(O6h.endPoints.end,v6m,null,!!({})) - Y_T.length + v6m.scroll - v6m.maxTicks + 2 < d21.bufferSize;}if(L9l.currentlyImporting){if(P2N){P2N(null);}return;}d21=s2r.behavior;Y_T=v6m.dataSet;function n6w(t8p,H7g){var o6N;o6N=\"ch\";o6N+=\"eckLoadMore\";f_Y.C8A();if(d21.prefetchAction){d21.prefetchAction(o6N);}return function(S_T){var h7k,a7z,g8A,o3i,S_W,S0d,v85,A$$,x97,o5D,O4C,h9k;h7k=908254800;a7z=1743092298;g8A=2;for(var b9D=1;f_Y.G33(b9D.toString(),b9D.toString().length,97949) !== h7k;b9D++){o3i=t8p.stx;S_W=H7g.chart;g8A+=2;}if(f_Y.G33(g8A.toString(),g8A.toString().length,20976) !== a7z){o3i=t8p.stx;S_W=H7g.chart;}if(H7g.symbol == S_W.symbol && w7S == o3i.layout.interval && j5I == o3i.layout.timeUnit){if(!H7g.loadMore){H7g.chart.loadingMore=![];}if(k_u === t8p.getQuoteFeed(H7g) && !S_T.error){if(!S_T.quotes){S_T.quotes=[];}S0d=S_T.quotes;v85=S_W.masterData;S0d=t8p.cleanup(o3i,null,S0d,V5R.QuoteFeed.PAGINATION,H7g);if(S0d.length && S_W.masterData && S_W.masterData.length){if(H7g.future){f_Y.R_O(46);A$$=S0d[f_Y.M8Y(\"0\",0)];if(A$$.DT && A$$.DT == S_W.masterData[S_W.masterData.length - 1].DT){v85.pop();}}else {f_Y.R_O(25);var E6z=f_Y.P_X(17,16);x97=S0d[S0d.length - E6z];if(x97.DT && +x97.DT == +S_W.masterData[0].DT){S0d.pop();}}}if(!H7g.future){if(S_T.moreAvailable){S_W.moreAvailable=!0;}else if(S_T.moreAvailable === !1 || !S0d.length){S_W.moreAvailable=!!\"\";}else {S_W.moreAvailable=!![];}}else {S_W.maximumForwardPagination=null;if(S_T.upToDate){S_W.upToDate=!0;}else if(S_T.upToDate === !!0 || S0d.length > \"1\" >> 32){S_W.upToDate=!({});}else if(!S0d.length || S0d.length === 1 && +H7g.startDate === +S_T.quotes[0].DT){if(H7g.fetchMaximumBars){S_W.upToDate=!\"\";}else {S_W.maximumForwardPagination=!\"\";}}if(o3i.isHistoricalModeSet && S0d.length < 2){S_W.mostRecentForwardAttempt=new Date();}}t8p.tickMultiplier=S0d.length?2:t8p.tickMultiplier * (\"2\" << 0);o5D=S0d[+\"0\"]?S0d[0].DT:H7g.startDate;O4C=S0d[\"0\" >> 64]?S0d[S0d.length - 1].DT:H7g.endDate;if(S_T.beginDate){o5D=S_T.beginDate;}if(!S_W.endPoints.begin || S_W.endPoints.begin > o5D){S_W.endPoints.begin=o5D;}if(S_T.endDate){O4C=S_T.endDate;}if(!S_W.endPoints.end || S_W.endPoints.end < O4C){S_W.endPoints.end=O4C;}S_W.loadingMore=![];if(H7g.loadMoreReplace){o3i.setMasterData(S0d,S_W,{noCleanupDates:!\"\"});}else if(H7g.future){o3i.updateChartData(S0d,S_W,{noCreateDataSet:!![],noCleanupDates:!!1});}else {V5R.addMemberToMasterdata({stx:o3i,chart:S_W,data:S0d,fields:[(6246,688.69) === 942.04?(0x19,0x5e1):9580 != (+\"879.86\",6720)?354.11 > (3770,14.76)?\"*\":(8.35e+3,\"s\"):(\"N\",137.90)],noCleanupDates:!\"\"});}if(H7g.future){h9k={appending:!\"\",appendToDate:S0d[0] && S0d[0].DT};}o3i.createDataSet(undefined,undefined,h9k);if(!u9P){o3i.draw();}if(d21.callback){d21.callback(H7g);}t8p.loadDependents(H7g,P2N,V5R.QuoteFeed.PAGINATION);}else {t8p.quoteFeed.announceError(H7g.originalState,S_T);H7g.chart.loadingMore=!({});if(P2N){P2N(S_T.error);}}}else {return;}};}f_Y.R_O(124);var r0W=f_Y.P_X(1,1009,6,77702,13);f_Y.U1h(28);var R1j=f_Y.P_X(151,13,12,0);t2p=r0W * (d21.forwardPaginationRetryInterval || R1j);s7A=![];j5P=!!\"\";if(v6m.dataSet.length){for(var R0k in v6m.series){c5E=v6m.series[R0k];if(c5E.loading)continue;if(c5E.parameters.loadData === !!\"\")continue;I8e=!c5E.mostRecentForwardAttempt || c5E.mostRecentForwardAttempt.getTime() + t2p < Date.now();if(c5E.parameters.symbol !== v6m.symbol){if(c5E.moreAvailable !== ![] && G0V(c5E)){s7A=!!1;}if(I8e && !c5E.upToDate && k_n(c5E)){j5P=!!({});}}}}I8e=!v6m.mostRecentForwardAttempt || v6m.mostRecentForwardAttempt.getTime() + t2p < Date.now();function G0V(E66){if(a2c.paused){return !({});}f_Y.P3W();return !E66.endPoints.begin || Y_T.length - v6m.scroll < d21.bufferSize || Y_T.length - v6m.scroll - L9l.tickFromDate(E66.endPoints.begin,v6m) < d21.bufferSize;}a$3=(G0V(v6m) || c$C) && v6m.moreAvailable !== !\"1\";function i_3(T4j){v6m.loadingMore=!!\"\";if(P2N){P2N(T4j);}}s4w=(k_n(v6m) || c$C) && !v6m.upToDate && I8e;c$_=a$3 || s7A;Z0d=(L9l.isHistoricalModeSet || !v6m.upToDate) && !c$_ && (s4w || j5P);w7S=L9l.layout.interval;j5I=L9l.layout.timeUnit;E$d=![];H4z=d21.findHeadOfData || v6m.masterData && v6m.masterData.length;if(!d21.noLoadMore && H4z){if(Z0d || !L9l.maxDataSetSize || v6m.dataSet.length < L9l.maxDataSetSize){if(c$_ || Z0d){v6m.initialScroll=v6m.scroll;v6m.loadingMore=!!({});s2r=this.makeParams(v6m.symbol,v6m.symbolObject,v6m);s2r.pagination=!!({});s2r.future=Z0d;if(v6m.masterData && v6m.masterData.length){if(Z0d){s2r.startDate=v6m.endPoints.end;}else {s2r.endDate=v6m.endPoints.begin;}if(Z0d && !s2r.startDate){B6a=L9l.getFirstLastDataRecord(v6m.masterData,\"DT\",!0);if(B6a){s2r.startDate=B6a.DT;}}else if(c$_ && !s2r.endDate){B6a=L9l.getFirstLastDataRecord(v6m.masterData,\"DT\");if(B6a){s2r.endDate=B6a.DT;}}}else {s2r.endDate=new Date();}s2r.originalState=V5R.shallowClone(s2r);s2r.nodraw=u9P;if(!a$3 && (s7A || !s4w && j5P)){this.loadingMore=!\"\";this.loadDependents(s2r,i_3,V5R.QuoteFeed.PAGINATION);if(P2N){P2N(null);}return;}if(H$y || v6m.maximumForwardPagination || L9l.fetchMaximumBars[L9l.layout.aggregationType]){s2r.fetchMaximumBars=!![];if(!L9l.maxMasterDataSize || d21.maximumTicks < L9l.maxMasterDataSize){s2r.ticks=d21.maximumTicks;}else {s2r.ticks=L9l.maxMasterDataSize;}}r6f=n6w(this,s2r);k_u=a2c.getQuoteFeed(s2r);if(L9l.isEquationChart(s2r.symbol)){V5R.fetchEquationChart(s2r,r6f);}else {if(Z0d){s2r.appending=!0;}if(k_u){V5R.ChartEngine.Driver.fetchData(V5R.QuoteFeed.PAGINATION,k_u.engine,s2r,r6f);}}E$d=!\"\";}}}if(!E$d && P2N){P2N(null);}};V5R.ChartEngine.Driver.prototype.extendHistoricalData=function({from:Q6r},o9l = ()=>{}){var D9J,K1R;var {stx:Q2G}=this;var {chart:L1b, layout:x1M}=Q2G;q1l46.P3W();function W5k(K2o,a8N){q1l46.C8A();return function({quotes:p1A, moreAvailable:Z0p, error:p9o, beginDate:W6h}){if(a8N.symbol !== L1b.symbol || E7V !== x1M.interval || z80 !== x1M.timeUnit){return;}L1b.loadingMore=!({});if(p9o){return o9l(p9o);}p1A=K2o.cleanup(Q2G,null,p1A,V5R.QuoteFeed.PAGINATION,a8N);if(typeof Z0p === \"boolean\"){L1b.moreAvailable=Z0p;}else {L1b.moreAvailable=!!p1A.length;}L1b.endPoints.begin=W6h || Q6r;V5R.addMemberToMasterdata({stx:Q2G,chart:L1b,data:p1A,fields:[(3120,7000) >= 340.73?\"*\":4.51e+2],noCleanupDates:!![]});Q2G.createDataSet();Q2G.draw();};}var {masterData:V7O, dataSet:E14}=L1b;var {interval:E7V, timeUnit:z80}=x1M;D9J=this.makeParams(L1b.symbol,L1b.symbolObject,L1b);K1R=this.getQuoteFeed(D9J);if(L1b.loadingMore || this.loadingNewChart || Q2G.currentlyImporting || !V7O.length || !K1R || Q2G.maxDataSetSize && E14.length > Q2G.maxDataSetSize){return o9l(null);}L1b.loadingMore=!![];D9J.originalState=Object.assign({},D9J);D9J.startDate=Q6r;D9J.endDate=V7O[0].DT;V5R.ChartEngine.Driver.fetchData(V5R.QuoteFeed.PAGINATION,K1R.engine,D9J,W5k(this,D9J));};V5R.ChartEngine.Driver.prototype.barsToFetch=function(E0U){var z4p,Z3l,g1V;if(!V5R.isValidNumber(this.tickMultiplier)){q1l46.R_O(46);this.tickMultiplier=q1l46.M8Y(\"2\",64);}z4p=this.stx.layout.interval;Z3l=E0U.stx.layout.periodicity;if((z4p == \"month\" || z4p == \"week\") && !this.stx.dontRoll){Z3l*=z4p == \"week\"?7:30;}g1V=E0U.stx.chart.maxTicks * Z3l;return g1V * this.tickMultiplier;};function U9P(){}V5R.ChartEngine.Driver.determineStartDate=function(w6h,y79,w5$){return this.determineStartOrEndDate(w6h,y79,w5$,!!({}));};V5R.ChartEngine.Driver.determineStartOrEndDate=function(F84,B2k,S3u,T8E){var p5V;if(T8E){p5V=F84.startDate || B2k.previous(S3u);}else {p5V=F84.future?B2k.next(S3u):new Date();}return p5V;};V5R.ChartEngine.Driver.prototype.makeParams=function(z$K,G2c,x5F){var r_O,e_4,p$3,o8t,R67,k5u,r9M,N8y,k9l,w8Y;r_O=\"w\";r_O+=\"e\";r_O+=\"e\";r_O+=\"k\";e_4=this.stx;p$3=e_4.layout.interval;o8t=this.barsToFetch({stx:e_4});if((p$3 == \"month\" || p$3 == r_O) && !e_4.dontRoll){R67=\"da\";R67+=\"y\";p$3=R67;}k5u=this.getQuoteFeed({interval:p$3,symbol:z$K,symbolObject:G2c});r9M=k5u && k5u.behavior;N8y=V5R.shallowClone(r9M) || ({});N8y.behavior=r9M;k9l=!1;w8Y=[];if(x5F.market && x5F.market.getSessionNames){w8Y=x5F.market.getSessionNames();}if(e_4.extendedHours){if(e_4.extendedHours.filter){k9l=!![];}else {k9l=e_4.layout.extended;w8Y=w8Y.filter(function(s95){q1l46.C8A();return s95.enabled || e_4.layout.marketSessions[s95.name];});}}else {w8Y=w8Y.filter(function(n01){return n01.enabled;});}for(var i3L=\"0\" << 32;i3L < w8Y.length;i3L++){w8Y[i3L]=w8Y[i3L].name;}V5R.extend(N8y,{stx:e_4,symbol:z$K,symbolObject:G2c,chart:x5F,interval:p$3,extended:k9l,period:1,ticks:o8t,additionalSessions:w8Y,quoteDriverID:this.id},!!1);if(!N8y.symbolObject){N8y.symbolObject={symbol:z$K};}if(!isNaN(N8y.interval)){N8y.period=parseInt(N8y.interval,10);N8y.interval=e_4.layout.timeUnit;if(!N8y.interval){N8y.interval=\"minute\";}}return N8y;};V5R.ChartEngine.Driver.prototype.newChart=function(p1s,z03){var M6e,S2Z,j0X,f2v,R6W,c4N,J3K,u8E,A8H;function t21(n$n,e7d){var J6J;J6J=\"ne\";J6J+=\"wC\";J6J+=\"h\";J6J+=\"art\";if(u8E.prefetchAction){u8E.prefetchAction(J6J);}return function(C_Y){var N2A,Y9r,t$8,Q9i,T2R,a2q,J6V,L9A,Z0M;N2A=e7d.chart;Y9r=C_Y.quotes;t$8=![];if(S2Z == N2A.symbol && j0X == M6e.layout.interval && f2v == M6e.layout.timeUnit){n$n.loadingNewChart=!({});if(J3K === n$n.getQuoteFeed(e7d) && !C_Y.error){Y9r=n$n.cleanup(M6e,null,Y9r,V5R.QuoteFeed.INITIAL,e7d);M6e.setMasterData(Y9r,N2A,{noCleanupDates:!![]});N2A.endPoints={};Q9i=C_Y.beginDate || (Y9r[\"0\" ^ 0]?Y9r[0].DT:e7d.startDate);N2A.endPoints.begin=Q9i;T2R=C_Y.endDate || (Y9r[0]?Y9r[Y9r.length - 1].DT:e7d.endDate);N2A.endPoints.end=T2R;if(!Y9r){N2A.moreAvailable=!!\"\";N2A.upToDate=!!({});}else {N2A.moreAvailable=C_Y.moreAvailable === !!\"\"?!\"1\":!0;N2A.upToDate=C_Y.hasOwnProperty(\"upToDate\")?C_Y.upToDate:!M6e.isHistoricalModeSet;}N2A.attribution=C_Y.attribution;if(p1s.initializeChart){M6e.initializeChart();}M6e.createDataSet();t$8=!!({});}else {J3K.engine.announceError(e7d.originalState,C_Y);}}else {if(z03){z03(\"orphaned\");}return;}for(var H5q in N2A.series){a2q=N2A.series[H5q];a2q.endPoints={};a2q.moreAvailable=null;a2q.upToDate=null;if(a2q.parameters.takedownResults){a2q.parameters.takedownResults(M6e,H5q);}}J6V=N2A.masterData;if(J6V && J6V.length){e7d.startDate=J6V[+\"0\"].DT;L9A=new Date();Z0M=J6V[J6V.length - 1].DT;e7d.endDate=Z0M < L9A && !M6e.isHistoricalMode()?L9A:Z0M;}if(u8E.callback){u8E.callback(e7d);}n$n.loadDependents(e7d,function(){var q1J;q1J=\"newC\";q1J+=\"hart\";if(t$8 && !e7d.nodraw){n$n.stx.home();}if(z03){z03(C_Y.error);}n$n.stx.dispatch(q1J,{stx:n$n.stx,symbol:n$n.stx.chart.symbol,symbolObject:n$n.stx.chart.symbolObject,moreAvailable:n$n.stx.chart.moreAvailable,upToDate:n$n.stx.chart.upToDate,quoteDriver:n$n});n$n.resetRefreshInterval(u8E.refreshInterval,u8E);},V5R.QuoteFeed.INITIAL);};}M6e=this.stx;S2Z=p1s.symbol;j0X=M6e.layout.interval;f2v=M6e.layout.timeUnit;R6W=p1s.chart;R6W.moreAvailable=null;R6W.upToDate=null;R6W.loadingMore=!\"1\";R6W.attribution=null;c4N=this.makeParams(S2Z,p1s.symbolObject,R6W);V5R.extend(c4N,p1s,!\"\");J3K=this.getQuoteFeed(c4N);u8E=c4N.behavior || ({});if(M6e.fetchMaximumBars[M6e.layout.aggregationType] || p1s.fetchMaximumBars){if(!M6e.maxMasterDataSize || u8E.maximumTicks < M6e.maxMasterDataSize){c4N.ticks=u8E.maximumTicks;}else {c4N.ticks=M6e.maxMasterDataSize;}c4N.fetchMaximumBars=!!({});}this.loadingNewChart=!![];this.updatingChart=![];c4N.originalState=V5R.shallowClone(c4N);A8H=t21(this,c4N);if(this.stx.isEquationChart(c4N.symbol)){V5R.fetchEquationChart(c4N,A8H);}else if(J3K){V5R.ChartEngine.Driver.fetchData(V5R.QuoteFeed.INITIAL,J3K.engine,c4N,A8H);}};V5R.QuoteFeed.INITIAL=1;V5R.QuoteFeed.UPDATE=2;V5R.QuoteFeed.PAGINATION=3;V5R.QuoteFeed.SERIES=4;V5R.ChartEngine.Driver.fetchData=function(A_F,W8V,T1a,e$X){if(!T1a.symbol){return e$X({quotes:[]});}if(W8V.v2QuoteFeed){if(typeof W8V.subscribe !== \"function\"){V5R.ChartEngine.Driver.fetchDataInContext(A_F,W8V,T1a,e$X);}else {V5R.ChartEngine.Driver.fetchDataInContext(A_F,W8V,T1a,(function(T4Z){if(!T4Z.error){this.checkSubscriptions(T1a.stx);}q1l46.P3W();e$X(T4Z);}).bind(W8V));}}else {T1a.stx.convertToDataZone(T1a.startDate);T1a.stx.convertToDataZone(T1a.endDate);W8V.fetch(T1a,e$X);}};V5R.ChartEngine.Driver.fetchDataInContext=function(z9v,U1l,v6n,z1o){var X_D,b_q,n5S,j7t,O8y,W4A,O28,H$C,B6i,O0P,W3j,W1w,P0c,f3U;X_D=\"fu\";q1l46.P3W();X_D+=\"nction\";b_q=\"fun\";b_q+=\"c\";b_q+=\"ti\";b_q+=\"on\";O28=v6n.stx;if(!O28.chart.market.newIterator){console.error(\"quoteFeed feature requires first activating market feature.\");return;}if(z9v === V5R.QuoteFeed.SERIES){v6n.series=!\"\";z9v=V5R.QuoteFeed.INITIAL;if(v6n.endDate && !v6n.startDate || v6n.future){z9v=V5R.QuoteFeed.PAGINATION;}else if(v6n.startDate && !v6n.endDate){z9v=V5R.QuoteFeed.UPDATE;}}H$C=Math.min(v6n.ticks,v6n.maximumTicks);if(U1l.maxTicks){H$C=Math.min(H$C,U1l.maxTicks);}B6i=v6n.symbolObject.masterSymbol || v6n.symbol;switch(z9v){case V5R.QuoteFeed.UPDATE:if(O28.isHistoricalModeSet){O28.quoteDriver.updatingChart=![];return;}if(v6n.startDate){O0P=v6n.startDate;}else {O0P=new Date();q1l46.R_O(8);O0P.setHours(0,+\"0\",0,q1l46.P_X(0,\"0\"));}if(typeof U1l.fetchUpdateData === \"function\"){U1l.fetchUpdateData(B6i,O28.convertToDataZone(O0P),v6n,z1o);}break;case V5R.QuoteFeed.INITIAL:W3j=\"tic\";W3j+=\"k\";W4A=v6n.endDate || new Date();n5S={begin:W4A,interval:v6n.interval,periodicity:v6n.interval == W3j?O28.chart.xAxis.futureTicksInterval:v6n.period,outZone:O28.dataZone};j7t=O28.chart.market.newIterator(n5S);O8y=V5R.ChartEngine.Driver.determineStartDate(v6n,j7t,H$C);if(v6n.endDate){W4A=v6n.endDate;}if(typeof U1l.fetchInitialData === b_q){U1l.fetchInitialData(B6i,O8y,O28.convertToDataZone(W4A),v6n,z1o);}break;case V5R.QuoteFeed.PAGINATION:W1w=\"ti\";W1w+=\"c\";W1w+=\"k\";n5S={begin:v6n.endDate || v6n.startDate,interval:v6n.interval,periodicity:v6n.interval == W1w?O28.chart.xAxis.futureTicksInterval:v6n.period,outZone:O28.dataZone};j7t=O28.chart.market.newIterator(n5S);P0c=V5R.ChartEngine.Driver.determineStartOrEndDate(v6n,j7t,H$C,!v6n.future);O8y=v6n.startDate || P0c;W4A=v6n.endDate || P0c;if(!v6n.startDate){v6n.stx.convertToDataZone(W4A);}else {v6n.stx.convertToDataZone(O8y);}if(typeof U1l.fetchPaginationData === X_D){if(O28.maxMasterDataSize && O28.maxMasterDataSize <= O28.masterData.length){return;}U1l.fetchPaginationData(B6i,O8y,W4A,v6n,function(a9G){if(W4A >= Date.now()){O28.isHistoricalModeSet=!1;}if(z1o){z1o(a9G);}});}break;default:f3U=\"Illegal fet\";f3U+=\"chDa\";f3U+=\"ta consta\";f3U+=\"nt\";console.error(f3U);}};};M2=P1v=>{var l0Y;l0Y=typeof _CIQ !== \"undefined\"?_CIQ:P1v.CIQ;l0Y.ChartEngine.prototype.addSeries=function(x1n,p9p,M00){var o6J,o4G,Q00,E0t,X2o,e3W,n5B,s2d,p6H,h12,t6L,n1X,G4h,r13,a7n,r61,O26,C7j,q$e;o6J=\"add-\";o6J+=\"series\";o4G=this.runPrepend(\"addSeries\",arguments);if(o4G){return o4G;}Q00=x1n?x1n:null;E0t=x1n;if(!x1n){x1n=l0Y.uniqueID();}if(p9p && p9p.panel === !!({})){p9p.panel=x1n;}X2o={parameters:p9p?l0Y.clone(p9p):{},yValueCache:[],display:Q00,id:x1n,loading:p9p?p9p.loadData !== ![]:!\"\"};X2o.parameters.yAxis=p9p && p9p.yAxis;p9p=X2o.parameters;if(p9p.symbol){E0t=p9p.symbol;}if(p9p.isComparison){p9p.shareYAxis=!!\"1\";}if(p9p.yAxis && !(p9p.yAxis instanceof l0Y.ChartEngine.YAxis)){p9p.yAxis=new l0Y.ChartEngine.YAxis(p9p.yAxis);}l0Y.ensureDefaults(p9p,{chartName:this.chart.name,symbolObject:{symbol:E0t},panel:this.chart.panel.name,fillGaps:!({}),action:o6J});if((\"display\" in p9p)){X2o.display=p9p.display;}e3W=this.charts[p9p.chartName];n5B=p9p.symbolObject;E0t=p9p.symbol=n5B.symbol;if(p9p.isEvent){n5B.isEvent=!!1;}if(!X2o.display){X2o.display=E0t || p9p.field;}function x$z(A$Q){q1l46.P3W();return function(C52){var f0o,A2v,S0z;f0o=\"symbol\";q1l46.C8A();f0o+=\"Ch\";f0o+=\"a\";f0o+=\"nge\";if(!C52.error){A2v=C52.quotes;S0z=p9p.fillGaps;if(!t6L.cleanupGaps){S0z=![];}A2v=t6L.doCleanupGaps(A2v,t6L.chart,{cleanupGaps:S0z});t6L.updateChartData(A2v,t6L.chart,{secondarySeries:E0t,noCreateDataSet:!\"\",noCleanupDates:!!({}),allowReplaceOHL:!0});X2o.loading=!!\"\";X2o.moreAvailable=C52.moreAvailable;X2o.upToDate=C52.upToDate;r7T(t6L,X2o);}if(p9p.action !== null && !s2d.length){t6L.dispatch(n1X?\"symbolImport\":f0o,{stx:t6L,symbol:A$Q.symbol,symbolObject:A$Q.symbolObject,action:p9p.action,id:X2o.id,parameters:p9p});}if(X2o.parameters.processResults){X2o.parameters.processResults(t6L,C52.error,X2o,C52.quotes);}if(M00){M00.call(t6L,C52.error,X2o);}};}X2o.endPoints={};if(!p9p.gapDisplayStyle && p9p.gapDisplayStyle !== ![]){p9p.gapDisplayStyle=p9p.gaps;}if(p9p.isComparison){if(p9p.gapDisplayStyle === undefined){p9p.gapDisplayStyle=\"transparent\";}}s2d=this.getSeries({symbolObject:n5B,chart:e3W,includeMaster:!!1});p6H=p9p.panel;if(!this.panels[p6H]){h12=p9p.yAxis || new l0Y.ChartEngine.YAxis();h12.name=x1n;this.createPanel(x1n,p6H,null,null,h12);if(!this.preferences.dragging || !this.preferences.dragging.series){p9p.highlightable=!({});}}else {if(!p9p.yAxis && !p9p.shareYAxis){p9p.yAxis=new l0Y.ChartEngine.YAxis({name:x1n,position:\"none\"});}}e3W.series[x1n]=X2o;t6L=this;n1X=this.currentlyImporting;G4h=p9p.responseHandler || x$z;if(p9p.isComparison && e3W.forcePercentComparison && p9p.panel == e3W.panel.name && (!p9p.yAxis || p9p.yAxis == e3W.yAxis)){this.setChartScale(\"percent\");}r13=e3W.masterData;if(!r13){r13=e3W.masterData=this.masterData=[];}a7n=r13.length;if(p9p.data && !p9p.data.useDefaultQuoteFeed){r61={symbol:E0t,symbolObject:n5B,action:p9p.action};G4h(r61)({quotes:p9p.data});}else if(s2d.length){X2o.endPoints=s2d[0].endPoints;X2o.loading=s2d[\"0\" >> 0].loading;r7T(this,X2o);if(M00){setTimeout(function(){M00.call(t6L,null,X2o);},+\"0\");}}else if(this.quoteDriver && p9p.loadData !== !({})){O26=this.quoteDriver;C7j=O26.makeParams(E0t,n5B,e3W);if(a7n){C7j.startDate=r13[0].DT;C7j.endDate=this.isHistoricalMode()?r13[r13.length - +\"1\"].DT:new Date();}if(C7j.stx.isEquationChart(C7j.symbol)){l0Y.fetchEquationChart(C7j,G4h(C7j));}else {q$e=O26.getQuoteFeed(C7j);if(q$e){l0Y.ChartEngine.Driver.fetchData(4,q$e.engine,C7j,G4h(C7j));}}}else {r7T(this,X2o);if(p9p.action !== null && !s2d.length){t6L.dispatch(n1X?\"symbolImport\":\"symbolChange\",{stx:t6L,symbol:E0t,symbolObject:n5B,action:p9p.action,id:X2o.id,parameters:p9p});}if(M00){M00.call(this,null,X2o);}}function r7T(n9O,k_H){q1l46.C8A();var h6t,p7a,Z7a,G3A;h6t=p9p.renderer || \"Lines\";p7a=p9p.name || x1n;if(p9p.yAxis && !(p9p.yAxis instanceof l0Y.ChartEngine.YAxis) && !n1X){p9p.yAxis.name=p7a;}if(!p9p.renderer && !p9p.name && !p9p.color && !p9p.chartType){return;}Z7a=n9O.getSeriesRenderer(p7a);if(!Z7a){G3A={name:p7a,overChart:p9p.overChart !== ![],useChartLegend:!![]};if(p9p.chartType){Z7a=l0Y.Renderer.produce(p9p.chartType,l0Y.extend({highlightable:p9p.highlightable,dependentOf:p9p.dependentOf,panel:p9p.panel,yAxis:p9p.yAxis,baseline:p9p.baseline},G3A));}else {l0Y.ensureDefaults(p9p,G3A);Z7a=new l0Y.Renderer[h6t]({params:p9p});}if(!Z7a){return;}n9O.setSeriesRenderer(Z7a);}Z7a.attachSeries(x1n,p9p);if(p9p.loadData !== ![]){Z7a.ready();}n9O.layout.symbols=n9O.getSymbols({\"include-parameters\":!!\"1\",\"exclude-studies\":!\"\"});n9O.changeOccurred(\"layout\");}this.changeOccurred(\"layout\");this.runAppend(\"addSeries\",arguments);return X2o;};l0Y.ChartEngine.prototype.getSeries=function(F3z){var d77,X0e,U3b,z8k,Q$T;d77=F3z.chart?F3z.chart:this.chart;X0e=d77.series;U3b=F3z.symbolObject;if(!U3b){U3b={symbol:F3z.symbol};}z8k=[];for(var z2v in X0e){Q$T=X0e[z2v];if(l0Y.symbolEqual(U3b,Q$T.parameters.symbolObject)){z8k.push(Q$T);}}if(F3z.includeMaster){if(l0Y.symbolEqual(U3b,d77.symbolObject)){z8k.push({});}}return z8k;};l0Y.ChartEngine.prototype.modifySeries=function(Q_f,Y43,u3O){var h5$,A8A,D1L,o_E,l2h,v1Y,A_C,j14,H34,I5y,M5z,V$L,c_R,M3e,W8s,Z5G,q3w,T80;h5$=\"fi\";h5$+=\"e\";h5$+=\"ld\";A8A=\"s\";A8A+=\"t\";A8A+=\"ri\";A8A+=\"ng\";if(this.runPrepend(\"modifySeries\",arguments)){return;}if(!Y43){return;}if(typeof Q_f === A8A){l2h=Y43.chartName?this.charts[Y43.chartName]:this.chart;o_E=Q_f;D1L=l2h.series[o_E];}else {D1L=Q_f;o_E=D1L.id;l2h=this.charts[D1L.parameters.chartName];}if(!D1L){return;}v1Y=D1L.parameters.panel;l0Y.extend(D1L.parameters,Y43,!!1);this.getRendererFromSeries(o_E).modifyRenderer(Y43);A_C=D1L.parameters;if(v1Y !== A_C.panel){this.moveMarkers(v1Y,A_C.panel,this.getMarkerArray(h5$,A_C.symbol));}for(var q59 in l2h.seriesRenderers){H34=l2h.seriesRenderers[q59];I5y=H34.params;M5z=H34.seriesParams;for(var Q56=\"0\" << 64;Q56 < M5z.length;++Q56){V$L=M5z[Q56];c_R=this.panels[V$L.panel];M3e=c_R && c_R.yAxis.name;if(V$L.id === D1L.id){if(A_C.panel === !!\"1\"){A_C.panel=A_C.dependentOf || A_C.name;}I5y.panel=A_C.panel;if(Y43.yAxis){if(!(Y43.yAxis instanceof l0Y.ChartEngine.YAxis)){Y43.yAxis=new l0Y.ChartEngine.YAxis(Y43.yAxis);}I5y.yAxis=Y43.yAxis;}if(A_C.panel != V$L.panel && I5y.name == M3e){this.electNewPanelOwner(V$L.panel);}else {W8s=this.getYAxisByName(A_C.panel,I5y.name);if(W8s && A_C.yAxis && W8s.name !== A_C.yAxis.name){W8s.name=this.electNewYAxisOwner(W8s);}}if(!A_C.field){A_C.field=null;}H34.attachSeries(o_E,l0Y.ensureDefaults(A_C,V$L));if(!A_C.field){A_C.field=A_C.subField;}delete A_C.subField;if(A_C.isComparison && l2h.forcePercentComparison && A_C.panel == l2h.panel.name && (!D1L.parameters.yAxis || A_C.yAxis.name == l2h.yAxis.name)){this.setChartScale(\"percent\");}j14=H34;break;}}}l0Y.getFn(\"Drawing.updateSource\")(this,A_C.symbol || o_E,null,A_C.panel);q1l46.C8A();this.runAppend(\"modifySeries\",arguments);if(u3O !== !\"\"){Z5G=j14.getDependents(this);for(var S85=0;S85 < Z5G.length;S85++){if(Z5G[S85].seriesParams){this.modifySeries(Z5G[S85].params.name,{panel:j14.params.panel,yAxis:D1L.parameters.yAxis},!0);}if(Z5G[S85].study){q3w=Z5G[S85];q3w=l0Y.Studies.replaceStudy(this,q3w.inputs.id,q3w.type,q3w.inputs,q3w.outputs,q3w.parameters,null,q3w.study);}}T80=l2h.seriesRenderers[j14.params.dependentOf];if(T80){if(T80.params.yAxis != D1L.parameters.yAxis || T80.params.panel != j14.params.panel){this.modifySeries(j14.params.dependentOf,{panel:j14.params.panel,yAxis:D1L.parameters.yAxis},!!1);}}}this.changeOccurred(\"layout\");this.draw();return D1L;};l0Y.ChartEngine.prototype.deleteSeries=function(k0u,w7W,P8F){var t5L=q1l46;var S3v,X1c,D4V,L$k,B7B,J3W,h5z,v9n,N6D,n37,l8W,x29,g1P,W1A;S3v=\"de\";S3v+=\"leteS\";S3v+=\"eries\";X1c=\"sym\";X1c+=\"bolChange\";D4V=\"s\";D4V+=\"ymbolImport\";if(this.runPrepend(\"deleteSeries\",arguments)){return;}P8F=P8F || ({});L$k=P8F.action || \"remove-series\";t5L.C8A();if(typeof k0u === \"object\"){B7B=k0u.id;w7W=w7W || this.charts[k0u.parameters.chartName];}else {B7B=k0u;J3W=-423323810;h5z=-1490526997;v9n=2;for(var P9b=1;t5L.G33(P9b.toString(),P9b.toString().length,\"6586\" ^ 0) !== J3W;P9b++){w7W=w7W && this.chart;v9n+=2;}if(t5L.I9N(v9n.toString(),v9n.toString().length,34208) !== h5z){w7W=w7W || this.chart;}w7W=w7W || this.chart;}N6D=w7W.series[B7B];if(!N6D){return;}var {isEvent:i6H, loadData:m3T, symbolObject:H6F}=N6D.parameters;if(!this.currentlyImporting){n37=1618593315;l8W=-374154958;x29=2;for(var Y7s=1;t5L.I9N(Y7s.toString(),Y7s.toString().length,91438) !== n37;Y7s++){this.getMarkerArray(\"\",B7B).forEach(C17=>{t5L.P3W();return this.removeFromHolder(C17);});x29+=+\"2\";}if(t5L.G33(x29.toString(),x29.toString().length,40269) !== l8W){this.getMarkerArray(\"field\",B7B).forEach(C17=>{t5L.P3W();return this.removeFromHolder(C17);});}}delete w7W.series[B7B];this.layout.symbols=this.getSymbols({\"include-parameters\":!![],\"exclude-studies\":!!1});g1P=this.getSeries({symbolObject:H6F,includeMaster:!!({})});if(!i6H && m3T !== !!0 && !g1P.length){this.cleanMasterData(H6F,w7W);}W1A=this.panels[N6D.parameters.panel];if(W1A){this.checkForEmptyPanel(W1A);}this.createDataSet();this.changeOccurred(\"layout\");if(!g1P.length && !i6H){this.dispatch(this.currentlyImporting?D4V:X1c,{stx:this,symbol:H6F.symbol,symbolObject:H6F,id:B7B,action:L$k});}if(this.quoteDriver){this.quoteDriver.updateSubscriptions();}this.runAppend(S3v,arguments);};l0Y.ChartEngine.prototype.removeSeries=function(h3K,Q46){var y2c,z5N,y_V,G45,W8B,p0t,m6h,E30,n6g;y2c=\"rem\";y2c+=\"oveSe\";y2c+=\"ries\";if(this.runPrepend(y2c,arguments)){return;}y_V=!\"1\";if(typeof h3K === \"object\"){z5N=h3K.id;Q46=Q46 || this.charts[h3K.parameters.chartName];}else {z5N=h3K;Q46=Q46 || this.chart;}if(Q46.series[z5N]){G45=Q46.series[z5N].parameters.takedownResults;if(G45){G45(this,z5N);}}for(var x_m in Q46.seriesRenderers){W8B=Q46.seriesRenderers[x_m];p0t=this.panels[W8B.params.panel];m6h=p0t && p0t.yAxis.name;for(var J$h=W8B.seriesParams.length - 1;J$h >= \"0\" - 0;J$h--){E30=W8B.seriesParams[J$h];if(E30.id === z5N){W8B.removeSeries(z5N);if(W8B.seriesParams.length < 1){this.removeSeriesRenderer(W8B);if(W8B.params.name == m6h){this.electNewPanelOwner(W8B.params.panel);}else {if(!this.checkForEmptyPanel(W8B.params.panel)){n6g=this.getYAxisByName(p0t,W8B.params.name);if(n6g){n6g.name=n6g.studies[0] || n6g.renderers[1];}}}}y_V=!!1;}}}if(!y_V){this.deleteSeries(z5N,Q46);}else {this.changeOccurred(\"layout\");}this.resetDynamicYAxis();this.draw();this.resizeChart();this.runAppend(\"removeSeries\",arguments);};l0Y.Comparison=l0Y.Comparison || (function(){});l0Y.Comparison.initialPrice=100;l0Y.Comparison.getInitialPrice=function(n1B){var W$j,g$j,G4D,L_Z,q_u;W$j=\"str\";W$j+=\"ing\";g$j=\"n\";g$j+=\"umb\";g$j+=\"er\";if(n1B.initialComparisonPrice){return n1B.initialComparisonPrice;}n1B.initialComparisonPrice=100;G4D=l0Y.Comparison.initialPrice;if(typeof G4D == g$j){n1B.initialComparisonPrice=G4D;}if(typeof G4D == W$j){if(n1B.series[G4D] || G4D === \"\"){L_Z=\"Close\";if(n1B.defaultPlotField){if(!n1B.highLowBars){L_Z=n1B.defaultPlotField;}}for(var Z3W=n1B.dataSet.length - n1B.scroll - +\"1\";Z3W < n1B.dataSet.length;Z3W++){q_u=n1B.dataSet[Z3W];if(q_u){if(q_u[G4D] && q_u[G4D][L_Z]){n1B.initialComparisonPrice=q_u[G4D][L_Z];break;}else if(G4D === \"\" && q_u[L_Z]){n1B.initialComparisonPrice=q_u[L_Z];break;}}}}}return n1B.initialComparisonPrice;};l0Y.Comparison.priceToPercent=function(A6L,j2P,m3B,w47,h4D){var P_o=q1l46;var B6I;B6I=A6L.comparisonBaseline;if(B6I && (h4D in B6I)){B6I=B6I[h4D];}if(B6I && typeof B6I === \"object\"){B6I=B6I[j2P.defaultPlotField || \"Close\"];}B6I=B6I || m3B;P_o.U1h(0);var s9F=P_o.M8Y(5,95);P_o.U1h(0);var c3L=P_o.M8Y(9231,769);P_o.R_O(0);var q4h=P_o.M8Y(9091,909);return Math.round((m3B - B6I) / B6I * s9F * c3L) / q4h;};l0Y.Comparison.percentToPrice=function(i55,L5x,L6r,v02,j3B){var V2d,f$A;V2d=\"C\";q1l46.P3W();V2d+=\"los\";V2d+=\"e\";f$A=i55.comparisonBaseline;if(f$A && (j3B in f$A)){f$A=f$A[j3B];}if(f$A && typeof f$A === \"object\"){f$A=f$A[L5x.defaultPlotField || V2d];}f$A=f$A || 1;q1l46.U1h(125);return q1l46.M8Y(L6r,1,f$A,100);};l0Y.Comparison.priceToRelative=function(U_M,E64,h3V,g2B,j1L){q1l46.P3W();var d$A,N_I,i9A;d$A=\"C\";d$A+=\"lo\";d$A+=\"s\";d$A+=\"e\";N_I=U_M.comparisonBaseline;i9A=l0Y.Comparison.getInitialPrice(E64);if(N_I && (j1L in N_I)){N_I=N_I[j1L];}if(N_I && typeof N_I === \"object\"){N_I=N_I[E64.defaultPlotField || d$A];}q1l46.R_O(15);return q1l46.M8Y(i9A,h3V,N_I || h3V);};l0Y.Comparison.relativeToPrice=function(b9E,j9E,f7V,a3$,t7k){var w2G,q_f;w2G=b9E.comparisonBaseline;q_f=l0Y.Comparison.getInitialPrice(j9E);if(w2G && (t7k in w2G)){w2G=w2G[t7k];}if(w2G && typeof w2G === \"object\"){w2G=w2G[j9E.defaultPlotField || \"Close\"];}q1l46.R_O(15);return q1l46.M8Y(w2G || 1,f7V,q_f);};l0Y.Comparison.createComparisonSegmentInner=function(W97,q$B){var Z1J=q1l46;var j2L,X4j,r3W,d5b,N81,K6Z,W4i,L$x,G2e,F46,s_m,A2b,u8b,x0o,W2l,q4z,B4z,N_R,l1j,Y$w,J$n,h1Z,a0e,k8C,s0H,B8M,b5j,G6Y;j2L=[];for(X4j in q$B.series){N81=q$B.series[X4j].parameters;if(!N81.yAxis && N81.shareYAxis || N81.yAxis === q$B.yAxis){j2L.push(N81.symbol);}}K6Z=[\"Close\",\"Open\",\"High\",\"Low\",\"iqPrevClose\"];W4i=W97.chart.highLowBars;if(q$B.defaultPlotField && !W4i){K6Z.unshift(q$B.defaultPlotField);}L$x=K6Z[+\"0\"];G2e=W97.layout.studies;for(var b9G in G2e){F46=\"_\";F46+=\"hist\";s_m=G2e[b9G];r3W=W97.panels[s_m.panel];d5b=s_m.getYAxis(W97);if(!r3W || r3W.yAxis != d5b)continue;for(X4j in s_m.outputMap){if(q$B.transformFunc && d5b == q$B.panel.yAxis && j2L.includes(s_m.inputs.Field)){K6Z.push({comparison:s_m.inputs.Field,field:X4j});}else {K6Z.push(X4j);}}for(var C4N=0;C4N <= 2;C4N++){K6Z.push(s_m.name + F46 + (C4N?C4N:\"\"));}if(s_m.referenceOutput){K6Z.push(s_m.referenceOutput + \" \" + s_m.name);}}for(var d0q in W97.plugins){A2b=W97.plugins[d0q];if(!A2b.transformOutputs)continue;for(X4j in A2b.transformOutputs){K6Z.push(X4j);}}q$B.initialComparisonPrice=null;q$B.dataSegment=[];u8b=null;Z1J.R_O(28);var t67=Z1J.M8Y(493,19,11,15);Z1J.C8A();x0o=q$B.dataSet.length - q$B.scroll - t67;if(W97.startComparisonsAtFirstVisibleBar){x0o+=1;}Z1J.R_O(8);var Q9N=Z1J.P_X(9,10);W2l=q$B.maxTicks + \"3\" * Q9N;for(var Z06=0;Z06 <= W2l;Z06++){if(Z06 == W2l){Z06=-1;}Z1J.U1h(0);q4z=Z1J.M8Y(Z06,x0o);if(q4z < q$B.dataSet.length && q4z >= +\"0\"){B4z=q$B.dataSet[q4z];N_R=B4z[L$x];if(!u8b){if(N_R === 0 || N_R === null){if(Z06 < 0)break;else continue;}u8b=l0Y.clone(B4z);}if(!B4z.transform){B4z.transform={cache:{},DT:B4z.DT,Date:B4z.Date};}if(!(u8b && u8b[L$x]) && N_R){u8b=l0Y.clone(B4z);}W97.comparisonBaseline=u8b;for(l1j=0;l1j < K6Z.length;l1j++){X4j=K6Z[l1j];Y$w=B4z[X4j];if(Y$w || Y$w === 0){B4z.transform[X4j]=q$B.transformFunc(W97,q$B,Y$w);}}for(l1j=0;l1j < j2L.length;l1j++){X4j=j2L[l1j];J$n=q$B.series[X4j];if(Z06 == -+\"1\" && J$n && J$n.parameters.isComparison){delete B4z.transform[X4j];continue;}h1Z=B4z[X4j];if(!h1Z)continue;for(var a$v=0;a$v < K6Z.length;a$v++){a0e=K6Z[a$v];k8C=h1Z[a0e];s0H=B4z.transform[X4j]=B4z.transform[X4j] || ({});if(typeof a0e == \"object\" && a0e.comparison == X4j){a0e=a0e.field;k8C=B4z[a0e];s0H=B4z.transform;}if(k8C || k8C === 0){B8M=u8b[X4j] && u8b[X4j][K6Z[0]];if(!B8M && B8M !== +\"0\"){if(!u8b[X4j]){u8b[X4j]={};}u8b[X4j][a0e]=B8M=k8C * u8b[L$x] / B4z[L$x];}if(B8M !== 0){b5j=u8b[L$x] || 1;Z1J.U1h(126);G6Y=Z1J.P_X(k8C,b5j,B8M);s0H[a0e]=q$B.transformFunc(W97,q$B,G6Y);}}}}q$B.dataSegment.push(B4z);}else if(q4z < 0){q$B.dataSegment.push(null);}if(Z06 < 0)break;}};l0Y.Comparison.priceFormat=function(T6j,A2k,Q7E){var e2R=q1l46;e2R.P3W();var m8t,r4b,K6P;if(Q7E === null || typeof Q7E == \"undefined\" || isNaN(Q7E)){return \"\";}m8t=A2k.yAxis.priceTick;r4b=T6j.internationalizer;if(r4b){if(m8t >= 5){e2R.U1h(9);Q7E=r4b.percent.format(e2R.P_X(Q7E,100));}else if(m8t >= +\"0.5\"){e2R.U1h(9);Q7E=r4b.percent1.format(e2R.P_X(Q7E,100));}else if(m8t >= \"0.05\" * 1){e2R.U1h(13);Q7E=r4b.percent2.format(e2R.P_X(Q7E,\"100\"));}else if(m8t >= 0.005){e2R.U1h(9);Q7E=r4b.percent3.format(e2R.P_X(Q7E,100));}else {e2R.R_O(9);Q7E=r4b.percent4.format(e2R.M8Y(Q7E,100));}}else {e2R.R_O(127);K6P=e2R.M8Y(1,Q7E,\"0\");if(m8t >= 5){Q7E=Q7E.toFixed(0) + (+\"9700\" >= +\"751.02\"?\"%\":+\"393.85\");}else if(m8t >= 0.5){e2R.R_O(128);var W2F=e2R.M8Y(11,16420,821,20,9843);e2R.U1h(27);var Y5a=e2R.P_X(6,4134,14);e2R.R_O(129);var Y2H=e2R.M8Y(7,15,18,80470,88528);Q7E=Q7E.toFixed(+\"1\") + ((W2F,817.61) !== (420.48,Y5a)?\"%\":(\"r\",Y2H));}else if(m8t >= 0.05){e2R.R_O(12);var j7_=e2R.P_X(8,10,1);e2R.U1h(8);var r4M=e2R.P_X(71120,76200);Q7E=Q7E.toFixed(j7_) + (+\"452.87\" >= (880.01,822.9)?(r4M,\"J\"):\"%\");}else if(m8t >= \"0.005\" * 1){e2R.U1h(102);var b4m=e2R.P_X(15,447,15,2);Q7E=Q7E.toFixed(b4m) + \"%\";}else {e2R.R_O(8);var c36=e2R.M8Y(12,16);Q7E=Q7E.toFixed(c36) + \"%\";}if(K6P){e2R.U1h(0);Q7E=e2R.M8Y(Q7E,+\"1.55\" <= 3630?6357 === (2670,945.58)?298.54:888 !== (1475,7816)?\"+\":309.98:\"91.16\" - 0);}}return Q7E;};l0Y.ChartEngine.prototype.setComparison=function(E7C,Y8w,o5j){var x7f,n8F,S$$,i$M;if(!Y8w){Y8w=this.chart;}if(typeof Y8w == \"string\"){Y8w=this.charts[Y8w];}q1l46.C8A();if(o5j || o5j === \"\"){l0Y.Comparison.initialPrice=o5j;}if(E7C === !![]){if(Y8w.isComparison){return;}E7C=\"percent\";}this.resetDynamicYAxis();x7f=Y8w.panel.yAxis;n8F=x7f.priceFormatter == l0Y.Comparison.priceFormat;switch(E7C){case \"relative\":this.setTransform(Y8w,l0Y.Comparison.priceToRelative,l0Y.Comparison.relativeToPrice);if(n8F){x7f.priceFormatter=x7f.originalPriceFormatter?x7f.originalPriceFormatter.func:null;x7f.originalPriceFormatter=null;}x7f.whichSet=\"dataSegment\";Y8w.isComparison=!!({});break;case \"percent\":S$$=\"dataSegmen\";S$$+=\"t\";this.setTransform(Y8w,l0Y.Comparison.priceToPercent,l0Y.Comparison.percentToPrice);if(!n8F){x7f.originalPriceFormatter={func:x7f.priceFormatter};x7f.priceFormatter=l0Y.Comparison.priceFormat;}x7f.whichSet=S$$;Y8w.isComparison=!0;break;default:i$M=\"d\";i$M+=\"ata\";i$M+=\"Se\";i$M+=\"t\";this.unsetTransform(Y8w);if(n8F){x7f.priceFormatter=x7f.originalPriceFormatter?x7f.originalPriceFormatter.func:null;x7f.originalPriceFormatter=null;}x7f.whichSet=i$M;Y8w.isComparison=!({});break;}};l0Y.ChartEngine.prototype.setChartScale=function(d6j){var Q0Q,b_d,F8g,M1T,a1a;Q0Q=\"l\";Q0Q+=\"ayo\";q1l46.P3W();Q0Q+=\"u\";Q0Q+=\"t\";b_d=\"l\";b_d+=\"i\";b_d+=\"nea\";b_d+=\"r\";F8g=this.chart;M1T={percent:!![],relative:!\"\"};if(!d6j){d6j=b_d;}if(M1T[d6j]){this.setComparison(d6j,F8g,l0Y.Comparison.initialPrice);}else if(M1T[this.layout.chartScale]){this.setComparison(![],F8g);}a1a=this.layout.chartScale !== d6j;this.layout.chartScale=d6j;if(F8g.canvas){this.draw();}if(a1a){this.changeOccurred(Q0Q);}};};H7=N1j=>{var G7S,r52;function O2I(e5y){var Y_x,E_9;q1l46.C8A();if(typeof html2canvas === \"undefined\"){Y_x=\"html2\";Y_x+=\"canvas.min\";Y_x+=\".\";Y_x+=\"js\";if(typeof requirejs !== \"undefined\"){try{E_9=\"ht\";E_9+=\"ml2canvas\";E_9+=\".min.\";E_9+=\"js\";return requirejs([E_9],function(l4D){q1l46.P3W();r52=l4D;return e5y();});}catch(l2d){console.warn(\"Require loading has failed, attempting to load html2canvas manually.\");}}G7S.loadScript(C0Z() + Y_x,function(){r52=html2canvas;return e5y();});}else {r52=html2canvas;return e5y();}}G7S=typeof _CIQ !== \"undefined\"?_CIQ:N1j.CIQ;G7S.Share=G7S.Share || (function(){});G7S.Share.fullChart2PNG=function(S3$,x5l,r7h){q1l46.C8A();if(!S3$ || !S3$.chart){return;}if(typeof html2canvas === \"undefined\"){return O2I(function(){q1l46.C8A();return z4C(S3$,x5l,r7h);});}r52=html2canvas;z4C(S3$,x5l,r7h);};G7S.Share.createImage=function(j7T,Q33,F$C){var Z2A,O_U,H$u,E$g,L7N,Y2o,f4W,u4k,d_U,D3e;Z2A=\"imag\";Z2A+=\"e/png\";O_U=\"ob\";q1l46.P3W();O_U+=\"ject\";H$u=[].slice.call(arguments);F$C=H$u.pop();if(Q33 === null || typeof Q33 != O_U){Q33={widthPX:H$u[+\"1\"],heightPX:H$u[+\"2\"],imageType:H$u[3]};}E$g=Q33.widthPX;L7N=Q33.heightPX;Y2o=Q33.imageType;f4W=j7T.chart.canvas.height;u4k=j7T.chart.canvas.width;if(j7T.chart.canvas.style.height){f4W=G7S.stripPX(j7T.chart.canvas.style.height);u4k=G7S.stripPX(j7T.chart.canvas.style.width);}if(E$g && L7N){f4W=L7N;u4k=E$g;}else if(L7N){u4k=j7T.chart.canvas.width * (f4W / j7T.chart.canvas.height);}else if(E$g){u4k=E$g;f4W=j7T.chart.canvas.height * (E$g / j7T.chart.canvas.width);}d_U=Y2o?\"image/\" + Y2o:Z2A;D3e=document.createElement(\"img\");D3e.onload=function(){G7S.Share.fullChart2PNG(j7T,{image:this,width:u4k,height:f4W,hide:Q33.hide},function(m_3,H3n){if(m_3){q1l46.U1h(0);console.warn(q1l46.P_X(m_3,\"Error producing canvas snapshot: \"));}else {try{F$C(H3n.toDataURL(d_U));}catch(s5c){var G7X;G7X=\"Safari devices do not handle CORS enabled images. Using the \";G7X+=\"charts' canvas as a fallback.\";console.warn(G7X);F$C(D3e.src);}}});};D3e.src=j7T.chart.canvas.toDataURL(d_U);};function p1J(o3E){var d6i,l3S,l2f,K5D;d6i=\"fo\";d6i+=\"nt-\";d6i+=\"siz\";d6i+=\"e\";l3S=\"f\";l3S+=\"ill\";l3S+=\"-\";l3S+=\"opacity\";if(!o3E.style){return;}l2f=getComputedStyle(o3E);K5D=[\"alignment-baseline\",\"dominant-baseline\",\"fill\",l3S,\"font-family\",d6i,\"font-variant\",\"font-weight\",\"text-align\",\"text-anchor\"];K5D.forEach(function(G0t){if(!o3E.style[G0t] && l2f[G0t]){o3E.style[G0t]=l2f[G0t];}});for(var D5T in o3E.children){p1J(o3E.children[D5T]);}}G7S.Share.uploadImage=function(L22,H8S,w_O,A0s){var R7G;if(!w_O){w_O={};}q1l46.P3W();w_O.image=L22;R7G=G7S.postAjax(H8S,JSON.stringify(w_O),function(r3D,e77){if(r3D != 200){A0s(r3D,null);return;}A0s(null,e77);});if(!R7G){q1l46.U1h(1);A0s(q1l46.P_X(\"0\",0),null);}};G7S.Share.shareChart=function(d4t,a3y,o_Q){var p1c=q1l46;p1c.P3W();G7S.Share.createImage(d4t,{},function(L8u){var w2W,J1T,f5_,p3I,N4Y,J9b;w2W=G7S.uniqueID();J1T=\"https://share.chartiq.com\";p1c.R_O(14);f5_=p1c.P_X(\"/upload/\",w2W,J1T);if(a3y){if(a3y.host){J1T=a3y.host;}if(a3y.path){p1c.R_O(0);var n03=p1c.M8Y(18,2590);p1c.R_O(102);var l0N=p1c.P_X(8163,171426,2,11);p1c.R_O(130);var G5P=p1c.M8Y(1122,4496,2248);p1c.U1h(131);var t59=p1c.P_X(3,7504,758,751,4);f5_=J1T + a3y.path + ((n03,l0N) != G5P?\"/\":(\"N\",t59)) + w2W;}}p3I=d4t.getStartDateOffset();N4Y={layout:d4t.exportLayout(),drawings:d4t.exportDrawings(),xOffset:p3I,startDate:d4t.chart.dataSegment[p3I].Date,endDate:d4t.chart.dataSegment[d4t.chart.dataSegment.length - 1].Date,id:w2W,symbol:d4t.chart.symbol};J9b={id:w2W,image:L8u,config:N4Y};G7S.Share.uploadImage(L8u,f5_,J9b,function(T3_,p$u){p1c.P3W();if(T3_ !== null){G7S.alert(\"error sharing chart: \",T3_);}else {p1c.U1h(0);o_Q(p1c.P_X(p$u,J1T));}});});};G7S.Share.saveChartLayout=async l46=>{var B2d,N9C,v6t,w7Y,p5A,p44;var {chartSharing:e4G}=l46.uiContext.config;if(!e4G || !e4G.saveChartLayout){B2d=\"s\";B2d+=\"aveChartLayout not de\";B2d+=\"fin\";B2d+=\"ed in config\";throw new Error(B2d);}q1l46.P3W();if(l46.chart.dataSegment[\"0\" >> 64] && l46.chart.dataSegment[0].DT){N9C=l46.chart.dataSegment[0].DT;}else if(l46.chart.dataSet[0]){N9C=l46.chart.dataSet[0].DT;}if(!N9C){throw new Error(\"Unable to retrieve starting point of data set or segment\");}l46.layout.range={padding:l46.preferences.whitespace,dtLeft:N9C,dtRight:l46.chart.dataSegment[l46.chart.dataSegment.length - 1].DT,periodicity:{period:l46.layout.periodicity,interval:l46.layout.interval,timeUnit:l46.layout.timeUnit}};v6t=l46.exportLayout({withSymbols:!!1});w7Y=l46.exportDrawings();p5A=l46.exportPreferences();p44=`${l46.chart.symbol} Chart`;return e4G.saveChartLayout(JSON.stringify({version:G7S.packageInfo.version,layout:v6t,drawings:w7Y,preferences:p5A,chartTitle:p44}));};G7S.Share.extractShareID=G5z=>{var A5O;A5O=G5z.match(/([a-z0-9]+-[a-z0-9]+-[a-z0-9]+-[a-z0-9]+-[a-z0-9]+)/);return A5O && A5O[1] || \"\";};G7S.Share.onClipboard=t6D=>{q1l46.C8A();window.addEventListener(\"paste\",async function(n7B){var g08,e_W,P2k;g08=\"\";q1l46.P3W();if(window.clipboardData && window.clipboardData.getData){e_W=\"T\";e_W+=\"e\";e_W+=\"x\";e_W+=\"t\";g08=window.clipboardData.getData(e_W);}else if(n7B.clipboardData && n7B.clipboardData.getData){g08=n7B.clipboardData.getData(\"text/plain\");}P2k=G7S.Share.extractShareID(g08);if(P2k){t6D(P2k);}});};function z4C(a$f,j65,G6s){var I34,i1x,O4Q,C_0,h7x,X30,K9x,t7O,E5G,U5x;function J7j(B_Q,N$l){B_Q.classList[N$l](\"sharing\");(B_Q.root || B_Q).querySelectorAll(\"[interactable]\").forEach(function(Z0x){J7j(Z0x,N$l);});}if(!j65){j65={};}I34=\"ciq-no-share\";i1x=a$f.uiContext && a$f.uiContext.topNode || a$f.container.ownerDocument.body;O4Q=i1x.parentElement.closest(\"cq-context\");if(O4Q){i1x=O4Q;}if(j65.hide && j65.hide instanceof Array){C_0=\",\";C_0+=\" \";h7x=j65.hide.join(C_0);X30=i1x.querySelectorAll(h7x);for(var m5d=0;m5d < X30.length;m5d++){X30[m5d].classList.add(I34);}}J7j(i1x,\"add\");a$f.draw();K9x=a$f.chart.container.getElementsByTagName(\"svg\");q1l46.C8A();t7O=[];E5G=0;for(;E5G < K9x.length;E5G++){U5x=K9x[E5G];t7O.push(U5x.innerHTML);p1J(U5x);}r52(a$f.chart.container,{allowTaint:!1,foreignObjectRendering:!1,logging:!\"1\",width:j65.width || null,height:j65.height || null,backgroundColor:j65.background || null,useCORS:!\"\"}).then(function(i8F){var C8B,B_y,U1t;if(G6s){C8B=-85364698;B_y=2003728522;U1t=2;for(var I0S=1;q1l46.I9N(I0S.toString(),I0S.toString().length,\"34038\" | 50) !== C8B;I0S++){G6s(1,j65.data?i8F.toDataURL(\"\"):i8F);U1t+=2;}if(q1l46.G33(U1t.toString(),U1t.toString().length,+\"36524\") !== B_y){G6s(null,j65.data?i8F.toDataURL(\"image/png\"):i8F);}}for(E5G=0;E5G < K9x.length;E5G++){K9x[E5G].innerHTML=t7O[E5G];}J7j(i1x,\"remove\");}).catch(function(H3Y){if(G6s){G6s(H3Y);}for(E5G=0;E5G < K9x.length;E5G++){K9x[E5G].innerHTML=t7O[E5G];}J7j(i1x,\"remove\");});}G7S.Share.getClipboard=async ()=>{q1l46.C8A();return new Promise(async m0a=>{var A9k;q1l46.P3W();try{A9k=G7S.Share.extractShareID(await navigator.clipboard.readText());m0a(A9k);}catch(S$r){m0a(\"\");}});};G7S.Share.loadChartFromID=async (U7j,R43)=>{q1l46.P3W();return new Promise(async (S$n,p5h)=>{var x5$,T5V;if(!R43){return p5h();}var {getChartLayout:k4V}=U7j.uiContext.config.chartSharing;x5$=await k4V(R43);T5V=JSON.parse(x5$);S$n(G7S.Share.loadChartFromLayout(U7j,T5V));});};G7S.Share.loadChartFromLayout=async (X0y,B3I)=>{q1l46.P3W();return new Promise(async (Z6f,z50)=>{if(B3I.version.split(9430 <= 3396?!![]:5178 <= 7073?\".\":3090 == 2700?![]:(+\"3.41e+3\",\"509.77\" * 1))[0] != G7S.packageInfo.version.split(\".\")[0]){z50(new Error(\"Version mismatch\"));}X0y.importPreferences(B3I.preferences);X0y.importLayout(B3I.layout,{managePeriodicity:!0,preserveTicksAndCandleWidth:!![],cb:()=>{X0y.importDrawings(B3I.drawings);X0y.draw();q1l46.C8A();Z6f();}});});};function C0Z(){var r9q,V9$,x9H;r9q=\"js/thir\";r9q+=\"dp\";r9q+=\"arty/\";if(G7S.Share.html2canvasLocation){return G7S.Share.html2canvasLocation;}V9$=document.getElementsByTagName(\"script\");q1l46.C8A();for(var d$q=+\"0\";d$q < V9$.length;d$q++){x9H=V9$[d$q];if(x9H.src && x9H.src.indexOf(\"share.js\") > -+\"1\"){return x9H.src.replace(/standard\\/share\\.js/,\"\") + \"thirdparty/\";}}return r9q;}};g0=Q2h=>{var D9f=q1l46;var f2K,l_D,R0Z,e9H;f2K=1150363454;l_D=211356605;R0Z=2;for(var R6U=+\"1\";D9f.I9N(R6U.toString(),R6U.toString().length,16650) !== f2K;R6U++){e9H=typeof _CIQ !== \"undefined\"?_CIQ:Q2h.CIQ;R0Z+=2;}if(D9f.G33(R0Z.toString(),R0Z.toString().length,99258) !== l_D){e9H=!_CIQ === \"\"?_CIQ:Q2h.CIQ;}e9H.ChartEngine.prototype.setRange=function(k4R,t6R){var w6w,a5x,n7p,X1X,A4e,t8v,q0m,e60,T67,A41,b32,N_i,n7e,F3u,y$a,X85,O79,I5u,E4w,T2Z,S2g,D4I,d7b,m4c,w2b,a8w,B6y,g4G,Z6M,u2l,Z8G,J5$,Y84,j8i,O_3,P63;w6w=\"s\";w6w+=\"tring\";a5x=\"s\";function B5F(G7t){var M1h;if(G7t && T67 === 0){X1X.scroll=d7b;e60.setCandleWidth(m4c);e60.layout.interval=w2b;e60.layout.periodicity=a8w;e60.layout.timeUnit=B6y;if(t6R){t6R(G7t);}return;}T67++;if(T67 > 10){M1h=\"CIQ.Char\";M1h+=\"tEngine.setRange(): Too many loads (10) from server. Stopping. Check periodic\";M1h+=\"ity logic.\";console.log(M1h);c0U();return;}D9f.P3W();c0U();}a5x+=\"t\";a5x+=\"r\";function c0U(U8G){var L0_,x_N,E0p,Z73,Q7d,S7k,B$6,x0m,k7L,p2s,Y3B,D2n,Y5l,D8I,r_6,X9W,z_0,j5U,l8e,U9Z;L0_=\"t\";L0_+=\"o\";L0_+=\"da\";L0_+=\"y\";if(typeof U8G == \"undefined\"){U8G=null;}x_N=0;E0p=0;Z73=new Date();Q7d=k4R.base;S7k=k4R.periodicity;B$6=e60.layout;if(k4R.goIntoFuture && (!X1X.masterData.length || A4e > X1X.masterData[X1X.masterData.length - +\"1\"].DT)){x0m=\"ga\";x0m+=\"p\";k7L=X1X.masterData.length?X1X.masterData.pop():{DT:A4e};p2s=e60.doCleanupGaps([k7L,{DT:t8v}],X1X,{cleanupGaps:x0m,noCleanupDates:!!({})});e60.setMasterData(X1X.masterData.concat(p2s),X1X,{noCleanupDates:!\"\"});e60.createDataSet(null,null,{appending:!\"\"});}Y3B=X1X.dataSet;D2n=Y3B.length;if(!Y3B || D2n === \"0\" >> 32){e60.draw();if(t6R){t6R(U8G);}return;}if(Q7d === \"day\" && S7k && S7k.interval === \"day\"){D8I=k4R.multiplier;x_N=D2n < D8I?0:D2n - D8I;D9f.R_O(8);E0p=D9f.P_X(1,D2n);}else if(Q7d === L0_ && Y3B[D2n - 1].DT.getDate() < Z73.getDate()){r_6=new Date(Y3B[D2n - 1].DT.getTime());X9W=r_6.getTime();Y5l=+\"0\";for(var t89=D2n - 1;t89 >= 0;t89--){if(Y3B[t89] && Y3B[t89].DT.getDate() != r_6.getDate()){r_6=new Date(+Y3B[t89 + (\"1\" >> 0)].DT);D9f.U1h(0);Y5l=D9f.M8Y(1,t89);break;}}x_N=Y5l;D9f.U1h(8);E0p=D9f.P_X(1,D2n);}else {z_0=\"a\";z_0+=\"l\";z_0+=\"l\";if(k4R.base != \"all\" && (A4e.getTime() >= Y3B[+\"0\"].DT.getTime() || k4R.goIntoPast)){x_N=e60.tickFromDate(A4e,X1X,null,!\"\");}else {x_N=0;}if(k4R.base != z_0 && (t8v.getTime() <= Y3B[D2n - 1].DT.getTime() || k4R.goIntoFuture)){E0p=e60.tickFromDate(t8v,X1X);if(E0p > D2n - 1){E0p--;}}else {D9f.U1h(132);E0p=D9f.M8Y(D2n,\"1\",64);}}D9f.R_O(7);j5U=D9f.P_X(E0p,1,x_N);if(j5U < (\"1\" ^ 0)){e60.draw();if(t6R){t6R(U8G);}return;}l8e=k4R.padding || 0;if(E0p < D2n - 1){l8e=0;}U9Z=(X1X.width - l8e) / j5U;e60.setCandleWidth(U9Z,X1X);D9f.U1h(133);X1X.scroll=D9f.P_X(j5U,D2n,E0p,1);e60.micropixels=1;for(var p1O in e60.panels){e60.calculateYAxisMargins(e60.panels[p1O].yAxis);}if(!k4R.dontSaveRangeToLayout){delete k4R.chart;delete B$6.setSpan;B$6.range=k4R;}else {delete B$6.range;}e60.draw();e60.changeOccurred(\"layout\");if(!n7p){e60.dispatch(\"periodicity\",{stx:e60,differentData:g4G,prevPeriodicity:{interval:w2b,periodicity:a8w,timeUnit:B6y}});}if(t6R){t6R(U8G);}}a5x+=\"ing\";if(e9H.isEmpty(k4R)){k4R={dtLeft:arguments[\"0\" ^ 0],dtRight:arguments[1],padding:arguments[2],chart:arguments[3]};D9f.R_O(2);t6R=arguments[D9f.M8Y(\"4\",1)];}if(this.staticRange){k4R.goIntoPast=k4R.goIntoFuture=!!({});}if(!k4R.chart){k4R.chart=this.chart;}if(typeof k4R.padding == \"undefined\"){D9f.R_O(1);k4R.padding=D9f.M8Y(\"0\",0);}n7p=!\"1\";X1X=k4R.chart;A4e=typeof k4R.dtLeft === a5x?new Date(k4R.dtLeft):k4R.dtLeft;D9f.P3W();t8v=new Date();if(k4R.dtRight){t8v=typeof k4R.dtRight === w6w?new Date(k4R.dtRight):k4R.dtRight;}function q7Y(M0P,s8_,v9g,y77,o5v,d9m){var y3T,j_q;y3T=0;D9f.U1h(8);j_q=D9f.M8Y(s8_,M0P);if(e9H.ChartEngine.isDailyInterval(v9g)){if(v9g == \"month\"){y3T=j_q / e9H.MONTH / y77;}else if(v9g == \"week\"){y3T=j_q / e9H.WEEK / y77;}else {y3T=j_q / e9H.DAY / y77;}}else {if(!isNaN(v9g)){if(o5v == \"millisecond\"){D9f.R_O(134);y3T=D9f.M8Y(v9g,y77,j_q);}else if(o5v == \"second\"){y3T=j_q / e9H.SECOND / (y77 * v9g);}else {y3T=j_q / e9H.MINUTE / (y77 * v9g);}}}return Math.round(y3T);}if(!A4e){q0m=this.standardMarketIterator(t8v,null,X1X);A4e=q0m.previous(X1X.maxTicks);if(!k4R.periodicity){n7p=!!\"1\";}}X1X.inflectionPoint=A4e;this.layout.range={dtLeft:A4e,dtRight:t8v};e60=this;T67=0;if(this.quoteDriver){if(n7p){A41=this.layout.interval;N_i=this.layout.timeUnit;b32=this.layout.periodicity;}else if(k4R.periodicity){n7e=e9H.cleanPeriodicity(k4R.periodicity.period,k4R.periodicity.interval,k4R.periodicity.timeUnit);A41=n7e.interval;N_i=n7e.timeUnit;b32=n7e.period;}else {F3u=t8v.getTime() - A4e.getTime();if(!this.autoPickCandleWidth.turnOn){y$a=this.staticRangePeriodicityMap;X85=null;for(var A4C=0;A4C < y$a.length;A4C++){O79=y$a[A4C];if(F3u / O79.rangeInMS < 1.001){X85=O79;break;}}A41=X85.interval;b32=X85.periodicity;N_i=X85.timeUnit;}else {I5u=0;if(this.autoPickCandleWidth.candleWidth){I5u=this.autoPickCandleWidth.candleWidth;}else {I5u=this.chart.barsHaveWidth?5:2;}E4w=X1X.width / I5u;T2Z=this.dynamicRangePeriodicityMap;A41=T2Z[0].interval;b32=1;for(var T0p=0;T0p < T2Z.length;T0p++){D4I=F3u / T2Z[T0p].rangeInMS;if(D4I < E4w){if(T2Z[T0p - 1]){A41=T2Z[T0p - 1].interval;N_i=T2Z[T0p - 1].timeUnit;D9f.U1h(9);b32=Math.ceil(D9f.P_X(S2g,E4w));}else {A41=T2Z[T0p].interval;N_i=T2Z[T0p].timeUnit;b32=1;}break;}S2g=D4I;}}}d7b=this.chart.scroll;m4c=this.layout.candleWidth;w2b=this.layout.interval;a8w=this.layout.periodicity;B6y=this.layout.timeUnit;this.chart.scroll=this.chart.maxTicks=q7Y(t8v.getTime(),A4e.getTime(),A41,b32,N_i,this.dontRoll);this.layout.candleWidth=this.chart.width / this.chart.maxTicks;g4G=this.needDifferentData({period:b32,interval:A41,timeUnit:N_i});if(Object.keys(this.chart.endPoints).length && (this.chart.endPoints.begin > A4e || this.chart.endPoints.end < t8v)){g4G=!\"\";}if(k4R.useExistingData){g4G=![];}if(!this.chart.masterData || !this.chart.masterData.length || g4G || k4R.forceLoad){Z6M=\"w\";Z6M+=\"e\";Z6M+=\"ek\";this.layout.interval=A41;this.layout.periodicity=b32;this.layout.timeUnit=N_i;if(!this.layout.timeUnit){u2l=\"mi\";u2l+=\"n\";u2l+=\"ut\";u2l+=\"e\";Z8G=\"s\";Z8G+=\"ec\";Z8G+=\"o\";Z8G+=\"nd\";J5$=\"se\";J5$+=\"c\";J5$+=\"o\";J5$+=\"nd\";if(e9H.ChartEngine.isDailyInterval(this.layout.interval)){this.layout.timeUnit=null;}else if(this.layout.interval == J5$){this.layout.timeUnit=Z8G;}else if(this.layout.interval != \"tick\"){this.layout.timeUnit=u2l;}}Y84={symbol:X1X.symbol,symbolObject:X1X.symbolObject,chart:X1X,nodraw:!!\"1\"};if(this.layout.interval == \"tick\"){Y84.startDate=A4e;Y84.endDate=t8v;}if(!this.displayInitialized){Y84.initializeChart=!![];}j8i={symbol:X1X.symbol,symbolObject:X1X.symbolObject,interval:this.layout.interval};if((j8i.interval == \"month\" || j8i.interval == Z6M) && !this.dontRoll){O_3=\"da\";O_3+=\"y\";j8i.interval=O_3;}P63=Math.max(this.quoteDriver.getQuoteFeed(j8i).behavior.bufferSize + 50,200);q0m=this.standardMarketIterator(A4e,null,X1X);Y84.startDate=new Date(q0m.previous(P63).getTime());q0m=this.standardMarketIterator(t8v,null,X1X);Y84.endDate=new Date(q0m.next(P63).getTime());if(Y84.endDate < Date.now()){this.isHistoricalModeSet=!![];}this.clearCurrentMarketData(this.chart);clearTimeout(this.streamParameters.timeout);this.quoteDriver.newChart(Y84,B5F);}else {if(this.layout.interval != A41 || this.layout.periodicity != b32 || this.layout.timeUnit != N_i || !this.chart.dataSegment || !this.chart.dataSegment[\"0\" * 1] || this.chart.dataSegment[0].DT != X1X.inflectionPoint){this.layout.interval=A41;this.layout.periodicity=b32;this.layout.timeUnit=N_i;this.createDataSet();}B5F();}}else {c0U();}};e9H.ChartEngine.prototype.setSpan=function(G1T,x2Z){var l8f,y5p,u3P,o9V,A3P,k8m,h11,k7I,a2r,v1l,l4o,W27,g8i,Z4c,s9H,E5T,o1v,V6r,P1T,b0k,A3C;l8f=\"to\";l8f+=\"day\";y5p=\"d\";y5p+=\"a\";y5p+=\"y\";u3P=\"y\";function w39(C0C){C0C.setHours(0);C0C.setMinutes(0);C0C.setSeconds(0);C0C.setMilliseconds(0);return C0C;}u3P+=\"ear\";o9V=arguments[0];A3P=arguments[1];k8m=arguments[2];h11=arguments[3];if(typeof G1T == \"object\"){o9V=G1T.period?G1T.period:G1T.multiplier?G1T.multiplier:1;A3P=G1T.interval?G1T.interval:G1T.base?G1T.base:G1T.span?G1T.span:G1T.period;k8m=G1T.padding;h11=G1T.chart;}else {G1T={period:o9V,interval:A3P,padding:k8m,chart:h11};x2Z=arguments[5];}if(!h11){h11=this.chart;}k7I=h11.market;A3P=A3P.toLowerCase();if(A3P == \"all\"){G1T.dontSaveRangeToLayout=!\"\";this.displayAll(G1T,x2Z);return;}v1l=A3P;l4o=1;if(A3P == \"today\"){v1l=\"day\";}else if(A3P == u3P){W27=\"m\";W27+=\"o\";W27+=\"nt\";W27+=\"h\";v1l=W27;l4o=12;}g8i=e9H.shallowClone(G1T);Z4c={begin:k7I.marketZoneNow(),interval:v1l,period:l4o};s9H=Z4c.begin;E5T=e9H.Market.Symbology.isForexSymbol(h11.symbol);if(A3P === \"ytd\"){s9H=w39(s9H);s9H.setMonth(0);s9H.setDate(1);}else if(A3P === \"month\"){s9H=w39(new Date());s9H.setMonth(s9H.getMonth() - o9V);}else if(A3P === \"year\"){s9H=w39(new Date());s9H.setFullYear(s9H.getFullYear() - o9V);}else if(A3P === \"week\"){s9H=w39(new Date());s9H.setDate(s9H.getDate() - o9V * 7);}else if(A3P === y5p && o9V == 1 && k7I.isMarketDay()){o1v=s9H.getHours();V6r=s9H.getMinutes();P1T=s9H.getSeconds();b0k=s9H.getMilliseconds();a2r=k7I.newIterator(Z4c);s9H=a2r.previous();s9H.setHours(o1v,V6r,P1T,b0k);s9H=k7I._convertFromMarketTZ(s9H);}else if(A3P === l8f){Z4c.begin=Q_O(s9H,!!\"1\");a2r=k7I.newIterator(Z4c);if(k7I.isOpen() || k7I.getPreviousOpen().getDate() == s9H.getDate()){a2r.next();}s9H=a2r.previous();Q_O(s9H);g8i.goIntoFuture=!!\"1\";g8i.dtRight=new Date(+s9H);g8i.dtRight.setDate(s9H.getDate() + (\"1\" ^ 0));g8i.dtRight=k7I._convertFromMarketTZ(g8i.dtRight);if(!E5T){s9H.setHours(a2r.market.zopen_hour);s9H.setMinutes(a2r.market.zopen_minute);s9H.setSeconds(0);}s9H=k7I._convertFromMarketTZ(s9H);}else {if(A3P == \"day\"){Z4c.begin=Q_O(s9H,!![]);}a2r=k7I.newIterator(Z4c);if(o9V == 1){o9V++;}D9f.U1h(8);s9H=a2r.previous(D9f.M8Y(1,o9V));if(A3P == \"day\"){s9H=k7I._convertFromMarketTZ(Q_O(s9H));}}g8i.dtLeft=s9H;if(g8i.maintainPeriodicity){g8i.periodicity={};g8i.periodicity.interval=this.layout.interval;g8i.periodicity.period=this.layout.periodicity;}h11.spanLock=!1;g8i.dontSaveRangeToLayout=!0;function Q_O(v1o,O7u){var E_Q;if(!E5T){return v1o;}E_Q=7;if(O7u){v1o.setHours(v1o.getHours() + E_Q);}else {v1o.setHours(v1o.getHours() - E_Q);if(!k7I.isMarketDate(v1o)){v1o.setDate(v1o.getDate() - 2);}}return v1o;}A3C=this;this.setRange(g8i,function(A1N){D9f.C8A();A3C.layout.setSpan=G1T;A3C.changeOccurred(\"layout\");if(A3P == \"today\"){h11.spanLock=!\"\";}if(x2Z){x2Z(A1N);}});};e9H.ChartEngine.prototype.getSpanCandleWidth=function(q2c){var I7R,d9E,s9x,e2O,u_K,S$c;if(!q2c || !q2c.base || !q2c.multiplier){return;}I7R=parseFloat(q2c.multiplier);D9f.P3W();d9E=q2c.base;s9x=new Date();e2O=new Date();if(d9E == \"year\"){e2O.setFullYear(e2O.getFullYear() - I7R);}else if(d9E == \"month\"){e2O.setMonth(e2O.getMonth() - I7R);}else if(d9E == \"day\"){e2O.setDate(e2O.getDate() - I7R);}else if(d9E == \"week\"){e2O.setDate(e2O.getDate() - 7 * I7R);}else if(d9E == \"YTD\"){e2O.setMonth(0);D9f.R_O(8);e2O.setDate(D9f.M8Y(0,\"1\"));}D9f.U1h(0);var x8P=D9f.M8Y(17,983);D9f.R_O(130);var E8D=D9f.P_X(59,43,43);D9f.U1h(8);var R1U=D9f.M8Y(15,75);D9f.R_O(37);var w5V=D9f.M8Y(11,288,3134,10);u_K=(s9x.getTime() - e2O.getTime()) / x8P / E8D / R1U / w5V;D9f.R_O(16);u_K=D9f.P_X(5,\"7\",u_K);S$c=this.chart.width / u_K;return S$c;};e9H.ChartEngine.prototype.displayAll=function(c85,V6H){var S07,B8G,X6S,h$1,p6t;S07=\"mon\";S07+=\"t\";S07+=\"h\";var {chart:F_v, layout:H3i}=this;B8G=[];if(c85 && c85.chart){F_v=c85.chart;}X6S=this;D9f.C8A();if(!this.quoteDriver){r2p();return;}h$1=c85.maintainPeriodicity?{period:H3i.periodicity,interval:H3i.interval,timeUnit:H3i.timeUnit}:{period:1,interval:S07,timeUnit:null};h$1=c85.periodicity?c85.periodicity:h$1;h$1=e9H.cleanPeriodicity(h$1.period,h$1.interval,h$1.timeUnit);p6t=this.needDifferentData(h$1);this.layout.periodicity=h$1.period;this.layout.interval=h$1.interval;this.layout.timeUnit=h$1.timeUnit;if(c85.forceLoad || p6t){B8G=this.drawingObjects.map(Z$c=>{return Z$c.serialize();});this.clearCurrentMarketData(this.chart);this.quoteDriver.newChart({nodraw:!!({}),symbol:this.chart.symbol,symbolObject:this.chart.symbolObject,chart:this.chart,initializeChart:!![],fetchMaximumBars:!!({})},w81);}else {if(F_v.moreAvailable || !F_v.upToDate){w81();}else {this.createDataSet();r2p();}}function r2p(){var b18;if(!F_v.masterData || !F_v.masterData.length){if(V6H){V6H(\"No data to display.\");}return;}b18=e9H.clone(c85);b18.dtLeft=F_v.endPoints.begin;b18.dtRight=F_v.endPoints.end;b18.periodicity={};b18.periodicity.interval=H3i.interval;b18.periodicity.period=H3i.periodicity;b18.periodicity.timeUnit=H3i.timeUnit;X6S.setRange(b18,function(t8U){var a6f;D9f.P3W();a6f=\"l\";a6f+=\"ayo\";a6f+=\"ut\";X6S.layout.setSpan={base:c85.base,multiplier:c85.multiplier};X6S.changeOccurred(a6f);for(var L06 in X6S.panels){X6S.calculateYAxisMargins(X6S.panels[L06].yAxis);}if(B8G.length && !X6S.drawingObjects.length){X6S.importDrawings(B8G);}X6S.draw();if(V6H){V6H(t8U);}});}function w81(J_3){D9f.P3W();if(!J_3){X6S.quoteDriver.loadAll(F_v,r2p);}}};e9H.ChartEngine.prototype.drawWithRange=function(t_s){var p6w,E8n,x9j;var {setSpan:S53, range:t8L}=this.layout;D9f.C8A();if(S53 && Object.keys(S53).length){p6w=579005461;E8n=-1190370971;D9f.R_O(34);x9j=D9f.M8Y(\"2\",0);for(var T4T=1;D9f.G33(T4T.toString(),T4T.toString().length,99739) !== p6w;T4T++){this.setSpan(Object.assign({},S53,{forceLoad:!![],useExistingData:!({})}));x9j+=2;}if(D9f.G33(x9j.toString(),x9j.toString().length,+\"14977\") !== E8n){this.setSpan(Object.assign({},S53,{forceLoad:!({}),useExistingData:!!({})}));}}else if(t8L && Object.keys(t8L).length){this.setRange(Object.assign({},t8L,{forceLoad:!!\"\",useExistingData:!![]}));}else {this.draw(t_s);}};};P1=c9U=>{var g5N;g5N=typeof _CIQ !== \"undefined\"?_CIQ:c9U.CIQ;g5N.ChartEngine.prototype.importLayout=function(Q_I,v_5){var c5f=q1l46;var A$4,P8R,y2_,d8Y,X_b,c5i,G1P,l2x,m3t,e5R,j45,y7g,j7E,O2W,C6G,A3_,m5t,a5I,u_Z,U2s,P3l,b7v,O_l,Z94,n9M,b1z,B4A,l8n,X_s,E03,X3M,B9f,J0z,J5a,g9w,L02,T7i;A$4=\"un\";A$4+=\"de\";A$4+=\"fined\";if(!Q_I){if(v_5.cb){v_5.cb();}return;}P8R=this;y2_=[];c5f.C8A();d8Y=this.extendedHours && !this.extendedHours.filter && Q_I.extended && !this.layout.extended;if(typeof v_5 !== \"object\"){v_5={managePeriodicity:arguments[1],preserveTicksAndCandleWidth:arguments[2]};}X_b=this.layout;c5i=g5N.shallowClone(X_b);function F4v(q3Y){var X8h;for(var j3F=0;j3F < y2_.length;j3F++){X8h=y2_[j3F];o2d(X8h,\"yaxisLHS\");o2d(X8h,\"yaxisRHS\");}c5f.P3W();P8R.chart.yAxis=P8R.chart.panel.yAxis;function a19(r6B){c5f.C8A();return !!r6B;}function o2d(I2O,x4x){var M46,V1r,r5$,e9$;if(!I2O[x4x] || !I2O[x4x].length){return;}M46=q3Y[I2O.name];if(!M46){return;}V1r=M46[x4x];r5$=new Array(V1r.length);for(var X8B=0;X8B < V1r.length;X8B++){e9$=I2O[x4x].indexOf(V1r[X8B].name);if(e9$ > -1){r5$[e9$]=V1r[X8B];}else {r5$.push(V1r[X8B]);}}if(r5$.length){M46[x4x]=r5$.filter(a19);}}}G1P=v_5.managePeriodicity;l2x=v_5.cb;m3t=v_5.seriesCB;e5R=v_5.noDataLoad;function c1F(U49){var s4f,Q2b,i$n,Y4h,w_S;s4f=\"lay\";function S7Z(){P8R.createDataSet();F4v(P8R.panels);P8R.calculateYAxisPositions();c5f.C8A();P8R.calculateYAxisMargins(P8R.chart.yAxis);P8R.draw();}s4f+=\"ou\";s4f+=\"t\";if(y7g){P8R.importDrawings(y7g);}P8R.currentlyImporting=!!0;if(U49){return;}Y4h=[];for(var V52 in P8R.chart.series){if(!P8R.removeSeries)break;i$n=P8R.chart.series[V52];if(i$n.parameters.bucket == \"study\"){Q2b=!![];P8R.removeSeries(i$n);Y4h.push(i$n);}}for(var u1$=0;u1$ < Y4h.length;u1$++){i$n=Y4h[u1$];w_S=i$n.parameters.isEvent?\"addEvent\":\"addSeries\";P8R[w_S](i$n.id,i$n.parameters,S7Z);}if(!Q2b){P8R.draw();}if(X_b.crosshair){P8R.centerCrosshairs();P8R.doDisplayCrosshairs();}P8R.updateListeners(\"layout\");P8R.changeOccurred(s4f);}j45=v_5.preserveTicksAndCandleWidth;y7g=null;if(this.exportDrawings){y7g=this.exportDrawings();this.abortDrawings();}this.currentlyImporting=!![];for(var P0w in X_b.studies){j7E=X_b.studies[P0w];g5N.getFn(\"Studies.removeStudy\")(this,j7E);}this.overlays={};O2W=g5N.shallowClone(this.panels);this.panels={};C6G=g5N.clone(Q_I);if(X_b.flipped){this.flipChart(X_b.flipped);}A3_=C6G.panels;U2s=function(F9r,g09){return F9r.index < g09.index?-1:1;};for(m5t in A3_){if(!((\"index\" in A3_[m5t]))){U2s=null;}a5I=A3_[m5t];a5I.name=m5t;y2_.push(a5I);}X_b.panels={};P3l=null;if(y2_.length > \"0\" >> 64){if(U2s){y2_.sort(U2s);}for(var c1l=0;c1l < y2_.length;++c1l){a5I=y2_[c1l];u_Z=a5I.yAxis?new g5N.ChartEngine.YAxis(a5I.yAxis):null;this.stackPanel(a5I.display,a5I.name,a5I.percent,a5I.chartName,u_Z);if(a5I.soloing){P3l=this.panels[a5I.name];}}}if(g5N.isEmpty(A3_)){b7v=\"ch\";b7v+=\"art\";O_l=\"c\";O_l+=\"hart\";Z94=\"c\";Z94+=\"h\";Z94+=\"art\";this.stackPanel(Z94,O_l,1,b7v);}this.resizeCanvas();for(var l9h in O2W){n9M=O2W[l9h];b1z=this.panels[l9h];if(b1z){this.container.removeChild(b1z.holder);if(n9M.handle){this.container.removeChild(n9M.handle);}B4A={holder:!![],subholder:!0,display:!![],icons:!0};for(var j0D in B4A){b1z[j0D]=n9M[j0D];}this.configurePanelControls(b1z);if(n9M.chart.panel == n9M){n9M.chart.panel=b1z;}}else {this.privateDeletePanel(n9M);}}this.chart.panel=this.panels.chart;F4v(this.panels);Object.assign(X_b,Object.assign(g5N.clone(C6G),{studies:{}}));X_b.periodicity=c5i.periodicity;X_b.interval=c5i.interval;X_b.timeUnit=c5i.timeUnit;X_b.setSpan=c5i.setSpan;X_b.range=c5i.range;if(j45){X_b.candleWidth=c5i.candleWidth;}else {if(!X_b.candleWidth){X_b.candleWidth=8;}}this.setCandleWidth(X_b.candleWidth);X_b.headsUp=g5N.clone(X_b.headsUp);function i7N(){var p5L;if(P8R.layout.studies){for(var U6k in P8R.layout.studies){p5L=P8R.layout.studies[U6k];if(!p5L.inputs.Series || p5L.inputs.Series === \"series\")continue;g5N.getFn(\"Studies.replaceStudy\")(this,p5L.inputs.id,p5L.type,p5L.inputs,p5L.outputs,p5L.parameters,p5L.panel);}}P8R.calculateYAxisPositions();F4v(P8R.panels);if(m3t){m3t();}}l8n=g5N.clone(C6G.studies);for(var T3z in l8n){X_s=l8n[T3z];E03=g5N.getFn(\"Studies.addStudy\")(this,X_s.type,X_s.inputs,X_s.outputs,X_s.parameters,X_s.panel);if(!E03)continue;if(X_s.disabled){E03.toggleDisabledState(this);}if(X_s.signalData){E03.signalData=X_s.signalData;X3M=this.panels[E03.panel];if(this.checkForEmptyPanel(X3M,!!\"1\",E03)){X3M.hidden=!!\"1\";c5f.U1h(46);X3M.percent=c5f.M8Y(\"0\",64);}}}if(this.extendedHours){this.extendedHours.prepare(X_b.extended,X_b.marketSessions);}if(typeof X_b.chartType == A$4){X_b.chartType=\"line\";}this.setMainSeriesRenderer();if(P3l){this.panelSolo(P3l);}this.adjustPanelPositions();F4v(this.panels);this.storePanels();if(!e5R){if(C6G.symbols && C6G.symbols.length){B9f={chart:this.chart};if(!j45 && G1P && C6G.range && Object.keys(C6G.range).length){B9f.range=C6G.range;}else if(!j45 && G1P && C6G.setSpan && Object.keys(C6G.setSpan).length){B9f.span=C6G.setSpan;}else if(G1P && C6G.interval){B9f.periodicity={interval:C6G.interval,period:C6G.periodicity,timeUnit:C6G.timeUnit};}else {B9f.periodicity={interval:c5i.interval,period:c5i.periodicity,timeUnit:c5i.timeUnit};}J0z=C6G.symbols[0].symbolObject || C6G.symbols[0].symbol;this.loadChart(J0z,B9f,function(X7C){var j69,N63,G1p,c2Z;if(!X7C){for(var d29,r1I=1;r1I < C6G.symbols.length;++r1I){if(!P8R.addSeries)break;d29=C6G.symbols[r1I];if(!d29.parameters){d29.parameters={};}j69=g5N.clone(d29.parameters);if(this.panels[j69.panel]){N63=\"add\";N63+=\"Se\";N63+=\"ries\";G1p=j69.isEvent?\"addEvent\":N63;P8R[G1p](d29.id,j69,i7N);}else {c2Z=\"\\\" could not be \";c2Z+=\"imported due to \";c2Z+=\"a missing corresponding panel\";c2Z+=\" \\\"\";console.warn('Warning: Series \"' + d29.id + c2Z + j69.panel + '\"');}}if(C6G.chartScale){P8R.setChartScale(C6G.chartScale);}}c1F(X7C);if(l2x){l2x.apply(null,arguments);}});return;}if(G1P){if(!j45 && this.setRange){J5a=C6G.range;if(J5a && Object.keys(J5a).length && this.chart.symbol){this.setRange(J5a,function(){c5f.C8A();c1F();if(l2x){l2x();}});return;}else if(C6G.setSpan && Object.keys(C6G.setSpan).length && this.chart.symbol){this.setSpan(C6G.setSpan,function(){c5f.C8A();c1F();if(l2x){l2x();}});return;}}g9w=C6G.interval;L02=C6G.periodicity;T7i=C6G.timeUnit;if(isNaN(L02)){L02=1;}if(!g9w){g9w=\"day\";}this.setPeriodicity({period:L02,interval:g9w,timeUnit:T7i,getDifferentData:d8Y},function(){c1F();if(l2x){l2x();}});return;}}if(G1P){X_b.periodicity=C6G.periodicity;X_b.interval=C6G.interval;X_b.timeUnit=C6G.timeUnit;X_b.setSpan=C6G.setSpan;}this.createDataSet();if(!j45){this.home();}c1F();if(l2x){l2x();}};g5N.ChartEngine.prototype.exportLayout=function(r$2){var T_5,B6B,t3x,p0V,r30,J4Y,O4g,v4e,I6m,C2Y;T_5={};for(var t_P in this.layout){B6B=\"pa\";B6B+=\"nel\";B6B+=\"s\";if(t_P != \"studies\" && t_P != B6B && t_P != \"drawing\"){T_5[t_P]=g5N.clone(this.layout[t_P]);}else if(t_P == \"studies\"){T_5.studies={};}else if(t_P == \"panels\"){T_5.panels={};}}t3x=+\"0\";for(var g1s in this.panels){p0V=this.panels[g1s];if(p0V.exportable === !({}))continue;r30=T_5.panels[g1s]={};r30.percent=p0V.percent;r30.display=p0V.display;r30.chartName=p0V.chart.name;r30.soloing=p0V.soloing;r30.index=t3x++;r30.yAxis={name:p0V.yAxis.name,position:p0V.yAxis.position};if(p0V.yaxisLHS){r30.yaxisLHS=l4A(p0V.yaxisLHS);}if(p0V.yaxisRHS){r30.yaxisRHS=l4A(p0V.yaxisRHS);}}for(var z7j in this.layout.studies){J4Y=T_5.studies[z7j]={};O4g=this.layout.studies[z7j];J4Y.type=O4g.type;J4Y.inputs=g5N.clone(O4g.inputs);J4Y.outputs=g5N.clone(O4g.outputs);J4Y.panel=O4g.panel;J4Y.parameters=g5N.clone(O4g.parameters);J4Y.disabled=O4g.disabled;if(O4g.signalData){if(O4g.signalData.cloneForExport){J4Y.signalData=O4g.signalData.cloneForExport();}else {J4Y.signalData=g5N.clone(O4g.signalData);}}}function l4A(u0P){var X6w;X6w=[];for(var C5L=0;C5L < u0P.length;C5L++){X6w.push(u0P[C5L].name);}q1l46.P3W();return X6w;}if(r$2){T_5.symbols=this.getSymbols({\"include-parameters\":!!({}),\"exclude-studies\":!![],\"exclude-generated\":!![],\"exclude-nostore\":!!\"1\"});if(T_5.symbols.length && T_5.symbols[0].symbolObject && T_5.symbols[0].symbolObject.static){delete T_5.symbols[0].symbolObject.static;}}else {v4e=961869489;I6m=-636843904;C2Y=2;for(var t8C=1;q1l46.G33(t8C.toString(),t8C.toString().length,\"35874\" ^ 0) !== v4e;t8C++){delete T_5.symbols;C2Y+=2;}if(q1l46.G33(C2Y.toString(),C2Y.toString().length,+\"98785\") !== I6m){!T_5.symbols;}}q1l46.P3W();return T_5;};g5N.ChartEngine.prototype.importPreferences=function(y$R){var d_4;d_4=\"preferenc\";d_4+=\"es\";g5N.extend(this.preferences,y$R);if(y$R.timeZone){this.setTimeZone(this.dataZone,y$R.timeZone);}if(y$R.language && g5N.I18N){if(this.uiContext && this.uiContext.config.setHtmlLang){document.documentElement.setAttribute(\"lang\",y$R.language);}g5N.I18N.localize(this,y$R.language);}this.changeOccurred(d_4);};g5N.ChartEngine.prototype.exportPreferences=function(){q1l46.C8A();return this.preferences;};};V8=w7R=>{var n_b,K_l,E3T,R_G,N3u,g1M,x2a,U4x,y8u,J_P,s9R,W_K,b9B,G4N;n_b=\"f\";n_b+=\"i\";n_b+=\"e\";n_b+=\"ld\";K_l=\"#\";K_l+=\"b\";K_l+=\"8\";K_l+=\"2c0c\";E3T=\"0\";E3T+=\" to max\";R_G=\"Vol\";R_G+=\"um\";R_G+=\"e Chart\";N3u=\"T\";N3u+=\"rue Ran\";N3u+=\"ge\";g1M=\"m\";g1M+=\"a\";x2a=\"We\";x2a+=\"ig\";x2a+=\"hte\";x2a+=\"d\";U4x=\"Well\";U4x+=\"es Wilder\";y8u=\"VIDY\";y8u+=\"A\";J_P=\"v\";J_P+=\"d\";J_P+=\"m\";J_P+=\"a\";s9R=\"C\";s9R+=\"l\";s9R+=\"os\";s9R+=\"e\";W_K=typeof _CIQ !== \"undefined\"?_CIQ:w7R.CIQ;b9B=typeof _timezoneJS !== \"undefined\"?_timezoneJS:w7R.timezoneJS;if(W_K.ChartEngine){W_K.ChartEngine.prototype.rightClickOverlay=function(j5p,d82){var r3u,k5C;r3u=\"r\";r3u+=\"i\";r3u+=\"g\";r3u+=\"htClickOverlay\";if(this.runPrepend(\"rightClickOverlay\",arguments)){return;}k5C=this.overlays[j5p];if(k5C.editFunction){k5C.editFunction(d82);}else {this.removeOverlay(j5p);}this.runAppend(r3u,arguments);};W_K.ChartEngine.prototype.addOverlay=function(E5o){var B_j;B_j=\"ad\";B_j+=\"dOver\";B_j+=\"l\";B_j+=\"ay\";if(this.runPrepend(\"addOverlay\",arguments)){return;}this.overlays[E5o.name]=E5o;this.runAppend(B_j,arguments);};W_K.ChartEngine.prototype.removeOverlay=function(N8g){var y6w,t2c,h2d,k6L,B5J,o$P,v$M,R_N,X8W;y6w=\"remov\";y6w+=\"eOverlay\";if(this.runPrepend(\"removeOverlay\",arguments)){return;}t2c=this.overlays[N8g];if(t2c){for(var u4b in this.overlays){h2d=this.overlays[u4b];k6L=[\"Field\"];if(W_K.Studies){k6L=W_K.Studies.getFieldInputs(h2d);}for(var d_L=\"0\" << 0;d_L < k6L.length;d_L++){B5J=\" \";B5J+=\"[\";o$P=h2d.inputs[k6L[d_L]];v$M=t2c.inputs.Series;if(v$M && v$M !== \"series\"){q1l46.U1h(14);o$P=o$P.replace(q1l46.P_X(v$M,(997.08,642.08) < (+\"2000\",1305)?9150 !== (5712,1840)?(5370,428.98) !== (\"6409\" | 1,+\"9210\")?\"]\":(\"G\",0x104f):0x15f0:\"C\",B5J),\"\");}if((o$P in t2c.outputMap)){this.removeOverlay(h2d.name);}}}this.cleanupRemovedStudy(t2c);R_N=this.panels[t2c.panel];delete this.overlays[N8g];this.checkForEmptyPanel(t2c.panel);}if(!this.currentlyImporting){X8W=\"la\";X8W+=\"yo\";X8W+=\"ut\";this.displaySticky();this.createDataSet();this.changeOccurred(X8W);}this.resetDynamicYAxis();this.runAppend(y6w,arguments);};W_K.ChartEngine.prototype.cleanupRemovedStudy=function(h0q){if(!h0q){return;}if(h0q.study.removeFN){h0q.study.removeFN(this,h0q);}for(var S3g in this.plugins){if(S3g.indexOf(\"{\" + h0q.id + ((9600,2690) != (1270,944)?549.64 >= 867?630.89 > 32.71?(5.19e+3,\"e\"):(132.99,!!\"1\"):\"}\":\"x\")) > -1){delete this.plugins[S3g];}}if(h0q.removeSignals){h0q.removeSignals();}for(var R52 in h0q.outputMap){this.getMarkerArray(\"field\",R52).forEach(Q9k=>{return Q9k.remove();});}q1l46.P3W();if(this.layout.studies){delete this.layout.studies[h0q.name];}this.chart.state.studies.sorted=null;delete this.overlays[h0q.name];var {sd:v2c}=this.repositioningAnchorSelector || ({});if(v2c && v2c === h0q){this.repositioningAnchorSelector=null;var {anchorHandles:C0s}=this.controls;if(C0s && C0s[h0q.uniqueId]){C0s[h0q.uniqueId].highlighted=!({});W_K.Studies.displayAnchorHandleAndLine(this,h0q,this.chart.dataSegment);}}if(W_K.Studies){W_K.Studies.removeStudySymbols(h0q,this);}if(this.quoteDriver){this.quoteDriver.updateSubscriptions();}};W_K.ChartEngine.prototype.getStudies=function(O1V){var Y8J,B2n;q1l46.C8A();var {studies:P9J}=this.layout;Y8J=[];if(P9J){for(var T5k in P9J){B2n=P9J[T5k];if(B2n.name === O1V.name || B2n.type === O1V.type){Y8J.push(B2n);}else {var {outputMap:Y5R}=B2n;if(Y5R && Y5R[O1V.output]){Y8J.push(B2n);}}}}return Y8J;};}W_K.Studies=W_K.Studies || (function(){});W_K.Studies.DEFAULT_INPUTS={Period:14};W_K.Studies.DEFAULT_OUTPUTS={Result:\"auto\"};W_K.Studies.impliedVolatilityAvailable=!({});W_K.Studies.useTranslationDelimiter=!\"\";W_K.Studies.sortForProcessing=v04=>{var Q8V,C1x;Q8V=[];q1l46.C8A();function b$X(V_A,Y8P){V_A.forEach(m9V=>{var k5P;if(Y8P.indexOf(m9V) == -1){k5P=m9V.getDependents(v04);if(k5P.length){b$X(k5P,Y8P);}Y8P.unshift(m9V);}});}C1x=v04.layout.studies;if(C1x){b$X(Object.values(C1x),Q8V);}return Q8V;};G4N=new RegExp(\"^(.{1,100}) \\\\[(.{1,20})\\\\]$\");W_K.Studies.getQuoteFieldValue=function(U7Z,T1s,v7t = s9R){var u1E,a4O,y$O;u1E=\"n\";u1E+=\"um\";u1E+=\"b\";u1E+=\"er\";if(!U7Z || !T1s){return null;}a4O=G4N.exec(T1s);if(a4O){v7t=a4O[1].replace(/\\u200c/g,\"\");T1s=a4O[2];}y$O=null;if(typeof U7Z[T1s] === u1E){y$O=U7Z[T1s];}else if(U7Z[T1s] && typeof U7Z[T1s] === \"object\"){y$O=U7Z[T1s][v7t];}if(!y$O && y$O !== 0){return null;}return y$O;};W_K.Studies.StudyDescriptor=function(N34,G5R,J2n,Z3i,f2l,N8k){q1l46.P3W();var y1h,F8E,K4G,T7P;y1h=\"u\";y1h+=\"ndefine\";y1h+=\"d\";F8E=\"Clo\";F8E+=\"s\";F8E+=\"e\";this.name=N34;this.disabled=!1;this.type=G5R;this.panel=J2n;this.inputs=Z3i;this.outputs=f2l;this.parameters=N8k;this.outputMap={};this.min=null;this.max=null;q1l46.U1h(46);this.startFrom=q1l46.M8Y(\"0\",64);this.subField=F8E;K4G=W_K.Studies.studyLibrary[G5R];if(!K4G){T7P=\"c\";T7P+=\"ha\";T7P+=\"r\";T7P+=\"t\";K4G={};if(J2n == \"chart\" || !J2n && N8k && N8k.chartName == T7P){this.overlay=!0;}}if(typeof K4G.inputs == y1h){K4G.inputs=W_K.clone(W_K.Studies.DEFAULT_INPUTS);}if(typeof K4G.outputs == \"undefined\"){K4G.outputs=W_K.clone(W_K.Studies.DEFAULT_OUTPUTS);}this.study=K4G;this.libraryEntry=K4G;};W_K.Studies.StudyDescriptor.prototype.toggleDisabledState=function(E0H){var r8N;r8N=\"l\";r8N+=\"ay\";r8N+=\"o\";r8N+=\"ut\";var {disabled:W5q, study:i7f, signalData:g$N}=this;var {chart:R4Q}=E0H;q1l46.P3W();this.disabled=W5q=!W5q;if(!W5q){this.startFrom=0;this.error=null;if(i7f && i7f.calculateFN){i7f.calculateFN(E0H,this);}if(this.flagSignals){this.flagSignals();}}else if(R4Q.customChart && R4Q.customChart.owner === this.name){i7f.calculateFN(E0H,this);}if(g$N){g$N[W5q?\"hide\":\"show\"]();}E0H.changeOccurred(r8N);E0H.draw();};W_K.Studies.StudyDescriptor.prototype.getYAxis=function(d65){var s6p,r1C,g1z;s6p=this.yAxis;if(this.parameters){r1C=this.parameters.yAxis?this.parameters.yAxis.name:this.parameters.yaxisDisplayValue;}if(!s6p){g1z=d65.panels[this.panel];if(g1z){s6p=d65.getYAxisByName(g1z,r1C) || d65.getYAxisByName(g1z,this.name) || g1z.yAxis;}}if(!s6p){s6p=d65.getYAxisByName(d65.chart.panel,r1C) || d65.chart.panel.yAxis;}return s6p;};W_K.Studies.StudyDescriptor.prototype.getContext=function(x_3){q1l46.P3W();return x_3.chart.context;};W_K.Studies.StudyDescriptor.prototype.getDependents=function(W$i,i0K){var Y_F,A5G,n3h,i3e,u3d;Y_F=[];for(var Z76 in W$i.layout.studies){A5G=W$i.layout.studies[Z76];if(A5G == this)continue;n3h=W_K.Studies.getFieldInputs(A5G);for(var V2v=0;V2v < n3h.length;V2v++){i3e=A5G.inputs[n3h[V2v]].toLowerCase().replace(/\\u200c/g,\"\");u3d=this.name.toLowerCase().replace(/\\u200c/g,\"\");if(i3e.includes(u3d)){if(i0K && A5G.parameters && A5G.parameters.panelName)continue;Y_F.push(A5G);Y_F=Y_F.concat(A5G.getDependents(W$i,i0K));break;}}}q1l46.C8A();return Y_F;};W_K.Studies.StudyDescriptor.prototype.undraggable=function(V_s){var p9r;if(this.signalData){return !![];}p9r=this.study.attributes;q1l46.P3W();if(p9r){if(p9r.panelName && p9r.panelName.hidden){return !!1;}if(p9r.yaxisDisplayValue && p9r.yaxisDisplayValue.hidden){return !![];}}return !({});};W_K.Studies.StudyDescriptor.prototype.appendFutureTicks=function(Q01,s0b){var H0q,A40,x$X,C$3;H0q=Q01.chart.scrubbed;if(!H0q.length){return;}A40=Q01.standardMarketIterator(H0q[H0q.length - 1].DT);for(x$X=s0b.length - 1;x$X >= 0;x$X--){C$3=s0b[x$X];for(var q20 in C$3){if(C$3[q20] || C$3[q20] === +\"0\"){x$X=-1;break;}}if(x$X == -1)break;s0b.pop();}for(x$X=0;x$X < s0b.length;x$X++){C$3=s0b[x$X];if(!C$3.DT){C$3.DT=A40.next();}if(!C$3.displayDate){Q01.setDisplayDate(C$3);}C$3.futureTick=!![];H0q.push(C$3);}};W_K.Studies.generateID=function(W51,S5j,H5O,M17,U1c){var P1C=q1l46;var C0v,p1n,h8S,N5y,F6x,c7U,s7I,a05;C0v=W_K.Studies.studyLibrary[S5j];p1n=U1c || S5j;if(W_K.Studies.useTranslationDelimiter){P1C.R_O(14);p1n=P1C.P_X(p1n,(+\"8950\",350.33) != (+\"1933\",608.75)?(518,4220) < 3940?(608,+\"3226\") != (665,9499)?!0:344.90:\"\\u200c\":\"J\",\"\\u200c\");}h8S=p1n;if(C0v){if(C0v.customRemoval){return h8S;}}if(!W_K.isEmpty(H5O)){N5y=!!({});for(var B7$ in H5O){F6x=\"s\";F6x+=\"er\";F6x+=\"i\";F6x+=\"es\";c7U=\"di\";c7U+=\"spla\";c7U+=\"y\";if([\"id\",c7U,\"Shading\",\"Anchor Selector\"].includes(B7$)){continue;}s7I=H5O[B7$];if(s7I == \"field\")continue;if(B7$ == \"Series\" && (s7I == \"Primary\" || s7I == F6x))continue;s7I=s7I.toString();if(W_K.Studies.prettify[s7I] !== undefined){s7I=W_K.Studies.prettify[s7I];}if(N5y){N5y=!({});h8S+=\" (\";}else {if(s7I){h8S+=\",\";}}h8S+=s7I;}if(!N5y){h8S+=906.74 !== (244.01,716.68)?\")\":(\"2670\" ^ 0,+\"9810\") <= (3720,3635)?!!({}):524.72 > 5892?0x1f61:0x11f2;}}if(M17 === h8S || M17 && M17.indexOf(h8S + (8923 >= 6340?\"-\":7360 >= +\"356.72\"?6330 === 692.57?\"x\":\"0x1e0b\" - 0:(+\"0xe65\",9.18e+3))) === 0){return M17;}if(W51.layout.studies && W51.layout.studies[h8S]){for(var m6M=2;m6M < \"50\" * 1;m6M++){P1C.R_O(14);a05=P1C.P_X((2690,+\"5480\") != 907.42?\"-\":(0x230a,659.99),m6M,h8S);if(!W51.layout.studies[a05]){h8S=a05;break;}}}return h8S;};W_K.Studies.DialogHelper=function(G15){var R6a=q1l46;var I2Z,f9x,x1X,A$T,E$X,h7l,e7O,x4W,y_j,s2W,e_m,P57,L7h,J38,d1t,U5a,l5P,t4J,w4I,H7i,Q0G,P4x,E_D,h_4,L1d,Q3I,Z7m,W1m,d2w,h7r,S1y,a$t,j7R,J_n,M3d,l_Y,o$l,d4_,S7W,t8J,S14,A0D,X_h,J0U,x$P,w9z,A1e,a9m,k_o,H4Q,Q1U,B1y,P1d,S6v,i7r,f9n;I2Z=\"u\";I2Z+=\"ndef\";I2Z+=\"ined\";f9x=\"undef\";f9x+=\"ined\";x1X=this.stx=G15.stx;R6a.C8A();A$T=this.sd=G15.sd;this.name=A$T?A$T.type:G15.name;this.signal=1;this.inputs=[];this.outputs=[];this.parameters=[];E$X=this.libraryEntry=A$T?A$T.study:W_K.Studies.studyLibrary[G15.name];if(typeof E$X.inputs == f9x){E$X.inputs=W_K.clone(W_K.Studies.DEFAULT_INPUTS);}if(typeof E$X.outputs == I2Z){E$X.outputs=W_K.clone(W_K.Studies.DEFAULT_OUTPUTS);}h7l=A$T && x1X.panels[A$T.panel] || x1X.chart.panel;e7O=h7l.chart;this.title=x1X.translateIf(E$X.name);this.attributes=W_K.clone(E$X.attributes);if(!this.attributes){this.attributes={};}for(var H2p in this.attributes){x4W=this.attributes[H2p];for(var b$5 in x4W){if(typeof x4W[b$5] == \"function\"){x4W[b$5]=x4W[b$5].call(A$T || E$X);}}}y_j=[];s2W=x1X.layout.studies;e_m=[];if(A$T){e_m=Array.prototype.concat(A$T,A$T.getDependents(x1X));}function e3c(G36){var f$e,y6I;R6a.C8A();f$e=\"che\";f$e+=\"ck\";f$e+=\"box\";y6I={name:G36.name,heading:x1X.translateIf(G36.label),defaultValue:G36.defaults,value:G36.value,type:f$e};return y6I;}for(var n$P in s2W){if(s2W[n$P].signalData)continue;if(e_m.indexOf(s2W[n$P]) > -1)continue;for(var D9q in s2W[n$P].outputMap){P57=W_K.Studies.useTranslationDelimiter?\"\\u200c\":\"\";if(s2W[n$P].inputs.Series && s2W[n$P].inputs.Series !== \"series\"){R6a.U1h(0);D9q=`${P57}${D9q}${P57}${R6a.M8Y(\"[\",\" \")}${s2W[n$P].inputs.Series}]`;}y_j.push(D9q);}}for(var v91 in E$X.inputs){L7h={};this.inputs.push(L7h);L7h.name=v91;L7h.heading=x1X.translateIf(v91);J38=E$X.inputs[v91];if(A$T && A$T.inputs && typeof A$T.inputs[v91] != \"undefined\" && A$T.inputs[v91] !== null){L7h.value=A$T.inputs[v91];}else {L7h.value=E$X.inputs[v91];}L7h.defaultInput=E$X.inputs[v91];if(!this.attributes[v91]){this.attributes[v91]=W_K.Studies.inputAttributeDefaultGenerator(L7h.defaultInput);}if(J38.constructor == Number){L7h.type=\"number\";}else if(J38.constructor == String){d1t=\"seri\";d1t+=\"es\";U5a=W_K.Studies.movingAverageHelper(x1X,L7h.defaultInput);if(U5a){L7h.type=\"select\";L7h.defaultInput=U5a;l5P=W_K.Studies.movingAverageHelper(x1X,L7h.value);if(!l5P){l5P=L7h.value;}L7h.value=l5P;L7h.options=W_K.Studies.movingAverageHelper(x1X,\"options\");}else if(J38 == \"field\"){t4J=\"o\";t4J+=\"h\";t4J+=\"lc/\";t4J+=\"4\";w4I=\"h\";w4I+=\"l/2\";H7i=\"Hi\";H7i+=\"g\";H7i+=\"h\";Q0G=\"s\";Q0G+=\"e\";Q0G+=\"l\";Q0G+=\"ect\";P4x=x1X.chart.series;E_D=[];for(var f0N in P4x){var {parameters:H7t}=P4x[f0N];if(H7t && H7t.isComparison){E_D.push(f0N);}}L7h.type=Q0G;L7h.options={};h_4=[\"Open\",H7i,\"Low\",\"Close\",w4I,\"hlc/3\",\"hlcc/4\",t4J,e7O.defaultPlotField].concat(y_j,E_D);if(x1X.layout.adj){L1d=\"A\";L1d+=\"dj_Cl\";L1d+=\"ose\";h_4.splice(4,0,L1d);}for(var C7W=+\"0\";C7W < h_4.length;C7W++){Q3I=h_4[C7W];L7h.options[Q3I]=x1X.translateIf(Q3I);}if(L7h.value == \"field\"){L7h.value=\"Close\";}if(L7h.defaultInput == \"field\"){L7h.defaultInput=\"Close\";}}else if(J38 == d1t){Z7m=\"s\";Z7m+=\"elec\";Z7m+=\"t\";L7h.options=Object.keys(x1X.chart.series).reduce((I82,Q9y)=>{var n7t;var {display:M$V, parameters:W9S}=x1X.chart.series[Q9y];n7t=(W9S || ({})).symbol || Q9y;return {...I82,[n7t]:M$V || Q9y};},{Primary:\"Primary\"});if(!L7h.value || L7h.value === \"series\" || L7h.value === \"field\"){L7h.value=\"Primary\";}L7h.type=Z7m;if(L7h.defaultInput == \"field\"){L7h.defaultInput=\"Primary\";}}else {W1m=\"hh:mm\";W1m+=\":s\";W1m+=\"s\";d2w=\"d\";d2w+=\"a\";d2w+=\"te\";h7r=\"te\";h7r+=\"xt\";L7h.type=h7r;if(this.attributes[v91].placeholder == \"yyyy-mm-dd\"){L7h.type=d2w;}else if(this.attributes[v91].placeholder == W1m){L7h.type=\"time\";}}}else if(J38.constructor == Boolean){L7h.type=\"checkbox\";if(L7h.value === !!({}) || L7h.value == \"true\" || L7h.value == \"on\"){L7h.value=!!\"1\";}}else if(J38.constructor == Array){S1y=\"sele\";S1y+=\"c\";S1y+=\"t\";L7h.type=S1y;L7h.options={};for(var x$_=0;x$_ < J38.length;x$_++){L7h.options[J38[x$_]]=x1X.translateIf(J38[x$_]);}if(L7h.value.constructor == Array){L7h.value=L7h.value[0];}if(this.attributes[v91].defaultSelected){L7h.defaultInput=this.attributes[v91].defaultSelected;}else {L7h.defaultInput=J38[0];}}}this.dateTimeInputs=[];for(var a13=0;a13 < this.inputs.length;a13++){a$t=this.inputs[a13];if(a$t.type == \"date\"){j7R=a$t.name.substring(+\"0\",a$t.name.indexOf(\" Date\"));for(var L2u=0;L2u < this.inputs.length;L2u++){J_n=this.inputs[L2u];if(J_n.type == \"time\"){M3d=\" \";M3d+=\"T\";M3d+=\"i\";M3d+=\"me\";if(J_n.name == j7R + M3d){this.dateTimeInputs.push(j7R);break;}}}}}this.adjustInputTimesForDisplayZone();function y9b(C6_){var u7L,U0E,N14;u7L={};U0E=C6_.defaults;N14={name:C6_.name,heading:x1X.translateIf(C6_.label),defaultValue:U0E[+\"0\"],value:C6_.value,options:u7L,type:\"select\"};for(var Q9s=0;Q9s < U0E.length;Q9s++){u7L[U0E[Q9s]]=x1X.translateIf(U0E[Q9s]);}if(C6_.color !== undefined){N14.defaultColor=x1X.defaultColor;N14.color=C6_.color;}R6a.P3W();return N14;}for(var M7A in E$X.outputs){l_Y={name:M7A,heading:x1X.translateIf(M7A)};l_Y.color=l_Y.defaultOutput=E$X.outputs[M7A];if(A$T && A$T.outputs && A$T.outputs[M7A]){l_Y.color=A$T.outputs[M7A];}if(l_Y.color == \"auto\"){l_Y.color=x1X.defaultColor;l_Y.isAuto=!!\"1\";}this.outputs.push(l_Y);}function t2F(r4K,s$U){var L7o;L7o=this;if(!L7o.attributes[r4K]){L7o.attributes[r4K]={};}if(s$U){L7o.attributes[r4K].hidden=!\"\";}}o$l=A$T?A$T.parameters:null;if(E$X.parameters){d4_=675841761;S7W=443098028;t8J=2;for(var N_3=1;R6a.I9N(N_3.toString(),N_3.toString().length,97500) !== d4_;N_3++){S14=E$X.parameters.init;R6a.R_O(42);t8J+=R6a.M8Y(\"2\",0);}if(R6a.G33(t8J.toString(),t8J.toString().length,93270) !== S7W){S14=E$X.parameters.init;}if(S14){if(S14.studyOverZonesEnabled !== undefined){X_h=\"ch\";X_h+=\"eckb\";X_h+=\"ox\";A0D={name:\"studyOverZones\",heading:x1X.translateIf(\"Show Zones\"),defaultValue:S14.studyOverZonesEnabled,value:S14.studyOverZonesEnabled};if(o$l && (o$l.studyOverZonesEnabled || o$l.studyOverZonesEnabled === !!\"\")){A0D.value=o$l.studyOverZonesEnabled;}A0D.type=X_h;this.parameters.push(A0D);}if(S14.studyOverBoughtValue !== undefined){J0U=\"a\";J0U+=\"u\";J0U+=\"t\";J0U+=\"o\";x$P=\"s\";x$P+=\"t\";x$P+=\"udyOverBoug\";x$P+=\"ht\";A0D={name:x$P,heading:x1X.translateIf(\"OverBought\"),defaultValue:S14.studyOverBoughtValue,value:S14.studyOverBoughtValue,defaultColor:S14.studyOverBoughtColor,color:S14.studyOverBoughtColor};if(o$l && o$l.studyOverBoughtValue){A0D.value=o$l.studyOverBoughtValue;}if(o$l && o$l.studyOverBoughtColor){A0D.color=o$l.studyOverBoughtColor;}if(A0D.color == J0U){A0D.color=x1X.defaultColor;A0D.isAuto=!\"\";}A0D.type=\"text\";this.parameters.push(A0D);}if(S14.studyOverSoldValue !== undefined){w9z=\"OverSol\";w9z+=\"d\";A0D={name:\"studyOverSold\",heading:x1X.translateIf(w9z),defaultValue:S14.studyOverSoldValue,value:S14.studyOverSoldValue,defaultColor:S14.studyOverSoldColor,color:S14.studyOverSoldColor};if(o$l && o$l.studyOverSoldValue){A0D.value=o$l.studyOverSoldValue;}if(o$l && o$l.studyOverSoldColor){A0D.color=o$l.studyOverSoldColor;}if(A0D.color == \"auto\"){A0D.color=x1X.defaultColor;A1e=-1219216961;R6a.U1h(46);a9m=-R6a.P_X(\"1689050825\",64);k_o=2;for(var T7W=1;R6a.I9N(T7W.toString(),T7W.toString().length,27201) !== A1e;T7W++){A0D.isAuto=!![];k_o+=2;}if(R6a.I9N(k_o.toString(),k_o.toString().length,78737) !== a9m){A0D.isAuto=!1;}}A0D.type=\"text\";this.parameters.push(A0D);}if(!this.attributes.studyOverBoughtValue){this.attributes.studyOverBoughtValue={};}if(!this.attributes.studyOverSoldValue){this.attributes.studyOverSoldValue={};}}}H4Q=this.panelSelect=G15.panelSelect;Q1U=this.axisSelect=G15.axisSelect;if(G15.addWhenDone){Q1U=H4Q=!1;}if(Q1U || H4Q){if(!A$T){A$T=W_K.Studies.addStudy(x1X,G15.name,null,null,{calculateOnly:!0});W_K.Studies.removeStudy(x1X,A$T);}if(H4Q){B1y=\"p\";B1y+=\"anel\";B1y+=\"N\";B1y+=\"ame\";this.parameters.push(y9b({label:\"Panel\",name:B1y,defaults:(function(){var o8p;o8p=[];o8p.push(\"Auto\");for(var c5z in x1X.panels){if(c5z != A$T.panel || !o$l || !o$l.panelName)if(!x1X.panels[c5z].noDrag){o8p.push(C7y(c5z));}}if(!x1X.checkForEmptyPanel(A$T.panel,!\"\",A$T)){o8p.push(\"New panel\");}return o8p;})(),value:o$l && o$l.panelName?C7y(o$l.panelName):\"Auto\"}),e3c({label:\"Show as Underlay\",name:\"underlay\",defaults:!!\"\",value:A$T.underlay || A$T.parameters && A$T.parameters.underlayEnabled}));}P1d=x1X.getYAxisByName(h7l,A$T.name);if(Q1U){S6v=\"f\";S6v+=\"lipped\";i7r=\"d\";i7r+=\"efault\";f9n=\"sh\";f9n+=\"ar\";f9n+=\"e\";f9n+=\"d\";this.parameters.push(y9b({label:\"Y-Axis\",name:\"yaxisDisplay\",defaults:(function(){var w4W,i3m,U$E,C75,U31;w4W=\"l\";w4W+=\"e\";w4W+=\"ft\";R6a.P3W();i3m=\"righ\";i3m+=\"t\";U$E=\"defau\";U$E+=\"lt\";C75=h7l.yaxisLHS.concat(h7l.yaxisRHS);U31=[];U31.push(U$E,i3m,w4W,\"none\",\"shared\");for(var T7D=0;T7D < C75.length;T7D++){if(C75[T7D] != P1d){U31.push(C75[T7D].name);}}return U31;})(),value:o$l && o$l.yaxisDisplayValue || P1d && P1d.position || (!P1d?f9n:i7r),color:P1d && P1d.textStyle || \"auto\"}),e3c({label:\"Invert Y-Axis\",name:S6v,defaults:!({}),value:o$l && o$l.flippedEnabled !== undefined?o$l.flippedEnabled:P1d?P1d.flipped:!!0}));}t2F.call(this,\"flippedEnabled\",!P1d && A$T.panel != A$T.name);t2F.call(this,\"underlayEnabled\",E$X.underlay);t2F.call(this,\"panelName\",E$X.seriesFN === null);t2F.call(this,\"yaxisDisplayValue\",E$X.seriesFN === null || E$X.yAxis && E$X.yAxis.noDraw);}function C7y(X4s){var e4S;if(H4Q == \"alias\"){e4S=1;for(var o66 in x1X.panels){if(o66 == X4s){return S1f(o66,e4S);}e4S++;}}function S1f(M20,f7D){R6a.C8A();return \"Panel \" + f7D.toString();}return X4s;}};W_K.Studies.DialogHelper.prototype.updateStudy=function(u_D){var m3e,y_T,l8L,K8w;m3e={};y_T=this.sd;l8L=this.libraryEntry;if(!l8L){l8L={};}if(!y_T){y_T=l8L;}m3e.inputs=W_K.clone(y_T.inputs);m3e.outputs=W_K.clone(y_T.outputs);m3e.parameters=W_K.clone(y_T.parameters);this.adjustInputTimesForDisplayZone(u_D);if(u_D.parameters && u_D.parameters.panelName){u_D.parameters.panelName=b5l.call(this,u_D.parameters.panelName);}W_K.extend(m3e,u_D);if(!m3e.parameters){m3e.parameters={};}if(m3e.inputs && m3e.inputs.id){y_T=W_K.Studies.replaceStudy(this.stx,m3e.inputs.id,this.name,m3e.inputs,m3e.outputs,m3e.parameters,null,y_T.study);}else {y_T=W_K.Studies.addStudy(this.stx,this.name,m3e.inputs,m3e.outputs,m3e.parameters,null,y_T.study);}K8w=new W_K.Studies.DialogHelper({stx:this.stx,sd:y_T,axisSelect:this.axisSelect,panelSelect:this.panelSelect});for(var g_s in K8w){if(g_s != \"signal\"){this[g_s]=K8w[g_s];}}this.signal*=-1;function b5l(v5J){var F0B,M9P;F0B=this;if(F0B.panelSelect == \"alias\"){M9P=E1x(v5J);if(M9P){for(var C2N in F0B.stx.panels){if(!--M9P){return C2N;}}}}function E1x(b1y){var F_x;q1l46.C8A();F_x=b1y.match(/.{0,50} (\\d)/);return F_x && F_x[1];}return v5J;}};W_K.Studies.DialogHelper.prototype.adjustInputTimesForDisplayZone=function(x8v){var X2t=q1l46;X2t.C8A();var f7_,g9U,C$R,U5V,l77,J$H,q7g,U4o;if(this.stx.displayZone){for(var a77=\"0\" ^ 0;a77 < this.dateTimeInputs.length;a77++){f7_=this.dateTimeInputs[a77];J$H=\"\";if(x8v && x8v.inputs){X2t.R_O(0);C$R=x8v.inputs[X2t.M8Y(\" Date\",f7_)];X2t.U1h(0);U5V=x8v.inputs[X2t.P_X(\" Time\",f7_)];if(C$R){J$H=C$R;}if(U5V){J$H+=U5V;}}for(g9U=\"0\" | 0;g9U < this.inputs.length;g9U++){l77=this.inputs[g9U];if(!C$R && C$R !== \"\" && l77.name == f7_ + \" Date\"){J$H=l77.value + J$H;}else if(!U5V && U5V !== \"\" && l77.name == f7_ + \" Time\"){J$H+=l77.value;}}J$H=J$H.replace(/\\D/g,\"\");if(J$H.length < +\"12\"){return;}q7g=W_K.strToDateTime(J$H);if(!isNaN(q7g.valueOf())){if(x8v){if(!x8v.inputs){x8v.inputs={};}U4o=W_K.convertTimeZone(q7g,this.stx.displayZone);X2t.U1h(0);x8v.inputs[X2t.M8Y(\" Date\",f7_)]=W_K.yyyymmdd(U4o);X2t.U1h(0);x8v.inputs[X2t.P_X(\" Time\",f7_)]=W_K.hhmmss(U4o);}else {U4o=W_K.convertTimeZone(q7g,null,this.stx.displayZone);for(g9U=0;g9U < this.inputs.length;g9U++){l77=this.inputs[g9U];if(l77.name == f7_ + \" Date\"){l77.value=W_K.yyyymmdd(U4o);}if(l77.name == f7_ + \" Time\"){l77.value=W_K.hhmmss(U4o);}}}}}}};W_K.Studies.prepareStudy=function(R2R,Y0s,e7I){var H9D=q1l46;var H6z;H6z=\"un\";H9D.P3W();H6z+=\"define\";H6z+=\"d\";if(typeof Y0s.calculateFN == H6z){Y0s.useRawValues=!!1;}if(W_K.isEmpty(e7I.outputMap)){for(var r_I in e7I.outputs){if(Y0s.useRawValues){e7I.outputMap[r_I]=r_I;}else {H9D.U1h(128);var k2e=H9D.M8Y(15,715,286,15,4269);H9D.U1h(130);var d3R=H9D.M8Y(8945,17900,3580);H9D.R_O(23);var d1o=H9D.M8Y(124368,18,132640);H9D.R_O(130);var f_W=H9D.M8Y(12,513,1);H9D.U1h(100);var e1a=H9D.M8Y(35550,14,16,561932,18);H9D.U1h(0);var I8_=H9D.P_X(5882,310);H9D.R_O(63);var t04=H9D.P_X(9170,1,306,3060);H9D.U1h(130);var H9x=H9D.M8Y(3955,3970,794);H9D.U1h(130);var y4b=H9D.M8Y(7,24,24);H9D.R_O(135);var V$i=H9D.M8Y(1,2,15,3427);H9D.U1h(27);var x2_=H9D.M8Y(1874,3760,6);e7I.outputMap[r_I + ((42.09,k2e) === (243.65,245.24)?(d3R,d1o):f_W !== e1a?I8_ <= (t04,H9x)?\"812\" | y4b:\" \":(V$i,x2_)) + e7I.name]=r_I;}}}};W_K.Studies.rejiggerDerivedStudies=function(P4f,X1w,Q25){var n1a,D$H,k9g,A3b,C1r,o0B,C1Z,w2r;n1a=X1w.name;D$H=X1w.panel;k9g=X1w.getDependents(P4f);q1l46.P3W();for(var O$q=0;O$q < k9g.length;O$q++){A3b=k9g[O$q];C1r=W_K.clone(A3b.inputs);o0B=C1r.id;if(!o0B)continue;C1Z=W_K.Studies.getFieldInputs(A3b);for(var Z0Z=0;Z0Z < C1Z.length;Z0Z++){C1r[C1Z[Z0Z]]=C1r[C1Z[Z0Z]].replace(n1a,Q25);}w2r=W_K.Studies.replaceStudy(P4f,o0B,A3b.type,C1r,A3b.outputs,W_K.extend(A3b.parameters,{rejiggering:!0}),null,A3b.study);delete w2r.parameters.rejiggering;}};W_K.Studies.removeStudySymbols=function(A0Y,E9R){q1l46.P3W();if(A0Y.series){for(var L9x in A0Y.series){E9R.deleteSeries(A0Y.series[L9x],null,{action:\"remove-study\"});}}};W_K.Studies.replaceStudy=function(k5s,E1Y,D1$,J$O,p_e,e7S,K_U,X3g){var b1C,q9n,k_c,w94,X0T,l3h,K4N;b1C=\"pa\";b1C+=\"nel\";b1C+=\"Nam\";b1C+=\"e\";if(!e7S){e7S={};}if(E1Y){e7S.replaceID=E1Y;}E1Y=e7S.replaceID;q9n=k5s.layout.studies[E1Y];W_K.Studies.removeStudySymbols(q9n,k5s);if(q9n.attribution){k5s.removeFromHolder(q9n.attribution.marker);}if(k5s.quoteDriver){k5s.quoteDriver.updateSubscriptions();}if(J$O){if(J$O.id == J$O.display){delete J$O.display;}delete J$O.id;}k_c=W_K.Studies.addStudy(k5s,D1$,J$O,p_e,e7S,K_U,X3g);k_c.highlight=q9n.highlight;k_c.uniqueId=q9n.uniqueId;if(q9n.signalData){k_c.signalData=q9n.signalData;if(k_c.signalData.updateConditions){k_c.signalData.updateConditions(E1Y,k_c.inputs.id);}}X0T={};for(w94 in k5s.layout.studies){if(w94 == E1Y){X0T[k_c.name]=k_c;}else {X0T[w94]=k5s.layout.studies[w94];}}k5s.layout.studies=X0T;q1l46.C8A();X0T={};for(w94 in k5s.overlays){if(w94 == E1Y){if(k_c.overlay || k_c.underlay){X0T[k_c.name]=k_c;}}else {X0T[w94]=k5s.overlays[w94];}}k5s.overlays=X0T;if(!k5s.overlays[k_c.name] && (k_c.overlay || k_c.underlay)){k5s.addOverlay(k_c);}l3h=Object.keys(q9n.outputMap);K4N=Object.keys(k_c.outputMap);if(q9n.panel !== k_c.panel){l3h.forEach(function(m$W){k5s.moveMarkers(q9n.panel,k_c.panel,k5s.getMarkerArray(\"field\",m$W));});}k5s.getMarkerArray(b1C,q9n.panel).forEach(function(L92,g4X){var F4D;F4D=l3h.indexOf(L92.params.field);if(F4D > -1 && K4N.indexOf(L92.params.field) === -(\"1\" ^ 0)){L92.params.field=K4N[g4X];}});k5s.checkForEmptyPanel(q9n.panel);if(!e7S.rejiggering){k5s.initializeDisplay(k5s.chart);W_K.Studies.rejiggerDerivedStudies(k5s,q9n,k_c.inputs.id,k_c.panel);}W_K.transferObject(q9n,k_c);k5s.layout.studies[k_c.name]=q9n;k5s.overlays[k_c.name]=q9n;k5s.chart.state.studies.sorted=null;if(!e7S.rejiggering){if(!q9n.currentlyImporting && !e7S.calculateOnly && q9n.chart.dataSet){k5s.createDataSet(null,q9n.chart);}k5s.changeOccurred(\"layout\");k5s.drawWithRange();}return q9n;};W_K.Studies.addStudy=function(r7H,p6_,s$9,Z13,i$H,F0U,T0r){var E_2=q1l46;var Z9k,E89,k0I,o3Z,p8r,a3Q,Q9f,f$w,a8$,A_l,Z4R,w7P,A3F,R17,a8q,f1n,K_Q;Z9k=\"la\";Z9k+=\"yout\";E89=\"a\";E89+=\"b\";E89+=\"o\";E89+=\"rt\";k0I=\"Def\";k0I+=\"ault pan\";k0I+=\"el\";o3Z=T0r?T0r:W_K.Studies.studyLibrary[p6_];if(!i$H){i$H={};}if(o3Z){if(o3Z.inputs){p8r=W_K.clone(o3Z.inputs);for(var S1n in p8r){if(p8r[S1n] instanceof Array){if(o3Z.attributes && o3Z.attributes[S1n] && o3Z.attributes[S1n].defaultSelected){p8r[S1n]=o3Z.attributes[S1n].defaultSelected;}else {p8r[S1n]=p8r[S1n][0];}}}s$9=W_K.extend(p8r,s$9);}if(o3Z.outputs){Z13=W_K.extend(W_K.clone(o3Z.outputs),Z13);}a3Q=o3Z.parameters;if(a3Q && a3Q.init){i$H=W_K.extend(W_K.clone(a3Q.init),i$H);}if(a3Q && !i$H.display){i$H.display=a3Q.display;}}if(!s$9){s$9=W_K.clone(W_K.Studies.DEFAULT_INPUTS);}if(!Z13){Z13=W_K.clone(W_K.Studies.DEFAULT_OUTPUTS);}if(!i$H.chartName){i$H.chartName=\"chart\";}if(i$H.panelName == \"Auto\" || i$H.panelName == k0I){i$H.panelName=\"\";}if(s$9.Period < 1){s$9.Period=1;}Q9f=null;if(!r7H.layout.studies){r7H.layout.studies={};}if(o3Z && o3Z.initializeFN){Q9f=o3Z.initializeFN(r7H,p6_,s$9,Z13,i$H,F0U,T0r);}else {Q9f=W_K.Studies.initializeFN(r7H,p6_,s$9,Z13,i$H,F0U,T0r);}if(!Q9f){f$w=\"CIQ.Studies.\";f$w+=\"addStudy: initializeFN() returned null for \";E_2.R_O(0);console.log(E_2.P_X(p6_,f$w));return;}else if(Q9f === E89){return;}T0r=Q9f.study;Q9f.chart=r7H.charts[i$H.chartName];Q9f.type=p6_;Q9f.permanent=T0r.permanent;Q9f.customLegend=T0r.customLegend;Q9f.uniqueId=W_K.uniqueID();W_K.Studies.prepareStudy(r7H,T0r,Q9f);a8$=r7H.chart.state.studies;E_2.C8A();if(!a8$){a8$=r7H.chart.state.studies={};}a8$.sorted=null;if(!i$H.replaceID){r7H.layout.studies[Q9f.inputs.id]=Q9f;if(Q9f.overlay || Q9f.underlay){r7H.addOverlay(Q9f);}if(!r7H.currentlyImporting && !i$H.calculateOnly && Q9f.chart.dataSet){r7H.createDataSet(null,Q9f.chart);}}else {A_l=!\"\";delete i$H.replaceID;}if(r7H.quoteDriver){r7H.quoteDriver.updateSubscriptions();}if(i$H.calculateOnly){r7H.changeOccurred(\"layout\");return Q9f;}Z4R=r7H.panels[Q9f.panel];w7P=!!0;A3F=!(Q9f.overlay || Q9f.underlay);if(A3F && T0r.horizontalCrosshairFieldFN){Z4R.horizontalCrosshairField=T0r.horizontalCrosshairFieldFN(r7H,Q9f);}if(r7H.editCallback){w7P=!![];}else if(A3F){if(r7H.callbackListeners.studyPanelEdit && r7H.callbackListeners.studyPanelEdit.length){w7P=!![];}}else {if(r7H.callbackListeners.studyOverlayEdit && r7H.callbackListeners.studyOverlayEdit.length){w7P=!!\"1\";}}if(w7P){i$H.editMode=!!\"1\";R17=!1;for(var P5M in Q9f.inputs){if(P5M == \"id\")continue;if(P5M == \"display\")continue;R17=!!1;break;}if(!R17){for(var u$U in Q9f.outputs){R17=!!({});break;}}if(R17){a8q=\"un\";a8q+=\"de\";a8q+=\"fined\";if(typeof Q9f.study.edit != a8q){if(Q9f.study.edit){f1n=(function(w0y,r$1,f5A,E3S,y1u){E_2.P3W();return function(){W_K.clearCanvas(w0y.chart.tempCanvas,w0y);r$1.study.edit(r$1,{stx:w0y,inputs:f5A,outputs:E3S,parameters:y1u});};})(r7H,Q9f,s$9,Z13,i$H);r7H.setPanelEdit(Z4R,f1n);Q9f.editFunction=f1n;}}else if(!A3F){f1n=(function(H8g,m9C,M49,H6U,w6i){E_2.P3W();return function(s4o){W_K.clearCanvas(H8g.chart.tempCanvas,H8g);H8g.dispatch(\"studyOverlayEdit\",{stx:H8g,sd:m9C,inputs:M49,outputs:H6U,parameters:w6i,forceEdit:s4o});};})(r7H,Q9f,s$9,Z13,i$H);Q9f.editFunction=f1n;}else {if(r7H.editCallback){K_Q=\"c\";K_Q+=\"hart\";f1n=(function(m6K,V2q,G8O,p6d,M2Q){return function(){var a43;a43=m6K.editCallback(m6K,V2q);E_2.P3W();W_K.clearCanvas(m6K.chart.tempCanvas,m6K);W_K.Studies.studyDialog(m6K,p6_,a43,{inputs:G8O,outputs:p6d,parameters:M2Q});};})(r7H,Q9f,s$9,Z13,i$H);if(Z4R.name != K_Q){r7H.setPanelEdit(Z4R,f1n);}}else {f1n=(function(k60,t5f,e_B,k2r,z5h){E_2.P3W();return function(){W_K.clearCanvas(k60.chart.tempCanvas,k60);E_2.C8A();k60.dispatch(\"studyPanelEdit\",{stx:k60,sd:t5f,inputs:e_B,outputs:k2r,parameters:z5h});};})(r7H,Q9f,s$9,Z13,i$H);if(Z4R.name != \"chart\"){r7H.setPanelEdit(Z4R,f1n);Q9f.editFunction=f1n;}}}}}r7H.changeOccurred(Z9k);if(!A_l){r7H.drawWithRange();}return Q9f;};W_K.Studies.removeStudy=function(e2u,V7h){var S8R,D1q,a6v,u8J;S8R=e2u.panels[V7h.panel];D1q=S8R && S8R.yAxis.name;if(V7h.overlay || V7h.underlay){e2u.removeOverlay(V7h.name);}a6v=e2u.panels[V7h.panel];if(V7h.attribution){e2u.removeFromHolder(V7h.attribution.marker);}e2u.cleanupRemovedStudy(V7h);if(a6v && !e2u.checkForEmptyPanel(a6v)){if(D1q == V7h.name){e2u.electNewPanelOwner(a6v);}u8J=e2u.getYAxisByName(V7h.panel,V7h.name);if(u8J){u8J.name=u8J.studies[1] || u8J.renderers[0];}}e2u.drawWithRange();e2u.resizeChart();};W_K.Studies.getPanelFromFieldName=function(M38,P0l){var j$C,M8f,P$b,K1M,O6y,M2w;j$C=W_K.Studies.getFieldInputs(P0l);if(!j$C.length){return null;}M8f=M38.layout.studies;q1l46.P3W();if(!M8f){return null;}P$b={};for(var o8n in M8f){for(var w5n in M8f[o8n].outputMap){K1M=M8f[o8n].inputs.Series;if(K1M && K1M !== \"series\"){q1l46.R_O(14);w5n+=q1l46.M8Y(K1M,851 >= 4000?(654.31,!!\"1\"):\"]\",\" [\");}P$b[w5n]=M8f[o8n].panel;}}for(var r2A in M38.chart.series){P$b[r2A]=M38.chart.series[r2A].parameters.panel;}for(var E6Y=0;E6Y < j$C.length;E6Y++){O6y=P0l.inputs[j$C[E6Y]];if(O6y){M2w=P$b[O6y];if(M2w){return M2w;}}}return null;};W_K.Studies.createLibraryHash=function(){q1l46.C8A();return Object.keys(W_K.Studies.studyLibrary).join(\"|\");};W_K.Studies.displayStudies=function(X73,v88,P8P){var Z_U,i9h,e7Y,V_u,l$D,t0v,L26,y3z,c0_,e6P,T$O,J9y,j5h,V8Q,q8k,f_5,o54;if(P8P){v88.studyLibraryHash=W_K.Studies.createLibraryHash();}Z_U=X73.layout.studies;q1l46.C8A();if(!Z_U){return;}function g8j(O9c){var c1b;q1l46.P3W();c1b=O9c.color || O9c;return c1b === \"auto\"?X73.defaultColor:c1b;}i9h={};i9h[v88.name]=!!\"1\";for(var L4t in Z_U){e7Y=\"und\";e7Y+=\"efi\";e7Y+=\"ned\";V_u=Z_U[L4t];l$D=V_u.study;if(!l$D)continue;if(V_u.disabled || V_u.signalData && !V_u.signalData.reveal)continue;t0v=V_u.underlay || V_u.parameters && V_u.parameters.underlayEnabled;if(P8P && !t0v || !P8P && t0v)continue;L26=W_K.clone(l$D.renderer);if(L26 && !(L26 instanceof Array)){L26=[L26];}y3z=X73.panels[V_u.panel];if(y3z){if(y3z.chart != v88)continue;if(y3z.hidden)continue;if(!i9h[y3z.name]){c0_=V_u.permanent || !X73.manageTouchAndMouse;if(y3z.closeX){if(c0_){y3z.closeX.style.display=\"none\";}}else if(y3z.close){if(c0_){y3z.close.style.display=\"none\";}}if(y3z.edit){if(c0_){y3z.edit.style.display=\"none\";}}i9h[y3z.name]=c0_;}}else {if(X73.currentlyImporting){delete Z_U[L4t];}continue;}e6P=V_u.chart.dataSegment;if(V_u.panel == V_u.parameters.chartName && (!V_u.parameters || !V_u.parameters.panelName)){T$O=W_K.Studies.getPanelFromFieldName(X73,V_u);if(T$O && V_u.panel != T$O){V_u.panel=T$O;}}if(typeof l$D.seriesFN == e7Y){if(L26){if(!V_u.overlay){W_K.Studies.createYAxis(X73,V_u,e6P,y3z);}for(var F4r=0;F4r < L26.length;F4r++){J9y=L26[F4r];for(var O9j in V_u.outputMap){if(V_u.outputMap[O9j] == J9y.field){J9y.field=O9j;}}if(!J9y.field)continue;J9y.panel=V_u.panel;j5h=J9y.binding;if(j5h){for(var j$J in j5h){V8Q=W_K.Studies.determineColor(V_u.outputs[j5h[j$J]]);if(V8Q && V8Q != \"auto\"){J9y[j$J]=V8Q;}}}J9y.yAxis=null;q8k=W_K.Renderer.produce(J9y.type,J9y);q8k.stx=X73;q8k.attachSeries(null,J9y).draw();}}else {W_K.Studies.displaySeriesAsLine(X73,V_u,e6P);}if(y3z){W_K.Studies.displayError(X73,V_u);}}else {if(y3z){if(l$D.seriesFN){l$D.seriesFN(X73,V_u,e6P);}W_K.Studies.displayError(X73,V_u);}}f_5=Object.values(V_u.outputs);o54=f_5.slice(0,3).map(g8j);X73.chart.legendColorMap[V_u.name]={color:o54,display:V_u.name,components:Object.keys(V_u.outputs).slice(\"0\" | 0,3)};}};W_K.Studies.displayError=function(J_0,S13,K7c){var H$2,M4K,z1S,I4m;H$2=\"b\";H$2+=\"ot\";H$2+=\"t\";q1l46.C8A();H$2+=\"om\";M4K=\"Not enou\";M4K+=\"gh data to compute \";if(!S13.error){return;}z1S=K7c && K7c.panel?K7c.panel:S13.panel;I4m=S13.error === !0?J_0.translateIf(M4K) + J_0.translateIf(S13.study.name):J_0.translateIf(S13.error);if(K7c && (K7c.h !== \"center\" || K7c.v !== H$2)){J_0.watermark(z1S,K7c);return;}J_0.displayErrorAsWatermark(z1S,I4m);};W_K.Studies.calculateMinMaxForDataPoint=function(G1Y,r4u,E1B){var s6U,y3j,h82,K6N;q1l46.P3W();s6U=Number.MAX_VALUE;q1l46.U1h(136);var N8J=q1l46.P_X(28,9,1,18);y3j=Number.MAX_VALUE * N8J;for(var K7W=0;K7W < E1B.length;K7W++){h82=\"undef\";h82+=\"i\";h82+=\"ne\";h82+=\"d\";K6N=E1B[K7W][r4u];if(K6N === null || typeof K6N == h82)continue;if(isNaN(K6N))continue;s6U=Math.min(K6N,s6U);y3j=Math.max(K6N,y3j);}return {min:s6U,max:y3j};};W_K.Studies.getYAxisParameters=function(L3w,E2o){var m8L,v6W,p6G,L16;m8L={};v6W=L3w.layout.studies && L3w.layout.studies[E2o.name];if(v6W){p6G=v6W.study;if(p6G.yaxis || p6G.yAxisFN){m8L.noDraw=!\"\";}else {if(p6G.parameters && p6G.parameters.excludeYAxis){m8L.noDraw=!0;}m8L.ground=p6G.yAxis && p6G.yAxis.ground;if(E2o){if(p6G.range != \"bypass\"){if(p6G.range == \"0 to 100\"){m8L.range=[0,100];}else if(p6G.range == \"-1 to 1\"){m8L.range=[-1,1];}else {L16=\"0 to ma\";L16+=\"x\";if(p6G.range == L16){m8L.range=[0,Math.max(+\"0\",E2o.high)];}else if(p6G.centerline || p6G.centerline === 0){m8L.range=[Math.min(p6G.centerline,E2o.low),Math.max(p6G.centerline,E2o.high)];}}}if(m8L.range){E2o.low=m8L.range[0];E2o.high=m8L.range[1];}if(v6W.min){E2o.min=v6W.min;}if(v6W.max){E2o.max=v6W.max;}if(v6W.parameters && v6W.parameters.studyOverZonesEnabled){m8L.noDraw=!!({});}}}}return m8L;};W_K.Studies.doPostDrawYAxis=function(N2y,G_N){q1l46.C8A();var N0T,N4v,c0O,D9Y,S76;for(var D2t in N2y.layout.studies){N0T=N2y.layout.studies[D2t];N4v=N2y.panels[N0T.panel];if(!N4v || N4v.hidden)continue;c0O=N0T.getYAxis(N2y);if(c0O != G_N)continue;D9Y=N0T.study;if(G_N.name == N0T.name){if(D9Y.yaxis){D9Y.yaxis(N2y,N0T);}if(D9Y.yAxisFN){D9Y.yAxisFN(N2y,N0T);}}W_K.Studies.drawZones(N2y,N0T);if(!N0T.error){S76=D9Y.centerline;if(S76 || S76 === 0 || S76 !== null && G_N.highValue - 0.000000000001 > 0 && G_N.lowValue + 0.000000000001 < \"0\" << 32){W_K.Studies.drawHorizontal(N2y,N0T,null,S76 || 0,G_N);}}}};W_K.Studies.displaySeriesAsLine=function(d_g,R58,a8R){var y$6;if(!a8R.length){return;}y$6=d_g.panels[R58.panel];if(!y$6 || y$6.hidden){return;}for(var e5F in R58.outputMap){W_K.Studies.displayIndividualSeriesAsLine(d_g,R58,y$6,e5F,a8R);}};W_K.Studies.displaySeriesAsHistogram=function(Q$O,Z0t,g9b){var C8E,f3K,d7n,u8g,b3I,s_9,a5O,o8Y,E_z,Y9F;if(!g9b.length){return;}C8E=Q$O.panels[Z0t.panel];if(!C8E){return;}if(C8E.hidden){return;}f3K=[];for(var N1v in Z0t.outputMap){d7n=Z0t.outputs[Z0t.outputMap[N1v]];if(!d7n)continue;u8g=+\"0.3\";if(typeof d7n == \"object\"){u8g=d7n.opacity;d7n=d7n.color;}b3I={field:N1v,fill_color_up:d7n,border_color_up:d7n,fill_color_down:d7n,border_color_down:d7n};if(Z0t.underlay){b3I.opacity_up=b3I.opacity_down=u8g || 0.3;}f3K.push(b3I);}s_9=Z0t.getYAxis(Q$O);a5O=Z0t.inputs;o8Y=a5O.WidthFactor;q1l46.C8A();if(Z0t.study && Z0t.study.parameters){E_z=Z0t.study.parameters;if(typeof E_z.widthFactor !== \"undefined\"){o8Y=E_z.widthFactor;}}Y9F={name:Z0t.name,type:a5O.HistogramType?a5O.HistogramType:\"overlaid\",panel:Z0t.panel,yAxis:s_9,widthFactor:o8Y || 0.5,bindToYAxis:!!({}),highlight:Z0t.highlight};Q$O.drawHistogram(Y9F,f3K);};W_K.Studies.displayIndividualSeriesAsLine=function(A5g,k6G,v_w,g7x,U_Y){var w8Z,B0j,e43,N$b,y86,R9A,x16,l8T,u__,j7x,t10,j$d,g60,J_G,i7n,L3m,w$D;w8Z=\"au\";w8Z+=\"t\";w8Z+=\"o\";if(!v_w.height){v_w.height=v_w.bottom - v_w.top;}B0j=k6G.getContext(A5g);e43=k6G.outputs[k6G.outputMap[g7x]];if(!e43){return;}B0j.save();if(typeof e43 === \"string\"){e43={color:e43,width:1};}B0j.lineWidth=e43.width || 1;N$b=e43.color;if(N$b == w8Z){N$b=A5g.defaultColor;}B0j.strokeStyle=N$b;y86=e43.pattern;B0j.setLineDash(W_K.borderPatternToArray(B0j.lineWidth,y86));B0j.lineDashOffset=0;R9A=+\"0\";x16=k6G.study;l8T=k6G.getYAxis(A5g);R9A=A5g.decimalPlacesFromPriceTick(l8T.priceTick,l8T.idealTickSizePixels);if(k6G.overlay || k6G.underlay){R9A=null;}if(l8T.decimalPlaces || l8T.decimalPlaces === \"0\" >> 32){R9A=l8T.decimalPlaces;}u__=null;if(k6G.parameters){u__=k6G.parameters.label;}j7x=x16.parameters;if(!j7x){j7x={};}t10=j7x.plotType == \"step\";if(k6G.series){for(var m02 in k6G.series){j$d=\"s\";j$d+=\"te\";j$d+=\"p\";g60=k6G.series[m02].parameters.type;if(g60){q1l46.R_O(82);t10=q1l46.M8Y(j$d,g60);}}}if(j7x.noLabels){u__=![];}if(!k6G.noSlopes && k6G.noSlopes !== !({})){k6G.noSlopes=j7x.noSlopes;}if(!k6G.extendToEnd && k6G.extendToEnd !== !({})){k6G.extendToEnd=j7x.extendToEnd;}J_G=u__ || A5g.preferences.labels && u__ !== ![];i7n=k6G.gaplines;if(i7n === !1){i7n=\"transparent\";}L3m=k6G.inputs.Symbol;w$D=i7n?A5g.getGapColorFunction(L3m,g7x,e43,i7n):null;A5g.plotDataSegmentAsLine(g7x,v_w,{yAxis:l8T,skipTransform:A5g.panels[k6G.panel].name != k6G.chart.name,label:J_G,labelDecimalPlaces:R9A,noSlopes:k6G.noSlopes,step:t10,alignStepToSide:k6G.alignStepToSide,extendToEndOfLastBar:k6G.extendToEndOfLastBar,width:k6G.lineWidth,extendToEndOfDataSet:k6G.extendToEnd,gapDisplayStyle:i7n,highlight:k6G.highlight},w$D);if(x16.appendDisplaySeriesAsLine){x16.appendDisplaySeriesAsLine(A5g,k6G,U_Y,g7x,v_w);}B0j.restore();};W_K.Studies.drawHorizontal=function(C68,O0o,p59,X4d,g6o,z1Z){var V4J,F0P,H7f;V4J=C68.panels[O0o.panel];F0P=C68.getBackgroundCanvas().context;if(!V4J){return;}if(!z1Z){z1Z=g6o.textStyle;}H7f=C68.pixelFromPrice(X4d,V4J,g6o);if(H7f > g6o.top && H7f < g6o.bottom){C68.plotLine(V4J.left,V4J.right,H7f,H7f,z1Z,\"segment\",F0P,!\"1\",{opacity:z1Z && z1Z.opacity?z1Z.opacity:\"0.5\" * 1});}};W_K.Studies.displayHistogramWithSeries=function(c30,p3U,i3R){var m8a,c6y;m8a=c30.panels[p3U.panel];q1l46.C8A();c6y=0.5;if(p3U.underlay){c6y=0.3;}W_K.Studies.createHistogram(c30,p3U,i3R,!1,c6y);W_K.Studies.displaySeriesAsLine(c30,p3U,i3R);};W_K.Studies.drawZones=function(O72,X2G,H51){var c5R=q1l46;var v7r,i7I,W8q,I1D,G$E,F5f,k4z,J5l,z$_,h20,x95,F5F,n3V,v2r,z1H,T$a,M9Y,F4c,k6o,n0U,T69,t3a,y1v,z2l,j9D,W4D,c8y,Z0T,f0X,T4W,f_0;v7r=\"s\";v7r+=\"t\";v7r+=\"x_gri\";v7r+=\"d_border\";i7I=\"Re\";i7I+=\"sult\";if(!X2G.parameters || !X2G.parameters.studyOverZonesEnabled){return;}W8q=parseFloat(X2G.parameters.studyOverSoldValue);I1D=parseFloat(X2G.parameters.studyOverBoughtValue);G$E=X2G.parameters.studyOverSoldColor;F5f=X2G.parameters.studyOverBoughtColor;k4z=X2G.zoneOutput;if(!k4z){k4z=i7I;}J5l=W_K.Studies.determineColor(X2G.outputs[k4z]);if(!J5l || J5l == \"auto\" || W_K.isTransparent(J5l)){J5l=O72.defaultColor;}if(!G$E){G$E=J5l;}if(!G$E || G$E == \"auto\" || W_K.isTransparent(G$E)){G$E=O72.defaultColor;}if(!F5f){F5f=J5l;}if(!F5f || F5f == \"auto\" || W_K.isTransparent(F5f)){F5f=O72.defaultColor;}z$_=O72.panels[X2G.panel];h20=X2G.getYAxis(O72);x95=h20.displayBorder;if(O72.axisBorders === !({})){x95=!({});}if(O72.axisBorders === !![]){x95=!!1;}if(h20.width === 0){x95=!({});}F5F=O72.getYAxisCurrentPosition(h20,z$_);c5R.U1h(82);n3V=c5R.M8Y(\"left\",F5F);v2r=h20.justifyRight;if(!v2r && v2r !== !({})){if(O72.chart.yAxis.justifyRight || O72.chart.yAxis.justifyRight === !!0){v2r=O72.chart.yAxis.justifyRight;}else {v2r=n3V;}}z1H=Math.round(h20.left + (n3V?h20.width:0)) + +\"0.5\";T$a=x95?3:0;M9Y=O72.getBackgroundCanvas().context;F4c=M9Y.fillStyle;M9Y.globalAlpha=0.2;O72.startClip(z$_.name,!![]);M9Y.beginPath();k6o=Math.round(O72.pixelFromPrice(I1D,z$_,h20)) - 0.5;M9Y.strokeStyle=F5f;M9Y.moveTo(z$_.left,k6o);M9Y.lineTo(z$_.right,k6o);M9Y.stroke();M9Y.closePath();M9Y.beginPath();n0U=Math.round(O72.pixelFromPrice(W8q,z$_,h20)) + 0.5;M9Y.strokeStyle=G$E;M9Y.moveTo(z$_.left,n0U);M9Y.lineTo(z$_.right,n0U);M9Y.stroke();M9Y.closePath();T69=new W_K.Plotter();T69.newSeries(\"border\",\"stroke\",O72.canvasStyle(v7r));if(x95){t3a=\"bo\";t3a+=\"r\";t3a+=\"d\";t3a+=\"er\";y1v=\"borde\";y1v+=\"r\";z2l=\"bor\";z2l+=\"de\";z2l+=\"r\";j9D=n3V?z1H - T$a:z1H - 0.5;W4D=n3V?z1H + \"0.5\" * 1:z1H + T$a;T69.moveTo(\"border\",j9D,k6o);T69.lineTo(z2l,W4D,k6o);T69.moveTo(y1v,j9D,n0U);T69.lineTo(t3a,W4D,n0U);}M9Y.fillStyle=F4c;c8y={skipTransform:O72.panels[X2G.panel].name != X2G.chart.name,panelName:X2G.panel,band:k4z + (3654 < 7050?\" \":0xaca) + X2G.name,yAxis:h20,opacity:+\"0.3\"};if(!X2G.highlight && O72.highlightedDraggable){c5R.R_O(2);c8y.opacity*=c5R.P_X(\"0.3\",1);}W_K.preparePeakValleyFill(O72,W_K.extend(c8y,{threshold:I1D,direction:h20.flipped?-1:1,color:F5f}));W_K.preparePeakValleyFill(O72,W_K.extend(c8y,{threshold:W8q,direction:h20.flipped?+\"1\":-1,color:G$E}));M9Y.globalAlpha=1;if(!X2G.study || !X2G.study.yaxis){if(x95){Z0T=Math.round(h20.bottom) + +\"0.5\";T69.moveTo(\"border\",z1H,h20.top);T69.lineTo(\"border\",z1H,Z0T);T69.draw(M9Y,\"border\");}if(h20.width !== 0){f0X=\"l\";f0X+=\"e\";f0X+=\"f\";f0X+=\"t\";O72.canvasFont(\"stx_yaxis\",M9Y);O72.canvasColor(\"stx_yaxis\",M9Y);M9Y.textAlign=v2r?\"right\":f0X;c5R.R_O(63);var D9C=c5R.P_X(1,1,4,4);T4W=O72.getCanvasFontSize(\"stx_yaxis\") / D9C;if(n3V){f_0=h20.left + (\"3\" >> 0);if(v2r){c5R.R_O(8);var U51=c5R.M8Y(5,8);f_0=h20.left + h20.width - T$a - U51;}}else {c5R.R_O(27);var Y3i=c5R.P_X(7,18,8);f_0=h20.left + T$a + Y3i;if(v2r){f_0=h20.left + h20.width;}}if(k6o > h20.top + T4W){M9Y.fillStyle=F5f;M9Y.fillText(I1D,f_0,k6o);}if(n0U < h20.bottom - T4W){M9Y.fillStyle=G$E;M9Y.fillText(W8q,f_0,n0U);}M9Y.fillStyle=F4c;}}O72.endClip();M9Y.globalAlpha=1;if(h20.name == X2G.name){h20.yAxisPlotter=new W_K.Plotter();}};W_K.Studies.createHistogram=function(I0O,R38,a9L,L9S,E4O){var w$$=q1l46;var y$P,W3Q,c8n,I$i,R2b,G_W,A8e,s93,h1t,R1v,S$C,M1f,g0V,c1Y,W7O,m6m,s_S,w1A,h2$,P3Z,z9a,l73;y$P=I0O.panels[R38.panel];W3Q=R38.getContext(I0O);c8n=R38.getYAxis(I0O);I0O.startClip(y$P.name);w$$.R_O(8);var O4R=w$$.M8Y(22,24);I$i=I0O.layout.candleWidth - O4R;if(I$i < 2){I$i=1;}R2b=I0O.pixelFromPrice(0,y$P,c8n);if(c8n.min > 0){R2b=I0O.pixelFromPrice(c8n.min,y$P,c8n);}if(L9S){R2b=Math.floor(y$P.top + y$P.height / 2);}G_W=R38.name + \"_hist\";I0O.canvasColor(\"stx_histogram\");A8e=W3Q.fillStyle;if(E4O || E4O === 0){W3Q.globalAlpha=E4O;}if(!R38.highlight && I0O.highlightedDraggable){w$$.U1h(8);W3Q.globalAlpha*=w$$.M8Y(0,\"0.3\");}s93=null;h1t=null;R1v=R38.outputs;for(var X8j=0;X8j < a9L.length;X8j++){S$C=\"Increasing B\";S$C+=\"a\";S$C+=\"r\";M1f=0;g0V=a9L[X8j];if(!g0V)continue;if(I0O.cleanupGaps === \"stretch\"){while(a9L[X8j + +\"1\"]){w$$.U1h(0);c1Y=a9L[w$$.P_X(1,X8j)][G_W];if(c1Y || c1Y === \"0\" << 96 || a9L[X8j + (\"1\" ^ 0)].futureTick)break;M1f++;X8j++;}}if(g0V.candleWidth){I$i=Math.floor(Math.max(1,g0V.candleWidth - +\"2\"));}W7O=Math.floor(I0O.pixelFromBar(X8j - M1f,y$P.chart) - I$i / 2);m6m=Math.floor(I$i + M1f * I0O.layout.candleWidth);if(s93 === null){w$$.R_O(137);var X3C=w$$.M8Y(6,22,19,7,3);s_S=I0O.tickFromPixel(W7O,y$P.chart) - X3C;if(s_S < +\"0\"){s93=h1t;}else {s93=I0O.pixelFromPrice(I0O.chart.dataSet[s_S][G_W],y$P,c8n) - R2b;}}else {s93=h1t;}h1t=I0O.pixelFromPrice(g0V[G_W],y$P,c8n) - R2b;w1A=W_K.Studies.determineColor(R1v[\"Decreasing Bar\"]);h2$=W_K.Studies.determineColor(R1v[S$C]);P3Z=W_K.Studies.determineColor(R1v[\"Positive Bar\"]);z9a=W_K.Studies.determineColor(R1v[\"Negative Bar\"]);l73=c8n.flipped;W3Q.fillStyle=A8e;if(w1A && (l73?h1t < s93:h1t > s93)){W3Q.fillStyle=w1A;}else if(h2$ && (l73?h1t > s93:h1t < s93)){W3Q.fillStyle=h2$;}else if(P3Z && (l73?h1t > 0:h1t < 0)){W3Q.fillStyle=P3Z;}else if(z9a && (l73?h1t < \"0\" * 1:h1t > 0)){W3Q.fillStyle=z9a;}W3Q.fillRect(W7O,R2b,m6m,Math.floor(h1t));}W3Q.globalAlpha=1;I0O.endClip();};W_K.Studies.prettify={Close:469.46 <= \"748.72\" * 1?\"C\":323.67 >= (6804,769)?0x54c:(908.19,1.17e+3),Open:(104.83,\"1920\" | 0) < 9270?(245.4,239.69) < +\"6991\"?987 > 9302?3.32e+3:\"O\":![]:4.29e+3,High:\"H\",Low:(7830,8110) == 2220?(7874,+\"8182\") <= (\"1080\" >> 0,4913)?!\"1\":9010 >= 7868?(\"N\",\"0xf3a\" << 32):(3.25e+3,!\"\"):\"L\",simple:\"ma\",exponential:\"ema\",triangular:\"tma\",VIDYA:J_P,weighted:\"wma\",\"welles wilder\":\"smma\",true:(220.7,4401) == (7890,599.88)?0x5b2:\"y\",false:(\"3100\" ^ 0) >= (4910,509)?\"n\":+\"0x17ed\"};W_K.Studies.prettyRE=/^.{0,50}\\((.{0,50})\\).{0,50}$/;W_K.Studies.prettyDisplay=function(M1C){var d8r,p3O;q1l46.C8A();d8r=W_K.Studies.prettyRE.exec(M1C);if(!d8r){return M1C;}p3O=d8r[+\"1\"];if(p3O){for(var s8U in W_K.Studies.prettify){p3O=p3O.replace(s8U,W_K.Studies.prettify[s8U]);}M1C=M1C.replace(d8r[1],p3O);}return M1C;};W_K.Studies.getFieldInputs=function(Y1Y){var X_7,h7$,i01;X_7=[];h7$=Y1Y.study.inputs;q1l46.P3W();for(var S0h in h7$){i01=\"fi\";i01+=\"e\";i01+=\"l\";i01+=\"d\";if([i01,\"series\"].includes(h7$[S0h])){X_7.push(S0h);}}return X_7;};W_K.Studies.initializeFN=function(A7j,F7k,K1V,q1W,c1Z,u1j,E8G){var c2p,h5t,g6c,Z6O,w4z,Z8V,S$Y,l$T,w41,d$n,k9o,a5V,b3$,x$t,t2b,e1$,N8u,l9p,V7H,c4A;c2p=\"To\";c2p+=\"p\";h5t=\"init\";h5t+=\"ial\";h5t+=\"Margi\";h5t+=\"n\";if(!K1V){K1V={};}if(!c1Z){c1Z={};}if(!K1V.id){K1V.id=W_K.Studies.generateID(A7j,F7k,K1V,c1Z.replaceID,c1Z.display);}if(!K1V.display){K1V.display=K1V.id;}g6c=new W_K.Studies.StudyDescriptor(K1V.id,F7k,K1V.id,K1V,q1W,c1Z);if(K1V.Period){g6c.days=Math.max(1,parseInt(g6c.inputs.Period,10));}if(E8G){if(!E8G.inputs){E8G.inputs=g6c.study.inputs;}if(!E8G.outputs){E8G.outputs=g6c.study.outputs;}g6c.study=E8G;}else {E8G=g6c.study;}if(E8G.display){K1V.display=E8G.display;}if(typeof c1Z.panelName == \"string\"){u1j=c1Z.panelName;}if(u1j == K1V.id || u1j && !A7j.panelExists(u1j)){g6c.underlay=g6c.overlay=![];}if(u1j == \"Own panel\" || u1j == \"New panel\"){u1j=null;}Z6O=g6c.overlay || K1V.Overlay || g6c.overlay !== !1 && E8G.overlay;w4z=g6c.underlay || K1V.Underlay || g6c.underlay !== ![] && E8G.underlay;if(Z6O && c1Z.underlayEnabled){w4z=!!({});}if(w4z){g6c.underlay=!!1;}if(!w4z && A7j.chart.panel && u1j == A7j.chart.panel.name){Z6O=!![];}if(Z6O){g6c.overlay=!!({});}Z8V=A7j.preferences.dragging;if(Z8V === !0 || Z8V && Z8V.study){g6c.overlay=!!1;}if(u1j){c1Z.panelName=u1j;}else if(!Z6O && !w4z){u1j=K1V.id;}if(c1Z.calculateOnly){if(Z6O || w4z){if(A7j.panels[c1Z.panelName]){g6c.panel=c1Z.panelName;}else {g6c.panel=W_K.Studies.getPanelFromFieldName(A7j,g6c) || c1Z.chartName;}}return g6c;}S$Y={};l$T=A7j.layout.studies[c1Z.replaceID];if(l$T){S$Y={outputMap:W_K.clone(l$T.outputMap),panel:l$T.panel};}g6c.panel=\"\";if(u1j){w41=\"defau\";w41+=\"lt\";d$n=\"le\";d$n+=\"f\";d$n+=\"t\";k9o=W_K.Studies.smartMovePanel(A7j,g6c.inputs,u1j,c1Z.replaceID,c1Z.panelName == \"New panel\");if(k9o){g6c.panel=k9o.name;}if(c1Z.yaxisDisplayValue && ![d$n,\"right\",\"none\",\"shared\",w41].includes(c1Z.yaxisDisplayValue) && !A7j.getYAxisByName(k9o,c1Z.yaxisDisplayValue)){c1Z.yaxisDisplayValue=\"default\";}}else if(Z6O || w4z){g6c.panel=W_K.Studies.getPanelFromFieldName(A7j,g6c) || c1Z.chartName;}if(!g6c.panel){a5V=E8G.panelHeight || null;b3$=c1Z.yAxis || E8G.yAxis || ({});b3$.name=g6c.inputs.id;g6c.panel=g6c.inputs.id;A7j.createPanel(g6c.inputs.display,g6c.panel,a5V,c1Z.chartName,new W_K.ChartEngine.YAxis(b3$));}if(g6c.parameters && g6c.parameters.panelName){g6c.parameters.panelName=g6c.panel;}x$t=A7j.panels[g6c.panel];t2b=E8G?W_K.clone(E8G.yAxis):null;e1$=c1Z.yAxis || t2b;if((e1$ || ({})).ground){e1$[h5t + (e1$.flipped?c2p:\"Bottom\")]=0;}N8u=W_K.Studies.smartCreateYAxis(A7j,x$t,g6c.inputs.id,c1Z.yaxisDisplayValue,e1$);if(N8u){l9p=\"de\";l9p+=\"fault\";if(N8u.name == c1Z.replaceID){N8u.name=g6c.inputs.id;}if(!c1Z.replaceID && N8u.name === g6c.name){A7j.calculateYAxisMargins(N8u);}N8u.allowSharing=!c1Z.yAxis && !E8G.yAxis;N8u.width=N8u.position == \"none\"?0:W_K.ChartEngine.YAxis.prototype.width;if(c1Z.yaxisDisplayValue == \"shared\" || c1Z.yaxisDisplayValue == l9p){delete c1Z.yaxisDisplayValue;}else {if(t2b){W_K.ensureDefaults(N8u,t2b);}if(N8u.name == g6c.name){if(!(t2b || ({})).textStyle && !c1Z.yaxisDisplayColor || c1Z.yaxisDisplayColor == \"auto\"){delete N8u.textStyle;}else if(c1Z.yaxisDisplayColor){N8u.textStyle=W_K.colorToHex(c1Z.yaxisDisplayColor);}if((t2b || ({})).justifyRight === undefined){N8u.justifyRight=null;}if(c1Z.flippedEnabled !== undefined){N8u.flipped=c1Z.flippedEnabled;}}}if(N8u != x$t.yAxis){N8u.displayGridLines=!\"1\";}else if(N8u != A7j.chart.yAxis){N8u.displayGridLines=A7j.displayGridLinesInStudies;}}A7j.calculateYAxisPositions();if(l$T){V7H=!({});for(var J9P in A7j.drawingObjects){c4A=A7j.drawingObjects[J9P];if(S$Y.outputMap && S$Y.outputMap.hasOwnProperty(c4A.field)){c4A.field=c4A.field.replace(c1Z.replaceID,g6c.inputs.id);if(g6c.parameters && g6c.parameters.panelName){c4A.panelName=g6c.parameters.panelName;}else {c4A.panelName=g6c.panel;}V7H=!\"\";}else if(S$Y.panel && S$Y.panel == c4A.panelName){c4A.panelName=c4A.panelName.replace(c1Z.replaceID,g6c.inputs.id);V7H=!!({});}}if(V7H){A7j.changeOccurred(\"vector\");}}return g6c;};W_K.Studies.smartMovePanel=function(v7c,v1q,P7c,f4N,x$D){var k2L,u4n,A4V,Y$T;u4n=v1q.id;if(f4N){k2L=v7c.layout.studies[f4N];}if(k2L){A4V=v7c.panels[k2L.panel];if(A4V){if(A4V.yAxis.name == f4N){if((x$D || P7c != f4N && P7c != u4n) && !v7c.checkForEmptyPanel(A4V.name,!!({}),k2L)){v7c.electNewPanelOwner(A4V);Y$T=k2L.getYAxis(v7c);if(Y$T.name == f4N){v7c.electNewYAxisOwner(Y$T);}}else if(P7c == f4N || !v7c.panels[P7c]){if(u4n != A4V.name){v7c.modifyPanel(A4V,{name:u4n,display:v1q.display});}P7c=u4n;}}}}return v7c.panels[P7c];};W_K.Studies.smartCreateYAxis=function(K0q,C3Z,x$1,D8a,F4Y){var t3v,P9j,v9A,k1Z,d3i,r4T,e3y;t3v=\"n\";t3v+=\"o\";t3v+=\"n\";t3v+=\"e\";P9j=\"l\";P9j+=\"e\";P9j+=\"f\";q1l46.C8A();P9j+=\"t\";v9A=F4Y || ({});k1Z=K0q.getYAxisByName(C3Z,x$1);if(!D8a && F4Y){D8a=F4Y.position;}if([P9j,\"right\",t3v].indexOf(D8a) > -1 || D8a === undefined && F4Y){if(!k1Z || k1Z.isShared(K0q)){if(F4Y instanceof W_K.ChartEngine.YAxis){x$1=F4Y.name;}W_K.extend(v9A,{name:x$1,position:D8a});if(!k1Z && !K0q.currentlyImporting && C3Z != C3Z.chart.panel && !C3Z.yAxis.studies.length && !C3Z.yAxis.renderers.length){k1Z=C3Z.yAxis;W_K.extend(k1Z,v9A);}else {d3i=k1Z == C3Z.yAxis;if(k1Z){k1Z.name=K0q.electNewYAxisOwner(k1Z);}r4T=k1Z || C3Z.yAxis;if(r4T.lockScale){W_K.extend(v9A,{zoom:r4T.zoom,scroll:r4T.scroll,lockScale:!!1});}k1Z=K0q.addYAxis(C3Z,new W_K.ChartEngine.YAxis(v9A));if(d3i){C3Z.yAxis=k1Z;}}}else {if(F4Y){W_K.extend(k1Z,F4Y);}k1Z.position=D8a;k1Z.name=x$1;}return k1Z;}if(D8a && D8a !== \"default\" && D8a !== \"shared\" && D8a !== C3Z.yAxis.name){e3y=K0q.getYAxisByName(C3Z,D8a);if(e3y && k1Z == C3Z.yAxis && !k1Z.isShared(K0q)){C3Z.yAxis=e3y;}if(k1Z && k1Z.isShared(K0q)){k1Z.name=K0q.electNewYAxisOwner(k1Z);}else {if(k1Z !== C3Z.yAxis){K0q.deleteYAxisIfUnused(C3Z,k1Z);}}return e3y;}if(D8a == \"shared\" || D8a == C3Z.yAxis.name || C3Z.yAxis.allowSharing && (!k1Z || k1Z.allowSharing)){if(k1Z){if(k1Z !== C3Z.yAxis && k1Z.isShared(K0q)){k1Z.name=K0q.electNewYAxisOwner(k1Z);}else {delete k1Z.position;K0q.deleteYAxisIfUnused(C3Z,k1Z);}}K0q.resizeChart();return C3Z.yAxis;}W_K.extend(v9A,{name:x$1});if(k1Z){k1Z.name=K0q.electNewYAxisOwner(k1Z);}if(!k1Z || k1Z.name){k1Z=K0q.addYAxis(C3Z,new W_K.ChartEngine.YAxis(v9A));}else {W_K.extend(k1Z,v9A);delete k1Z.position;}return k1Z;};W_K.Studies.calculateVolume=function(i9e,d2l){var Y1w,Q4r,p0Q;if(d2l.type == \"vol undr\"){if(!i9e || !i9e.chart.dataSet){return;}Y1w=i9e.layout;Q4r=d2l.parameters.removeStudy;p0Q=Y1w.volumeUnderlay;Y1w.volumeUnderlay=!Q4r;if(p0Q != Y1w.volumeUnderlay){i9e.changeOccurred(\"layout\");}if(Q4r){W_K.Studies.removeStudy(i9e,d2l);}}d2l.outputMap={};d2l.outputMap.Volume=\"\";};W_K.Studies.MA=function(x6j,V5z,m99,Z6e,Z1V,q_P,Q_A,G1w){var B0g=q1l46;var O30,E1b;O30=\"m\";O30+=\"a\";B0g.R_O(138);var b51=B0g.P_X(3454,3476,581,10);B0g.R_O(35);var k5b=B0g.M8Y(19,17,9,14,603);B0g.R_O(118);var P4i=B0g.P_X(197,1375,5,18,179);E1b=new W_K.Studies.StudyDescriptor(Z1V + (b51 === (615.6,\"351\" | k5b)?(P4i,922.47):\" \") + Q_A.name,O30,Q_A.panel);E1b.chart=Q_A.chart;E1b.days=parseInt(V5z,10);E1b.startFrom=Q_A.startFrom;if(G1w){E1b.subField=G1w;}E1b.inputs={};if(x6j){E1b.inputs.Type=x6j;}if(m99){E1b.inputs.Field=m99;}if(Z6e){E1b.inputs.Offset=parseInt(Z6e,10);}W_K.Studies.calculateMovingAverage(q_P,E1b);};W_K.Studies.movingAverage={conversions:{ma:\"simple\",sma:\"simple\",ema:\"exponential\",tma:\"triangular\",vdma:\"vidya\",wma:\"weighted\",smma:\"welles wilder\"},translations:{simple:\"Simple\",exponential:\"Exponential\",triangular:\"Triangular\",vidya:y8u,weighted:\"Weighted\",\"welles wilder\":U4x},typeMap:{ema:\"Exponential\",exponential:\"Exponential\",tma:\"Triangular\",triangular:\"Triangular\",vdma:\"VIDYA\",vidya:\"VIDYA\",wma:x2a,weighted:\"Weighted\",smma:\"Exponential\",\"welles wilder\":\"Exponential\"}};W_K.Studies.movingAverageHelper=function(U$P,o8k){var W3W,T8C;W3W=\"opt\";W3W+=\"i\";W3W+=\"ons\";if(o8k == W3W){T8C={};for(var e4u in W_K.Studies.movingAverage.translations){T8C[e4u]=U$P.translateIf(W_K.Studies.movingAverage.translations[e4u]);}return T8C;}return W_K.Studies.movingAverage.conversions[o8k];};W_K.Studies.createVolumeChart=function(q34,x0X,z0T){var B2D=q1l46;var m61,r7P,A1P,X$O,L5g,j6g,X41,P53,O3n,L6j,T9k,N5k,r$h,Y50,v8K;m61=\"_d\";m61+=\"ow\";m61+=\"n\";r7P=\"stx_vo\";r7P+=\"lum\";r7P+=\"e\";A1P=x0X.panel;X$O=x0X.inputs;L5g=x0X.underlay;j6g=W_K.Studies.determineColor(x0X.outputs[\"Up Volume\"]);X41=W_K.Studies.determineColor(x0X.outputs[\"Down Volume\"]);P53=L5g?\"stx_volume_underlay\":r7P;B2D.U1h(0);q34.setStyle(B2D.P_X(\"_up\",P53),\"color\",j6g);B2D.R_O(0);q34.setStyle(B2D.M8Y(\"_down\",P53),\"color\",X41);O3n=x0X.volumeField || \"Volume\";L6j=null;T9k=X$O.Series;if(T9k && T9k !== \"Primary\" && T9k !== \"series\"){L6j=O3n;O3n=T9k;}N5k=[{field:O3n,subField:L6j,fill_color_up:q34.canvasStyle(P53 + \"_up\").color,border_color_up:q34.canvasStyle(P53 + \"_up\").borderLeftColor,opacity_up:q34.canvasStyle(P53 + \"_up\").opacity,fill_color_down:q34.canvasStyle(P53 + m61).color,border_color_down:q34.canvasStyle(P53 + \"_down\").borderLeftColor,opacity_down:q34.canvasStyle(P53 + \"_down\").opacity,color_function:x0X.colorFunction}];r$h=N5k[0];Y50=x0X.getYAxis(q34);v8K={name:\"Volume\",panel:A1P,yAxis:Y50,widthFactor:1,bindToYAxis:!![],highlight:x0X.highlight};W_K.extend(v8K,x0X.study.parameters);W_K.extend(v8K,x0X.parameters);if(q34.colorByCandleDirection && !x0X.colorFunction){r$h.color_function=function(f8q){var k1k,v75,U_s,e4E;k1k=\"P\";k1k+=\"ri\";k1k+=\"mar\";k1k+=\"y\";v75=X$O.Series;if(v75 && v75 !== k1k && v75 !== \"series\"){f8q=f8q[v75];}U_s=f8q.Open;e4E=f8q.Close;return {fill_color:U_s > e4E?r$h.fill_color_down:r$h.fill_color_up,border_color:U_s > e4E?r$h.border_color_down:r$h.border_color_up,opacity:U_s > e4E?r$h.opacity_down:r$h.opacity_up};};}q34.drawHistogram(v8K,N5k);};W_K.Studies.calculateStandardDeviation=function(v3o,q0Y){var D3d=q1l46;var p8k,T3v,k13,h$l,r_Z,B0_,K6U,e2x,K2i,W0F,Z9Z,X$v,s$z,B26,x6q;p8k=\"Stand\";p8k+=\"ard D\";p8k+=\"eviations\";T3v=\"_\";T3v+=\"MA\";k13=q0Y.chart.scrubbed;if(k13.length < q0Y.days + 1){q0Y.error=!\"\";return;}h$l=q0Y.inputs.Field;if(!h$l || h$l == \"field\"){h$l=\"Close\";}r_Z=q0Y.inputs[\"Moving Average Type\"];if(!r_Z){r_Z=q0Y.inputs.Type;}W_K.Studies.MA(r_Z,q0Y.days,h$l,q0Y.inputs.Offset,T3v,v3o,q0Y);B0_=0;K6U=0;e2x=0;K2i=Number(q0Y.inputs[p8k]);if(K2i < 0){K2i=2;}W0F=q0Y.name;for(var i2H in q0Y.outputs){D3d.U1h(14);W0F=D3d.P_X((445.03,6178) === (270,6805)?\"c\":(4630,6310) <= (934.61,254.05)?\"e\":+\"1490\" > (1336,8176)?(\"8.73e+3\" - 0,\"1.02e+3\" >> 64):\" \",W0F,i2H);}for((Z9Z=q0Y.startFrom - 1,s$z=0);Z9Z >= 0 && s$z < q0Y.days;(Z9Z--,s$z++)){X$v=W_K.Studies.getQuoteFieldValue(k13[Z9Z],h$l,q0Y.subField);if(X$v === null){X$v=0;}B0_+=Math.pow(X$v,2);K6U+=X$v;}for(Z9Z=q0Y.startFrom;Z9Z < k13.length;Z9Z++){B26=k13[Z9Z];X$v=W_K.Studies.getQuoteFieldValue(B26,h$l,q0Y.subField);if(X$v === null){D3d.R_O(2);X$v=D3d.P_X(\"0\",1);}B0_+=Math.pow(X$v,2);K6U+=X$v;if(Z9Z < q0Y.days - 1)continue;if(Z9Z >= q0Y.days){x6q=W_K.Studies.getQuoteFieldValue(k13[Z9Z - q0Y.days],h$l,q0Y.subField);if(x6q === null){x6q=0;}B0_-=Math.pow(x6q,2);K6U-=x6q;}e2x=B26[\"_MA \" + q0Y.name];if(e2x || e2x === 0){D3d.R_O(139);var a_z=D3d.M8Y(4,7,8,28);D3d.R_O(27);var i0O=D3d.M8Y(20,38,16);B26[W0F]=Math.sqrt((B0_ + q0Y.days * Math.pow(e2x,a_z) - i0O * e2x * K6U) / q0Y.days) * K2i;}}};W_K.Studies.calculateMovingAverage=function(c3Z,c5x){var B4O=q1l46;var W9Z,G3J,u_9,v58,c$w,d9A,A1z,O3F,s$A,t6S,B3g,T8A,E91,j3M,O1L,m$l,o0J,u3B,F20,r28;W9Z=\"s\";W9Z+=\"impl\";W9Z+=\"e\";if(!c5x.chart.scrubbed){return;}G3J=c5x.inputs.Type;if(G3J == \"ma\" || G3J == \"sma\" || !G3J){G3J=\"simple\";}u_9=W_K.Studies.movingAverage.typeMap;if((G3J in u_9)){v58=\"c\";v58+=\"alculateMovin\";v58+=\"gAverage\";return W_K.Studies[v58 + u_9[G3J]](c3Z,c5x);}else if(G3J !== W9Z){return;}c$w=c5x.chart.scrubbed;d9A=0;A1z=[];O3F=c5x.name;for(var V2f in c5x.outputs){B4O.R_O(14);O3F=B4O.M8Y(4830 <= (2647,5590)?484.56 > (\"2456\" << 0,4720)?0xefb:3700 === (554.21,4900)?(\"243.20\" - 0,662.18):\" \":(\"d\",5.82e+3),O3F,V2f);}s$A=c5x.inputs.Field;if(!s$A || s$A == \"field\"){s$A=\"Close\";}t6S=parseInt(c5x.inputs.Offset,10);if(isNaN(t6S)){t6S=0;}j3M=c5x.startFrom;O1L=t6S;for(B3g=c5x.startFrom - 1;B3g >= 0;B3g--){T8A=W_K.Studies.getQuoteFieldValue(c$w[B3g],s$A,c5x.subField);if(T8A === null)continue;if(O1L > 0){O1L--;j3M=B3g;continue;}if(A1z.length == c5x.days - 1)break;d9A+=T8A;A1z.unshift(T8A);}if(A1z.length < c5x.days - 1){A1z=[];B4O.R_O(1);j3M=B4O.P_X(\"0\",0);}m$l=[];for(B3g=j3M;B3g < c$w.length;B3g++){o0J=c$w[B3g];T8A=W_K.Studies.getQuoteFieldValue(o0J,s$A,c5x.subField);u3B=B3g + t6S >= 0 && B3g + t6S < c$w.length;F20=u3B?c$w[B3g + t6S]:null;if(T8A === null){if(F20){F20[O3F]=null;}else if(B3g + t6S >= c$w.length){E91={};E91[O3F]=null;m$l.push(E91);}continue;}d9A+=T8A;A1z.push(T8A);if(A1z.length > c5x.days){d9A-=A1z.shift();}r28=A1z.length == c5x.days?d9A / c5x.days:null;if(F20){F20[O3F]=r28;}else if(B3g + t6S >= c$w.length){E91={};E91[O3F]=r28;m$l.push(E91);}}c5x.appendFutureTicks(c3Z,m$l);};W_K.Studies.calculateMovingAverageExponential=function(n2S,Y9e){var M8x=q1l46;var p6K,Q1G,b1d,W3u,M0S,K3y,C3P,t34,T2x,j02,A_D,c50,T6g,r0K,z7q,X3j,t_V,d3$,o_n,T$q,n5p;p6K=\"C\";p6K+=\"l\";p6K+=\"os\";p6K+=\"e\";Q1G=Y9e.inputs.Type;b1d=Y9e.chart.scrubbed;W3u=0;M0S=0;M8x.P3W();K3y=0;M8x.U1h(8);var n3D=M8x.M8Y(6,8);M8x.R_O(0);var t9y=M8x.P_X(1,0);C3P=n3D / (Y9e.days + t9y);if(Q1G === \"welles wilder\" || Q1G === \"smma\"){M8x.U1h(0);var d68=M8x.M8Y(1,0);C3P=d68 / Y9e.days;}t34=null;T2x=Y9e.name;for(var H8P in Y9e.outputs){M8x.U1h(14);T2x=M8x.P_X(\" \",T2x,H8P);}j02=Y9e.inputs.Field;if(!j02 || j02 == \"field\"){j02=p6K;}A_D=parseInt(Y9e.inputs.Offset,10);if(isNaN(A_D)){A_D=0;}r0K=Y9e.startFrom;z7q=A_D;for(c50=Y9e.startFrom - (\"1\" >> 96);c50 >= 0;c50--){T6g=b1d[c50][T2x];if(!T6g && T6g !== 0)continue;if(t34 === null){t34=T6g;}K3y=Y9e.days;if(z7q <= 0)break;z7q--;r0K=c50;}if(t34 === null){t34=r0K=0;}X3j=[];for(c50=r0K;c50 < b1d.length;c50++){t_V=b1d[c50];T6g=W_K.Studies.getQuoteFieldValue(t_V,j02,Y9e.subField);d3$=c50 + A_D >= +\"0\" && c50 + A_D < b1d.length;o_n=d3$?b1d[c50 + A_D]:null;if(T6g === null){T$q=null;}else {if(K3y == Y9e.days - 1){W3u+=T6g;M0S=W3u / Y9e.days;T$q=M0S;}else if(K3y < Y9e.days - 1){W3u+=T6g;M8x.U1h(140);M0S=M8x.M8Y(1,W3u,K3y);T$q=null;}else if(K3y === \"0\" - 0){W3u+=T6g;M0S=W3u;T$q=null;}else if(t34 || t34 === 0){M8x.U1h(79);M0S=M8x.M8Y(C3P,t34,t34,T6g);T$q=M0S;}t34=M0S;K3y++;}if(o_n){o_n[T2x]=T$q;}else if(c50 + A_D >= b1d.length){n5p={};n5p[T2x]=T$q;X3j.push(n5p);}}Y9e.appendFutureTicks(n2S,X3j);};W_K.Studies.calculateMovingAverageVIDYA=function(S39,L5I){var I6G=q1l46;var g_w,Q3J,S6l,y8K,A0g,i$J,H4b,n9D,o70,b6e,D09,h5n,Y_i,E8i,K_W,Q5m,f$B,G_Q,s1F,c$p,W6j;g_w=\"_S\";g_w+=\"TD\";g_w+=\" \";Q3J=\"m\";Q3J+=\"a\";S6l=L5I.inputs.Type;y8K=L5I.chart.scrubbed;I6G.R_O(141);var W5C=I6G.P_X(226,7,0,15,17);I6G.U1h(48);var d$T=I6G.P_X(1,12,11);A0g=W5C / (L5I.days + d$T);i$J=null;H4b=L5I.name;for(var I4P in L5I.outputs){I6G.U1h(14);H4b=I6G.M8Y((5852,376) < (4150,307.65)?\"T\":(\"725.24\" * 1,972) <= 1592?\" \":(100.89,904.5) >= (4170,6950)?\"K\":8.29e+3,H4b,I4P);}n9D=L5I.inputs.Field;if(!n9D || n9D == \"field\"){n9D=\"Close\";}L5I.std=new W_K.Studies.StudyDescriptor(L5I.name,\"sdev\",L5I.panel);L5I.std.chart=L5I.chart;L5I.std.days=5;L5I.std.startFrom=L5I.startFrom;L5I.std.inputs={Field:n9D,\"Standard Deviations\":1,Type:Q3J};L5I.std.outputs={_STD:null};W_K.Studies.calculateStandardDeviation(S39,L5I.std);W_K.Studies.MA(\"ma\",20,g_w + L5I.name,0,\"_MASTD\",S39,L5I);o70=parseInt(L5I.inputs.Offset,10);if(isNaN(o70)){I6G.R_O(1);o70=I6G.M8Y(\"0\",0);}Y_i=L5I.startFrom;E8i=o70;for(b6e=L5I.startFrom - +\"1\";b6e >= 0;b6e--){D09=y8K[b6e][H4b];if(!D09 && D09 !== \"0\" * 1)continue;if(i$J === null){i$J=D09;}if(E8i <= 0)break;E8i--;Y_i=b6e;}if(i$J === null){i$J=Y_i=0;}K_W=[];for(b6e=Y_i;b6e < y8K.length;b6e++){Q5m=\"_MA\";Q5m+=\"STD \";f$B=y8K[b6e];D09=W_K.Studies.getQuoteFieldValue(f$B,n9D,L5I.subField);G_Q=b6e + o70 >= +\"0\" && b6e + o70 < y8K.length;s1F=G_Q?y8K[b6e + o70]:null;if(D09 === null){if(s1F){s1F[H4b]=null;}else if(b6e + o70 >= y8K.length){h5n={};h5n[H4b]=null;K_W.push(h5n);}continue;}if(!f$B[\"_MASTD \" + L5I.name] && f$B[\"_MASTD \" + L5I.name] !== 0)continue;c$p=f$B[\"_STD \" + L5I.name] / f$B[Q5m + L5I.name];I6G.R_O(142);W6j=I6G.P_X(1,A0g,D09,c$p,i$J,c$p,A0g);i$J=W6j;if(b6e < L5I.days){W6j=null;}if(s1F){s1F[H4b]=W6j;}else if(b6e + o70 >= y8K.length){h5n={};h5n[H4b]=W6j;K_W.push(h5n);}}L5I.appendFutureTicks(S39,K_W);};W_K.Studies.calculateMovingAverageTriangular=function(i0q,R5q){var D2O=q1l46;var z5K,l$q,N93,o50,v$s,p0q,X0h,u6C,u1S,F9D,Y3g;z5K=\"simp\";z5K+=\"le\";l$q=R5q.chart.scrubbed;D2O.P3W();N93=R5q.inputs.Field;if(!N93 || N93 == \"field\"){N93=\"Close\";}o50=Math.ceil(R5q.days / (\"2\" | 0));W_K.Studies.MA(z5K,o50,N93,0,\"TRI1\",i0q,R5q);if(R5q.days % 2 === 0){o50++;}W_K.Studies.MA(\"simple\",o50,\"TRI1 \" + R5q.name,0,\"TRI2\",i0q,R5q);v$s=R5q.name;for(var J7A in R5q.outputs){D2O.R_O(14);v$s=D2O.M8Y(\" \",v$s,J7A);}p0q=parseInt(R5q.inputs.Offset,10);if(isNaN(p0q)){p0q=0;}X0h=p0q;for(var N8H=R5q.startFrom - 1;N8H >= 0;N8H--){u6C=W_K.Studies.getQuoteFieldValue(l$q[N8H],v$s);if(u6C === null)continue;if(X0h > 0){X0h--;continue;}break;}u1S=[];for(N8H++;N8H < l$q.length;N8H++){if(N8H + p0q >= 0){F9D=\"TR\";F9D+=\"I\";F9D+=\"2\";F9D+=\" \";if(N8H + p0q < l$q.length){D2O.R_O(0);l$q[D2O.P_X(p0q,N8H)][v$s]=l$q[N8H][F9D + R5q.name];}else {Y3g={};Y3g[v$s]=l$q[N8H][\"TRI2 \" + R5q.name];u1S.push(Y3g);}}}R5q.appendFutureTicks(i0q,u1S);};W_K.Studies.calculateMovingAverageWeighted=function(y_6,T2W){var x$O=q1l46;var K0v,W$M,c82,S2z,j86,M78,H3q,b7r,J2L,x1$,n9C,u5k,B9g,j$N,U3V,n1s,q$k,s3g;K0v=T2W.chart.scrubbed;x$O.U1h(2);W$M=x$O.M8Y(\"0\",1);c82=0;S2z=T2W.inputs.Field;if(!S2z || S2z == \"field\"){S2z=\"Close\";}x$O.U1h(68);var w8f=x$O.M8Y(11,1,0,11,0);x$O.U1h(27);var W0H=x$O.M8Y(8,13,3);j86=T2W.days * (T2W.days + w8f) / W0H;M78=T2W.name;for(var n$l in T2W.outputs){x$O.R_O(14);M78=x$O.P_X((\"806.79\" * 1,+\"2990\") > (\"8592\" >> 64,\"9271\" * 1)?6988 >= (1730,369)?6.05e+3:(\"g\",0x1210):\" \",M78,n$l);}H3q=parseInt(T2W.inputs.Offset,\"10\" * 1);if(isNaN(H3q)){H3q=0;}n9C=[];u5k=T2W.startFrom;B9g=H3q;for(b7r=T2W.startFrom - 1;b7r >= 0;b7r--){J2L=W_K.Studies.getQuoteFieldValue(K0v[b7r],S2z,T2W.subField);if(J2L === null)continue;if(B9g > 0){B9g--;u5k=b7r;continue;}if(n9C.length == T2W.days - 1)break;n9C.unshift(J2L);}if(n9C.length < T2W.days - 1){n9C=[];u5k=0;}for(b7r=0;b7r < n9C.length;b7r++){x$O.U1h(23);var L_$=x$O.P_X(10,7,4);W$M+=(b7r + L_$) * n9C[b7r];c82+=n9C[b7r];}j$N=[];for(b7r=u5k;b7r < K0v.length;b7r++){U3V=K0v[b7r];J2L=W_K.Studies.getQuoteFieldValue(U3V,S2z,T2W.subField);n1s=b7r + H3q >= 0 && b7r + H3q < K0v.length;q$k=n1s?K0v[b7r + H3q]:null;if(J2L === null){if(q$k){q$k[M78]=null;}else if(b7r + H3q >= K0v.length){x1$={};x1$[M78]=null;j$N.push(x1$);}continue;}n9C.push(J2L);if(n9C.length > T2W.days){W$M-=c82;c82-=n9C.shift();}W$M+=n9C.length * J2L;c82+=J2L;s3g=b7r < T2W.days - +\"1\"?null:W$M / j86;if(q$k){q$k[M78]=s3g;}else if(b7r + H3q >= K0v.length){x1$={};x1$[M78]=s3g;j$N.push(x1$);}}T2W.appendFutureTicks(y_6,j$N);};W_K.Studies.calculateMultMA=function(r81,x5j){var s9z,L4q,V8z,v3B,Y3R,G1k,X3A;s9z=\"M\";s9z+=\"A\";s9z+=\" \";L4q=\"s\";L4q+=\"imple\";V8z=x5j.chart.scrubbed;v3B=[Number.MAX_VALUE];Object.keys(x5j.inputs).filter(t0g=>{return t0g.indexOf(\"Period\") > -+\"1\";}).forEach((F1n,V4c)=>{q1l46.P3W();q1l46.R_O(0);v3B[q1l46.M8Y(1,V4c)]=x5j.inputs[F1n];});if(V8z.length < Math.min(...v3B) + 1){x5j.error=!!({});return;}Y3R=x5j.inputs.Field;q1l46.C8A();if(!Y3R || Y3R == \"field\"){Y3R=\"Close\";}G1k=x5j.inputs[\"Moving Average Type\"];if(!G1k){G1k=L4q;}X3A=x5j.inputs.Offset || 0;for(var y9E=\"1\" | 0;y9E < v3B.length;y9E++){W_K.Studies.MA(G1k,v3B[y9E],Y3R,X3A,s9z + y9E,r81,x5j);}};W_K.Studies.calculateStudyATR=function(J0s,i1U){var M5T=q1l46;var c$P,U2T,Q4R,g3c,o5L,H0Z,e_y,f1N,a$m,w6f;c$P=i1U.chart.scrubbed;U2T=i1U.days;if(c$P.length < U2T + 1){i1U.error=!\"\";return;}Q4R=0;g3c=i1U.name;for(var e1Q=Math.max(i1U.startFrom,1);e1Q < c$P.length;e1Q++){o5L=\"AT\";o5L+=\"R \";H0Z=\"Tru\";H0Z+=\"e R\";H0Z+=\"ange \";e_y=\"Su\";e_y+=\"m True Range \";f1N=c$P[e1Q];M5T.U1h(143);a$m=c$P[M5T.M8Y(e1Q,\"1\",0)];w6f=f1N.trueRange;if(a$m[e_y + g3c]){M5T.U1h(0);Q4R=a$m[M5T.P_X(g3c,\"Sum True Range \")];}Q4R+=w6f;if(e1Q > U2T){M5T.R_O(8);Q4R-=c$P[M5T.M8Y(U2T,e1Q)][M5T.M8Y(g3c,\"True Range \",M5T.U1h(0))];}M5T.U1h(0);f1N[M5T.M8Y(g3c,H0Z)]=w6f;M5T.R_O(0);f1N[M5T.P_X(g3c,\"Sum True Range \")]=Q4R;if(e1Q == U2T){M5T.U1h(0);f1N[M5T.P_X(g3c,\"ATR \")]=M5T.P_X(Q4R,U2T,M5T.R_O(9));}else if(e1Q > U2T){M5T.U1h(25);var j6k=M5T.M8Y(7,6);M5T.U1h(0);f1N[M5T.M8Y(g3c,\"ATR \")]=(a$m[o5L + g3c] * (U2T - j6k) + w6f) / U2T;}}};W_K.Studies.displayPSAR2=function(j7v,R5n,C1a){var w8c=q1l46;var f8x,D4M,A7t,w4p,d_s,O0Q,C9l,F7J,Q9H,Q7L,j6O,u0U,b5Z;f8x=j7v.panels[R5n.panel];D4M=R5n.getYAxis(j7v);A7t=D4M == j7v.chart.panel.yAxis;j7v.startClip(f8x.name);w4p=R5n.getContext(j7v);d_s=R5n.inputs[\"Plot Type\"] == \"squarewave\";for(var w7c in R5n.outputs){w8c.U1h(144);var j8c=w8c.M8Y(9,8,15,7606,586);w8c.U1h(23);var u1I=w8c.M8Y(21,6,3525);O0Q=w7c + ((+\"3256\",j8c) >= u1I?\" \":654.33) + R5n.name;w4p.beginPath();C9l=j7v.layout.candleWidth;w8c.R_O(2);F7J=Math.max(w8c.P_X(\"3\",1),Math.floor(j7v.chart.tmpWidth / 2));for(var Y4c=0;Y4c < C1a.length;Y4c++){Q9H=C1a[Y4c];if(!Q9H || W_K.Studies.getQuoteFieldValue(Q9H,O0Q) === null)continue;if(Q9H.candleWidth){C9l=Q9H.candleWidth;}if(A7t && Q9H.transform){Q9H=Q9H.transform;}Q7L=j7v.pixelFromBar(Y4c,f8x.chart);if(d_s){w8c.R_O(9);Q7L-=w8c.P_X(C9l,2);}j6O=j7v.pixelFromTransformedValue(Q9H[R5n.referenceOutput?R5n.referenceOutput + ((+\"735\",\"133.58\" * 1) < 7650?\" \":\"T\") + R5n.name:O0Q],f8x,D4M);if(Y4c === 0 || !C1a[Y4c - 1] || W_K.Studies.getQuoteFieldValue(C1a[Y4c - 1],O0Q) === null){w4p.moveTo(Q7L,j6O);}if(d_s){w4p.lineTo(Q7L,j6O);w8c.R_O(0);w4p.lineTo(w8c.P_X(C9l,Q7L),j6O);if(C1a[Y4c + (\"1\" << 64)]){w8c.R_O(44);u0U=C1a[w8c.P_X(\"1\",Y4c)];if(A7t && u0U.transform){u0U=u0U.transform;}if(W_K.Studies.getQuoteFieldValue(u0U,O0Q) === null){w8c.U1h(0);w4p.lineTo(w8c.M8Y(C9l,Q7L),j7v.pixelFromTransformedValue(u0U[R5n.referenceOutput?R5n.referenceOutput + (9602 !== +\"2820\"?\" \":(\"68\" ^ 0) < (2929,31.55)?(\"l\",!![]):\"7114\" << 96 >= (\"4266\" - 0,146)?(9.17e+3,+\"0x13d2\"):(179.30,7.19e+3)) + R5n.name:O0Q],j7v.panels[R5n.panel],D4M));}}}else {w8c.R_O(57);w4p.moveTo(w8c.M8Y(2,F7J,Q7L),j6O);w8c.R_O(145);w4p.lineTo(w8c.M8Y(\"2\",F7J,Q7L),j6O);}}w8c.U1h(46);w4p.lineWidth=w8c.P_X(\"1\",64);if(R5n.highlight){w4p.lineWidth=3;}b5Z=W_K.Studies.determineColor(R5n.outputs[w7c]);if(b5Z == \"auto\"){b5Z=j7v.defaultColor;}w4p.strokeStyle=b5Z;if(!R5n.highlight && j7v.highlightedDraggable){w4p.globalAlpha*=0.3;}w4p.stroke();w4p.closePath();w4p.lineWidth=1;}j7v.endClip();};W_K.Studies.inputAttributeDefaultGenerator=function(b16){if(!b16 && b16 !== \"0\" * 1){return {};}if(b16.constructor == Number){if(Math.floor(b16) == b16){if(b16 > 0){return {min:1,step:1};}return {step:\"1\" | 0};}if(b16 > 0){return {min:0,step:0.01};}return {step:+\"0.01\"};}return {};};W_K.Studies.getMarketOffset=function({stx:l3t, localQuoteDate:M19, shiftToDateBoundary:Z2S}){var R1Y=q1l46;var C0V,B1G,a7f,v8l,V79,U5h;C0V=\"U\";C0V+=\"TC\";if(arguments.length > +\"1\"){l3t=arguments[0];M19=arguments[1];B1G=arguments[2];}var {symbol:b4Y}=l3t.chart;a7f=W_K.getFn(\"Market.Symbology.isForexMetal\")(b4Y);if(B1G === undefined){B1G=W_K.getFn(\"Market.Symbology.isForexSymbol\")(b4Y);}if(!l3t.chart.market){v8l=null;}else {v8l=B1G?\"America/New_York\":l3t.chart.market.market_tz;}R1Y.R_O(37);var D3B=R1Y.P_X(8,60008,420047,17);V79=new Date(M19.getTime() + M19.getTimezoneOffset() * D3B);if(!v8l || v8l.indexOf(C0V) == -+\"1\"){V79=W_K.convertTimeZone(V79,\"UTC\",v8l);}U5h=new Date(V79.getFullYear(),V79.getMonth(),V79.getDate(),V79.getHours(),V79.getMinutes(),V79.getSeconds(),V79.getMilliseconds()).getTime() - M19.getTime();if(Z2S && B1G){R1Y.R_O(146);U5h+=R1Y.P_X(a7f?6:\"7\" ^ 0,\"60\",1000,0,60);}return U5h;};W_K.Studies.getStudyList=function(A8F){var f59,e5M;f59={};e5M={};W_K.extend(e5M,A8F);q1l46.C8A();for(var Z4j in W_K.Studies.studyLibrary){if(!e5M[Z4j]){f59[W_K.Studies.studyLibrary[Z4j].name]=Z4j;}}return f59;};W_K.Studies.determineColor=function(J_q){if(!J_q){return null;}else if(typeof J_q === \"object\"){return J_q.color;}return J_q;};W_K.Studies.calculateGenericEnvelope=function(W5h,j2h,Z70,T01,F90,h$g){var G3_=q1l46;var j3D,b4h,W02,Y8f,s91,L1o,K57,K8v,B$J,B1t,S9j,g1H,A7U,w3J,L$c;if(!Z70){G3_.U1h(8);Z70=G3_.M8Y(0,\"0\");}if(!h$g){h$g=0;}if(!T01 || T01 == \"field\"){T01=\"Close\";}if(!F90){F90=T01;}G3_.C8A();j3D=j2h.chart.scrubbed;if(!j3D){return;}b4h=113555709;G3_.R_O(1);W02=G3_.P_X(\"271557090\",64);Y8f=2;for(var m9k=1;G3_.G33(m9k.toString(),m9k.toString().length,83524) !== b4h;m9k++){s91=j2h.inputs.Field;Y8f+=2;}if(G3_.I9N(Y8f.toString(),Y8f.toString().length,90344) !== W02){s91=j2h.inputs.Field;}s91=j2h.inputs.Field;for(var w$6=j2h.startFrom;w$6 < j3D.length;w$6++){L1o=\"Bandwid\";L1o+=\"th \";K57=\" B\";K57+=\"ot\";K57+=\"t\";K57+=\"om \";K8v=\" To\";K8v+=\"p \";B$J=\"Cl\";B$J+=\"o\";B$J+=\"s\";B$J+=\"e\";B1t=j3D[w$6];if(!B1t)continue;S9j=W_K.Studies.getQuoteFieldValue(B1t,s91);g1H=S9j !== null && S9j !== undefined?S9j:W_K.Studies.getQuoteFieldValue(B1t,B$J);A7U=W_K.Studies.getQuoteFieldValue(B1t,F90,j2h.subField);w3J=W_K.Studies.getQuoteFieldValue(B1t,T01);if(w3J === null)continue;G3_.R_O(147);L$c=G3_.M8Y(A7U,h$g,Z70);G3_.U1h(0);B1t[j2h.type + K8v + j2h.name]=G3_.M8Y(L$c,w3J);G3_.R_O(8);B1t[j2h.type + K57 + j2h.name]=G3_.M8Y(L$c,w3J);B1t[j2h.type + \" Median \" + j2h.name]=w3J;B1t[L1o + j2h.name]=w3J?\"200\" * 1 * L$c / w3J:+\"0\";G3_.U1h(148);B1t[\"%b \" + j2h.name]=G3_.M8Y(w3J,g1H,50,L$c,1);}};W_K.Studies.displayChannel=function(o4$,P34,l2N){var D$p=q1l46;var k8f,Q9E,n2F,f_K,h0h;if(P34.inputs[\"Channel Fill\"]){k8f={panelName:P34.panel};for(var R6M in P34.outputs){Q9E=\"Channe\";Q9E+=\"l\";n2F=\"L\";n2F+=\"ow\";f_K=R6M.split((24,766.27) >= 8197?(18,6070) >= (7252,+\"12.83\")?(2180,494.08) >= (+\"271\",475.45)?(!({}),\"V\"):0x8e2:!![]:\" \").pop();if(f_K == \"Top\" || f_K == \"High\"){D$p.U1h(103);var o6z=D$p.M8Y(6,4,96300,8,378754);D$p.U1h(8);var r7E=D$p.P_X(15,7798);D$p.R_O(65);var I2G=D$p.M8Y(5,487,1945,10,9);D$p.U1h(27);var J4b=D$p.P_X(143815,151400,15);D$p.U1h(29);var u4t=D$p.P_X(517446,29070,18);k8f.topBand=R6M + (o6z <= 853.11?(r7E,I2G) != (+\"5021\",J4b)?(u4t,\"a\"):\"0x1a05\" - 0:\" \") + P34.name;}else if(f_K == \"Bottom\" || f_K == n2F){k8f.bottomBand=R6M + \" \" + P34.name;}else if(f_K == \"Median\" || f_K == Q9E){k8f.color=W_K.Studies.determineColor(P34.outputs[R6M]);}}if(P34.parameters && P34.parameters.opacity){k8f.opacity=P34.parameters.opacity;}else {k8f.opacity=0.2;}h0h=o4$.panels[P34.panel];k8f.skipTransform=h0h.name != P34.chart.name;k8f.yAxis=P34.getYAxis(o4$);if(!P34.highlight && o4$.highlightedDraggable){k8f.opacity*=0.3;}W_K.prepareChannelFill(o4$,k8f);}W_K.Studies.displaySeriesAsLine(o4$,P34,l2N);};W_K.Studies.initAnchorHandle=function(t9Z,P8K){var {handle:F8U}=P8K;if(F8U){return;}if(!t9Z.controls.anchorHandles){t9Z.controls.anchorHandles={};}var {anchorHandles:L9K, chartControls:f1F}=t9Z.controls;if(L9K[P8K.uniqueId]){({handle:F8U}=L9K[P8K.uniqueId]);}else {F8U=document.createElement(\"div\");F8U.classList.add(\"stx_anchor_handle\");F8U.setAttribute(P8K.uniqueId,\"\");L9K[P8K.uniqueId]={handle:F8U,sd:P8K};if(f1F){f1F.parentElement.appendChild(F8U);}}P8K.anchorHandle=F8U;};W_K.Studies.removeAnchorHandle=function(T5Y,M0R){var {handle:H9N}=(T5Y.controls.anchorHandles || ({}))[M0R.uniqueId] || ({});q1l46.P3W();if(H9N){delete T5Y.controls.anchorHandles[M0R.uniqueId];H9N.remove();}};W_K.Studies.repositionAnchor=function(G_p,D$Y){var q5D,w$z,Y37,u8X,c_Y,X6O,l_N,F4l,a6x;var {currentAnchorTime:X7u, uniqueId:n2N}=D$Y;var {hoverTick:P2U}=G_p.repositioningAnchorSelector || ({});q1l46.P3W();var {dataSet:T3a, market:D5z}=G_p.chart;if(!G_p.controls.anchorHandles){G_p.controls.anchorHandles={};}var {anchorHandles:y9Y}=G_p.controls;q5D={};if(P2U || P2U === 0){w$z=\"HH\";w$z+=\":mm\";w$z+=\":\";w$z+=\"ss\";Y37=\"Y\";Y37+=\"Y\";Y37+=\"YY-\";Y37+=\"MM-dd\";if(P2U >= T3a.length){return;}u8X=!D$Y.inputs.hasOwnProperty(\"Anchor Date\");c_Y=T3a[P2U].DT;X6O=W_K.Studies.getMarketOffset({stx:G_p,localQuoteDate:c_Y,shiftToDateBoundary:!!({})});if(X7u && u8X && new Date(c_Y.getTime() + X6O).getDate() !== new Date(X7u.getTime() + X6O).getDate()){return;}if(D5z.market_def && D5z.market_def.market_tz){c_Y=new b9B.Date(c_Y,D5z.market_def.market_tz);}l_N=!u8X && W_K.dateToStr(c_Y,Y37);F4l=W_K.dateToStr(c_Y,w$z);q5D={\"Anchor Time\":F4l};if(l_N){q5D[\"Anchor Date\"]=l_N;}}else {return;}a6x=W_K.Studies.replaceStudy(G_p,D$Y.inputs.id,D$Y.type,Object.assign(D$Y.inputs,q5D),D$Y.outputs,D$Y.parameters,D$Y.panel);if(y9Y[n2N]){y9Y[n2N].sd=a6x;}G_p.draw();};W_K.Studies.cancelRepositionAnchor=function(g_A){var {sd:F9s, tapToAdd:T9v}=g_A.repositioningAnchorSelector || ({});if(!F9s){return;}if(T9v){W_K.Studies.removeStudy(g_A,F9s);}g_A.repositioningAnchorSelector=null;var {anchorHandles:u7A}=g_A.controls;if(u7A && u7A[F9s.uniqueId]){u7A[F9s.uniqueId].highlighted=!!0;W_K.Studies.displayAnchorHandleAndLine(g_A,F9s,g_A.chart.dataSegment);}g_A.draw();};W_K.Studies.displayAnchorHandleAndLine=function(Y9Y,O$N,s4A){var S3Z=q1l46;var C27,i0l,T8l,E1K,M5o,u5d,F0g,k9M,T3Z,t7v,O5p,n0u,I4s,J7O,O1b,X7H,U1K,L0a,w8y;C27=\"l\";C27+=\"ine\";i0l=\"stx_\";i0l+=\"anchor_handle\";if(O$N.signalData && !O$N.signalData.reveal){return;}if(!s4A || !s4A[+\"0\"]){return;}T8l=(Y9Y.repositioningAnchorSelector || ({})).sd === O$N;var {hoverTick:p9g}=T8l && Y9Y.repositioningAnchorSelector;var {chart:c2i, panels:b_3, cy:e_w}=Y9Y;S3Z.P3W();var {market:X2W = {}, symbol:t6d}=c2i;E1K=b_3[O$N.panel];var {top:s7M, right:W$$, left:n1R, height:e2C, subholder:K9m}=E1K;var {bottom:T8_}=E1K.yAxis;var {inputs:W88, anchorHandle:N_G, currentAnchorTime:F$w, lineWidth:P$T = 1}=O$N;var {backgroundColor:R_J, borderLeftColor:o7y}=Y9Y.canvasStyle(i0l);M5o=!W88[\"Anchor Date\"];u5d=W_K.getFn(\"Market.Symbology.isForexSymbol\")(t6d);F0g=(p9g || p9g === 0) && (Y9Y.chart.dataSet[p9g] || ({})).DT;k9M=W_K.Studies.getMarketOffset({stx:Y9Y,localQuoteDate:s4A[s4A.length - 1].DT,shiftToDateBoundary:!0});T3Z=F$w && F0g && M5o && new Date(F0g.getTime() + k9M).getDate() !== new Date(F$w.getTime() + k9M).getDate();var {floatDate:Z9h, anchorHandles:r78 = {}}=Y9Y.controls;t7v=r78[O$N.uniqueId] || ({});var {highlighted:O5D}=t7v;var [G3s,f0v]=X2W.getNormalOpen().split(4070 === (939,\"9534\" * 1)?(7587,+\"2040\") < (8980,+\"5900\")?(964.87,131.59) !== (703.72,2238)?(663.54,+\"5.21e+3\"):\"x\":4.39e+3:\":\").map(q0N=>{return parseInt(q0N);});O5p=y7c=>{var K1H;K1H=y7c?Y9Y.tickFromDate(y7c,null,null,!!\"1\"):p9g;S3Z.C8A();return [Y9Y.pixelFromTick(K1H,c2i),K1H];};n0u={y0:s7M,y1:T8_,type:C27,confineToPanel:E1K};var [a0N]=O5p();if(a0N){I4s=\"v\";I4s+=\"isibili\";I4s+=\"t\";I4s+=\"y\";a0N-=0.5;Y9Y.plotLine(Object.assign(n0u,{x0:a0N,x1:a0N,color:T3Z?o7y:R_J,pattern:[+\"6\",+\"6\"],lineWidth:+\"1\",opacity:T3Z?0.5:1}));W_K.efficientDOMUpdate(Z9h.style,I4s,\"\");Y9Y.updateChartAccessories();}if(N_G){J7O=M5o?new Date(s4A[s4A.length - 1].DT):W_K.strToDate(W88[\"Anchor Date\"]);if(X2W.market_def && X2W.market_def.market_tz){J7O=new b9B.Date(J7O,X2W.market_def.market_tz);}if(!M5o){var [S0C,i9Y,E1y]=(W88[\"Anchor Date\"] || \"\").split(8212 != 5430?\"-\":(!!({}),+\"0xe63\"));if(!E1y){[,S0C,i9Y,E1y]=S0C.match(/([0-9]{4})([0-9]{2})([0-9]{2})/);}S3Z.U1h(8);J7O.setFullYear(S0C,S3Z.P_X(1,i9Y),E1y);}var [K7S = 0,p6n = +\"0\",F1d = 0]=(W88[\"Anchor Time\"] || \"\").split(\":\");if(!p6n && p6n !== 0){[,K7S,p6n,F1d]=K7S.match(/([0-9]{2})([0-9]{2})([0-9]{2})/);}J7O.setHours(K7S,p6n,F1d);O1b=u5d && (J7O.getHours() > G3s || J7O.getHours() === G3s && J7O.getMinutes() >= f0v);if(O1b){J7O.setDate(J7O.getDate() - +\"1\");}var [R8j,L69]=O5p(J7O);X7H=new Date(J7O);X7H.setHours(...X2W.getNormalClose().split(+\"200.78\" == 856.2?119.1 <= 3300?189:351:\":\"));if(O1b){X7H.setDate(X7H.getDate() + 1);}var [b$e]=X7H && O5p(X7H) || [];if(M5o && (R8j > W$$ || b$e > W$$)){U1K=new Date(J7O);if(X2W){do {U1K.setDate(U1K.getDate() - 1);}while(!X2W.isMarketDate(U1K));}var [U$_,o3F]=O5p(U1K);if(U$_ > n1R){J7O=U1K;R8j=U$_;L69=o3F;}}S3Z.R_O(8);R8j-=S3Z.M8Y(0,\"0.5\");Y9Y.plotLine(Object.assign(n0u,{x0:R8j,x1:R8j,color:R_J,pattern:\"solid\",lineWidth:P$T,opacity:O5D || O$N.highlight?1:+\"0.5\"}));t7v.currentPixel=R8j;if(O5D){N_G.style.display=\"\";S3Z.U1h(8);var O9C=S3Z.P_X(2,27);S3Z.U1h(139);var b7L=S3Z.P_X(1,26,7,23);S3Z.U1h(113);var n6s=S3Z.M8Y(4,11,1,1);N_G.style.height=Math.max(Math.min(O9C,e2C / (\"4\" | b7L)),n6s) + \"px\";L0a=N_G.getBoundingClientRect();w8y=Math.max(Math.min(e_w - L0a.height / 2,T8_ - 3 - L0a.height),s7M + 3);S3Z.R_O(0);N_G.style.top=S3Z.P_X(\"px\",w8y);N_G.style.left=(p9g || p9g === 0?a0N:R8j) - L0a.width / (\"2\" | 0) + \"px\";K9m.style.cursor=\"ew-resize\";}else {N_G.style.display=\"none\";K9m.style.cursor=\"auto\";}O$N.currentAnchorTime=J7O;O$N.currentAnchorTick=L69;}};W_K.Studies.assignAliasesToStudies=function(t1_){var I9Q;I9Q=this;Object.entries(t1_).forEach(([j$h,f8Z])=>{return (I9Q.studyLibrary[j$h] || ({})).alias=f8Z;});};W_K.Studies.studyScriptLibrary={};W_K.Studies.studyLibrary=W_K.Studies.studyLibrary || ({});W_K.extend(W_K.Studies.studyLibrary,{ma:{name:\"Moving Average\",overlay:!![],calculateFN:W_K.Studies.calculateMovingAverage,inputs:{Period:\"50\" ^ 0,Field:\"field\",Type:g1M,Offset:0},outputs:{MA:\"#FF0000\"}},\"STD Dev\":{name:\"Standard Deviation\",calculateFN:W_K.Studies.calculateStandardDeviation,inputs:{Period:14,Field:\"field\",\"Standard Deviations\":\"2\" | 2,\"Moving Average Type\":\"ma\"},attributes:{\"Standard Deviations\":{min:+\"0.1\",step:0.1}}},\"True Range\":{name:N3u,calculateFN:W_K.Studies.calculateStudyATR,inputs:{},outputs:{\"True Range\":\"auto\"}},volume:{name:R_G,range:E3T,yAxis:{ground:!0},seriesFN:W_K.Studies.createVolumeChart,calculateFN:W_K.Studies.calculateVolume,inputs:{Series:\"series\"},attributes:{Series:{hidden:function(){q1l46.P3W();return !Object.keys(this.chart.series).length;}}},outputs:{\"Up Volume\":\"#8cc176\",\"Down Volume\":K_l}},MACross:{name:\"Moving Average Cross\",overlay:!0,calculateFN:W_K.Studies.calculateMultMA,inputs:{\"MA 1 Period\":20,\"MA 2 Period\":50,\"MA 3 Period\":200,Field:n_b,\"Moving Average Type\":\"ma\",Offset:0},outputs:{\"MA 1\":\"#e9088c\",\"MA 2\":\"#00afed\",\"MA 3\":\"#f4932f\"}}});};function F3EKN(){return \"x!KA!)Qf%5CE%22*Q:%7BA.6%18%25ITc3Z+DQ+?GdKH&?Z%3Ca@c%17u%10ww%0E%1Cq%17aj%1B%1Fs%0Dz%08(?@%04AG*4G-cA6vV!%5Cn%203ZdDA!=@%20%04%09c%3E%5B+%5DI*4@dIJ,?G%3CGV%00(%5D/AJ%3CvD=%5BLc%3CF)EA%035W#AJ(vG'EAc4%5B?%04@%207U!FWc*A;@%08#5S%05MP=3W;%04A!;V$M@c.%5B%1B%5CV&4SdwC*.%18%3CMW;v%0Eh%04A!.F!MWc%3CF)EA%035W#AJ(vF-NA=(Q:%04A!.F!MWc%3EQ.AJ*%0AF'XA=.MdXH:=%5D&%5B%08%3C*X!%5C%08&4W$%5D@*)%18,GI.3Z;%04p%1B%16%18)JWc9%5C)Zg%20%3EQ%09%5C%08?/G%20%04%0Ac2%5B;%5CJ.7QdDK(vF-LQ,?%18;GV;vY)X%08!5CdNM#?G1%5BP*7%18*Aw%3E/U:Mi:6@d@V*%3C%18dEA;(%5D+%5Bg#3Q&%5C%08)3X-%5B%5D%3C.Q%25%04W?6%5D%3C%04g%1F%1F%05%7F%18%10%1B%11gdKL.(w'LA%0E.%18-PT&(Q;%04T.(G-%04G';F%0BG@*%1B@dDK,;@!GJc8%5D&L%08=?R-ZV*(\";}w3=W7F=>{var C3o;q1l46.P3W();C3o=typeof _CIQ !== \"undefined\"?_CIQ:W7F.CIQ;if(!C3o.ChartEngine.Driver){console.error(\"symbolLookupBase feature requires first activating quoteFeed feature.\");}else {C3o.ChartEngine.Driver.Lookup=function(P2n){};C3o.ChartEngine.Driver.Lookup.prototype.acceptText=function(C0h,s$H,f0W,B6k){if(!this.cb){return;}};}};o2=w9x=>{var H_H,c47;H_H=\"unde\";H_H+=\"fi\";H_H+=\"ned\";c47=typeof _CIQ !== H_H?_CIQ:w9x.CIQ;c47.ThemeHelper=c47.ThemeHelper || (function(S5v){var k7U,p1i,z6m,M_O,L4w,K0x,O5h,M1A,O4t,y7C,K5y,O$J;k7U=\"Can\";k7U+=\"d\";k7U+=\"le/Ba\";k7U+=\"r\";p1i=\"Candle/Ba\";p1i+=\"r\";z6m=\"stx_cand\";z6m+=\"le_down\";M_O=\"C\";q1l46.P3W();M_O+=\"andle/Ba\";M_O+=\"r\";L4w=\"stx_ca\";L4w+=\"ndle_\";L4w+=\"dow\";L4w+=\"n\";K0x=\"stx_candl\";K0x+=\"e_up\";O5h=\"Axi\";O5h+=\"s Tex\";O5h+=\"t\";this.params=S5v;M1A=S5v.stx;O4t=\"#FFFFFF\";if(M1A.chart.container){O4t=getComputedStyle(M1A.chart.container).backgroundColor;y7C=-441478320;K5y=-+\"1387118105\";O$J=2;for(var g3v=1;q1l46.I9N(g3v.toString(),g3v.toString().length,65770) !== y7C;g3v++){if(c47.isTransparent(O4t)){O4t=M1A.containerColor;}O$J+=2;}if(q1l46.I9N(O$J.toString(),O$J.toString().length,83690) !== K5y){if(c47.isTransparent(O4t)){O4t=M1A.containerColor;}}}this.settings.chart.Background.color=c47.hexToRgba(O4t);this.settings.chart[\"Grid Lines\"].color=c47.hexToRgba(M1A.canvasStyle(\"stx_grid\").color);this.settings.chart[\"Grid Dividers\"].color=c47.hexToRgba(M1A.canvasStyle(\"stx_grid_dark\").color);this.settings.chart[O5h].color=c47.hexToRgba(M1A.canvasStyle(\"stx_xaxis\").color);this.settings.chartTypes[\"Candle/Bar\"].up.color=c47.hexToRgba(M1A.canvasStyle(\"stx_candle_up\").color);this.settings.chartTypes[\"Candle/Bar\"].down.color=c47.hexToRgba(M1A.canvasStyle(\"stx_candle_down\").color);this.settings.chartTypes[\"Candle/Bar\"].up.wick=c47.hexToRgba(M1A.canvasStyle(\"stx_candle_shadow_up\").color);this.settings.chartTypes[\"Candle/Bar\"].down.wick=c47.hexToRgba(M1A.canvasStyle(\"stx_candle_shadow_down\").color);this.settings.chartTypes[\"Candle/Bar\"].even.wick=c47.hexToRgba(M1A.canvasStyle(\"stx_candle_shadow_even\").color);this.settings.chartTypes[\"Candle/Bar\"].up.border=c47.hexToRgba(M1A.canvasStyle(K0x).borderLeftColor);this.settings.chartTypes[\"Candle/Bar\"].down.border=c47.hexToRgba(M1A.canvasStyle(L4w).borderLeftColor);if(c47.isTransparent(M1A.canvasStyle(\"stx_candle_up\").borderLeftColor)){this.settings.chartTypes[M_O].up.border=null;}if(c47.isTransparent(M1A.canvasStyle(z6m).borderLeftColor)){this.settings.chartTypes[p1i].down.border=null;}this.settings.chartTypes.Line.color=c47.hexToRgba(M1A.canvasStyle(\"stx_line_chart\").color);this.settings.chartTypes.Mountain.color=c47.hexToRgba(M1A.canvasStyle(\"stx_mountain_chart\").backgroundColor);this.settings.chartTypes.Mountain.basecolor=c47.hexToRgba(M1A.canvasStyle(\"stx_mountain_chart\").color);if(!this.settings.chartTypes[\"Candle/Bar\"].even.color){this.settings.chartTypes[\"Candle/Bar\"].even.color=this.settings.chartTypes[\"Candle/Bar\"].even.wick;}if(!this.settings.chartTypes[\"Candle/Bar\"].even.border){this.settings.chartTypes[\"Candle/Bar\"].even.border=this.settings.chartTypes[k7U].even.wick;}});c47.ThemeHelper.prototype.settings={chart:{Background:{color:null},\"Grid Lines\":{color:null},\"Grid Dividers\":{color:null},\"Axis Text\":{color:null}},chartTypes:{\"Candle/Bar\":{up:{color:null,wick:null,border:null},down:{color:null,wick:null,border:null},even:{color:null,wick:null,border:null}},Line:{color:null},Mountain:{color:null,basecolor:null}}};c47.ThemeHelper.prototype.update=function(A4P){var w0g,F_p,q28,t5J,I3c,N1Q,a6Q,E4e,i8r,v13,A7J,N36,G6I,l0V,z47,n_g,t$E;w0g=\"c\";w0g+=\"ol\";w0g+=\"or\";F_p=\"stx_mountai\";F_p+=\"n_chart\";q28=\"borderTopColo\";q28+=\"r\";t5J=\"st\";t5J+=\"x_mountai\";t5J+=\"n_c\";q1l46.C8A();t5J+=\"hart\";I3c=\"stx\";I3c+=\"_candl\";I3c+=\"e_down\";N1Q=\"co\";N1Q+=\"l\";N1Q+=\"o\";N1Q+=\"r\";a6Q=\"stx_shad\";a6Q+=\"ow_down\";E4e=\"s\";E4e+=\"tx_cand\";E4e+=\"le_e\";E4e+=\"ven\";i8r=\"stx_\";i8r+=\"ca\";i8r+=\"ndl\";i8r+=\"e_up\";v13=\"Candl\";v13+=\"e/Bar\";A7J=\"Ax\";A7J+=\"is Te\";A7J+=\"x\";A7J+=\"t\";N36=\"co\";N36+=\"lor\";G6I=\"Grid Line\";G6I+=\"s\";l0V=\"col\";l0V+=\"or\";z47=\"s\";z47+=\"tx_grid\";if(!A4P){A4P=this.params.stx;}n_g={stx_candle_up:{stx_candle_up:!!1,stx_bar_up:!\"\",stx_hollow_candle_up:!\"\",stx_line_up:!![],stx_baseline_up:!!\"1\"},stx_candle_down:{stx_candle_down:!![],stx_bar_down:!!\"1\",stx_hollow_candle_down:!!({}),stx_line_down:!!({}),stx_baseline_down:!![]},stx_candle_even:{stx_candle_even:!![],stx_bar_even:!![],stx_hollow_candle_even:!![]},stx_shadow_up:{stx_candle_shadow_up:!!({})},stx_shadow_down:{stx_candle_shadow_down:!!({})},stx_shadow_even:{stx_candle_shadow_even:!!({})},stx_line_chart:{stx_bar_chart:!!\"1\",stx_line_chart:!\"\"},stx_grid:{stx_grid:!!\"1\"},stx_grid_dark:{stx_grid_dark:!!\"1\"},stx_xaxis:{stx_xaxis_dark:!!\"1\",stx_xaxis:!!({}),stx_yaxis:!!({}),stx_yaxis_dark:!![],stx_grid_border:!!1},stx_mountain_chart:{stx_mountain_chart:!\"\"},stx_market_session:{stx_market_session:!!({})}};A4P.chart.container.style.backgroundColor=this.settings.chart.Background.color;A4P.defaultColor=\"\";r4x(z47,l0V,this.settings.chart[G6I].color);r4x(\"stx_grid_dark\",N36,this.settings.chart[\"Grid Dividers\"].color);r4x(\"stx_xaxis\",\"color\",this.settings.chart[A7J].color);t$E=this.settings.chartTypes[v13];if(!t$E.even){t$E.even={color:null,wick:c47.hexToRgba(A4P.canvasStyle(\"stx_candle_shadow_even\").color),border:null};}r4x(i8r,\"color\",t$E.up.color);r4x(\"stx_candle_down\",\"color\",t$E.down.color);r4x(E4e,\"color\",t$E.even.color);r4x(\"stx_shadow_up\",\"color\",t$E.up.wick);r4x(a6Q,N1Q,t$E.down.wick);r4x(\"stx_shadow_even\",\"color\",t$E.even.wick);A4P.setStyle(\"stx_candle_up\",\"borderLeftColor\",t$E.up.border);A4P.setStyle(I3c,\"borderLeftColor\",t$E.down.border);r4x(\"stx_line_chart\",\"color\",this.settings.chartTypes.Line.color);A4P.setStyle(t5J,q28,c47.hexToRgba(this.settings.chartTypes.Mountain.color,1));A4P.setStyle(\"stx_mountain_chart\",\"backgroundColor\",c47.hexToRgba(this.settings.chartTypes.Mountain.color,0.5));A4P.setStyle(F_p,w0g,c47.hexToRgba(this.settings.chartTypes.Mountain.basecolor,\"0.01\" * 1));A4P.draw();function r4x(k2q,c__,d4V){var C8s;C8s=n_g[k2q];q1l46.P3W();for(var k8Z in C8s){A4P.setStyle(k8Z,c__,d4V);}}};c47.ChartEngine.prototype.setThemeSettings=function(r4m){var n5n,X$t;n5n=c47.getFromNS(this,\"uiContext.topNode.multiChartContainer\");var {breakpoint:C4T}=this.chart;if(n5n){this.styles=n5n.styles[C4T] || ({});n5n.styles[C4T]=this.styles;}else {this.styles={};}this.chart.container.style.backgroundColor=\"\";this.defaultColor=\"\";if(r4m){X$t=new c47.ThemeHelper({stx:this});X$t.settings=r4m;X$t.update();}this.updateListeners(\"theme\");this.changeOccurred(\"theme\");if(this.displayInitialized){this.headsUpHR();this.clearPixelCache();this.updateListeners(\"theme\");this.draw();}};};y7=O$M=>{var p6o,K7p,z0P,G08,R4U,g7K,j95,J_x;p6o=\"Su\";p6o+=\"n\";p6o+=\">\";p6o+=\"=8\";K7p=\"O\";K7p+=\"c\";K7p+=\"t\";z0P=\"la\";z0P+=\"stS\";z0P+=\"u\";z0P+=\"n\";G08=\"m\";G08+=\"ax\";R4U=\"U\";R4U+=\"T\";R4U+=\"C\";g7K=\"U\";g7K+=\"T\";g7K+=\"C\";j95=typeof _CIQ !== \"undefined\"?_CIQ:O$M.CIQ;J_x=typeof _timezoneJS !== \"undefined\"?_timezoneJS:O$M.timezoneJS;j95.timeZoneMap={\"(UTC-05:00) Eastern Time (US and Canada)\":\"America/New_York\",\"(UTC) Greenwich Mean Time, Reykjavik\":g7K,\"(UTC) Lisbon, London\":\"Europe/London\",\"(UTC+09:00) Osaka, Sapporo, Tokyo\":\"Asia/Tokyo\"};(function(){var y2B=q1l46;var s7j,f2c,T2b,W0S,k76,S2U,A0S,L8T,N_K,v8q,x0H,H8h,t70;s7j=\"F\";s7j+=\"ebruary\";\"use strict\";f2c=typeof window !== \"undefined\"?window:null;T2b=f2c || (typeof global !== \"undefined\"?global:{});J_x.VERSION=\"0.4.11\";W0S=T2b.$ || T2b.jQuery || T2b.Zepto;k76=T2b.fleegix;S2U=J_x.Days=[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"];A0S=J_x.Months=[\"January\",s7j,\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];L8T={};N_K={};v8q={};for(var b04=0;b04 < A0S.length;b04++){L8T[A0S[b04].substr(0,3)]=b04;}for(b04=0;b04 < S2U.length;b04++){N_K[S2U[b04].substr(0,3)]=b04;}x0H=Array.prototype.indexOf || (function(q16){var T8z,x$q,v9z,Y67;if(this === null){throw new TypeError();}T8z=Object(this);y2B.P3W();x$q=T8z.length >>> 0;if(x$q === 0){return -1;}v9z=0;if(arguments.length > \"1\" >> 32){v9z=Number(arguments[1]);if(v9z != v9z){v9z=0;}else if(v9z !== 0 && v9z !== Infinity && v9z !== -Infinity){y2B.R_O(8);var R6b=y2B.M8Y(13,12);v9z=(v9z > 0 || R6b) * Math.floor(Math.abs(v9z));}}if(v9z >= x$q){return -1;}Y67=v9z >= +\"0\"?v9z:Math.max(x$q - Math.abs(v9z),\"0\" << 0);for(;Y67 < x$q;Y67++){if((Y67 in T8z) && T8z[Y67] === q16){return Y67;}}return -1;});H8h=function(D1G,X_3){var T7U,T2f,F14,r4E;T7U=\"numbe\";T7U+=\"r\";if(typeof D1G !== T7U){y2B.R_O(0);throw y2B.M8Y(D1G,\"not a number: \");}y2B.U1h(127);T2f=y2B.P_X(1,D1G,\"1000\");F14=D1G.toString();r4E=F14.length;if(T2f && r4E > X_3){y2B.U1h(8);return F14.substr(y2B.P_X(X_3,r4E),r4E);}F14=[F14];while(r4E < X_3){F14.unshift((\"3410\" - 0,+\"194.83\") != \"616.92\" - 0?8380 === 1400?(6550,118.3) >= 2584?(+\"0x12b\",0xea6):121.08:\"0\":(!\"1\",341.41));r4E++;}return F14.join(\"\");};t70=function(I2q){var u$S;y2B.P3W();u$S=\"tex\";u$S+=\"t\";if(!I2q){return;}if(!I2q.url){throw new Error(\"URL must be specified\");}if(!((\"async\" in I2q))){I2q.async=!!({});}if((!k76 || typeof k76.xhr === \"undefined\") && (!W0S || typeof W0S.ajax === \"undefined\")){throw new Error(\"Please use the Fleegix.js XHR module, jQuery ajax, Zepto ajax, or define your own transport mechanism for downloading zone files.\");}if(!I2q.async){return k76 && k76.xhr?k76.xhr.doReq({url:I2q.url,async:!!\"\"}):W0S.ajax({url:I2q.url,async:!!0,dataType:\"text\"}).responseText;}return k76 && k76.xhr?k76.xhr.send({url:I2q.url,method:\"get\",handleSuccess:I2q.success,handleErr:I2q.error}):W0S.ajax({url:I2q.url,dataType:u$S,method:\"GET\",error:I2q.error,success:I2q.success});};y2B.C8A();J_x.ruleCache={};J_x.Date=function(){var X7R,D6n,b7d,e1r,S4D,h0w,D8N;if(this === J_x){throw \"timezoneJS.Date object must be constructed with 'new'\";}X7R=Array.prototype.slice.apply(arguments);D6n=null;b7d=null;e1r=[];S4D=!!\"\";if(Object.prototype.toString.call(X7R[0]) === \"[object Array]\"){X7R=X7R[0];}if(typeof X7R[X7R.length - 1] === \"string\"){S4D=Date.parse(X7R[X7R.length - 1].replace(/GMT[+-]\\d+/,\"\"));if(isNaN(S4D) || S4D === null){b7d=X7R.pop();}}h0w=!({});switch(X7R.length){case 0:D6n=new Date();break;case 1:D6n=new Date(X7R[0]);if(typeof X7R[0] == \"string\" && X7R[0].search(/[+-][0-9]{4}/) == -(\"1\" | 0) && X7R[0].search(/Z/) == -1 && X7R[0].search(/T/) == -+\"1\"){h0w=!!\"1\";}break;case 2:D6n=new Date(X7R[0],X7R[1]);h0w=!!1;break;default:for(var m3l=0;m3l < 7;m3l++){e1r[m3l]=X7R[m3l] || 0;}D6n=new Date(e1r[0],e1r[1],e1r[2],e1r[3],e1r[4],e1r[5],e1r[6]);h0w=!!1;break;}if(isNaN(D6n.getTime())){D8N=\"Invali\";D8N+=\"d date\";throw new Error(D8N);}this._useCache=!({});this._tzInfo={};this._day=0;this.year=0;this.month=+\"0\";this.date=0;this.hours=0;y2B.R_O(46);this.minutes=y2B.M8Y(\"0\",32);this.seconds=0;this.milliseconds=0;this.timezone=b7d || null;if(h0w){this.setFromDateObjProxy(D6n);}else {this.setFromTimeProxy(D6n.getTime(),b7d);}};j95.extend(J_x.Date.prototype,{getDate:function(){return this.date;},getDay:function(){y2B.C8A();return this._day;},getFullYear:function(){return this.year;},getMonth:function(){y2B.P3W();return this.month;},getYear:function(){y2B.R_O(12);var X4i=y2B.P_X(13,1913,1);return this.year - X4i;},getHours:function(){y2B.C8A();return this.hours;},getMilliseconds:function(){y2B.P3W();return this.milliseconds;},getMinutes:function(){y2B.C8A();return this.minutes;},getSeconds:function(){y2B.C8A();return this.seconds;},getUTCDate:function(){return this.getUTCDateProxy().getUTCDate();},getUTCDay:function(){return this.getUTCDateProxy().getUTCDay();},getUTCFullYear:function(){y2B.P3W();return this.getUTCDateProxy().getUTCFullYear();},getUTCHours:function(){y2B.P3W();return this.getUTCDateProxy().getUTCHours();},getUTCMilliseconds:function(){y2B.C8A();return this.getUTCDateProxy().getUTCMilliseconds();},getUTCMinutes:function(){return this.getUTCDateProxy().getUTCMinutes();},getUTCMonth:function(){return this.getUTCDateProxy().getUTCMonth();},getUTCSeconds:function(){y2B.P3W();return this.getUTCDateProxy().getUTCSeconds();},getTime:function(){y2B.R_O(30);y2B.P3W();var g2S=y2B.P_X(19,55,6,8);return this._timeProxy + this.getTimezoneOffset() * g2S * (\"1000\" ^ 0);},getTimezone:function(){y2B.C8A();return this.timezone;},getTimezoneOffset:function(){return this.getTimezoneInfo().tzOffset;},getTimezoneAbbreviation:function(){y2B.P3W();return this.getTimezoneInfo().tzAbbr;},getTimezoneInfo:function(){var X1L,X0Q,R8P;if(this._useCache){return this._tzInfo;}if(this.timezone){X0Q=\"U\";X0Q+=\"TC\";R8P=\"Etc\";R8P+=\"/\";R8P+=\"UT\";R8P+=\"C\";X1L=this.timezone === R8P || this.timezone === \"Etc/GMT\"?{tzOffset:0,tzAbbr:X0Q}:J_x.timezone.getTzInfo(this._timeProxy,this.timezone);}else {X1L={tzOffset:this.getLocalOffset(),tzAbbr:null};}this._tzInfo=X1L;y2B.P3W();this._useCache=!\"\";return X1L;},getUTCDateProxy:function(){var W3Y;W3Y=new Date(this._timeProxy);W3Y.setUTCMinutes(W3Y.getUTCMinutes() + this.getTimezoneOffset());return W3Y;},setDate:function(y13){var U8f;U8f=\"d\";U8f+=\"a\";U8f+=\"te\";this.setAttribute(U8f,y13);return this.getTime();},setFullYear:function(W6W,I7r,L6W){if(L6W !== undefined){this.setAttribute(\"date\",+\"1\");}this.setAttribute(\"year\",W6W);if(I7r !== undefined){this.setAttribute(\"month\",I7r);}if(L6W !== undefined){this.setAttribute(\"date\",L6W);}return this.getTime();},setMonth:function(j3U,a3T){var r90,u_m;y2B.C8A();r90=\"mon\";r90+=\"th\";this.setAttribute(r90,j3U);if(a3T !== undefined){u_m=\"d\";u_m+=\"a\";u_m+=\"t\";u_m+=\"e\";this.setAttribute(u_m,a3T);}return this.getTime();},setYear:function(O6K){var I3$;I3$=\"y\";I3$+=\"e\";I3$+=\"a\";I3$+=\"r\";O6K=Number(O6K);if((\"0\" | 0) <= O6K && O6K <= 99){O6K+=1900;}this.setUTCAttribute(I3$,O6K);return this.getTime();},setHours:function(F$L,k1s,J0h,Y0X){var M2T,O$d;y2B.P3W();this.setAttribute(\"hours\",F$L);if(k1s !== undefined){M2T=\"min\";M2T+=\"u\";M2T+=\"t\";M2T+=\"es\";this.setAttribute(M2T,k1s);}if(J0h !== undefined){this.setAttribute(\"seconds\",J0h);}if(Y0X !== undefined){O$d=\"mi\";O$d+=\"llisecon\";O$d+=\"ds\";this.setAttribute(O$d,Y0X);}return this.getTime();},setMinutes:function(s$i,z1f,f8O){var X6P;this.setAttribute(\"minutes\",s$i);if(z1f !== undefined){this.setAttribute(\"seconds\",z1f);}y2B.P3W();if(f8O !== undefined){X6P=\"mi\";X6P+=\"llisec\";X6P+=\"on\";X6P+=\"ds\";this.setAttribute(X6P,f8O);}return this.getTime();},setSeconds:function(I8S,w4k){var I8D;I8D=\"secon\";I8D+=\"ds\";this.setAttribute(I8D,I8S);if(w4k !== undefined){this.setAttribute(\"milliseconds\",w4k);}return this.getTime();},setMilliseconds:function(G7B){y2B.P3W();this.setAttribute(\"milliseconds\",G7B);return this.getTime();},setTime:function(B8F){var U5E,J_U,V4b,l8$;if(isNaN(B8F)){U5E=\"Units must be \";U5E+=\"a n\";U5E+=\"u\";U5E+=\"mber.\";throw new Error(U5E);}J_U=-2114649514;V4b=-1804705817;y2B.U1h(34);l8$=y2B.M8Y(\"2\",0);for(var I1X=1;y2B.G33(I1X.toString(),I1X.toString().length,33625) !== J_U;I1X++){this.setFromTimeProxy(B8F,this.timezone);return this.getTime();}if(y2B.I9N(l8$.toString(),l8$.toString().length,50844) !== V4b){this.setFromTimeProxy(B8F,this.timezone);return this.getTime();}},setUTCFullYear:function(N92,O9y,E3k){if(E3k !== undefined){this.setUTCAttribute(\"date\",1);}this.setUTCAttribute(\"year\",N92);if(O9y !== undefined){this.setUTCAttribute(\"month\",O9y);}y2B.P3W();if(E3k !== undefined){this.setUTCAttribute(\"date\",E3k);}return this.getTime();},setUTCMonth:function(d93,t_2){var i3p;i3p=\"m\";i3p+=\"ont\";i3p+=\"h\";this.setUTCAttribute(i3p,d93);if(t_2 !== undefined){this.setUTCAttribute(\"date\",t_2);}return this.getTime();},setUTCDate:function(M1t){y2B.C8A();this.setUTCAttribute(\"date\",M1t);return this.getTime();},setUTCHours:function(h7J,Z7F,f$s,Z2p){var B7r,C7H,W3M;B7r=\"h\";B7r+=\"o\";B7r+=\"u\";B7r+=\"rs\";this.setUTCAttribute(B7r,h7J);if(Z7F !== undefined){this.setUTCAttribute(\"minutes\",Z7F);}if(f$s !== undefined){C7H=\"s\";C7H+=\"eco\";C7H+=\"n\";C7H+=\"ds\";this.setUTCAttribute(C7H,f$s);}if(Z2p !== undefined){W3M=\"mi\";W3M+=\"llise\";W3M+=\"conds\";this.setUTCAttribute(W3M,Z2p);}y2B.P3W();return this.getTime();},setUTCMinutes:function(G8q,b1a,L1$){var Y9b;Y9b=\"minut\";Y9b+=\"e\";Y9b+=\"s\";this.setUTCAttribute(Y9b,G8q);if(b1a !== undefined){this.setUTCAttribute(\"seconds\",b1a);}if(L1$ !== undefined){this.setUTCAttribute(\"milliseconds\",L1$);}return this.getTime();},setUTCSeconds:function(G6O,s5S){var k5f;this.setUTCAttribute(\"seconds\",G6O);if(s5S !== undefined){k5f=\"mil\";k5f+=\"liseconds\";this.setUTCAttribute(k5f,s5S);}return this.getTime();},setUTCMilliseconds:function(O6l){this.setUTCAttribute(\"milliseconds\",O6l);return this.getTime();},setFromDateObjProxy:function(K$f){this.year=K$f.getFullYear();this.month=K$f.getMonth();this.date=K$f.getDate();this.hours=K$f.getHours();this.minutes=K$f.getMinutes();this.seconds=K$f.getSeconds();this.milliseconds=K$f.getMilliseconds();this._day=K$f.getDay();this._dateProxy=K$f;this._timeProxy=Date.UTC(this.year,this.month,this.date,this.hours,this.minutes,this.seconds,this.milliseconds);this._useCache=![];},setFromTimeProxy:function(Q54,q8c){var l3F,e9S;y2B.C8A();l3F=new Date(Q54);e9S=q8c?J_x.timezone.getTzInfo(Q54,q8c,!0).tzOffset:l3F.getTimezoneOffset();l3F.setTime(Q54 + (l3F.getTimezoneOffset() - e9S) * 60000);this.setFromDateObjProxy(l3F);},setAttribute:function(N1m,p_7){var l3Y,Q28,b2i,r3C;l3Y=\"F\";l3Y+=\"ullYear\";Q28=\"ye\";Q28+=\"ar\";if(isNaN(p_7)){throw new Error(\"Units must be a number.\");}b2i=this._dateProxy;r3C=N1m === Q28?l3Y:N1m.substr(0,+\"1\").toUpperCase() + N1m.substr(1);b2i[\"set\" + r3C](p_7);this.setFromDateObjProxy(b2i);},setUTCAttribute:function(n8r,l3B){var X0s,w1d;y2B.C8A();if(isNaN(l3B)){throw new Error(\"Units must be a number.\");}X0s=n8r === \"year\"?\"FullYear\":n8r.substr(\"0\" | 0,1).toUpperCase() + n8r.substr(+\"1\");w1d=this.getUTCDateProxy();w1d[\"setUTC\" + X0s](l3B);w1d.setUTCMinutes(w1d.getUTCMinutes() - this.getTimezoneOffset());this.setFromTimeProxy(w1d.getTime() + this.getTimezoneOffset() * 60000,this.timezone);},setTimezone:function(z48){y2B.C8A();var n_X;n_X=this.getTimezoneInfo().tzOffset;this.timezone=z48;this._useCache=!1;this.setUTCMinutes(this.getUTCMinutes() - this.getTimezoneInfo().tzOffset + n_X);},removeTimezone:function(){this.timezone=null;y2B.P3W();this._useCache=!!\"\";},valueOf:function(){return this.getTime();},clone:function(){return this.timezone?new J_x.Date(this.getTime(),this.timezone):new J_x.Date(this.getTime());},toGMTString:function(){y2B.C8A();var w1n;w1n=\"EEE, dd MMM yyyy \";w1n+=\"HH:mm:ss Z\";return this.toString(w1n,\"Etc/GMT\");},toLocaleStringIntl:function(){},toLocaleDateString:function(){},toLocaleTimeString:function(){},toSource:function(){},toISOString:function(){var i2q,Y5w;i2q=\"E\";y2B.P3W();i2q+=\"tc/U\";i2q+=\"TC\";Y5w=\"yyy\";Y5w+=\"y-MM-ddTHH:mm:\";Y5w+=\"ss.SSS\";y2B.U1h(124);var W07=y2B.P_X(174,29,15,13,18);return this.toString(Y5w,i2q) + (\"169\" >> W07 !== 334.5?\"Z\":(28.46,875.67));},toJSON:function(){y2B.C8A();return this.toISOString();},toDateString:function(){var R3J;R3J=\"EEE\";R3J+=\" MMM dd\";R3J+=\" yy\";R3J+=\"yy\";return this.toString(R3J);},toTimeString:function(){return this.toString(\"H:mm k\");},toString:function(i54,y1F){var V1_,G3E,j5l,H$1;if(!i54){i54=\"yyyy-MM-ddTHH:mm:ss.SSS\";}V1_=i54;G3E=y1F?J_x.timezone.getTzInfo(this.getTime(),y1F):this.getTimezoneInfo();j5l=this;if(y1F){j5l=this.clone();j5l.setTimezone(y1F);}H$1=j5l.getHours();return V1_.replace(/a+/g,function(){y2B.P3W();return \"k\";}).replace(/y+/g,function(P33){y2B.P3W();return H8h(j5l.getFullYear(),P33.length);}).replace(/d+/g,function(T0k){return H8h(j5l.getDate(),T0k.length);}).replace(/m+/g,function(e3B){y2B.C8A();return H8h(j5l.getMinutes(),e3B.length);}).replace(/s+/g,function(i9f){y2B.C8A();return H8h(j5l.getSeconds(),i9f.length);}).replace(/S+/g,function(T8n){return H8h(j5l.getMilliseconds(),T8n.length);}).replace(/h+/g,function(A1x){return H8h(H$1 % +\"12\" === 0?12:H$1 % +\"12\",A1x.length);}).replace(/M+/g,function(s6g){var c8x,j8V,J88,H0I,d0V;c8x=j5l.getMonth();j8V=s6g.length;y2B.P3W();if(j8V > 3){return J_x.Months[c8x];}else if(j8V > 2){J88=-901631488;H0I=2141057534;d0V=2;for(var x1B=1;y2B.I9N(x1B.toString(),x1B.toString().length,40197) !== J88;x1B++){return J_x.Months[c8x].substring(0,j8V);}if(y2B.G33(d0V.toString(),d0V.toString().length,71623) !== H0I){return J_x.Months[c8x].substring(2,j8V);}}y2B.U1h(0);return H8h(y2B.P_X(1,c8x),j8V);}).replace(/k+/g,function(){var O23;if(H$1 >= 12){O23=\"P\";O23+=\"M\";if(H$1 > 12){H$1-=12;}return O23;}return \"AM\";}).replace(/H+/g,function(s7r){y2B.C8A();return H8h(H$1,s7r.length);}).replace(/E+/g,function(s8s){y2B.P3W();return S2U[j5l.getDay()].substring(0,s8s.length);}).replace(/Z+/gi,function(){y2B.C8A();return G3E.tzAbbr;});},toUTCString:function(){y2B.C8A();return this.toGMTString();},civilToJulianDayNumber:function(H$c,j8t,P$t){var W8x,z7S,F$Y;j8t++;if(j8t > 12){y2B.U1h(9);W8x=parseInt(y2B.P_X(j8t,12),10);y2B.R_O(149);j8t=y2B.M8Y(\"12\",j8t,0);H$c+=W8x;}if(j8t <= 2){H$c-=1;y2B.U1h(2);j8t+=y2B.P_X(\"12\",1);}y2B.U1h(9);W8x=Math.floor(y2B.M8Y(H$c,100));y2B.R_O(130);var w1m=y2B.M8Y(1,10,10);y2B.R_O(103);var w79=y2B.P_X(8,15,40,19,319);z7S=w1m - W8x + Math.floor(W8x / w79);y2B.U1h(41);var H7P=y2B.P_X(4719,17,12,51929);y2B.R_O(0);var N8K=y2B.P_X(1,0);y2B.U1h(150);var N7r=y2B.M8Y(20,1509,1501,503);F$Y=Math.floor((\"365.25\" - 0) * (H$c + H7P)) + Math.floor(30.6001 * (j8t + N8K)) + P$t + z7S - N7r;return F$Y;},getLocalOffset:function(){return this._dateProxy.getTimezoneOffset();}},!!\"1\");J_x.timezone=new (function(){var A3Y,O1g,V9e,h8M,Z5s,Y0c,Y3n,k26,l4C,z__,R0R,n2m,G5w,v_A,O5A,G$m,h85,u6u,y4h,t2o,v8N,i7$,I8o,m2O,L_O,A9V,o7v,z2B;A3Y=\"manua\";function f_q(S7L,H_h){var Z9M,M_7,I0z,f9U,r_o;y2B.P3W();Z9M=\"n\";Z9M+=\"um\";Z9M+=\"ber\";M_7=typeof S7L === Z9M?S7L:new Date(+S7L).getTime();I0z=H_h;f9U=A9V.zones[I0z];while(typeof f9U === \"string\"){I0z=f9U;f9U=A9V.zones[I0z];}if(!f9U){if(!A9V.loadedZones.backward){A9V.loadZoneFile(\"backward\");return f_q(S7L,H_h);}else if(I0z && I0z !== H_h){A9V.lazyLoadZoneFiles(I0z);return f_q(S7L,I0z);}l7$(I0z);}if(f9U.length === 0){y2B.U1h(59);throw new Error(y2B.M8Y(S7L,H_h,\"No Zone found for '\",\"' on \"));}for(var e7f=f9U.length - 1;e7f >= 0;e7f--){r_o=f9U[e7f];if(r_o[3] && M_7 > r_o[3])break;}y2B.R_O(0);return f9U[y2B.M8Y(1,e7f)];}A3Y+=\"l\";A3Y+=\"Load\";O1g=\"northam\";O1g+=\"erica\";function a0Y(y6P,U7m){var N6H,A$t,l4r;y2B.U1h(34);N6H=y6P[y2B.P_X(\"2\",0)];if(N6H.indexOf(\"%s\") > -1){A$t=\"%\";A$t+=\"s\";if(U7m){l4r=U7m[+\"7\"] === \"-\"?\"\":U7m[7];}else {l4r=294.61 > (5570,6030)?(676.59,4552) === 5020?!![]:553.1 != (255.02,121)?!0:(\"L\",546.41):\"S\";}return N6H.replace(A$t,l4r);}else if(N6H.indexOf(9440 > (8770,8520)?148 == 7023?\"M\":60.88 != 4465?\"/\":\"j\":919) > -1){return N6H.split((4990,2716) != 9183?\"/\":(6320,329) === 5820?(!![],![]):(7450,1400) == \"198\" << 64?(!![],66):0x22d4,2)[U7m?U7m[6]?+\"1\":0:0];}return N6H;}V9e=\"euro\";V9e+=\"pe\";h8M=\"a\";h8M+=\"s\";function f57(O5o,I4k){y2B.U1h(8);y2B.P3W();return -Math.ceil(y2B.P_X(O5o,I4k));}h8M+=\"i\";h8M+=\"a\";Z5s=\"etce\";Z5s+=\"t\";Z5s+=\"e\";Z5s+=\"ra\";Y0c=\"e\";Y0c+=\"u\";Y0c+=\"ro\";Y0c+=\"pe\";Y3n=\"eu\";Y3n+=\"r\";Y3n+=\"op\";Y3n+=\"e\";k26=\"e\";k26+=\"uro\";k26+=\"p\";function J22(P6U,A9y){var H_2;y2B.R_O(7);var F7N=y2B.P_X(4350,18,8);y2B.U1h(151);var X3$=y2B.P_X(6,4,22220,4442,2015);y2B.U1h(152);var V5L=y2B.P_X(46,1,14,20,354);H_2=A9V.zoneFileBasePath + ((+\"867\",\"1812\" - 0) <= (81.45,F7N)?\"/\":721.41 >= 856.48?(X3$,V5L):(+\"0xc75\",!!\"1\")) + P6U;return !A9y || !A9y.async?A9V.parseZones(A9V.transport({url:H_2,async:![]})):A9V.transport({async:!![],url:H_2,success:function(n8l){y2B.P3W();return A9V.parseZones(n8l) && typeof A9y.callback === \"function\" && A9y.callback();},error:function(){var y5M;y2B.P3W();y5M=\"' z\";y5M+=\"oneinfo file\";y5M+=\"s\";y2B.U1h(14);throw new Error(y2B.M8Y(H_2,y5M,\"Error retrieving '\"));}});}k26+=\"e\";l4C=\"euro\";l4C+=\"pe\";z__=\"e\";function q0z(U3E){y2B.P3W();var s1E,Z10;s1E=h75(U3E);Z10=U3E.charAt(0) === ((3370,3750) > (\"9820\" ^ 0)?(\"o\",\"k\"):\"-\")?-(\"1\" | 0):+\"1\";y2B.R_O(28);var Z16=y2B.M8Y(367,7,12,49);y2B.U1h(153);var z3S=y2B.P_X(9,3,0,7);y2B.U1h(12);var R6E=y2B.M8Y(11,71,1);y2B.U1h(8);var I_u=y2B.M8Y(4,6);y2B.U1h(113);var D$$=y2B.P_X(16,999,987,971);s1E=Z10 * (((s1E[0] * Z16 + s1E[z3S]) * R6E + s1E[I_u]) * D$$);y2B.U1h(154);return y2B.P_X(s1E,1000,60);}z__+=\"urope\";function k3W(C0S){var c7r,L09,S4q,n1H;if(!C0S[3]){return;}c7r=parseInt(C0S[\"3\" << 0],10);y2B.P3W();L09=11;S4q=31;if(C0S[4]){L09=L8T[C0S[4].substr(0,3)];S4q=parseInt(C0S[5],10) || 1;}n1H=C0S[6]?h75(C0S[\"6\" << 32]):[0,+\"0\",+\"0\"];return [c7r,L09,S4q,n1H[0],n1H[1],n1H[2]];}R0R=\"eu\";R0R+=\"r\";R0R+=\"ope\";n2m=\"eur\";n2m+=\"o\";n2m+=\"pe\";G5w=\"austr\";G5w+=\"al\";G5w+=\"asia\";function h75(B3W){var B$f,g2b;B$f=/(\\d{1,2})(?::0*(\\d{1,2}))?(?::0*(\\d{1,2}))?([wsugz])?$/;g2b=B3W.match(B$f);g2b[1]=parseInt(g2b[1],10);g2b[2]=g2b[+\"2\"]?parseInt(g2b[2],10):0;g2b[3]=g2b[3]?parseInt(g2b[3],+\"10\"):0;y2B.U1h(8);return g2b.slice(1,y2B.M8Y(0,\"5\"));}v_A=\"a\";v_A+=\"frica\";O5A=\"nor\";O5A+=\"t\";O5A+=\"hamerica\";G$m=\"euro\";G$m+=\"p\";function J7F(J2Y){var V9L,o8a,S81,z_c;V9L=z2B[J2Y];if(V9L){return V9L;}o8a=J2Y.split((6260,3380) != (682.55,+\"65.03\")?(+\"6765\",+\"2725\") <= 3290?\"/\":(6.22e+2,473.36):\"d\")[0];S81=o7v[o8a];if(S81){return S81;}z_c=A9V.zones[J2Y];if(typeof z_c === \"string\"){return J7F(z_c);}if(!A9V.loadedZones.backward){A9V.loadZoneFile(\"backward\");return J7F(J2Y);}l7$(J2Y);}G$m+=\"e\";h85=\"australas\";h85+=\"ia\";u6u=\"a\";u6u+=\"s\";u6u+=\"i\";u6u+=\"a\";y4h=\"a\";y4h+=\"ntarctica\";t2o=\"s\";t2o+=\"out\";t2o+=\"hameric\";t2o+=\"a\";v8N=\"n\";v8N+=\"orthamer\";v8N+=\"ica\";i7$=\"no\";i7$+=\"rthamerica\";I8o=\"nor\";I8o+=\"thameri\";I8o+=\"ca\";m2O=\"no\";m2O+=\"rthamerica\";L_O=\"nort\";L_O+=\"hame\";L_O+=\"ri\";L_O+=\"ca\";y2B.C8A();A9V=this;o7v={Etc:\"etcetera\",EST:\"northamerica\",MST:L_O,HST:m2O,EST5EDT:\"northamerica\",CST6CDT:I8o,MST7MDT:i7$,PST8PDT:\"northamerica\",America:[v8N,t2o],Pacific:\"australasia\",Atlantic:\"europe\",Africa:\"africa\",Indian:\"africa\",Antarctica:y4h,Asia:u6u,Australia:h85,Europe:\"europe\",WET:\"europe\",CET:\"europe\",MET:G$m,EET:\"europe\"};z2B={\"Pacific/Honolulu\":O5A,\"Atlantic/Bermuda\":\"northamerica\",\"Atlantic/Cape_Verde\":\"africa\",\"Atlantic/St_Helena\":v_A,\"Indian/Kerguelen\":\"antarctica\",\"Indian/Chagos\":\"asia\",\"Indian/Maldives\":\"asia\",\"Indian/Christmas\":\"australasia\",\"Indian/Cocos\":G5w,\"America/Danmarkshavn\":n2m,\"America/Scoresbysund\":\"europe\",\"America/Godthab\":R0R,\"America/Thule\":\"europe\",\"Asia/Istanbul\":z__,\"Asia/Yekaterinburg\":\"europe\",\"Asia/Omsk\":l4C,\"Asia/Novosibirsk\":k26,\"Asia/Krasnoyarsk\":\"europe\",\"Asia/Irkutsk\":Y3n,\"Asia/Yakutsk\":\"europe\",\"Asia/Vladivostok\":Y0c,\"Asia/Sakhalin\":\"europe\",\"Asia/Magadan\":\"europe\",\"Asia/Kamchatka\":\"europe\",\"Asia/Anadyr\":\"europe\",\"Africa/Ceuta\":\"europe\",GMT:Z5s,\"Europe/Nicosia\":h8M};this.zoneFileBasePath=null;this.zoneFiles=[\"africa\",\"antarctica\",\"asia\",\"australasia\",\"backward\",\"etcetera\",V9e,O1g,\"pacificnew\",\"southamerica\"];this.loadingSchemes={PRELOAD_ALL:\"preloadAll\",LAZY_LOAD:\"lazyLoad\",MANUAL_LOAD:A3Y};function q$N(A0n,Q_g,y1o,p8a){var Q0n,X2V,y2g,V84,C1X,w64,J7M,L2I,O1R,e6F,z8a,b_z,u5$,d5g;Q0n=typeof A0n === \"number\"?new Date(A0n):A0n;X2V=Q_g[1];y2B.U1h(2);y2g=Q_g[y2B.P_X(\"0\",1)];V84=X2V.match(/^([0-9]):([0-9][0-9])$/);if(V84){C1X=\"m\";C1X+=\"a\";C1X+=\"x\";y2B.R_O(155);var i8O=y2B.P_X(10,8,8,8);y2B.R_O(7);var f71=y2B.P_X(1,26,17);y2B.R_O(8);var l2M=y2B.M8Y(900,960);y2B.U1h(8);var H68=y2B.P_X(8,10);y2B.R_O(27);var E0K=y2B.M8Y(0,30,20);return [-1000000,C1X,\"-\",\"Jan\",1,[0,+\"0\",0],parseInt(V84[\"1\" | i8O],f71) * l2M + parseInt(V84[H68],E0K),(8746,2080) == (218,406.3)?725 === (+\"1878\",124.02)?(4.84e+3,\"A\"):9858 <= (5008,7680)?(3.28e+3,\"168.67\" - 0):(0x9f8,![]):\"-\"];}w64=function(l7N,K3E,R5S){var X2u;y2B.C8A();X2u=0;if(K3E === \"u\" || K3E === \"g\" || K3E === \"z\"){X2u=0;}else if(K3E === \"s\"){X2u=y2g;}else if(K3E === ((3300,3734) === \"5250\" << 64?3120 >= (+\"6690\",2650)?974.60:(292.17,!\"1\"):\"w\") || !K3E){X2u=f57(y2g,R5S[6]);}else {y2B.U1h(0);throw new Error(y2B.P_X(K3E,\"unknown type \"));}y2B.U1h(2);X2u*=y2B.P_X(60,1000);return new Date(l7N.getTime() + X2u);};J7M=function(C05,P9o){y2B.C8A();var X6a,s6b,E8r,b_y,S9e,f1Z,k$U,E35,h7B,Q_r,p$b;X6a=C05[+\"0\"];s6b=C05[1];y2B.R_O(1);E8r=s6b[y2B.M8Y(\"5\",0)];S9e=-371741896;f1Z=874150836;k$U=2;for(var P1a=+\"1\";y2B.I9N(P1a.toString(),P1a.toString().length,82627) !== S9e;P1a++){if(!v8q[X6a]){v8q[X6a]={};}k$U+=2;}if(y2B.I9N(k$U.toString(),k$U.toString().length,74556) !== f1Z){if(+v8q[X6a]){v8q[X6a]={};}}if(v8q[X6a][s6b]){b_y=v8q[X6a][s6b];}else {if(!isNaN(s6b[+\"4\"])){b_y=new Date(Date.UTC(X6a,L8T[s6b[3]],s6b[\"4\" - 0],E8r[0],E8r[+\"1\"],E8r[2],0));}else {E35=\"l\";E35+=\"as\";E35+=\"t\";if(s6b[4].substr(0,\"4\" ^ 0) === E35){b_y=new Date(Date.UTC(X6a,L8T[s6b[3]] + 1,1,E8r[0] - 24,E8r[1],E8r[2],0));h7B=N_K[s6b[4].substr(4,y2B.M8Y(\"3\",64,y2B.R_O(46)))];Q_r=\"<=\";}else {b_y=new Date(Date.UTC(X6a,L8T[s6b[3]],s6b[4].substr(5),E8r[0],E8r[1],E8r[2],0));h7B=N_K[s6b[4].substr(0,3)];Q_r=s6b[4].substr(+\"3\",2);}p$b=b_y.getUTCDay();if(Q_r === \">=\"){b_y.setUTCDate(b_y.getUTCDate() + (h7B - p$b + (h7B < p$b?7:0)));}else {b_y.setUTCDate(b_y.getUTCDate() + (h7B - p$b - (h7B > p$b?7:0)));}}v8q[X6a][s6b]=b_y;}if(P9o){b_y=w64(b_y,E8r[3],P9o);}return b_y;};L2I=function(Y5Q,s6I){y2B.C8A();var X1Z,X99;X1Z=[];if(s6I){for(var y36=0;y36 < s6I.length;y36++){X99=\"on\";X99+=\"ly\";if(s6I[y36][0] <= Y5Q && (s6I[y36][1] >= Y5Q || s6I[y36][0] === Y5Q && s6I[y36][1] === X99 || s6I[y36][1] === \"max\")){X1Z.push([Y5Q,s6I[y36]]);}}}return X1Z;};O1R=function(q9z,t$p,e7V){var t1W,o_a;if(!(q9z instanceof Date)){t1W=q9z[0];o_a=q9z[1];q9z=!e7V && v8q[t1W] && v8q[t1W][o_a]?v8q[t1W][o_a]:J7M(q9z,e7V);}else if(e7V){q9z=w64(q9z,y1o?749.47 <= (409,3437)?7030 > 58.22?\"u\":9830 == (3600,5150)?(254.32,\"i\"):(0x2396,801.41):(0x1273,6.96e+3):\"8914\" >> 32 === \"663.6\" - 0?9924 === (\"452\" ^ 0,285)?(!0,\"430.54\" * 1):!1:\"w\",e7V);}if(!(t$p instanceof Date)){t1W=t$p[0];o_a=t$p[1];t$p=!e7V && v8q[t1W] && v8q[t1W][o_a]?v8q[t1W][o_a]:J7M(t$p,e7V);}else if(e7V){t$p=w64(t$p,y1o?\"u\":(1920,627.11) == (5853,+\"355.43\")?(+\"0x10a0\",4.59e+2):(1580,\"348.11\" * 1) > (\"110.76\" - 0,8530)?4131 < (497,974.68)?(0x1d27,\"O\"):(0x2228,![]):\"w\",e7V);}q9z=Number(q9z);t$p=Number(t$p);y2B.U1h(8);return y2B.M8Y(t$p,q9z);};e6F=Q0n.getUTCFullYear();b_z=J_x.ruleCache[p8a];if(!b_z){b_z=J_x.ruleCache[p8a]={};}z8a=b_z[e6F];if(!z8a){y2B.R_O(8);z8a=L2I(y2B.P_X(1,e6F),A9V.rules[X2V]);z8a=z8a.concat(L2I(e6F,A9V.rules[X2V]));z8a.sort(O1R);b_z[e6F]=z8a;}if(!z8a || !z8a.length){return null;}for(var U$l=z8a.length - 1;U$l >= \"0\" << 0;U$l--){if(U$l > 0){y2B.U1h(8);u5$=z8a[y2B.M8Y(1,U$l)][1];}else {u5$=null;}d5g=z8a[U$l];if(!d5g[2]){d5g[2]=J7M(d5g,u5$);}if(O1R(Q0n,d5g,u5$) >= 0){return d5g[1];}}return null;}function l7$(g7X){y2B.U1h(14);throw new Error(y2B.M8Y(g7X,\"' is either incorrect, or not loaded in the timezone registry.\",\"Timezone '\"));}this.getRegionForTimezone=J7F;this.loadingScheme=this.loadingSchemes.LAZY_LOAD;this.loadedZones={};this.zones={};this.rules={};this.init=function(r$e){var p9f,J$$;p9f={async:!!({})};J$$=this.loadingScheme === this.loadingSchemes.PRELOAD_ALL?this.zoneFiles:this.defaultZoneFile || \"northamerica\";for(var l$k in r$e){p9f[l$k]=r$e[l$k];}return this.loadZoneFiles(J$$,p9f);};this.loadZoneFiles=function(d_Q,K87){var z_z,S8n,t1u;z_z=\"s\";z_z+=\"tr\";z_z+=\"i\";z_z+=\"ng\";t1u=0;if(typeof d_Q === z_z){return this.loadZoneFile(d_Q,K87);}K87=K87 || ({});y2B.P3W();S8n=K87.callback;K87.callback=function(){var b2e;b2e=\"f\";b2e+=\"un\";b2e+=\"ct\";b2e+=\"ion\";t1u++;t1u === d_Q.length && typeof S8n === b2e && S8n();};for(var F7t=0;F7t < d_Q.length;F7t++){this.loadZoneFile(d_Q[F7t],K87);}};this.loadZoneFile=function(m4u,k_9){var D3L;if(typeof this.zoneFileBasePath === \"undefined\"){D3L=\"Please define a base path to your zone file di\";D3L+=\"rectory -- timezoneJS.timezone.zoneFileBasePath.\";throw new Error(D3L);}if(this.loadedZones[m4u]){return;}this.loadedZones[m4u]=!0;return J22(m4u,k_9);};this.loadZoneJSONData=function(m9K,N$I){y2B.P3W();var T5g;T5g=function(z85){z85=JSON.parse(z85);for(var A6D in z85.zones){A9V.zones[A6D]=z85.zones[A6D];}for(var w7z in z85.rules){A9V.rules[w7z]=z85.rules[w7z];}};return N$I?T5g(A9V.transport({url:m9K,async:!!0})):A9V.transport({url:m9K,success:T5g});};this.loadZoneDataFromObject=function(m$T){if(!m$T){return;}for(var o25 in m$T.zones){A9V.zones[o25]=m$T.zones[o25];}for(var b8e in m$T.rules){A9V.rules[b8e]=m$T.rules[b8e];}};this.getAllZones=function(){var d7J;d7J=[];for(var T2C in this.zones){d7J.push(T2C);}return d7J.sort();};this.parseZones=function(o7Q){var H$F,H7O,U$4,s4d,C6Z,y8w,K0F,o1z;if(!o7Q){return ![];}H$F=o7Q.split(\"\\n\");H7O=[];U$4=\"\";C6Z=null;y8w=null;for(var D8m=0;D8m < H$F.length;D8m++){s4d=H$F[D8m];if(s4d.match(/^\\s/)){K0F=\"Zo\";K0F+=\"n\";K0F+=\"e \";y2B.U1h(14);s4d=y2B.P_X(C6Z,s4d,K0F);}s4d=s4d.split(\"#\")[0];if(s4d.length > 3){H7O=s4d.split(/\\s+/);U$4=H7O.shift();switch(U$4){case \"Zone\":C6Z=H7O.shift();if(!A9V.zones[C6Z]){A9V.zones[C6Z]=[];}if(H7O.length < 3)break;H7O.splice(3,H7O.length,k3W(H7O));if(H7O[3]){H7O[3]=Date.UTC.apply(null,H7O[3]);}H7O[0]=-q0z(H7O[0]);A9V.zones[C6Z].push(H7O);break;case \"Rule\":y8w=H7O.shift();if(!A9V.rules[y8w]){A9V.rules[y8w]=[];}H7O[+\"0\"]=parseInt(H7O[\"0\" | 0],10);H7O[1]=parseInt(H7O[1],10) || H7O[1];H7O[5]=h75(H7O[5]);H7O[6]=q0z(H7O[6]);A9V.rules[y8w].push(H7O);break;case \"Link\":if(A9V.zones[H7O[1]]){o1z=\". Cannot c\";o1z+=\"reate link of a preexisted zone.\";y2B.U1h(23);var W7_=y2B.M8Y(12,13,0);throw new Error(\"Error with Link \" + H7O[W7_] + o1z);}if(isNaN(H7O[0])){y2B.R_O(34);A9V.zones[H7O[y2B.P_X(\"1\",0)]]=H7O[0];}else {A9V.zones[H7O[1]]=parseInt(H7O[0],10);}break;}}}return !![];};this.transport=t70;this.getTzInfo=function(V32,R9B,v0s){var Q0T,I2h,z_P,L0d;this.lazyLoadZoneFiles(R9B);Q0T=f_q(V32,R9B);I2h=+Q0T[0];z_P=q$N(V32,Q0T,v0s,R9B);if(z_P){I2h=f57(I2h,z_P[6]);}L0d=a0Y(Q0T,z_P);return {tzOffset:I2h,tzAbbr:L0d};};this.lazyLoadZoneFiles=function(o0z){y2B.C8A();var T3C;if(this.loadingScheme === this.loadingSchemes.LAZY_LOAD){T3C=J7F(o0z);if(!T3C){throw new Error(\"Not a valid timezone ID.\");}this.loadZoneFiles(T3C);}};})();}).call(typeof window !== \"undefined\"?window:this);J_x.timezone.loadingScheme=J_x.timezone.loadingSchemes.MANUAL_LOAD;J_x.timezone.loadZoneDataFromObject({zones:{\"Asia/Tokyo\":[[-540,\"\",\"J%sT\",null]],\"Etc/UTC\":[[+\"0\",\"-\",R4U,null]],\"Europe/London\":[[0,\"EU\",\"GMT/BST\",null]],\"America/New_York\":[[300,\"US\",\"E%sT\",null]],UTC:\"Etc/UTC\"},rules:{EU:[[1981,G08,(2230,6838) !== 192?(241,6218) > (599,+\"363.12\")?\"-\":7120 < 2040?(8.24e+2,+\"848\"):(+\"6.53e+3\",695.05):\"K\",\"Mar\",z0P,[+\"1\",0,0,3260 <= (+\"8700\",136.97)?(5764,600) === +\"199\"?(\"3.22e+3\" | 16,\"F\"):(19.27,!!0):\"u\"],60,9940 === 185.82?(229,5.85e+3):(798.31,+\"6610\") >= (602,443.97)?\"S\":48.39 === 3030?4.64e+3:0x1bcb],[1996,\"max\",(503.58,797.69) != +\"3938\"?\"-\":(723,27) <= 136.36?(1510,9559) == (+\"396\",1240)?(522,\"h\"):278.49:(1.08e+3,\"C\"),K7p,\"lastSun\",[1,0,\"0\" | 0,\"u\"],0,\"-\"]],US:[[2007,\"max\",1380 === (8789,9470)?0x2705:\"-\",\"Mar\",p6o,[2,0,0,null],60,9220 !== 8500?700 == 5530?(265,1190) != (455.63,8300)?556:!!0:\"D\":!!({})],[+\"2007\",\"max\",\"-\",\"Nov\",\"Sun>=1\",[2,0,\"0\" << 32,null],0,(+\"856\",\"7104\" | 0) != (+\"995.15\",6323)?\"S\":+\"0x1ab6\"]]}});};F9=I2B=>{var b7e,A8v;b7e=typeof _CIQ !== \"undefined\"?_CIQ:I2B.CIQ;b7e.ChartEngine.prototype.touchSingleClick=function(v3M,W3I,s3E){var N6Y,S0I;N6Y=this;S0I=arguments;return function(){(function(){var E$Q,x4N,u_1,r0O,u21,a2u,t3X;if(!this.cancelTouchSingleClick){E$Q=\"touc\";E$Q+=\"hSingleClick\";if(this.runPrepend(E$Q,S0I)){return;}if(this.editingAnnotation){return;}this.clicks={};if(!this.displayCrosshairs){return;}if(!this.displayInitialized){return;}if(this.openDialog !== \"\"){return;}if(W3I < this.left || W3I > this.right || s3E < this.top || s3E > this.bottom){return;}x4N=this.crossYActualPos;u_1=this.crossXActualPos;this.currentPanel=this.whichPanel(x4N);r0O=this.currentVectorParameters.vectorType;if(!b7e.Drawing || !r0O || !b7e.Drawing[r0O] || !new b7e.Drawing[r0O]().dragToDraw){if(!this.drawingClick(this.currentPanel,u_1,x4N)){Z2F(this,W3I,s3E);}if(!this.currentVectorParameters.vectorType){u21=this.activeMarker && this.activeMarker.click({cx:u_1,cy:x4N,panel:this.currentPanel});if(!u21){a2u=\"t\";a2u+=\"ap\";t3X=!![];if(this.anyHighlighted && this.leftClickPinTooltip && this.allowPinning && this.highlightedPlot && this.allowPinning(this.highlightedPlot.type)){t3X=!this.leftClickPinTooltip({cx:u_1,cy:x4N});}if(t3X){this.dispatch(a2u,{stx:this,panel:this.currentPanel,x:u_1,y:x4N});}}}}}q1l46.C8A();this.runAppend(\"touchSingleClick\",S0I);}).apply(N6Y,S0I);};};b7e.ChartEngine.prototype.touchDoubleClick=function(p9S,B8P,B60){var J49,C7S,p2F,v2k;J49=\"dou\";J49+=\"bl\";J49+=\"eT\";J49+=\"ap\";if(this.runPrepend(\"touchDoubleClick\",arguments)){return;}if(this.editingAnnotation){return;}if(b7e.ChartEngine.drawingLine){if(this.currentVectorParameters.vectorType === \"continuous\"){C7S=this.crossYActualPos;p2F=this.crossXActualPos;this.currentPanel=this.whichPanel(C7S);this.drawingClick(this.currentPanel,p2F,C7S);b7e.ChartEngine.completeDrawing(this);}return this.undo();}if(this.activeDrawing){return;}Z2F(this,B8P,B60);v2k=this.activeMarker && this.activeMarker.doubleClick({cx:B8P,cy:B60,panel:this.currentPanel});if(!v2k){this.dispatch(J49,{stx:this,finger:p9S,x:B8P,y:B60});}q1l46.P3W();this.runAppend(\"touchDoubleClick\",arguments);};b7e.ChartEngine.prototype.startProxy=function(n7n){var c5m;c5m=\"t\";c5m+=\"ouc\";c5m+=\"h\";this.touchPointerType=n7n.pointerType;if(this.touchPointerType != c5m){this.mouseMode=!!({});return;}this.mouseMode=!1;this.touches[this.touches.length]={pointerId:n7n.pointerId,pageX:n7n.clientX,pageY:n7n.clientY,clientX:n7n.clientX,clientY:n7n.clientY};this.changedTouches=[{pointerId:n7n.pointerId,pageX:n7n.clientX,pageY:n7n.clientY,clientX:n7n.clientX,clientY:n7n.clientY}];if(this.touches.length == 1){this.gesturePointerId=n7n.pointerId;}this.touchstart(n7n);};b7e.ChartEngine.prototype.moveProxy=function(o1T){if(o1T.pointerType && o1T.pointerType != \"touch\"){this.mouseMode=!!({});return;}this.mouseMode=!\"1\";q1l46.P3W();this.touchmove(o1T);};b7e.ChartEngine.prototype.endProxy=function(z$q){var q9j;if(this.touchPointerType != \"touch\"){this.mouseMode=!!\"1\";return;}this.mouseMode=![];q1l46.C8A();q9j=this.touches.length;for(var n8d=\"0\" ^ 0;n8d < this.touches.length;n8d++){if(this.touches[n8d].pointerId == z$q.pointerId){this.touches.splice(n8d,1);break;}}if(n8d == q9j){this.touches=[];this.grabbingScreen=!({});this.touching=!1;return;}this.changedTouches=[{pointerId:z$q.pointerId,pageX:z$q.clientX,pageY:z$q.clientY,clientX:z$q.clientX,clientY:z$q.clientY}];this.touchend(z$q);};b7e.ChartEngine.prototype.msMouseMoveProxy=function(V5u){if(this.touches.length || !this.mouseMode){return;}this.mousemove(V5u);};b7e.ChartEngine.prototype.msMouseDownProxy=function(w4K){if(!this.mouseMode){return;}this.mousedown(w4K);};b7e.ChartEngine.prototype.msMouseUpProxy=function(T5C){q1l46.P3W();if(!this.mouseMode){return;}this.mouseup(T5C);};b7e.ChartEngine.prototype.iosMouseMoveProxy=function(D4L){if(this.touching){return;}this.mousemove(D4L);};b7e.ChartEngine.prototype.iosMouseDownProxy=function(V2T){q1l46.C8A();if(this.touching){this.mouseMode=!!0;return;}this.mouseMode=!!({});this.mousedown(V2T);};function Z2F(K2J,h2y,S2M){var F6O;if(!K2J.layout.crosshair){b7e.ChartEngine.crosshairY=0;b7e.ChartEngine.crosshairX=0;q1l46.U1h(8);K2J.cx=K2J.backOutX(q1l46.M8Y(0,\"0\"));K2J.cy=K2J.backOutY(0);K2J.findHighlights(null,!\"\");b7e.ChartEngine.crosshairY=S2M;b7e.ChartEngine.crosshairX=h2y;F6O=K2J.container.getBoundingClientRect();K2J.top=F6O.top;K2J.left=F6O.left;K2J.right=K2J.left + K2J.width;K2J.bottom=K2J.top + K2J.height;K2J.cx=K2J.backOutX(h2y);K2J.cy=K2J.backOutY(S2M);if(K2J.currentPanel && K2J.currentPanel.chart.dataSet){K2J.crosshairTick=K2J.tickFromPixel(K2J.cx,K2J.currentPanel.chart);K2J.crosshairValue=K2J.adjustIfNecessary(K2J.currentPanel,K2J.crosshairTick,K2J.valueFromPixel(K2J.cy,K2J.currentPanel));}K2J.headsUpHR();}K2J.findHighlights(!!({}));K2J.draw();}b7e.ChartEngine.prototype.iosMouseUpProxy=function(I9u){q1l46.P3W();if(this.touching){return;}this.mouseup(I9u);};b7e.ChartEngine.prototype.touchmove=function(M$n){var J9Y=q1l46;var o7T,J8i,B1W,j6p,M9b,g77,X7B,w_T,t8O,H7E,p1G,D2s,Y7w,R0q,P_M,F2M,t5P,Q7l,I$n,R0d,F3L,Y1W,k8U,r_r,o8l,i51,C3O,M7I,b94,i$w,F2J,B9E,h$b,k$O,O00,z$j,n6q,e85,j2d,k1Y,X2Z,K5g,I2w,t_a,h3h;o7T=\"pe\";o7T+=\"n\";if(!this.displayInitialized){return;}if(this.openDialog !== \"\"){return;}if(b7e.ChartEngine.ignoreTouch === !!({})){return;}J8i=[];if(!this.overYAxis || this.controls && this.controls.crossX && this.controls.crossX.style.display != \"none\"){if(M$n && M$n.preventDefault && M$n.cancelable && this.captureTouchEvents){M$n.preventDefault();}if(M$n){M$n.stopPropagation();}}B1W=new Date().getTime();var {down:[u8D]}=this.pointerEvents;if(B1W - u8D.time < 25){return;}if(!M$n.pointerType){M$n.pointerType=this.touchPointerType;}if(b7e.isSurface){if(this.mouseMode){return;}if(!M$n.pointerId){M$n.pointerId=this.gesturePointerId;}for(var v5L=0;v5L < this.touches.length;v5L++){if(this.touches[v5L].pointerId == M$n.pointerId){j6p=Math.abs(this.touches[v5L].pageX - M$n.clientX);M9b=Math.abs(this.touches[v5L].pageY - M$n.clientY);J9Y.U1h(50);g77=Math.sqrt(J9Y.M8Y(M9b,M9b,j6p,j6p));if(!g77){return;}if(B1W - u8D.time < 50){return;}if(this.touches[v5L].pageX == M$n.clientX && this.touches[v5L].pageY == M$n.clientY){return;}this.touches[v5L].pageX=this.touches[v5L].clientX=M$n.clientX;this.touches[v5L].pageY=this.touches[v5L].clientY=M$n.clientY;break;}}if(v5L === 0){this.movedPrimary=!![];}else {this.movedSecondary=!0;}if(v5L == this.touches.length){return;}this.changedTouches=[{pointerId:M$n.pointerId,pageX:M$n.clientX,pageY:M$n.clientY,clientX:M$n.clientX,clientY:M$n.clientY}];J8i=this.touches.length?this.touches:this.changedTouches;}else {J8i=M$n.touches;this.changedTouches=M$n.changedTouches;}if(J8i.length == 1 && b7e.withinRadius(this.clicks,{x:J8i[0].clientX,y:J8i[\"0\" >> 32].clientY},\"4\" | 0)){return;}X7B=this.crosshairXOffset;w_T=this.crosshairYOffset;t8O=this.currentVectorParameters.vectorType && this.currentVectorParameters.vectorType !== \"\";H7E=!this.layout.crosshair && !t8O && !this.touchNoPan;J9Y.P3W();if(M$n.pointerType == o7T || H7E || this.activeDrawing && this.activeDrawing.name == \"freeform\"){X7B=w_T=0;}if(this.runPrepend(\"touchmove\",arguments)){return;}if(b7e.ChartEngine.resizingPanel){J9Y.U1h(1);Y7w=J8i[J9Y.M8Y(\"0\",0)];p1G=Y7w.clientX;D2s=Y7w.clientY;J9Y.R_O(0);this.mousemoveinner(J9Y.P_X(X7B,p1G),J9Y.P_X(w_T,D2s));return;}if(this.moveB != -1){this.touchMoveTime=new Date();}this.moveA=this.moveB;this.moveB=J8i[0].pageX;if(J8i.length == (\"1\" | 1) && !this.twoFingerStart){P_M=J8i[0];p1G=P_M.clientX;D2s=P_M.clientY;this.pinchingScreen=0;J9Y.R_O(0);this.mousemoveinner(J9Y.M8Y(X7B,p1G),J9Y.M8Y(w_T,D2s));F2M=this.whichPanel(D2s);t5P=this.xAxisAsFooter === !!\"1\"?this.chart.canvasHeight:this.chart.panel.bottom;this.overXAxis=D2s <= this.top + t5P && D2s >= t5P - this.xaxisHeight + this.top && this.insideChart;if(!F2M){this.overYAxis=![];}else {this.overYAxis=(p1G >= F2M.right || p1G <= F2M.left) && this.insideChart;}}else if(J8i.length == 2){if(!this.allowZoom || this.activeDrawing && !this.allowDrawingZoom){return;}if(!this.displayCrosshairs){return;}Q7l=J8i[0];I$n=Q7l.clientX;R0d=Q7l.clientY;F3L=J8i[1];Y1W=F3L.clientX;k8U=F3L.clientY;J9Y.U1h(156);R0q=Math.sqrt(J9Y.M8Y(Y1W,I$n,I$n,R0d,Y1W,R0d,k8U,k8U));J9Y.U1h(8);var h7P=J9Y.P_X(26,28);this.pinchingCenter=(Math.min(I$n,Y1W) - Math.max(I$n,Y1W)) / h7P;r_r=Math.round(this.gestureStartDistance - R0q);if(H7E){this.pinchingScreen=5;}this.clearPixelCache();if(this.pinchingScreen < 2){if(b7e.isSurface && (!this.movedPrimary || !this.movedSecondary)){return;}if(I$n < this.pt.x1 && Y1W < this.pt.x2 || I$n > this.pt.x1 && Y1W > this.pt.x2 || R0d < this.pt.y1 && k8U < this.pt.y2 || R0d > this.pt.y1 && k8U > this.pt.y2){this.pinchingScreen=0;}else {this.pinchingScreen++;if(this.pinchingScreen < +\"2\"){return;}}}this.pt={x1:I$n,x2:Y1W,y1:R0d,y2:k8U};if(this.pinchingScreen === 0){o8l=\"p\";o8l+=\"a\";o8l+=\"n\";this.grabMode=o8l;J9Y.R_O(0);this.mousemoveinner(J9Y.P_X(X7B,I$n),J9Y.M8Y(w_T,R0d));this.gestureStartDistance=R0q;}else if(this.grabStartValues){i51=Math.asin((Math.max(k8U,R0d) - Math.min(k8U,R0d)) / R0q);if(Math.abs(r_r) < 12 && !H7E){this.moveCount++;if(this.moveCount == 4){this.pinchingScreen=0;this.moveCount=0;C3O=117064697;M7I=-647897261;b94=2;for(var y9I=1;J9Y.G33(y9I.toString(),y9I.toString().length,294) !== C3O;y9I++){return;}if(J9Y.I9N(b94.toString(),b94.toString().length,38519) !== M7I){return;}}}else {this.moveCount=0;}if(i51 < 1 || !this.goneVertical && i51 < \"1.37\" * 1){if(!this.currentPanel){return;}i$w=this.currentPanel.chart;this.goneVertical=![];R0q=this.pt.x2 - this.pt.x1;F2J=this.grabStartValues.t2 - this.grabStartValues.t1 || +\"1\";J9Y.R_O(157);var s_d=J9Y.P_X(11,2,0,33,12);B9E=this.grabStartValues.t1 + F2J / s_d;J9Y.U1h(9);h$b=Math.abs(J9Y.P_X(R0q,F2J));if(i$w.allowScrollFuture === !({}) && i$w.allowScrollPast === !\"1\"){h$b=Math.max(h$b,i$w.width / i$w.dataSet.length);}k$O=this.layout.candleWidth;this.setCandleWidth(h$b,i$w);if(i$w.maxTicks < this.minimumZoomTicks){this.setCandleWidth(k$O,i$w);return;}this.micropixels=0;O00=this.pixelFromTick(Math.round(B9E),i$w);J9Y.U1h(25);var b$L=J9Y.M8Y(9,7);z$j=this.pt.x1 - this.left + Math.round(R0q / b$L);J9Y.R_O(8);n6q=J9Y.M8Y(z$j,O00);e85=n6q / this.layout.candleWidth;j2d=Math.round(e85);i$w.scroll-=j2d;J9Y.U1h(8);this.microscroll=J9Y.P_X(e85,j2d);this.micropixels=h$b * this.microscroll;this.draw();}else {k1Y=-1748511005;X2Z=1503823789;K5g=2;for(var y68=1;J9Y.I9N(y68.toString(),y68.toString().length,56198) !== k1Y;y68++){I2w=this.grabStartYAxis;this.goneVertical=!0;K5g+=2;}if(J9Y.G33(K5g.toString(),K5g.toString().length,64554) !== X2Z){I2w=this.grabStartYAxis;this.goneVertical=!!\"\";}if(I2w){I2w.zoom=this.grabStartZoom + (this.gestureStartDistance - R0q);if(this.grabStartZoom < I2w.height){if(I2w.zoom >= I2w.height){J9Y.R_O(158);var q2j=J9Y.P_X(17,14,12,4,16);I2w.zoom=I2w.height - \"1\" * q2j;}}else {if(I2w.zoom <= I2w.height){J9Y.U1h(8);var D0w=J9Y.M8Y(19,20);I2w.zoom=I2w.height + D0w;}}this.draw();}}this.updateChartAccessories();}}else if(J8i.length == 3 && b7e.ChartEngine.allowThreeFingerTouch){if(!this.displayCrosshairs){return;}t_a=J8i[0];h3h=t_a.clientX;R0q=this.grabStartX - h3h;J9Y.U1h(77);var s6K=J9Y.M8Y(17,0,40,13);this.grabEndPeriodicity=this.grabStartPeriodicity + Math.round(R0q / s6K);if(this.grabEndPeriodicity < 1){this.grabEndPeriodicity=1;}}this.runAppend(\"touchmove\",arguments);};b7e.ChartEngine.prototype.touchstart=function(L6d){var g72=q1l46;var q75,r2M,E7W,z$O,L5E,x0Q,W8C,W0Y,o7X,Q5d,W7G,q5r,f9t,c37,B5M,S2L,b_Z,X6T,i_O,z3E,c_b,u1v,j7N,g2$,O5y,o7l,r68,Q5Z,g9Q,V2t,i_K,I9S,W5f;q75=\"touchsta\";q75+=\"rt\";if(b7e.ChartEngine.ignoreTouch){return;}if(L6d.target && L6d.target.closest(\"[draggable]\")){return;}if(b7e.isSurface){this.movedPrimary=![];this.movedSecondary=!1;}else {if(this.touchingEvent){clearTimeout(this.touchingEvent);}this.touching=!![];this.touches=L6d.touches;this.changedTouches=L6d.changedTouches;}r2M=this.crosshairXOffset;E7W=this.crosshairYOffset;if(this.touchPointerType == \"pen\"){g72.U1h(46);r2M=E7W=g72.P_X(\"0\",32);}if(this.runPrepend(q75,arguments)){return;}var {layout:G2J}=this;var {vectorType:S56}=this.currentVectorParameters;z$O=G2J.crosshair && S56 !== \"\" || S56;if(this.manageTouchAndMouse && L6d && L6d.preventDefault && L6d.cancelable && this.captureTouchEvents){L6d.preventDefault();}this.hasDragged=![];g72.P3W();this.doubleFingerMoves=0;this.moveCount=0;this.twoFingerStart=!!0;this.longHoldTookEffect=!1;if(this.touches.length == \"1\" * 1 || this.touches.length == 2){this.touchMoveTime=Date.now();Q5d=this.touches[0];W8C=Q5d.clientX;W0Y=Q5d.clientY;this.moveA=W8C;this.moveB=-1;if(this.openDialog === \"\"){this.registerPointerEvent({x:W8C,y:W0Y,time:this.touchMoveTime},\"down\");if(this.changedTouches.length == 1){this.clicks={x:this.changedTouches[0].pageX,y:this.changedTouches[0].pageY};}}W7G=this.container.getBoundingClientRect();this.top=W7G.top;this.left=W7G.left;this.right=this.left + this.width;this.bottom=this.top + this.height;if(this.touches.length == (\"1\" ^ 0)){q5r=this.backOutX(W8C);f9t=this.backOutY(W0Y);this.currentPanel=this.whichPanel(f9t);if(!this.shouldDisplayCrosshair()){this.crossXActualPos=q5r;this.crossYActualPos=f9t;}}if(!this.currentPanel){this.currentPanel=this.chart.panel;}c37=-1044789833;B5M=1860681893;S2L=2;for(var A$E=1;g72.G33(A$E.toString(),A$E.toString().length,91754) !== c37;A$E++){o7X=this.currentPanel;S2L+=2;}if(g72.I9N(S2L.toString(),S2L.toString().length,50083) !== B5M){o7X=this.currentPanel;}o7X=this.currentPanel;if(W8C >= this.left && W8C <= this.right && W0Y >= this.top && W0Y <= this.bottom){this.insideChart=!!({});b_Z=this.xAxisAsFooter === !!({})?this.chart.canvasHeight:this.chart.panel.bottom;this.overXAxis=W0Y <= this.top + b_Z && W0Y >= this.top + b_Z - this.xaxisHeight;this.overYAxis=W8C >= this.left + o7X.right || W8C <= this.left + o7X.left;X6T=-1;this.cy=this.backOutY(W0Y);this.cx=this.backOutX(W8C);this.crosshairTick=this.tickFromPixel(this.cx,o7X.chart);this.crosshairValue=this.adjustIfNecessary(o7X,this.crosshairTick,this.valueFromPixel(this.cy,this.currentPanel));for(var B1v=0;B1v < this.drawingObjects.length;B1v++){if(this.openDialog)break;i_O=this.drawingObjects[B1v];if(i_O.highlighted){if(X6T < 0){X6T=B1v;}z3E=i_O.highlighted;this.findHighlights(!![]);if(B1v == X6T && i_O.highlighted && !i_O.permanent){this.activateRepositioning(i_O);return;}this.anyHighlighted=!\"\";i_O.highlighted=z3E;}}}else {this.insideChart=!!\"\";}if(this.insideChart && !z$O && G2J.headsUp !== \"floating\" && !(G2J.headsUp && G2J.headsUp.floating) && !S56 && !this.touchNoPan){r2M=E7W=0;if(this.controls.anchorHandles){c_b=Object.values(this.controls.anchorHandles);u1v=!!0;for(var m8J=0;m8J < c_b.length;m8J++){j7N=c_b[m8J];var {handle:F8Z, sd:q3R}=j7N;g2$=this.resolveX(this.cx);O5y=this.resolveY(this.cy);var {left:j9f, top:O5C, right:S5A, bottom:o4v}=F8Z.getBoundingClientRect();o7l=this.preferences.highlightsTapRadius;g72.U1h(8);r68=b7e.boxIntersects(g72.P_X(o7l,j9f),O5C,g72.M8Y(o7l,S5A,g72.U1h(0)),o4v,g2$,O5y,g2$,O5y);if(r68){this.repositioningAnchorSelector={sd:q3R};F8Z.classList.add(\"stx-grab\");u1v=!![];}j7N.highlighted=r68;}if(u1v){return;}}for(L5E in this.panels){x0Q=this.panels[L5E];if(x0Q.highlighted){this.grabHandle(x0Q);return;}}this.grabbingScreen=!![];if(this.disableBackingStoreDuringTouch){this.disableBackingStore();}o7X.chart.spanLock=!1;this.yToleranceBroken=!!0;g72.R_O(0);this.grabStartX=g72.P_X(r2M,W8C);g72.U1h(0);this.grabStartY=g72.M8Y(E7W,W0Y);this.grabStartMicropixels=this.micropixels;this.grabStartScrollX=o7X.chart.scroll;this.grabStartScrollY=o7X.yAxis.scroll;this.grabStartPanel=this.currentPanel;if(this.swipeStart){this.swipeStart(o7X.chart);}this.grabStartYAxis=this.whichYAxis(o7X,this.backOutX(W8C));this.grabStartZoom=this.grabStartYAxis?this.grabStartYAxis.zoom:0;setTimeout((function(T1_){return function(){T1_.grabbingHand();};})(this),100);}else {this.grabbingScreen=![];if(this.insideChart && o7X.subholder === L6d.target){Q5Z=this.currentVectorParameters.vectorType;if(b7e.Drawing && Q5Z && b7e.Drawing[Q5Z] && new b7e.Drawing[Q5Z]().dragToDraw){this.userPointerDown=!!({});b7e.ChartEngine.crosshairX=W8C;b7e.ChartEngine.crosshairY=W0Y;if(o7X && o7X.chart.dataSet){this.crosshairTick=this.tickFromPixel(this.backOutX(W8C),this.currentPanel.chart);this.crosshairValue=this.adjustIfNecessary(o7X,this.crosshairTick,this.valueFromPixel(this.backOutY(b7e.ChartEngine.crosshairY),this.currentPanel));}this.drawingClick(o7X,this.backOutX(W8C),this.backOutY(W0Y));this.headsUpHR();return;}}}if(this.touches.length == 1){if(!z$O){if(this.longHoldTime || this.longHoldTime === 0){this.startLongHoldTimer((u3M=>{return ()=>{return Z2F(u3M,W8C,W0Y);};})(this));}}else if(!S56 && o7X.subholder === L6d.target){g72.U1h(0);this.mousemoveinner(g72.M8Y(r2M,W8C),g72.P_X(E7W,W0Y));}}}if(this.touches.length == 2){this.cancelLongHold=!!({});this.swipe.end=!!({});if(!this.displayCrosshairs && !this.touchNoPan || !this.insideChart){return;}g9Q=this.touches[1];V2t=g9Q.clientX;i_K=g9Q.clientY;for(L5E in this.panels){x0Q=this.panels[L5E];if(x0Q.highlighted){this.grabHandle(x0Q);return;}}o7X=this.currentPanel;g72.R_O(156);this.gestureStartDistance=Math.sqrt(g72.M8Y(V2t,W8C,W8C,W0Y,V2t,W0Y,i_K,i_K));this.pt={x1:W8C,x2:V2t,y1:W0Y,y2:i_K};this.grabbingScreen=!!({});if(this.disableBackingStoreDuringTouch){this.disableBackingStore();}o7X.chart.spanLock=!1;g72.R_O(0);this.grabStartX=g72.M8Y(r2M,W8C);g72.R_O(0);this.grabStartY=g72.P_X(E7W,W0Y);this.grabStartMicropixels=this.micropixels;this.grabStartScrollX=o7X.chart.scroll;this.grabStartScrollY=o7X.yAxis.scroll;this.grabStartPanel=o7X;if(this.swipeStart){this.swipeStart(o7X.chart);}this.grabStartCandleWidth=G2J.candleWidth;this.grabStartYAxis=this.whichYAxis(o7X,this.backOutX((W8C + V2t) / 2)) || o7X.yAxis;this.grabStartZoom=this.grabStartYAxis?this.grabStartYAxis.zoom:0;this.grabStartPt=this.pt;this.grabStartValues={x1:this.pt.x1,x2:this.pt.x2,y1:this.valueFromPixel(this.pt.y1 - this.top,o7X),y2:this.valueFromPixel(this.pt.y2 - this.top,o7X),t1:this.tickFromPixel(this.pt.x1 - this.left,o7X.chart),t2:this.tickFromPixel(this.pt.x2 - this.left,o7X.chart)};this.twoFingerStart=!![];setTimeout((function(k2b){return function(){g72.C8A();k2b.grabbingHand();};})(this),100);}else if(this.touches.length == 3){if(!this.displayCrosshairs){return;}g72.U1h(2);I9S=this.touches[g72.M8Y(\"0\",1)];W5f=I9S.clientX;this.grabStartX=W5f;this.grabStartPeriodicity=G2J.periodicity;}this.runAppend(\"touchstart\",arguments);};b7e.ChartEngine.prototype.touchend=function(T72){var z1B=q1l46;var H5b,w53,c2Y,r8X,D6W,I_2,D4Y,W6i,O29,q04,U0d;if(b7e.ChartEngine.ignoreTouch){return;}this.swipe.end=!\"\";if(b7e.isSurface){}else {this.touches=T72.touches;this.changedTouches=T72.changedTouches;}z1B.P3W();if(this.runPrepend(\"touchend\",arguments)){return;}var {touches:T_f, layout:K$z}=this;var {vectorType:c64}=this.currentVectorParameters;H5b=K$z.crosshair && c64 !== \"\" || c64;this.cancelLongHold=!!({});if(T_f.length <= \"1\" >> 32){if(H5b){if(!T_f.length || !this.twoFingerStart){this.grabbingScreen=!!\"\";}}}if(T_f.length){this.grabStartX=-1;z1B.U1h(34);this.grabStartY=-z1B.P_X(\"1\",0);}w53=this.pinchingScreen;if(this.disableBackingStoreDuringTouch){this.reconstituteBackingStore();}if(!T_f.length){this.touchingEvent=setTimeout((function(p$Z){z1B.P3W();return function(){z1B.P3W();p$Z.touching=![];};})(this),500);if(b7e.ChartEngine.resizingPanel){this.releaseHandle();if(this.changedTouches.length !== (\"1\" | 1) || this.grabStartY !== this.changedTouches[0].clientY){return;}}this.pinchingScreen=null;this.pinchingCenter=null;this.goneVertical=!1;this.grabbingScreen=![];this.grabMode=\"\";if(this.highlightedDraggable){if(this.dragPlotOrAxis){this.dragPlotOrAxis(this.cx,this.cy);}this.currentPanel=this.whichPanel(this.cy);}this.grabStartYAxis=null;this.displayDragOK();this.doDisplayCrosshairs();this.updateChartAccessories();}else {if(b7e.ChartEngine.resizingPanel){return;}}z1B.U1h(72);var x28=z1B.P_X(11,67,6);c2Y=T_f.length + x28;if(this.changedTouches.length === 1){r8X=Date.now();D6W=this.changedTouches[+\"0\"];I_2=this.backOutY(D6W.pageY) + this.crosshairYOffset;D4Y=this.backOutX(D6W.pageX) + this.crosshairXOffset;W6i=this.currentPanel;O29=W6i && W6i.subholder === T72.target;if(this.repositioningDrawing){q04=\"v\";q04+=\"ec\";q04+=\"t\";q04+=\"or\";this.changeOccurred(q04);b7e.clearCanvas(this.chart.tempCanvas,this);this.activateRepositioning(null);this.draw();if(!H5b){this.findHighlights(!({}),!!1);}return;}if(this.repositioningAnchorSelector){if(!this.repositioningAnchorSelector.hoverTick){this.repositioningAnchorSelector.hoverTick=this.tickFromPixel(D4Y - this.crosshairXOffset,this.chart);}U0d=this.repositioningAnchorSelector.sd;b7e.Studies.repositionAnchor(this,U0d);this.repositioningAnchorSelector=null;this.controls.anchorHandles[U0d.uniqueId].highlighted=!\"1\";b7e.Studies.displayAnchorHandleAndLine(this,U0d,this.chart.dataSegment);Object.values(this.controls.anchorHandles).forEach(({handle:f3J})=>{z1B.P3W();return f3J.classList.remove(\"stx-grab\");});return;}if(this.openDialog === \"\"){this.registerPointerEvent({x:D6W.clientX,y:D6W.clientY,time:r8X},\"up\");}if(this.isDoubleClick(!!({})) && (O29 || this.overYAxis || this.overXAxis)){this.touchDoubleClick(c2Y,this.clicks.x,this.clicks.y);this.resetClickState();}else {if(!b7e.Drawing || !c64 || !b7e.Drawing[c64] || !new b7e.Drawing[c64]().dragToDraw){z1B.U1h(27);var F7R=z1B.M8Y(6,55,14);var {up:[g8E], down:[m3Z]}=this.pointerEvents,e_j=F7R;if(b7e.withinRadius(m3Z,g8E,e_j) && r8X - m3Z.time < 750 && !this.longHoldTookEffect && (!this.hasDragged || H5b)){setTimeout(this.touchSingleClick(c2Y,this.clicks.x,this.clicks.y),this.doubleClickTime + 1);}}this.userPointerDown=!!0;if(b7e.Drawing && this.activeDrawing && this.activeDrawing.dragToDraw && O29){this.drawingClick(W6i,D4Y,I_2);return;}}}else if(this.displayCrosshairs){if(this.grabEndPeriodicity != -+\"1\" && !isNaN(this.grabEndPeriodicity)){if(b7e.ChartEngine.isDailyInterval(this.layout.interval) || this.allowIntradayNMinute){this.setPeriodicity({period:this.grabEndPeriodicity,interval:this.layout.interval});}this.grabEndPeriodicity=-1;}}if(this.changedTouches.length){if(!H5b && !this.currentVectorParameters.vectorType && c2Y == 1 || this.twoFingerStart && !w53 && !this.touches.length){if(this.swipeRelease){this.swipeRelease();}this.findHighlights(!({}),!!({}));}if(w53 && this.continuousZoom){this.continuousZoom.execute();this.continuousZoom.execute(!!\"1\");}}if(!T_f.length){this.twoFingerStart=!({});}this.runAppend(\"touchend\",arguments);};A8v=!({});b7e.ChartEngine.prototype.mousemoveinner=b7e.ChartEngine.prototype.mousemoveinner || (function(G4O,d89){var n$$;n$$=\"touch feature req\";n$$+=\"uires activating\";n$$+=\" movement feature.\";if(!A8v){console.error(n$$);}A8v=!!({});});};Y8=O78=>{var K$8;K$8=typeof _CIQ !== \"undefined\"?_CIQ:O78.CIQ;K$8.Visualization=K$8.Visualization || (function(V3Z){var k3e;if(!V3Z){console.log(\"CIQ.Visualization() missing attributes argument.\");return;}if(typeof V3Z.renderFunction !== \"function\"){k3e=\"CIQ.Visualiza\";k3e+=\"tion() missing rend\";k3e+=\"erFunction property in attributes.\";console.log(k3e);return;}this.container=null;q1l46.P3W();this.attributes=V3Z;this.data=null;this.object=null;});K$8.extend(K$8.Visualization.prototype,{destroy:function(z35){var E_R;E_R=this.container || ({});K$8.resizeObserver(E_R,null,E_R.resizeHandle);if(E_R.autoGenerated){E_R.remove();delete this.container;}else {E_R.innerHTML=\"\";}if(z35){return;}this.attributes=null;this.container=null;this.data=null;this.object=null;this.destroy=this.draw=this.setAttributes=function(){};this.updateData=function(){return undefined;};},draw:function(i32){var S6h,l34,A9b,t50,f7K,q6_;if(!this.data || typeof this.data !== \"object\"){console.log(\"CIQ.Visualization.draw() missing data.\");return;}S6h=this.attributes || ({});l34=S6h.document || document;A9b=S6h.container || this.container;if(typeof A9b === \"string\"){A9b=l34.querySelector(A9b);}if(!A9b){A9b=document.createElement(\"div\");A9b.style.height=A9b.style.width=\"300px\";l34.body.appendChild(A9b);A9b.autoGenerated=!\"\";}function A4z(o1D,k63){q1l46.C8A();return o1D.index < k63.index?-1:o1D.index > k63.index?1:0;}if(S6h.stx){t50=S6h.stx.chart.canvasShim;if(S6h.useCanvasShim && t50 && t50 !== A9b && t50 !== A9b.parentNode){if(!A9b.autoGenerated){A9b=A9b.cloneNode();A9b.id=\"\";A9b.autoGenerated=!!\"1\";}t50.appendChild(A9b);}}if(this.container && this.container !== A9b){this.destroy(!!\"1\");}if(!A9b.resizeHandle){f7K=function(r5i){q1l46.P3W();return function(){q1l46.P3W();if(r5i.data && r5i.container && l34.body.contains(r5i.container)){r5i.draw.call(r5i,!!({}));}};};A9b.resizeHandle=K$8.resizeObserver(A9b,f7K(this));}this.container=A9b;this.attributes=S6h;S6h=K$8.ensureDefaults({container:this.container},this.attributes);q6_=S6h.renderFunction(Object.values(this.data).sort(A4z),S6h);if(q6_){if(S6h.id){q6_.id=S6h.id;}if(i32 || S6h.forceReplace){this.container.innerHTML=\"\";this.container.appendChild(q6_);}}this.attributes=S6h;this.object=q6_;},setAttributes:function(t1Z,s7P){var D7x,U3J,h7V,I_n,I6P;D7x=\"contai\";D7x+=\"ner\";U3J=\"renderFu\";U3J+=\"nct\";U3J+=\"ion\";h7V=[U3J,D7x,\"stx\",\"useCanvasShim\",\"id\",\"forceReplace\"];I_n=![];I6P=t1Z;if(typeof t1Z == \"string\"){I6P={};I6P[t1Z]=s7P;}if(typeof I6P == \"object\"){for(var W1H in I6P){if(this.attributes[W1H] !== I6P[W1H] && h7V.indexOf(W1H) !== -1){I_n=!0;}this.attributes[W1H]=I6P[W1H];}}this.draw(I_n);},updateData:function(R5t,B3J){var K5m,Y5O,H3L,B5C,H3X,S_y;K5m=\"ad\";q1l46.P3W();K5m+=\"d\";B5C=Array.isArray(R5t)?R5t.reduce(function(l17,j0J){l17[j0J.name]=j0J;return l17;},{}):K$8.shallowClone(R5t);for(Y5O in B5C){H3L=B5C[Y5O];if(Object.prototype.toString.call(H3L) !== \"[object Object]\"){B5C[Y5O]={value:H3L};}if(!B5C[Y5O].name){B5C[Y5O].name=Y5O;}if(!B5C[Y5O].value){B5C[Y5O].value=0;}}if(!B3J){B3J=\"replace\";}switch(B3J.toLowerCase()){case \"delete\":for(Y5O in B5C){delete this.data[Y5O];}break;case \"replace\":this.data={};case \"update\":case K5m:for(Y5O in B5C){H3X=\"[o\";H3X+=\"bject Number]\";if(!this.data[Y5O]){this.data[Y5O]={name:Y5O};}H3L=B5C[Y5O].value;if(Object.prototype.toString.call(H3L) == H3X){if(!this.data[Y5O].value || B3J == \"update\"){this.data[Y5O].value=0;}this.data[Y5O].value+=H3L;}else {this.data[Y5O].value=H3L;}for(var P9Q in B5C[Y5O]){S_y=\"va\";S_y+=\"l\";S_y+=\"u\";S_y+=\"e\";if(P9Q !== S_y){this.data[Y5O][P9Q]=B5C[Y5O][P9Q];}}}break;default:console.log(\"Invalid or missing action. Valid values are 'add', 'delete', 'replace', or 'update'.\");}this.draw(this.attributes.forceReplace);return this;}});K$8.ChartEngine.prototype.embedVisualization=function(y_E){if(!y_E){y_E={};}q1l46.P3W();y_E.stx=this;y_E.useCanvasShim=!0;y_E.translator=function(i7u){return y_E.stx.translateIf(i7u);};y_E.document=this.container.ownerDocument;return new K$8.Visualization(y_E);};};F2=U3I=>{var W67=q1l46;var N8f,w9a;N8f=typeof _CIQ !== \"undefined\"?_CIQ:U3I.CIQ;W67.C8A();if(!N8f.Studies){console.error(\"medianPrice feature requires first activating studies feature.\");}else {w9a=\"Med\";w9a+=\"ian\";w9a+=\" P\";w9a+=\"rice\";N8f.Studies.calculateTypicalPrice=function(A5w,A1m){var m_2,C$i,N$y,J7g,b$f,v5X,E_T,K5U,m8U;m_2=\"h\";m_2+=\"lcc/\";m_2+=\"4\";C$i=A1m.chart.scrubbed;N$y=-1038249496;J7g=-41622872;b$f=2;for(var r2_=1;W67.I9N(r2_.toString(),r2_.toString().length,30274) !== N$y;r2_++){v5X=A1m.days;b$f+=2;}if(W67.I9N(b$f.toString(),b$f.toString().length,+\"61881\") !== J7g){v5X=A1m.days;}if(C$i.length < v5X + 1){if(!A1m.overlay){A1m.error=!!({});}return;}E_T=A1m.name;for(var Z05 in A1m.outputs){W67.U1h(14);E_T=W67.P_X(8480 === (+\"297.67\",2240)?8.45e+3:(1266,4190) <= 945.65?(+\"0xca4\",\"3.50e+3\" * 1):940 == (657,\"684\" - 0)?(951.03,352.58):\" \",E_T,Z05);}K5U=\"hlc/\";K5U+=\"3\";if(A1m.type == \"Med Price\"){K5U=\"hl/2\";}else if(A1m.type == \"Weighted Close\"){K5U=m_2;}m8U=0;if(A1m.startFrom <= v5X){A1m.startFrom=0;}for(var d50=A1m.startFrom;d50 < C$i.length;d50++){if(d50 && C$i[d50 - 1][E_T]){W67.U1h(6);var X3R=W67.M8Y(5,11,2,8,5);m8U=C$i[d50 - X3R][E_T] * v5X;}m8U+=C$i[d50][K5U];if(d50 >= v5X){W67.R_O(8);m8U-=C$i[W67.M8Y(v5X,d50)][K5U];W67.R_O(9);C$i[d50][E_T]=W67.M8Y(m8U,v5X);}}};N8f.Studies.studyLibrary=N8f.extend(N8f.Studies.studyLibrary,{\"Med Price\":{name:w9a,calculateFN:N8f.Studies.calculateTypicalPrice,inputs:{Period:14}}});}};w5=B2U=>{var J_B=q1l46;J_B.P3W();var A8Q,u2d;A8Q=typeof _CIQ !== \"undefined\"?_CIQ:B2U.CIQ;if(!A8Q.Studies){console.error(\"momentum feature requires first activating studies feature.\");}else {u2d=\"M\";u2d+=\"omentum Ind\";u2d+=\"ica\";u2d+=\"tor\";A8Q.Studies.calculateRateOfChange=function(T6_,V07){var h1K,d7L,d4A,m6b,H6Y,b9f,x6r,J3p,d9q;h1K=\"Vo\";h1K+=\"lume\";d7L=\"C\";d7L+=\"lo\";d7L+=\"se\";d4A=V07.chart.scrubbed;if(d4A.length < V07.days + 1){V07.error=!!({});return;}J_B.P3W();m6b=V07.inputs.Field;if(!m6b || m6b == \"field\"){m6b=d7L;}if(V07.parameters.isVolume){m6b=h1K;}H6Y=V07.name;for(var m6z in V07.outputs){J_B.U1h(14);H6Y=J_B.P_X((262.21,720) <= 885.63?\" \":84.39,H6Y,m6z);}b9f=V07.inputs[\"Center Line\"];if(!b9f){J_B.R_O(2);b9f=J_B.M8Y(\"0\",1);}else {b9f=parseInt(b9f,10);}for(var y0F=Math.max(V07.startFrom,V07.days);y0F < d4A.length;y0F++){x6r=A8Q.Studies.getQuoteFieldValue(d4A[y0F],m6b,V07.subField);J3p=A8Q.Studies.getQuoteFieldValue(d4A[y0F - V07.days],m6b,V07.subField);if(V07.type == \"Momentum\"){J_B.U1h(7);d4A[y0F][H6Y]=J_B.P_X(x6r,b9f,J3p);}else {d9q=J3p;if(d9q){J_B.R_O(159);d4A[y0F][H6Y]=J_B.M8Y(100,d9q,1,x6r,b9f);}}}};A8Q.Studies.studyLibrary=A8Q.extend(A8Q.Studies.studyLibrary,{\"Price ROC\":{name:\"Price Rate of Change\",calculateFN:A8Q.Studies.calculateRateOfChange,inputs:{Period:14,Field:\"field\"}},Momentum:{name:u2d,calculateFN:A8Q.Studies.calculateRateOfChange,inputs:{Period:\"14\" ^ 0},centerline:0}});}};v$=V0H=>{var r8d=q1l46;var T_M,O8O;T_M=\"und\";T_M+=\"efin\";T_M+=\"e\";T_M+=\"d\";O8O=typeof _CIQ !== T_M?_CIQ:V0H.CIQ;r8d.P3W();if(!O8O.Studies){console.error(\"priceRelative feature requires first activating studies feature.\");}else {O8O.Studies.initPriceRelative=function(R75,N23,R5l,V7m,b35,C64){var y0p,Q5f;y0p=O8O.Studies.initializeFN(R75,N23,R5l,V7m,b35,C64);Q5f=[y0p.inputs[\"Comparison Symbol\"].toUpperCase()];O8O.Studies.fetchAdditionalInstruments(R75,y0p,Q5f);return y0p;};O8O.Studies.calculatePriceRelative=function(C1i,E5j){var L0m,v4Y,e76,p_E,o7h,z0t,f3N,Z_C;L0m=\"Comparison S\";L0m+=\"ymb\";L0m+=\"ol\";v4Y=E5j.chart.scrubbed;e76=E5j.inputs[\"Comparison Symbol\"].toUpperCase();if(!e76){e76=E5j.study.inputs[L0m];}p_E={};o7h=C1i.chart.symbol || \"\";r8d.C8A();o7h=o7h.replace(/[=+\\-*\\\\%]/g,\"\");p_E[o7h]=v4Y.slice(E5j.startFrom);if(!p_E[o7h].length){return;}if(o7h != e76){p_E[e76]=null;}r8d.R_O(92);z0t=O8O.computeEquationChart(r8d.M8Y(\"]\",\"]/[\",o7h,e76,(+\"989\",703.04) > (1870,4359)?(6.70e+3,\"K\"):1280 < 980.06?(520.83,333) >= 9650?(7.06e+3,\"O\"):(!({}),!!1):\"[\"),p_E);f3N=+\"0\";for(var J2Q=E5j.startFrom;J2Q < v4Y.length && f3N < z0t.length;J2Q++){Z_C=\"R\";Z_C+=\"esult\";Z_C+=\" \";while(f3N < z0t.length && v4Y[J2Q].DT.getTime() > z0t[f3N].DT.getTime()){f3N++;}if(v4Y[J2Q].DT.getTime() < z0t[f3N].DT.getTime())continue;v4Y[J2Q][Z_C + E5j.name]=z0t[f3N].Close;f3N++;}};O8O.Studies.displayVsComparisonSymbol=function(y_c,S2x,L3L){var v3k,R9H,i8X,w8U,A1_,T6C;v3k=S2x.inputs[\"Comparison Symbol\"].toUpperCase();if(!y_c.getSeries({symbol:v3k,chart:S2x.chart}).length){R9H=\"Not Avail\";R9H+=\"able\";i8X=\":\";i8X+=\" \";y_c.displayErrorAsWatermark(S2x.panel,y_c.translateIf(S2x.study.name) + i8X + y_c.translateIf(R9H));return;}w8U={skipTransform:y_c.panels[S2x.panel].name != S2x.chart.name,panelName:S2x.panel,band:\"Result \" + S2x.name,threshold:S2x.study.centerline,yAxis:S2x.getYAxis(y_c),gapDisplayStyle:!![]};A1_=w8U.yAxis?w8U.yAxis.flipped:y_c.panels[S2x.panel].yAxis.flipped;T6C=+\"0.3\";if(!S2x.highlight && y_c.highlightedDraggable){T6C*=+\"0.3\";}for(var Y1L=L3L.length - 1;Y1L >= 0;Y1L--){if(L3L[Y1L] && L3L[Y1L][v3k]){O8O.Studies.displaySeriesAsLine(y_c,S2x,L3L);if(S2x.study.centerline || S2x.study.centerline === 0){if(S2x.outputs.Gain){O8O.preparePeakValleyFill(y_c,O8O.extend(w8U,{direction:A1_?-+\"1\":1,color:O8O.Studies.determineColor(S2x.outputs.Gain),opacity:T6C}));}if(S2x.outputs.Loss){O8O.preparePeakValleyFill(y_c,O8O.extend(w8U,{direction:A1_?1:-(\"1\" | 1),color:O8O.Studies.determineColor(S2x.outputs.Loss),opacity:T6C}));}}return;}}};O8O.Studies.fetchAdditionalInstruments=function(g29,f3o,e5h,c2$){r8d.C8A();var v6w,I$E,z2C,U0X,c_M,N3q,E7Y,N1x;if(!g29.quoteDriver){console.log(\"CIQ.Studies.fetchAdditionalInstruments: No quotefeed to fetch symbol\");return;}v6w=g29.panels[f3o.panel].chart;f3o.symbols=e5h;function S95(){g29.createDataSet();g29.draw();}for(I$E=0;I$E < e5h.length;I$E++){c_M=\"ad\";c_M+=\"d-s\";c_M+=\"tud\";c_M+=\"y\";N3q=\"o\";N3q+=\"bj\";N3q+=\"e\";N3q+=\"ct\";z2C=U0X=e5h[I$E];if(typeof U0X == N3q){z2C=U0X.symbol;}else {U0X={symbol:z2C};}E7Y={symbol:z2C,symbolObject:U0X,bucket:\"study\",studyName:f3o.name,chartName:v6w.name,action:c_M};O8O.extend(E7Y,c2$);N1x=E7Y.loadData;if(g29.currentlyImporting){E7Y.loadData=!\"1\";}if(!f3o.series){f3o.series={};}f3o.series[z2C]=g29.addSeries(null,E7Y,S95);f3o.series[z2C].parameters.loadData=N1x;}};O8O.Studies.studyLibrary=O8O.extend(O8O.Studies.studyLibrary,{\"P Rel\":{name:\"Price Relative\",initializeFN:O8O.Studies.initPriceRelative,seriesFN:O8O.Studies.displayVsComparisonSymbol,calculateFN:O8O.Studies.calculatePriceRelative,centerline:0,inputs:{\"Comparison Symbol\":\"SPY\"},deferUpdate:!!\"1\"}});}};B9=J1c=>{var M8D=q1l46;var d9c,S_E,R3y,S01,c6F,s2h,A0u,C3f;d9c=typeof _CIQ !== \"undefined\"?_CIQ:J1c.CIQ;S_E=typeof _timezoneJS !== \"undefined\"?_timezoneJS:J1c.timezoneJS;M8D.P3W();if(!d9c.Studies){console.error(\"vwap feature requires first activating studies feature.\");}else {R3y=\"#ff\";R3y+=\"f6\";R3y+=\"9e\";S01=\"#\";S01+=\"FF\";S01+=\"0000\";c6F=\"V\";c6F+=\"W\";c6F+=\"A\";c6F+=\"P\";s2h=\"#8\";s2h+=\"5\";s2h+=\"c\";s2h+=\"99e\";A0u=\"#\";A0u+=\"FF0000\";C3f=\"Anchore\";C3f+=\"d VWAP\";d9c.Studies.calculateVWAP=function(K5q,Y0Z){var e$O,z2k,p5I,D61,D76,I1J,c14,N1I,X5C,O88,x99,P$U,U62,u_Y,x1b,h3N,i1l,I4F,T6N,y0L,Z2q,I2f,t9A;if((Y0Z.parameters.state || ({})).interactiveAdd){return;}var {inputs:K6G, name:a8c, chart:L6U}=Y0Z;var {market:C_1}=L6U;e$O=Y0Z.type === \"AVWAP\";z2k=L6U.scrubbed;if(!z2k.length){return;}if(!e$O && d9c.ChartEngine.isDailyInterval(K5q.layout.interval)){Y0Z.error=\"VWAP is Intraday Only\";return;}p5I=\"h\";p5I+=\"lc\";p5I+=\"/\";p5I+=\"3\";if(e$O){D61=\"f\";D61+=\"ie\";D61+=\"ld\";p5I=K6G.Field;if(!p5I || p5I == D61){p5I=K6G.Field=\"hlc/3\";K5q.changeOccurred(\"layout\");}}D76=null;I1J=0;c14=0;N1I=0;X5C=![];if(Y0Z.startFrom > \"1\" - 0){O88=\"_V\";O88+=\"xP2 \";I1J=z2k[Y0Z.startFrom - 1][\"_V \" + a8c] || 0;c14=z2k[Y0Z.startFrom - 1][\"_VxP \" + a8c] || 0;N1I=z2k[Y0Z.startFrom - 1][O88 + a8c] || 0;}if(e$O){x99=\"Anchor \";x99+=\"Selector\";var {market_tz:e$j}=C_1.market_def || ({});var [,V0a,v0F,K11]=(K6G[\"Anchor Date\"] || \"\").match(/^(\\d{4})-?(\\d{2})-?(\\d{2})$/) || [];var [,L9u = 0,i0V = 0,I0Z = +\"0\"]=(K6G[\"Anchor Time\"] || \"\").match(/^(\\d{2}):?(\\d{2}):?(\\d{2})?$/) || [];if(![V0a,v0F,K11].every(r6C=>{return r6C || r6C === 0;})){P$U=\"Inv\";P$U+=\"al\";P$U+=\"id Anchor Da\";P$U+=\"te\";Y0Z.error=P$U;return;}M8D.U1h(8);U62=new S_E.Date(V0a,M8D.P_X(1,v0F),K11,L9u,i0V,I0Z,e$j || \"\");if(!Y0Z.startFrom && U62 >= z2k[0].DT){Y0Z.startFrom=K5q.tickFromDate(U62,K5q.chart,null,!\"\");}if(K6G[x99]){d9c.Studies.initAnchorHandle(K5q,Y0Z);}else {d9c.Studies.removeAnchorHandle(K5q,Y0Z);}}M8D.P3W();for(var K6x=Y0Z.startFrom;K6x < z2k.length;K6x++){u_Y=\"_\";u_Y+=\"V\";u_Y+=\" \";if(!e$O){if(D76 === null){D76=d9c.Studies.getMarketOffset({stx:K5q,localQuoteDate:z2k[K6x].DT,shiftToDateBoundary:!!1});}if(z2k[K6x - 1] && z2k[K6x - (\"1\" - 0)].DT){x1b=new Date(new Date(+z2k[K6x].DT).setMilliseconds(z2k[K6x].DT.getMilliseconds() + D76));h3N=new Date(new Date(+z2k[K6x - 1].DT).setMilliseconds(z2k[K6x - 1].DT.getMilliseconds() + D76));if(h3N.getDate() !== x1b.getDate() && K5q.chart.market.isMarketDate(x1b)){D76=null;M8D.R_O(2);I1J=c14=N1I=M8D.M8Y(\"0\",1);}}}i1l=z2k[K6x][p5I];I4F=z2k[K6x].Volume;if(e$O && !I4F){I4F=1;}I1J+=I4F;M8D.R_O(2);c14+=M8D.M8Y(I4F,i1l);M8D.R_O(160);N1I+=M8D.P_X(i1l,I4F,i1l);if(!e$O && !I1J)continue;M8D.R_O(0);z2k[K6x][M8D.P_X(a8c,u_Y)]=I1J;M8D.U1h(0);z2k[K6x][M8D.M8Y(a8c,\"_VxP \")]=c14;M8D.U1h(0);z2k[K6x][M8D.P_X(a8c,\"_VxP2 \")]=N1I;M8D.U1h(0);T6N=z2k[K6x][M8D.M8Y(a8c,\"_SDVWAP \")]=Math.sqrt(Math.max(0,N1I / I1J - Math.pow(c14 / I1J,2)));M8D.R_O(0);y0L=z2k[K6x][M8D.M8Y(a8c,\"VWAP \")]=M8D.P_X(c14,I1J,M8D.U1h(9));for(var F$k=1;F$k <= 3;F$k++){M8D.U1h(59);z2k[K6x][M8D.P_X(a8c,F$k,\"SDVWAP\",\"+ \")]=M8D.P_X(y0L,F$k,T6N,M8D.R_O(56));M8D.R_O(59);z2k[K6x][M8D.P_X(a8c,F$k,\"SDVWAP\",\"- \")]=M8D.P_X(T6N,F$k,y0L,M8D.R_O(161));}X5C=!!1;}for(var q1U in Y0Z.outputMap){if(q1U.indexOf(\"VWAP\") !== 0){delete Y0Z.outputMap[q1U];}}for(var v1I=1;v1I <= 3;v1I++){if(K6G[\"Display \" + v1I + \" Standard Deviation (\" + v1I + \"\\u03C3)\"]){Z2q=\"\\u03C3\";Z2q+=\")\";I2f=\"SDV\";I2f+=\"WAP\";t9A=\"SDVW\";t9A+=\"AP\";M8D.R_O(59);Y0Z.outputMap[M8D.P_X(a8c,v1I,t9A,\"+ \")]=M8D.P_X(\"\\u03C3)\",\" Standard Deviation (\",v1I,v1I);M8D.R_O(59);Y0Z.outputMap[M8D.M8Y(a8c,v1I,I2f,\"- \")]=M8D.P_X(Z2q,\" Standard Deviation (\",v1I,v1I);}}if(!e$O && !X5C){Y0Z.error=\"VWAP Requires Volume\";}};d9c.Studies.initAnchoredVWAP=function(C9c,j_P,N_c,B5R,B83,P5m){var U2z,n7S,G8Y,f$9,P1f,b99;U2z=\"Anchor Ti\";U2z+=\"me\";n7S=\"Anchor Dat\";n7S+=\"e\";if(!B83.state){B83.state={};}var {interactiveAdd:d1Y, interactiveAddCB:m$Z, state:q9y}=B83;G8Y=!(N_c[n7S] || N_c[U2z]);if(G8Y && (q9y.interactiveAdd || C9c.repositioningAnchorSelector)){return \"abort\";}var {dataSegment:E2u}=C9c.chart;if(E2u && G8Y && !d1Y){for(var u_U=0;u_U < E2u.length;u_U++){if(E2u[u_U]){f$9=\"Y\";f$9+=\"YYY-M\";f$9+=\"M-dd\";var {DT:p3v}=E2u[u_U];N_c[\"Anchor Date\"]=d9c.dateToStr(p3v,f$9);N_c[\"Anchor Time\"]=d9c.dateToStr(p3v,\"HH:mm:ss\");break;}}}if(G8Y && d1Y){q9y.interactiveAdd=!0;}else {delete q9y.interactiveAdd;delete B83.interactiveAdd;if(m$Z){setTimeout(m$Z);}}P1f=d9c.Studies.initializeFN(C9c,j_P,N_c,B5R,B83,P5m);if(q9y.interactiveAdd){C9c.repositioningAnchorSelector={sd:P1f,tapToAdd:!!({})};C9c.dispatch(\"notification\",\"addAVWAP\");}else {b99=\"n\";b99+=\"o\";b99+=\"tificat\";b99+=\"ion\";C9c.dispatch(b99,\"removeAVWAP\");}return P1f;};d9c.Studies.displayVWAP=function(U$T,k8o,i_0){var F83,t$g,g7v,x7w,O9L,S$y,g7H,r7g,B3_,B6u,e6R,Y1M,P87,Y51,z8N,E6u;if(!i_0 || !i_0[0]){d9c.Studies.removeAnchoredVWAP(U$T,k8o);return;}d9c.Studies.displaySeriesAsLine(U$T,k8o,i_0);F83=-+\"1904585805\";t$g=2139037514;g7v=2;for(var v4N=1;M8D.I9N(v4N.toString(),v4N.toString().length,28004) !== F83;v4N++){x7w=k8o.inputs[\"Display 1 Standard Deviation (1\\u03C3)\"];O9L=k8o.inputs[\"Display 2 Standard Deviation (2\\u03C3)\"];g7v+=2;}if(M8D.G33(g7v.toString(),g7v.toString().length,54619) !== t$g){x7w=k8o.inputs[\"Display 1 Standard Deviation (1\\u03C3)\"];O9L=k8o.inputs[\"Display 2 Standard Deviation (2\\u03C3)\"];}S$y=k8o.inputs[\"Display 3 Standard Deviation (3\\u03C3)\"];if((x7w || O9L || S$y) && k8o.inputs.Shading){g7H=U$T.panels[k8o.panel];r7g={opacity:k8o.parameters.opacity?k8o.parameters.opacity:0.2,skipTransform:g7H.name != k8o.chart.name,yAxis:k8o.getYAxis(U$T)};if(!k8o.highlight && U$T.highlightedDraggable){r7g.opacity*=0.3;}B3_=\"VWAP \" + k8o.name;B6u=\"VWAP \" + k8o.name;if(x7w){e6R=\"SDV\";e6R+=\"WAP1\";e6R+=\"+\";e6R+=\" \";d9c.prepareChannelFill(U$T,d9c.extend({panelName:k8o.panel,topBand:\"SDVWAP1+ \" + k8o.name,bottomBand:B3_,color:d9c.Studies.determineColor(k8o.outputs[k8o.outputMap[\"SDVWAP1+ \" + k8o.name]])},r7g));d9c.prepareChannelFill(U$T,d9c.extend({panelName:k8o.panel,topBand:\"SDVWAP1- \" + k8o.name,bottomBand:B6u,color:d9c.Studies.determineColor(k8o.outputs[k8o.outputMap[\"SDVWAP1- \" + k8o.name]])},r7g));B3_=e6R + k8o.name;B6u=\"SDVWAP1- \" + k8o.name;}if(O9L){Y1M=\"SDVW\";Y1M+=\"AP2\";Y1M+=\"+ \";P87=\"SD\";P87+=\"V\";P87+=\"WAP2-\";P87+=\" \";Y51=\"SD\";Y51+=\"VWAP2\";Y51+=\"+ \";d9c.prepareChannelFill(U$T,d9c.extend({panelName:k8o.panel,topBand:\"SDVWAP2+ \" + k8o.name,bottomBand:B3_,color:d9c.Studies.determineColor(k8o.outputs[k8o.outputMap[Y51 + k8o.name]])},r7g));d9c.prepareChannelFill(U$T,d9c.extend({panelName:k8o.panel,topBand:\"SDVWAP2- \" + k8o.name,bottomBand:B6u,color:d9c.Studies.determineColor(k8o.outputs[k8o.outputMap[P87 + k8o.name]])},r7g));B3_=Y1M + k8o.name;B6u=\"SDVWAP2- \" + k8o.name;}if(S$y){z8N=\"SD\";z8N+=\"VWAP3- \";E6u=\"S\";E6u+=\"DVW\";E6u+=\"AP3\";E6u+=\"+ \";d9c.prepareChannelFill(U$T,d9c.extend({panelName:k8o.panel,topBand:\"SDVWAP3+ \" + k8o.name,bottomBand:B3_,color:d9c.Studies.determineColor(k8o.outputs[k8o.outputMap[E6u + k8o.name]])},r7g));d9c.prepareChannelFill(U$T,d9c.extend({panelName:k8o.panel,topBand:\"SDVWAP3- \" + k8o.name,bottomBand:B6u,color:d9c.Studies.determineColor(k8o.outputs[k8o.outputMap[z8N + k8o.name]])},r7g));}}if(k8o.anchorHandle || (k8o.parameters.state || ({})).interactiveAdd){d9c.Studies.displayAnchorHandleAndLine(U$T,k8o,i_0);}};d9c.Studies.removeAnchoredVWAP=function(K$u,l1E){var n4X,V0h;n4X=\"removeA\";n4X+=\"VWAP\";V0h=\"notif\";V0h+=\"i\";V0h+=\"cation\";K$u.dispatch(V0h,n4X);d9c.Studies.removeAnchorHandle(K$u,l1E);};d9c.Studies.studyLibrary=d9c.extend(d9c.Studies.studyLibrary,{AVWAP:{name:C3f,overlay:!!\"1\",calculateFN:d9c.Studies.calculateVWAP,seriesFN:d9c.Studies.displayVWAP,initializeFN:d9c.Studies.initAnchoredVWAP,removeFN:d9c.Studies.removeAnchoredVWAP,inputs:{Field:\"field\",\"Anchor Date\":\"\",\"Anchor Time\":\"\",\"Display 1 Standard Deviation (1\\u03C3)\":![],\"Display 2 Standard Deviation (2\\u03C3)\":!\"1\",\"Display 3 Standard Deviation (3\\u03C3)\":![],Shading:!!0,\"Anchor Selector\":!0},outputs:{VWAP:A0u,\"1 Standard Deviation (1\\u03C3)\":\"#e1e1e1\",\"2 Standard Deviation (2\\u03C3)\":s2h,\"3 Standard Deviation (3\\u03C3)\":\"#fff69e\"},parameters:{init:{opacity:0.2,interactiveAdd:!![]}},attributes:{\"Anchor Date\":{placeholder:\"yyyy-mm-dd\"},\"Anchor Time\":{placeholder:\"hh:mm:ss\",step:1}}},VWAP:{name:c6F,overlay:!!({}),calculateFN:d9c.Studies.calculateVWAP,seriesFN:d9c.Studies.displayVWAP,inputs:{\"Display 1 Standard Deviation (1\\u03C3)\":!({}),\"Display 2 Standard Deviation (2\\u03C3)\":!({}),\"Display 3 Standard Deviation (3\\u03C3)\":!({}),Shading:!({})},outputs:{VWAP:S01,\"1 Standard Deviation (1\\u03C3)\":\"#e1e1e1\",\"2 Standard Deviation (2\\u03C3)\":\"#85c99e\",\"3 Standard Deviation (3\\u03C3)\":R3y},parameters:{init:{opacity:0.2}}}});}};k7=u4R=>{var Q6B;Q6B=typeof _CIQ !== \"undefined\"?_CIQ:u4R.CIQ;if(!Q6B.Studies){console.error(\"zigzag feature requires first activating studies feature.\");}else {Q6B.Studies.calculateZigZag=function(U3$,j_c){var g9W=q1l46;var d2p,z7F,g0b,M9S,o$7,q3W,F6$,I60,L0$,c2x,p$v,B3x,K$L,L$$,w6Z,O3b,W_O,P9p,z_M,Y5d;d2p=\"Cl\";d2p+=\"os\";d2p+=\"e\";z7F=j_c.chart.scrubbed;if(!z7F || !z7F.length){return;}g0b=j_c.highLowChart;M9S=null;o$7=null;q3W=j_c.inputs[\"Distance(%)\"];F6$=0;g9W.R_O(8);I60=g9W.M8Y(0,\"0\");L0$=0;c2x=null;g9W.C8A();p$v=null;B3x=0;for(var D$v=Math.min(z7F.length - 1,j_c.startFrom);D$v >= 0;D$v--){B3x=D$v;if(z7F[D$v][\"_state \" + j_c.name]){K$L=z7F[D$v][\"_state \" + j_c.name];M9S=K$L[0];o$7=K$L[1];F6$=K$L[2];I60=K$L[3];L0$=K$L[4];g9W.R_O(46);c2x=K$L[g9W.P_X(\"5\",0)];p$v=K$L[6];break;}}for(var i3o=B3x;i3o < z7F.length;i3o++){L$$=\"Clos\";L$$+=\"e\";w6Z=\"C\";w6Z+=\"l\";w6Z+=\"os\";w6Z+=\"e\";O3b=z7F[i3o][g0b?\"High\":w6Z];W_O=z7F[i3o][g0b?\"Low\":L$$];if(o$7 === null || o$7 < O3b){o$7=O3b;if(F6$ < 0){M9S=W_O;}g9W.U1h(162);c2x=g9W.M8Y(q3W,1,o$7,100);if(F6$ > -1){if(p$v !== null && o$7 > p$v){P9p=\"L\";P9p+=\"ow\";z_M=\"Result\";z_M+=\" \";z7F[I60][z_M + j_c.name]=z7F[I60][g0b?P9p:\"Close\"];k2w(L0$,I60);F6$=-+\"1\";M9S=W_O;L0$=I60;I60=i3o;continue;}}else {I60=i3o;}}if(M9S === null || M9S > W_O){M9S=W_O;if(F6$ > +\"0\"){o$7=O3b;}g9W.R_O(163);p$v=g9W.M8Y(M9S,q3W,100,1);if(F6$ < 1){if(c2x !== null && M9S < c2x){z7F[I60][\"Result \" + j_c.name]=z7F[I60][g0b?\"High\":\"Close\"];k2w(L0$,I60);g9W.U1h(46);F6$=g9W.M8Y(\"1\",64);o$7=O3b;L0$=I60;I60=i3o;continue;}}else {I60=i3o;}}}z7F[I60][\"Result \" + j_c.name]=z7F[I60][g0b?F6$ == 1?\"Low\":\"High\":d2p];z7F[I60][\"_state \" + j_c.name]=[M9S,o$7,F6$,I60,L0$,c2x,p$v];k2w(L0$,I60);g9W.R_O(25);var P7M=g9W.M8Y(16,15);Y5d=z7F.length - P7M;function k2w(e6A,m_m){var u9g;for(var j90=e6A + 1;j90 < m_m;j90++){u9g=\"R\";u9g+=\"esult \";z7F[j90][\"ShadowResult \" + j_c.name]=(z7F[m_m][\"Result \" + j_c.name] - z7F[e6A][u9g + j_c.name]) * (j90 - e6A) / (m_m - e6A) + z7F[e6A][\"Result \" + j_c.name];delete z7F[j90][\"Result \" + j_c.name];}}while(Y5d > I60){if(z7F[Y5d].Close || z7F[Y5d].Close === 0){z7F[Y5d][\"Result \" + j_c.name]=z7F[Y5d][g0b?F6$ == 1?\"High\":\"Low\":\"Close\"];break;}Y5d--;}k2w(I60,Y5d);};Q6B.Studies.displayZigZag=function(R4b,q_L,o0X){var v8x,g0z,g49,Z9D,l6o,r6_,Z8W,p5x,F4N,D93,Z3I,w6x;v8x=R4b.chart.highLowBars;if(q_L.highLowChart != v8x){q_L.highLowChart=v8x;q_L.startFrom=0;q_L.study.calculateFN(R4b,q_L);}g0z=R4b.chart;for(var P4z=0;P4z < o0X.length;P4z++){g49=o0X[P4z];if(g49){Z9D=\"_sh\";Z9D+=\"adow\";Z9D+=\"Co\";Z9D+=\"py \";if(g49[Z9D + q_L.name]){l6o=\"Resul\";l6o+=\"t\";l6o+=\" \";delete g49[l6o + q_L.name];delete g49[\"_shadowCopy \" + q_L.name];}if(!g49[\"Result \" + q_L.name]){if(g49.transform){delete g49.transform[\"Result \" + q_L.name];}}}}q1l46.U1h(2);r6_=o0X[q1l46.P_X(\"0\",1)];Z8W=o0X[o0X.length - +\"1\"];if(r6_ && r6_[\"ShadowResult \" + q_L.name]){p5x=\"Sh\";p5x+=\"adowResult \";F4N=\"Res\";F4N+=\"ult \";D93=\"Res\";D93+=\"ult \";r6_[D93 + q_L.name]=r6_[\"ShadowResult \" + q_L.name];if(r6_.transform){r6_.transform[F4N + q_L.name]=g0z.transformFunc(R4b,g0z,r6_[p5x + q_L.name]);}r6_[\"_shadowCopy \" + q_L.name]=1;}if(Z8W && Z8W[\"ShadowResult \" + q_L.name]){Z3I=\"_shadowCo\";Z3I+=\"p\";Z3I+=\"y \";w6x=\"S\";w6x+=\"hado\";w6x+=\"w\";w6x+=\"Result \";Z8W[\"Result \" + q_L.name]=Z8W[\"ShadowResult \" + q_L.name];if(Z8W.transform){Z8W.transform[\"Result \" + q_L.name]=g0z.transformFunc(R4b,g0z,Z8W[w6x + q_L.name]);}Z8W[Z3I + q_L.name]=1;}Q6B.Studies.displaySeriesAsLine(R4b,q_L,o0X);};Q6B.Studies.studyLibrary=Q6B.extend(Q6B.Studies.studyLibrary,{ZigZag:{name:\"ZigZag\",overlay:!0,seriesFN:Q6B.Studies.displayZigZag,calculateFN:Q6B.Studies.calculateZigZag,inputs:{\"Distance(%)\":10},parameters:{init:{label:![]}},attributes:{\"Distance(%)\":{min:0.1,step:0.1}}}});}};v8={CIQ:O$,SplinePlotter:Q2,timezoneJS:o3,$$:M8,$$$:q1};export {x8 as createEngine};export {c3 as customCharts};export {P2 as drawing};export {S6 as easeMachine};export {R0 as equations};export {j5 as events};export {X5 as i18n};export {p_ as interaction};export {A6 as markers};export {G7 as market};export {J3 as movement};export {B0 as nameValueStore};export {r_ as quoteFeed};export {M2 as series};export {H7 as share};export {g0 as span};export {P1 as storage};export {V8 as studies};export {w3 as symbolLookupBase};export {o2 as theme};export {y7 as timezone};export {F9 as touch};export {Y8 as visualization};export {F2 as medianPrice};export {w5 as momentum};export {v$ as priceRelative};export {B9 as vwap};export {k7 as zigzag};export {O$ as CIQ, Q2 as SplinePlotter, o3 as timezoneJS, M8 as $$, q1 as $$$};if(typeof __TREE_SHAKE__ === n$OkPB || !__TREE_SHAKE__){v8.CIQ.activateImports(x8,c3,P2,S6,R0,j5,X5,p_,A6,G7,J3,B0,r_,M2,H7,g0,P1,V8,w3,o2,y7,F9,Y8,F2,w5,v$,B9,k7,null);}/* eslint-enable */ /* jshint ignore:end */ /* ignore jslint end */\n"],"names":[],"sourceRoot":""}